klg-asutk-app/backend/alembic/versions/0002_document_templates.py
Yuriy 0cf1cfdaec feat: библиотека шаблонов документов (25 шт.) в стиле REFLY
- DocumentTemplate: модель, CRUD API, seed 25 шаблонов
- Категории: заявки, сертификаты, акты, письма, формы, отчёты, приказы
- Стандарты: РФ (ФАП-145/146/148/246), ICAO, EASA, FAA
- Бренд-бук REFLY: шапка, подвал, цвета #1e3a5f, печатный формат A4
- Поля contenteditable для заполнения в браузере
- DocumentPreviewModal: просмотр, заполнение, печать
- Страница /templates с фильтрами по категории и стандарту
- Alembic миграция 0002_document_templates

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-15 16:37:09 +03:00

40 lines
1.5 KiB
Python

"""Document templates table
Revision ID: 0002
Revises: 0001
Create Date: 2026-02-16
"""
from alembic import op
import sqlalchemy as sa
revision = '0002'
down_revision = '0001'
branch_labels = None
depends_on = None
def upgrade() -> None:
op.create_table(
'document_templates',
sa.Column('id', sa.String(36), primary_key=True),
sa.Column('code', sa.String(32), nullable=False),
sa.Column('name', sa.String(255), nullable=False),
sa.Column('category', sa.String(64), nullable=False),
sa.Column('standard', sa.String(32), nullable=False),
sa.Column('description', sa.Text(), nullable=True),
sa.Column('html_content', sa.Text(), nullable=False),
sa.Column('version', sa.Integer(), nullable=False, server_default='1'),
sa.Column('is_active', sa.Boolean(), nullable=False, server_default='true'),
sa.Column('sort_order', sa.Integer(), nullable=False, server_default='0'),
sa.Column('created_at', sa.DateTime(timezone=True), server_default=sa.func.now()),
sa.Column('updated_at', sa.DateTime(timezone=True), server_default=sa.func.now()),
)
op.create_index('idx_document_templates_code', 'document_templates', ['code'], unique=True)
op.create_index('idx_document_templates_category', 'document_templates', ['category'])
op.create_index('idx_document_templates_standard', 'document_templates', ['standard'])
def downgrade() -> None:
op.drop_table('document_templates')