MT.Checks/Plan/dal_report.md

100 lines
6.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Отчёт генерации 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` — после утверждения
пользователем.