Обновить доки по закрытию остатков код-стайла
Аудит §2 переписан под решения (var-гейт, LF, дедуп закрыт — дублей нет); backlog: TD-COMMENTS-IFACE п.1–3 закрыты, TD-STYLE-ANALYZERS закрыт; STATUS.md — новый блок захода, устаревший блок «Осталось (в backlog)» в шапке удалён; план и ledger захода.
This commit is contained in:
@@ -1,54 +1,54 @@
|
||||
# Task 6 — Tenant-контекст и подключение к Postgres (отчёт)
|
||||
|
||||
**Дата:** 2026-09-05
|
||||
**Статус:** ✅ Выполнено (build 0 warnings / 0 errors, 3 теста PASS)
|
||||
|
||||
## Файлы
|
||||
|
||||
### Созданы (по коду плана, verbatim)
|
||||
- `src/core/Deal.SharedKernel/Tenants/TenantId.cs` — `readonly record struct TenantId`, валидация непустого `Value`, `SchemaName => "tenant_{Value}"`.
|
||||
- `src/core/Deal.SharedKernel/Tenants/ITenantContext.cs` — `TenantId? TenantId`, `HasTenant`, `string? SchemaName`.
|
||||
- `src/core/Deal.Infrastructure/Data/TenantContext.cs` — `AsyncLocal<TenantId?>`, имплементирует `ITenantContext` + `SetTenant`.
|
||||
- `src/core/Deal.Infrastructure/Data/ConnectionStringProvider.cs` — ctor бросает `InvalidOperationException` без `ConnectionStrings:DealPostgres`; `ForTenant` добавляет `;Search Path=...`.
|
||||
- `tests/Deal.Tests.Unit/TenantIdTests.cs` — 2 теста: `SchemaName_PrefixesTenant`, `TenantId_Empty_Throws`.
|
||||
|
||||
### Изменены
|
||||
- `src/core/Deal.Api/Program.cs` — добавлены `using Deal.Infrastructure.Data;` и `using Deal.SharedKernel.Tenants;`, зарегистрированы `builder.Services.AddSingleton<ITenantContext, TenantContext>();` и `AddSingleton<ConnectionStringProvider>();`. `/api/health` и `public partial class Program` не тронуты.
|
||||
- `src/core/Deal.Infrastructure/Deal.Infrastructure.csproj` — добавлен `PackageReference Microsoft.Extensions.Configuration.Abstractions 10.0.11` (командой `dotnet add`, Ruling 4).
|
||||
|
||||
## Отклонение от кода плана (требование стиля репозитория)
|
||||
|
||||
`ITenantContext.cs`: члены интерфейса получили явный `public` (план их опускал). Иначе сборка падает с `IDE0040` (error): в корневом `C:\telbase\.editorconfig` задано `dotnet_style_require_accessibility_modifiers = always:error`, а `EnforceCodeStyleInBuild=true` + `TreatWarningsAsErrors=true`. Изменение семантики не меняет — члены интерфейса и так public. `.editorconfig`/`Directory.Build.props` не редактировались.
|
||||
|
||||
`TenantId` (record struct с property-initializer-валидацией) успешно компилируется под net10.0 — перепроектирование не потребовалось.
|
||||
|
||||
## Build
|
||||
|
||||
Команда: `dotnet build Deal.sln` (из `src/core`)
|
||||
|
||||
```
|
||||
Восстановление завершено (0,8 с)
|
||||
Deal.SharedKernel net10.0 успешно выполнено
|
||||
...
|
||||
Deal.Api net10.0 успешно выполнено (0,6 с)
|
||||
Сборка успешно выполнено через 2,5 с
|
||||
```
|
||||
|
||||
Результат: 0 warnings, 0 errors (11 проектов собраны).
|
||||
|
||||
## Tests
|
||||
|
||||
Команда: `dotnet test tests/Deal.Tests.Unit --no-build`
|
||||
|
||||
```
|
||||
Сводка теста: всего: 3; сбой: 0; успешно: 3; пропущено: 0; длительность: 1,1 с
|
||||
```
|
||||
|
||||
PASS: `MarkerTests` (1) + `TenantIdTests` (2) = ровно 3.
|
||||
|
||||
## Concerns / заметки
|
||||
|
||||
1. **Template-level conflict (план vs .editorconfig):** код `ITenantContext` в плане не проходит `IDE0040` — потребовался явный `public` на членах интерфейса. Аналогичное стоит ожидать в будущих задачах, где план опускает модификаторы доступа у членов интерфейса.
|
||||
2. `ConnectionStringProvider` зарегистрирован в DI, но нигде не резолвится (как и задумано для Task 6) — конструктор с `InvalidOperationException` при отсутствии `ConnectionStrings:DealPostgres` сработает только с Task 7 (appsettings).
|
||||
3. NuGet-пакет выбран как `10.0.11` (latest stable, совместим с net10.0). Версия не зафиксирована в плане; при централизованном управлении пакетами (CPM) отсутствует — правок не требуется.
|
||||
4. Загруженных файлов-маркеров (`SharedKernelMarker.cs`, `InfrastructureMarker.cs`) не касались.
|
||||
# Task 6 — Tenant-контекст и подключение к Postgres (отчёт)
|
||||
|
||||
**Дата:** 2026-09-05
|
||||
**Статус:** ✅ Выполнено (build 0 warnings / 0 errors, 3 теста PASS)
|
||||
|
||||
## Файлы
|
||||
|
||||
### Созданы (по коду плана, verbatim)
|
||||
- `src/core/Deal.SharedKernel/Tenants/TenantId.cs` — `readonly record struct TenantId`, валидация непустого `Value`, `SchemaName => "tenant_{Value}"`.
|
||||
- `src/core/Deal.SharedKernel/Tenants/ITenantContext.cs` — `TenantId? TenantId`, `HasTenant`, `string? SchemaName`.
|
||||
- `src/core/Deal.Infrastructure/Data/TenantContext.cs` — `AsyncLocal<TenantId?>`, имплементирует `ITenantContext` + `SetTenant`.
|
||||
- `src/core/Deal.Infrastructure/Data/ConnectionStringProvider.cs` — ctor бросает `InvalidOperationException` без `ConnectionStrings:DealPostgres`; `ForTenant` добавляет `;Search Path=...`.
|
||||
- `tests/Deal.Tests.Unit/TenantIdTests.cs` — 2 теста: `SchemaName_PrefixesTenant`, `TenantId_Empty_Throws`.
|
||||
|
||||
### Изменены
|
||||
- `src/core/Deal.Api/Program.cs` — добавлены `using Deal.Infrastructure.Data;` и `using Deal.SharedKernel.Tenants;`, зарегистрированы `builder.Services.AddSingleton<ITenantContext, TenantContext>();` и `AddSingleton<ConnectionStringProvider>();`. `/api/health` и `public partial class Program` не тронуты.
|
||||
- `src/core/Deal.Infrastructure/Deal.Infrastructure.csproj` — добавлен `PackageReference Microsoft.Extensions.Configuration.Abstractions 10.0.11` (командой `dotnet add`, Ruling 4).
|
||||
|
||||
## Отклонение от кода плана (требование стиля репозитория)
|
||||
|
||||
`ITenantContext.cs`: члены интерфейса получили явный `public` (план их опускал). Иначе сборка падает с `IDE0040` (error): в корневом `C:\telbase\.editorconfig` задано `dotnet_style_require_accessibility_modifiers = always:error`, а `EnforceCodeStyleInBuild=true` + `TreatWarningsAsErrors=true`. Изменение семантики не меняет — члены интерфейса и так public. `.editorconfig`/`Directory.Build.props` не редактировались.
|
||||
|
||||
`TenantId` (record struct с property-initializer-валидацией) успешно компилируется под net10.0 — перепроектирование не потребовалось.
|
||||
|
||||
## Build
|
||||
|
||||
Команда: `dotnet build Deal.sln` (из `src/core`)
|
||||
|
||||
```
|
||||
Восстановление завершено (0,8 с)
|
||||
Deal.SharedKernel net10.0 успешно выполнено
|
||||
...
|
||||
Deal.Api net10.0 успешно выполнено (0,6 с)
|
||||
Сборка успешно выполнено через 2,5 с
|
||||
```
|
||||
|
||||
Результат: 0 warnings, 0 errors (11 проектов собраны).
|
||||
|
||||
## Tests
|
||||
|
||||
Команда: `dotnet test tests/Deal.Tests.Unit --no-build`
|
||||
|
||||
```
|
||||
Сводка теста: всего: 3; сбой: 0; успешно: 3; пропущено: 0; длительность: 1,1 с
|
||||
```
|
||||
|
||||
PASS: `MarkerTests` (1) + `TenantIdTests` (2) = ровно 3.
|
||||
|
||||
## Concerns / заметки
|
||||
|
||||
1. **Template-level conflict (план vs .editorconfig):** код `ITenantContext` в плане не проходит `IDE0040` — потребовался явный `public` на членах интерфейса. Аналогичное стоит ожидать в будущих задачах, где план опускает модификаторы доступа у членов интерфейса.
|
||||
2. `ConnectionStringProvider` зарегистрирован в DI, но нигде не резолвится (как и задумано для Task 6) — конструктор с `InvalidOperationException` при отсутствии `ConnectionStrings:DealPostgres` сработает только с Task 7 (appsettings).
|
||||
3. NuGet-пакет выбран как `10.0.11` (latest stable, совместим с net10.0). Версия не зафиксирована в плане; при централизованном управлении пакетами (CPM) отсутствует — правок не требуется.
|
||||
4. Загруженных файлов-маркеров (`SharedKernelMarker.cs`, `InfrastructureMarker.cs`) не касались.
|
||||
|
||||
Reference in New Issue
Block a user