Модули (d-dev, все закрыты): m01-server-db (38 psql-функций, 13 репозиториев, psql 123/123), m02-rest-api (sync/workouts/programs + middleware), m03-program-store (версии draft→active→archived), m04-metrics-engine (метрики + 6 красных флагов, Safety.*), m05-progression-rules (ProgressionRules + BreakEngine: правила 1–5, делоад, перерывы/возврат, фильтр ограничений is_active/замены; Web 81/81 + Core 56/56). Волны ревью: З-35 external_id до артефактов (миграция 003, program_insert rev.2 с DROP старой сигнатуры); З-36 --mode migrate (Program.cs, MigrationRunner, Db.MigrationsDir); З-37 tech-req 4.2 к факту (BpElevated*, фактические параметры, camelCase); З-38 шлюзы m05; З-39 примечание Ф-14.2 (illness → перезапуск); З-40/З-42 документация к факту (dto, SqlHelperAbstract, spec m05/m04); З-41(а) is_active=false в sync → exercise_delete (Ф-4.2). Инфраструктура: docker watchbody-pg (PostgreSQL 17, порт 5433); Kit.Helpers в 3-app/1-lib (не изменялся). Эксплуатационные файлы (program-trenirovok.*, program-import.json, presentation-trenirovok.html, журнал метрик) в коммит не включены. |
||
|---|---|---|
| .. | ||
| ref | ||
| src | ||
| readme.md | ||
readme.md
БД WatchBody (PostgreSQL)
Документация БД серверной части — шаг 6 процесса (
std1\_process\process.md), правила d-db (std1\_rules\d\d-db.md), db-func (std1\_rules\db\db-func.md). Решение шага 6 — 0-mng\plan.md.
Общие сведения
- СУБД: PostgreSQL 17+; доступ — только через хранимые функции
(Kit.Helpers
SqlHelperAbstract/SqlHelperPostgres— fluentPrepareExecute<T>(), tech-requirements разд. 3; З-42 — фактическое имя компонента). - Схемы-слои:
src— основные данные (атлеты, тренировки, программы, метрики);ref— справочники (двигательные группы). - Изоляция атлетов (🛡): каждая таблица данных несёт
athlete_id; все функции слояsrcпринимаютp_athlete_idи выбирают/пишут только в пределах атлета (requirements, Ф-8.5, инвариант раздела 5). - Идемпотентность (🛡, Р2-Б): PK клиентских сущностей — UUID; телефон генерирует UUID (строки «только .fit» — сервер), повторная вставка с тем же UUID возвращает существующую запись; ссылки дочерних записей — те же UUID, маппинг серверных id не нужен.
- JSON: версии программ и факты .fit —
jsonbс проверкой схемы на стороне приложения (не в БД).
Состав
| Файл | Содержание |
|---|---|
| ref\tables.md | справочники слоя ref |
| src\tables.md | таблицы слоя src |
{слой}\functions.md |
списки функций (после утверждения таблиц) |
План миграции (d-db-1)
- Схемы:
CREATE SCHEMA IF NOT EXISTS src; CREATE SCHEMA IF NOT EXISTS ref; - Справочники:
ref\exercise_group.psql— таблица + вставка 5 значений (идемпотентно,ON CONFLICT (code) DO NOTHING). - Таблицы
src: порядок —athlete→athlete_profile→exercise→exercise_replacement→program→program_version→workout→workout_set→command_log→daily_log→workout_metrics→breaks(FK-зависимости). - Функции: файлы
{слой}\функции.psqlпо сущностям в том же порядке (CREATE OR REPLACE— перезапуск безопасен). - Версионирование: каталог
2-db\migrations\—NNN_описание.sqlпо возрастанию; каждая миграция идемпотентна (IF NOT EXISTS / OR REPLACE); факт применения — одна запись на файл вsrc.migration(id, filename, applied_at). - Применение (З-36):
Server.WatchBody.Web --mode migrate(--config <path>) — файлы каталога2-db\migrations\по возрастанию имён, журнал —src.migration(MigrationRepository), транзакция на файл, коды возврата 0/1; ключ конфигаDb.MigrationsDir(умолчание — migrations рядом с исполняемым файлом).
Таблица llm_calls (v2)
Журнал вызовов LLM-планировщика (дизайн LLM-планирования, разд. 8)
создаётся в v2 вместе с LlmPlanner — в v1 не проектируется.