VEU.WathBody/1-docs/4-modules/m01-server-db/readme.md

57 lines
5.2 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.

# Модуль m01-server-db — план разработки
> План по алгоритму d-dev (`std1\_rules\d\d-dev.md`); отметки статусов
> актуализируются при завершении каждого шага (d-dev-6). Требования —
> [module_reqs.md](module_reqs.md).
| Шаг d-dev | Состав | Статус |
|---|---|---|
| 0. Персистентная подготовка | module_reqs.md, readme.md, SKILL.md | ✅ |
| 1. Доменные объекты | `Dal\{Src,Ref}\Domain\{Сущность}.cs` (c-dm) | ✅ утверждено (2026-10-17) |
| 1.3. Утверждение домена | — | **Пользователь!** ✅ |
| 2. Список функций к реализации | статусы `DEV` в 2-db\{src,ref}\functions.md | ✅ |
| 2.3. Утверждение списка | — | **Пользователь!** ✅ (шаг 6) |
| 3. Спецификации функций | `func_specs\` (d-db-5, d-db-9) — все 38 | ✅ |
| 3.4. Утверждение спецификаций | — | **Пользователь!** ✅ (группы 1–4, 2026-10-17) |
| 4. Код функций и тесты | миграции 001–002, `2-db\{src,ref}\functions\` (38), `tests\` (38 файлов) | ✅ |
| 4.4. Утверждение реализации функций | — | **Пользователь!** ✅ (2026-10-17; прогон 122/122 PASS, docker `watchbody-pg`; функции `DONE`) |
| 5. Спецификации тестов репозиториев | `repository_tests\` (d-tst) — **11 файлов** на 13 репозиториев (тесты ProgramVersion и ExerciseReplacement — внутри файлов `ProgramRepository.md` / `ExerciseRepository.md`), 38 функций | ✅ утверждено (2026-10-18, ревью сверкой) |
| 5.3. Утверждение | — | **Пользователь!** ✅ |
| 6. Репозитории DAL + тесты | `Server.WatchBody.Core` (13 репозиториев + 7 фильтров, Kit.Helpers fluent), `Server.WatchBody.Core.Tests` (56 тестов) | ✅ код написан; сборка 0 ошибок; тесты 56/56 PASS (числа после З-35) |
| 6.4. Утверждение репозиториев | — | **Пользователь!** ✅ (2026-10-18, после ревью `agent_recommendations.md`) |
| 7. Завершение | статусы функций `DONE`; сборка и тесты зелёные | ✅ (2026-10-18: 38/38 функций `DONE`; тесты 56/56 PASS, psql-прогон 123/123 на docker `watchbody-pg` — числа после З-35) |
**Модуль завершён** (2026-10-18). Следующий по плану этапа 7 — m02-rest-api.
Примечания:
- Разработка поштучно, группы по сущностям (принятый порядок):
migration → ref → athlete/athlete_profile → exercise/replacement →
program/program_version → workout/workout_set → command_log →
daily_log → workout_metrics → breaks.
- Спецификации тестов репозиториев живут в модуле
(`1-docs\4-modules\m01-server-db\repository_tests\`) — адаптация пути
`1-docs\3-core\…` из d-tst-1 к структуре репозитория (модульных
документов).
- Errata (2026-10-18, вскрыто интеграцией m02): jsonb-параметры функций
принимают `text` с кастой в теле (Npgsql передаёт строку как `text`,
неявного cast'а text→jsonb в PG нет) — `program_version_insert.p_body`,
`workout_update.p_facts_json`, `command_log_insert.p_semantics`,
`workout_metrics_upsert` (4 параметра); `program_version_insert`
дополнен идемпотентностью по `p_id` (🛡, как `workout_insert`).
psql-тесты затронутых функций перегнаны — PASS; спецификации обновлены.
- Errata (2026-10-18, вскрыто интеграцией m04): Npgsql возвращает
колонки `date` как `DateOnly` (не `DateTime`) — `DailyLogRepository`
переведён на `AsDate()`; ключи агрегата `workout_select` — snake_case,
`ParseSets` дополнен `JsonNamingPolicy.SnakeCaseLower` (иначе поля
`WorkoutSet`, включая `in_plan`, молча не заполнялись).
- Прогон psql-тестов — PostgreSQL 17 в docker-контейнере `watchbody-pg`
(порт 5433, БД `watchbody`), ручное воспроизведение — pgAdmin (db-tst-1).
- З-35 (2026-10-18, ревью этапа 7): З-31 (`src.program.external_id`)
не был доведён до SQL/DAL-артефактов — исправлено: миграция
`003_program_external_id.sql` (идемпотентная), `program_insert.psql`
rev. 2 (`p_external_id` + DROP прежней сигнатуры: два оверлода
с DEFAULT делают 2-аргументный вызов неоднозначным), spec, домен
`Program.ExternalId`, `ProgramRepository.Insert`; тесты: psql-кейс #3
(повтор `external_id` → UNIQUE), Core-тест `Insert_2СExternalId`.