- RelatedGroupMember.kind (related_group_kind, NOT NULL) между legal_entity_id и valid_from, как в DBML; частичный уникальный индекс uq_related_group_member_entity_kind_current (legal_entity_id, kind) WHERE is_current — ЮЛ одновременно в одной ГСК и одной ГСЗ. - AuditAction: LEGAL_ENTITY_CHANGE (после GROUP_CHANGE), USER_CHANGE (после USER_ROLE_CHANGE). - Последовательности company_group_code_seq / related_group_code_seq в metadata (design D-5). - Миграция 0002_dbml_v5_14: related_group_member пересоздаётся с переносом строк (kind из группы), чтобы порядок колонок совпал с DBML и create_all; ALTER TYPE ADD VALUE ×2; downgrade пересоздаёт audit_action v5.13. - DBML_VERSION = 5.14, пути к data-model-v5.14.dbml (Makefile, dbml_parity), тесты: откат на шаг, перенос строк, уникальность gsk+gsz, офлайн-SQL до head. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
69 lines
3.2 KiB
Makefile
69 lines
3.2 KiB
Makefile
# Команды разработки arm-core. Backend — api/.venv; запуск из корня репозитория.
|
||
VENV := api/.venv
|
||
BIN := $(CURDIR)/$(VENV)/bin
|
||
COMPOSE_FILE ?= ../docs/dev/docker-compose.yml
|
||
# DBML относительно api/: и в основном workspace, и в worktree .wt/<срез>/ это соседний docs/
|
||
DBML ?= ../../docs/model/data-model-v5.14.dbml
|
||
|
||
.PHONY: venv lint test test-integration dbml-check migration-cycle check check-infra docker-build web-check check-full up migrate seed seed-dev
|
||
|
||
# Python 3.11 (версия платформы); внутренние пакеты raisa_* вне банка недоступны — пропускаем их
|
||
venv:
|
||
cd api && uv venv --python 3.11 --allow-existing .venv
|
||
cd api && grep -v '^raisa_' requirements.txt | uv pip install --python .venv/bin/python -r -
|
||
cd api && grep -v '^-r' requirements-dev.txt | uv pip install --python .venv/bin/python -r -
|
||
|
||
lint:
|
||
cd api && $(BIN)/ruff check .
|
||
cd api && $(BIN)/ruff format --check .
|
||
cd api && $(BIN)/mypy src scripts
|
||
|
||
test:
|
||
cd api && $(BIN)/pytest -m "not integration"
|
||
|
||
test-integration:
|
||
cd api && $(BIN)/pytest -m integration
|
||
|
||
# Сверка ORM с DBML (spec data-model): пустой вывод и код 0 — совпадение
|
||
dbml-check:
|
||
cd api && $(BIN)/python scripts/check_dbml_vs_orm.py $(DBML)
|
||
|
||
# Миграции на временной БД (spec data-model): upgrade head -> downgrade base -> upgrade head, пустой autogenerate,
|
||
# схема после миграции = create_all ORM. Входит в test-integration, отдельно запускается для быстрой проверки миграций
|
||
migration-cycle:
|
||
cd api && $(BIN)/pytest -m integration tests/test_migrations.py
|
||
|
||
check: lint test
|
||
|
||
# Быстрая проверка доступности PostgreSQL и NATS из api/.env.test (порты compose); иначе — подсказка поднять инфраструктуру
|
||
check-infra:
|
||
cd api && $(BIN)/python scripts/check_infra.py
|
||
|
||
# Сборка образа из корня репозитория (Dockerfile — бэкенд)
|
||
docker-build:
|
||
docker build -t arm-core .
|
||
|
||
# Фронт: установка зависимостей (raisa-* без Nexus пропускаются как optionalDependencies), biome, типы, сборка
|
||
web-check:
|
||
cd web && npm install
|
||
cd web && npx biome check src
|
||
cd web && npx tsc --noEmit
|
||
cd web && npm run build
|
||
|
||
# Полная проверка перед PR. Порядок: быстрые без БД (check, dbml-check), затем БД/NATS из compose (test-integration),
|
||
# затем docker, затем web. Цикл миграций upgrade -> downgrade -> upgrade на чистой БД входит в test-integration
|
||
# (tests/test_migrations.py), поэтому отдельным шагом не гоняется: второй запуск только удлинил бы прогон
|
||
check-full: check dbml-check check-infra test-integration docker-build web-check
|
||
|
||
up:
|
||
docker compose -f $(COMPOSE_FILE) up -d
|
||
|
||
migrate:
|
||
cd api && $(BIN)/alembic upgrade head
|
||
|
||
seed:
|
||
cd api && $(BIN)/python -m scripts.seed
|
||
|
||
seed-dev:
|
||
cd api && $(BIN)/python -m scripts.seed --dev
|