add SRS migrations and integrate models into application setup

This commit is contained in:
ruslangilfanov 2025-08-16 19:40:51 +03:00
parent abe16c20ef
commit 54155a99c5
No known key found for this signature in database
2 changed files with 73 additions and 0 deletions

View File

@ -5,9 +5,11 @@ def get_app_models_modules() -> list[types.ModuleType]:
from greek_lang.glossaries import models as glossaries_models from greek_lang.glossaries import models as glossaries_models
from greek_lang.openai_manager import models as openai_manager_models from greek_lang.openai_manager import models as openai_manager_models
from greek_lang.users import models as users_models from greek_lang.users import models as users_models
from greek_lang.srs import models as srs_models
return [ return [
glossaries_models, glossaries_models,
openai_manager_models, openai_manager_models,
users_models, users_models,
srs_models,
] ]

View File

@ -0,0 +1,71 @@
"""empty message
Revision ID: 9a2898513cf2
Revises: 747797032526
Create Date: 2025-08-16 19:40:06.376743
"""
from typing import Sequence, Union
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision: str = '9a2898513cf2'
down_revision: Union[str, None] = '747797032526'
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None
def upgrade() -> None:
"""Upgrade schema."""
# ### commands auto generated by Alembic - please adjust! ###
op.create_table('srs_progress',
sa.Column('id', sa.BigInteger(), nullable=False),
sa.Column('user_id', sa.BigInteger(), nullable=False),
sa.Column('word_id', sa.BigInteger(), nullable=False),
sa.Column('due_at', sa.DateTime(timezone=True), server_default=sa.text('now()'), nullable=False),
sa.Column('interval_days', sa.Integer(), nullable=False),
sa.Column('ease', sa.Float(), nullable=False),
sa.Column('reps', sa.Integer(), nullable=False),
sa.Column('lrn_step', sa.Integer(), nullable=False),
sa.Column('state', sa.Enum('learning', 'review', 'lapsed', name='reviewstate', native_enum=False), nullable=False),
sa.ForeignKeyConstraint(['user_id'], ['users.id'], name=op.f('fk_srs_progress_user_id_users')),
sa.ForeignKeyConstraint(['word_id'], ['glossary_word.id'], name=op.f('fk_srs_progress_word_id_glossary_word')),
sa.PrimaryKeyConstraint('id', name=op.f('pk_srs_progress')),
sa.UniqueConstraint('user_id', 'word_id', name='uq_srs_user_word')
)
op.create_index(op.f('ix_srs_progress_due_at'), 'srs_progress', ['due_at'], unique=False)
op.create_index(op.f('ix_srs_progress_user_id'), 'srs_progress', ['user_id'], unique=False)
op.create_index(op.f('ix_srs_progress_word_id'), 'srs_progress', ['word_id'], unique=False)
op.create_table('srs_review_log',
sa.Column('id', sa.BigInteger(), nullable=False),
sa.Column('user_id', sa.BigInteger(), nullable=False),
sa.Column('word_id', sa.BigInteger(), nullable=False),
sa.Column('ts', sa.DateTime(timezone=True), server_default=sa.text('now()'), nullable=False),
sa.Column('grade', sa.Integer(), nullable=False),
sa.Column('prev_interval', sa.Integer(), nullable=False),
sa.Column('new_interval', sa.Integer(), nullable=False),
sa.Column('prev_ease', sa.Float(), nullable=False),
sa.Column('new_ease', sa.Float(), nullable=False),
sa.ForeignKeyConstraint(['user_id'], ['users.id'], name=op.f('fk_srs_review_log_user_id_users')),
sa.ForeignKeyConstraint(['word_id'], ['glossary_word.id'], name=op.f('fk_srs_review_log_word_id_glossary_word')),
sa.PrimaryKeyConstraint('id', name=op.f('pk_srs_review_log'))
)
op.create_index(op.f('ix_srs_review_log_user_id'), 'srs_review_log', ['user_id'], unique=False)
op.create_index(op.f('ix_srs_review_log_word_id'), 'srs_review_log', ['word_id'], unique=False)
# ### end Alembic commands ###
def downgrade() -> None:
"""Downgrade schema."""
# ### commands auto generated by Alembic - please adjust! ###
op.drop_index(op.f('ix_srs_review_log_word_id'), table_name='srs_review_log')
op.drop_index(op.f('ix_srs_review_log_user_id'), table_name='srs_review_log')
op.drop_table('srs_review_log')
op.drop_index(op.f('ix_srs_progress_word_id'), table_name='srs_progress')
op.drop_index(op.f('ix_srs_progress_user_id'), table_name='srs_progress')
op.drop_index(op.f('ix_srs_progress_due_at'), table_name='srs_progress')
op.drop_table('srs_progress')
# ### end Alembic commands ###