add SRS migrations and integrate models into application setup
This commit is contained in:
parent
abe16c20ef
commit
54155a99c5
@ -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,
|
||||||
]
|
]
|
||||||
|
|||||||
@ -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 ###
|
||||||
Loading…
Reference in New Issue
Block a user