feat(stage3): scaffold task-001 baseline
- WHY: establish Stage 3 task-001 execution baseline per repo intent - WHAT: add minimal solution/project skeleton and boundary docs - RULE: apply stage3 execution runtime and repository workflow directives
This commit is contained in:
parent
063c1a2f2d
commit
d637892055
8
Furniture.DAL.slnx
Normal file
8
Furniture.DAL.slnx
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<Solution>
|
||||||
|
<Folder Name="/src/">
|
||||||
|
<Project Path="src/Furniture.DAL/Furniture.DAL.csproj" />
|
||||||
|
</Folder>
|
||||||
|
<Folder Name="/tests/">
|
||||||
|
<Project Path="tests/Furniture.DAL.UnitTests/Furniture.DAL.UnitTests.csproj" />
|
||||||
|
</Folder>
|
||||||
|
</Solution>
|
||||||
20
docs/architecture/dal-layer-map.puml
Normal file
20
docs/architecture/dal-layer-map.puml
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
@startuml
|
||||||
|
skinparam packageStyle rectangle
|
||||||
|
|
||||||
|
package "furniture-dal" {
|
||||||
|
interface IFurnitureDataProvider
|
||||||
|
interface ICatalogDataProvider
|
||||||
|
interface IFurnitureRepository
|
||||||
|
interface ICatalogRepository
|
||||||
|
interface ICacheInvalidationPolicy
|
||||||
|
|
||||||
|
IFurnitureRepository --> IFurnitureDataProvider
|
||||||
|
ICatalogRepository --> ICatalogDataProvider
|
||||||
|
IFurnitureRepository --> ICacheInvalidationPolicy
|
||||||
|
ICatalogRepository --> ICacheInvalidationPolicy
|
||||||
|
}
|
||||||
|
|
||||||
|
package "furniture-service" as FurnitureService
|
||||||
|
FurnitureService --> IFurnitureRepository
|
||||||
|
FurnitureService --> ICatalogRepository
|
||||||
|
@enduml
|
||||||
12
docs/dal/persistence-cache-policy.md
Normal file
12
docs/dal/persistence-cache-policy.md
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
# DAL Persistence and Cache Policy
|
||||||
|
|
||||||
|
## Responsibilities
|
||||||
|
|
||||||
|
- Repositories coordinate provider calls for aggregate persistence.
|
||||||
|
- Cache invalidation policy is owned by DAL.
|
||||||
|
- Service layer does not implement persistence or cache invalidation details.
|
||||||
|
|
||||||
|
## Policy
|
||||||
|
|
||||||
|
- Persistence writes must define cache invalidation triggers.
|
||||||
|
- Cache keys and invalidation behavior are centralized in DAL policy definitions.
|
||||||
12
docs/dal/provider-boundaries.md
Normal file
12
docs/dal/provider-boundaries.md
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
# DAL Provider Boundaries
|
||||||
|
|
||||||
|
## Ownership
|
||||||
|
|
||||||
|
- `IFurnitureDataProvider`: furniture persistence provider boundary.
|
||||||
|
- `ICatalogDataProvider`: catalog persistence provider boundary.
|
||||||
|
|
||||||
|
## Rules
|
||||||
|
|
||||||
|
- Providers encapsulate datastore-specific access.
|
||||||
|
- Providers do not contain orchestration concerns.
|
||||||
|
- Provider contracts are consumed by DAL repositories.
|
||||||
8
src/Furniture.DAL/Caching/ICacheInvalidationPolicy.cs
Normal file
8
src/Furniture.DAL/Caching/ICacheInvalidationPolicy.cs
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
namespace Furniture.DAL.Caching;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Defines cache invalidation policy boundary for DAL operations.
|
||||||
|
/// </summary>
|
||||||
|
public interface ICacheInvalidationPolicy
|
||||||
|
{
|
||||||
|
}
|
||||||
7
src/Furniture.DAL/Furniture.DAL.csproj
Normal file
7
src/Furniture.DAL/Furniture.DAL.csproj
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>net10.0</TargetFramework>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
</PropertyGroup>
|
||||||
|
</Project>
|
||||||
8
src/Furniture.DAL/Providers/ICatalogDataProvider.cs
Normal file
8
src/Furniture.DAL/Providers/ICatalogDataProvider.cs
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
namespace Furniture.DAL.Providers;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Defines provider access for catalog persistence operations.
|
||||||
|
/// </summary>
|
||||||
|
public interface ICatalogDataProvider
|
||||||
|
{
|
||||||
|
}
|
||||||
8
src/Furniture.DAL/Providers/IFurnitureDataProvider.cs
Normal file
8
src/Furniture.DAL/Providers/IFurnitureDataProvider.cs
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
namespace Furniture.DAL.Providers;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Defines provider access for furniture persistence operations.
|
||||||
|
/// </summary>
|
||||||
|
public interface IFurnitureDataProvider
|
||||||
|
{
|
||||||
|
}
|
||||||
8
src/Furniture.DAL/Repositories/ICatalogRepository.cs
Normal file
8
src/Furniture.DAL/Repositories/ICatalogRepository.cs
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
namespace Furniture.DAL.Repositories;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Defines catalog aggregate repository boundary owned by DAL.
|
||||||
|
/// </summary>
|
||||||
|
public interface ICatalogRepository
|
||||||
|
{
|
||||||
|
}
|
||||||
8
src/Furniture.DAL/Repositories/IFurnitureRepository.cs
Normal file
8
src/Furniture.DAL/Repositories/IFurnitureRepository.cs
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
namespace Furniture.DAL.Repositories;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Defines furniture aggregate repository boundary owned by DAL.
|
||||||
|
/// </summary>
|
||||||
|
public interface IFurnitureRepository
|
||||||
|
{
|
||||||
|
}
|
||||||
23
tests/Furniture.DAL.UnitTests/BoundaryShapeTests.cs
Normal file
23
tests/Furniture.DAL.UnitTests/BoundaryShapeTests.cs
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
using Furniture.DAL.Caching;
|
||||||
|
using Furniture.DAL.Providers;
|
||||||
|
using Furniture.DAL.Repositories;
|
||||||
|
|
||||||
|
namespace Furniture.DAL.UnitTests;
|
||||||
|
|
||||||
|
public class BoundaryShapeTests
|
||||||
|
{
|
||||||
|
[Fact]
|
||||||
|
public void ProviderBoundaries_WhenReflected_AreInterfaces()
|
||||||
|
{
|
||||||
|
Assert.True(typeof(IFurnitureDataProvider).IsInterface);
|
||||||
|
Assert.True(typeof(ICatalogDataProvider).IsInterface);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void RepositoryAndCacheBoundaries_WhenReflected_AreInterfaces()
|
||||||
|
{
|
||||||
|
Assert.True(typeof(IFurnitureRepository).IsInterface);
|
||||||
|
Assert.True(typeof(ICatalogRepository).IsInterface);
|
||||||
|
Assert.True(typeof(ICacheInvalidationPolicy).IsInterface);
|
||||||
|
}
|
||||||
|
}
|
||||||
20
tests/Furniture.DAL.UnitTests/Furniture.DAL.UnitTests.csproj
Normal file
20
tests/Furniture.DAL.UnitTests/Furniture.DAL.UnitTests.csproj
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>net10.0</TargetFramework>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
<IsPackable>false</IsPackable>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="coverlet.collector" Version="6.0.4" />
|
||||||
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.14.1" />
|
||||||
|
<PackageReference Include="xunit" Version="2.9.3" />
|
||||||
|
<PackageReference Include="xunit.runner.visualstudio" Version="3.1.4" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Using Include="Xunit" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\..\src\Furniture.DAL\Furniture.DAL.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
||||||
Loading…
Reference in New Issue
Block a user