MT.Checks/Plan/dal_report.md

100 lines
10 KiB
Markdown

# Отчёт генерации DAL (навык project_dal) — прогон 2026-09-08
## Статус этапов
| Этап | Статус |
|---|---|
| 0_scan (разведка) | done |
| 1_rules (правила MCP) | done |
| 2_spec (спецификации тестов) | done — утверждены пользователем |
| 3_code (генерация) | done (тесты не создаются — решение пользователя) |
| 4_validate | done — build 0 ошибок; check: 1 известный false positive (см. ниже) |
| 5_report | done — ожидание утверждения DONE |
## Версии правил
- Каталог MCP standarts-catalog: **1.2** (= rules-baseline.json 1.2); расхождений
нет, `validate-rules` не требовался.
- Использованные области: c-dal 1.1, d-tst 1.1, c-tst 1.1, c-cs 1.1, db-m 1.1,
db-s 1.1, db-func 1.1, db-tst 1.1, c-dm 1.1, d-dev 1.1, d-db 1.1 (все 2026-09-04).
## Решение (проект `MT.Checks`)
- `MT.Checks.slnx` → проект `MT.Checks\MT.Checks.csproj` (net10.0),
ProjectReference на `I:\Gitea\Kit\Kit.Core\Kit.Core\Kit.Core.csproj` (Kit.Helpers).
- Тестового проекта нет — решение пользователя «без тестов совсем» (2026-09-08).
### Файлы
| Файл | Содержимое |
|---|---|
| `Domain\ChkCheck.cs` | сущность проверки (+ Type/Status-справочники, Params — строка JSON) |
| `Domain\ChkType.cs` | справочник типов + константы `ChkTypes` (6 значений) |
| `Domain\ChkStatus.cs` | справочник статусов + константы `ChkStatuses` (4 значения) |
| `Repository\Filter\ChkCheckFilter.cs` | фильтр Select (null = условие не применяется) |
| `Repository\ChkCheckRepository.cs` | Insert/Update/Delete/Select/Get |
| `Repository\ChkTypeRepository.cs` | Select (справочник — только чтение) |
| `Repository\ChkStatusRepository.cs` | Select (справочник — только чтение) |
Неймспейсы: `MT.Checks.Domain`, `MT.Checks.Repository`, `MT.Checks.Repository.Filter`
(папка/префикс слоя `Chk` в коде не используются — решение пользователя).
### Методы → функции БД
| Метод | Функция | Возврат |
|---|---|---|
| `ChkCheckRepository.Insert(ChkCheck)` | `chk.chk_check_insert` | id записи |
| `ChkCheckRepository.Update(ChkCheck)` | `chk.chk_check_update` | число строк (read-modify-write; guard Id=0) |
| `ChkCheckRepository.Delete(int)` | `chk.chk_check_delete` | число строк (guard id=0) |
| `ChkCheckRepository.Select(ChkCheckFilter)` | `chk.chk_check_select` | `IList<ChkCheck>` |
| `ChkCheckRepository.Get(int)` | `chk.chk_check_get` | `ChkCheck?` (guard id=0) |
| `ChkTypeRepository.Select()` | `chk.chk_type_select` | `IList<ChkType>` |
| `ChkStatusRepository.Select()` | `chk.chk_status_select` | `IList<ChkStatus>` |
Каждый метод — ровно одна хранимая функция, транспорт — fluent API Kit.Helpers
(`PrepareExecute<T>().AsStoredProcedure().AddParameter*().AddConverter(...)`),
конвертеры таблиц ответа — inline-лямбды.
## Слой БД (этот же прогон)
- `DB/chk/functions/*.sql` — 7 функций (параметры `p_*` по db-func-5);
- `DB/chk/func_specs/*.md` — 7 спецификаций с тест-планами (d-db-9);
- `DB/chk/tests/test_*.psql` — 7 psql-тестов (**не исполнялись** — нужна тестовая
база: `psql -d <база> -f DB/chk/tests/test_*.psql`);
- `DB/chk/functions.md` — статусы: функции `DEV`/«Функция»=`CODE`; «Репозиторий»=`REQ`
с примечанием (unit-тесты не создаются, `CODE` по d-dev-3 неприменим).
## Валидация
- `dotnet build MT.Checks.slnx` — **0 ошибок** (предупреждения NU1903/CS — из Kit.Core).
- DalTools `check` (с манифестом) — **1 нарушение c-dal-1, известный false positive**:
эвристика «SQL в строке C#» сканирует текст между строковыми литералами файла и
находит слово `Select` в сигнатуре метода `Select(ChkCheckFilter)` — имя метода
обязательно по правилу c-dal-5 (имена CRUD: Insert/Update/Delete/Select/Get).
Неустранимо в коде без нарушения стандарта; SQL в строках отсутствует.
## Спецификации тестов
`1-docs/2-core/chk/repository_tests/` — ChkCheckRepository.md (17 тестов),
ChkTypeRepository.md, ChkStatusRepository.md — утверждены как документация
ожидаемого поведения. Тестовый код по решению пользователя не создаётся
(см. `DB/chk/functions.md`, примечание к колонке «Репозиторий»).
## Известные ограничения и решения
1. **Транспорт `p_` vs `_`**: Kit.Helpers строит именованные аргументы `_<имя>`,
функции chk объявлены с `p_<имя>` (db-func-5; решение пользователя — сохранить
стандарт). До доработки Kit.Helpers (администратор Kit) вызовы репозиториев
против живой БД будут давать «function ... does not exist».
2. **Имена**: решение/проект `MT.Checks` — по указанию пользователя
(в `MT.Check.Core.Dal`/`MT.Checks.Test` отказ).
3. **Без тестов**: тестовый проект отсутствует; `dotnet test` из конвейера исключён.
4. Предупреждения сборки NU1903 (уязвимые пакеты Npgsql/SqlClient и др.) —
из Kit.Core, вне рамок навыка.
## Возобновление/завершение
После доработки Kit.Helpers достаточно проверить вызовы на тестовой БД
(спецификации вызовов не меняются). Статусы `DONE` — после утверждения
пользователем.