# Шаблон ADR ## Заголовок [Краткое название архитектурного решения] ## Статус [PROPOSED | ACCEPTED | DEPRECATED | SUPERSEDED] ## Контекст Опишите проблему, которая мотивирует это решение. Укажите значимые факты: - Почему это решение нужно? - Какие ограничения или требования применимы? - Какие альтернативы рассматривались? ## Решение Сформулируйте принятое решение чётко и кратко. ## Последствия Опишите результаты и следствия этого решения: - **Плюсы:** выгоды, улучшения - **Минусы:** компромиссы, риски - **Нейтрально:** изменения, которые не хороши и не плохи ## Ссылки - Связанные ADR (если есть) - Внешняя документация или стандарты - Файлы кода, реализующие это решение --- ## Пример: ADR-001 Использование UUID как первичного ключа ### Статус ACCEPTED ### Контекст VidConf требует глобально уникальных идентификаторов для распределённых операций и будущего шардирования. - Генерация UUID в PostgreSQL быстрая (через `gen_random_uuid()`) - Не требует центральной нумерации - Поддерживает репликацию без координации ### Решение Все таблицы используют `UUID` (версия 4) как первичный ключ, генерируемый на сервере через `gen_random_uuid()`. Исключения: `phrases` и `chat_messages` используют `BIGINT IDENTITY` для высокочастотных вставок. ### Последствия - **Плюс:** уникальность на всех инстансах; не требует глобальной координации - **Плюс:** поддерживает будущие распределённые архитектуры - **Минус:** больший размер индекса (16 байт против 8 у BIGINT) - **Нейтрально:** требует явной поддержки типа UUID в ORM ### Ссылки - `backend/models/*.py` — все модели используют `Mapped[uuid.UUID]` - `backend/alembic/versions/1e2e34a0cb06_initial_schema.py` — миграция