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

5.2 KiB
Raw Blame History

Модуль m01-server-db — план разработки

План по алгоритму d-dev (std1\_rules\d\d-dev.md); отметки статусов актуализируются при завершении каждого шага (d-dev-6). Требования — 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.