Подключён MediatR в food-market.api с авторегистрацией из сборки food-market.application. Цель — показать паттерн, не полный рефакторинг контроллеров (это отдельный спринт). Образцы handler'ов в food-market.application: - Purchases/Commands/CreateSupplyCommand + CreateSupplyHandler — создание Draft-приёмки с делегированием персистентности через ISupplyWriter абстракцию (testable без EF). - Sales/Commands/PostRetailSaleCommand + PostRetailSaleHandler — проведение чека с валидацией платежа (переиспользует RetailPaymentValidator из Sprint 1) и делегированием stock-операции через IRetailSalePoster. - Sales/Queries/GetSalesReportQuery + GetSalesReportHandler — агрегация плоских sale-строк по period:day/period:month/product. Pure-функция, безопасно тестируется в памяти. Контроллеры пока используют прежние flow (контроллер → EF напрямую) — поэтапная миграция, не big-bang. Эти handler'ы — образец, на который оглядываемся при следующих feature'ах. Тесты: 6 unit (2 GetSalesReportHandler, 1 CreateSupplyHandler, 3 PostRetailSaleHandler). 57 unit total зелёных. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
37 lines
1.6 KiB
XML
37 lines
1.6 KiB
XML
<Project Sdk="Microsoft.NET.Sdk.Web">
|
|
<PropertyGroup>
|
|
<TargetFramework>net8.0</TargetFramework>
|
|
<RootNamespace>foodmarket.Api</RootNamespace>
|
|
<AssemblyName>foodmarket.Api</AssemblyName>
|
|
<UserSecretsId>food-market-api</UserSecretsId>
|
|
</PropertyGroup>
|
|
|
|
<ItemGroup>
|
|
<ProjectReference Include="..\food-market.domain\food-market.domain.csproj" />
|
|
<ProjectReference Include="..\food-market.application\food-market.application.csproj" />
|
|
<ProjectReference Include="..\food-market.infrastructure\food-market.infrastructure.csproj" />
|
|
<ProjectReference Include="..\food-market.shared\food-market.shared.csproj" />
|
|
</ItemGroup>
|
|
|
|
<ItemGroup>
|
|
<PackageReference Include="Microsoft.AspNetCore.OpenApi" />
|
|
<PackageReference Include="Swashbuckle.AspNetCore" />
|
|
<PackageReference Include="OpenIddict.AspNetCore" />
|
|
<PackageReference Include="Serilog.AspNetCore" />
|
|
<PackageReference Include="Serilog.Sinks.Console" />
|
|
<PackageReference Include="Serilog.Sinks.File" />
|
|
<PackageReference Include="Hangfire.AspNetCore" />
|
|
<PackageReference Include="Hangfire.PostgreSql" />
|
|
<PackageReference Include="CsvHelper" />
|
|
<PackageReference Include="ClosedXML" />
|
|
<PackageReference Include="prometheus-net.AspNetCore" />
|
|
<PackageReference Include="MediatR" />
|
|
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" />
|
|
</ItemGroup>
|
|
|
|
<ItemGroup>
|
|
<!-- Email-шаблоны embedded в сборку — см. EmailTemplates.LoadRaw. -->
|
|
<EmbeddedResource Include="Resources/EmailTemplates/*.html" />
|
|
</ItemGroup>
|
|
</Project>
|