diff --git a/backend/alembic/versions/20240927_0006_user_email_confirmation_columns.py b/backend/alembic/versions/20240927_0006_user_email_confirmation_columns.py new file mode 100644 index 0000000..4d9b7c8 --- /dev/null +++ b/backend/alembic/versions/20240927_0006_user_email_confirmation_columns.py @@ -0,0 +1,28 @@ +"""Add email confirmation columns""" + +from __future__ import annotations + +from alembic import op +import sqlalchemy as sa + +# revision identifiers, used by Alembic. +revision = '20240927_0006' +down_revision = '20240927_0005' +branch_labels = None +depends_on = None + + +def upgrade() -> None: + op.add_column( + 'users', + sa.Column('is_email_confirmed', sa.Boolean(), server_default=sa.sql.expression.true(), nullable=False), + ) + op.add_column('users', sa.Column('email_confirmation_token', sa.String(length=128), nullable=True)) + op.add_column('users', sa.Column('email_confirmed_at', sa.DateTime(timezone=True), nullable=True)) + op.execute("UPDATE users SET is_email_confirmed = 1") + + +def downgrade() -> None: + op.drop_column('users', 'email_confirmed_at') + op.drop_column('users', 'email_confirmation_token') + op.drop_column('users', 'is_email_confirmed') diff --git a/scripts/reset_demo_data.py b/scripts/reset_demo_data.py index 97f9613..cfb3f5a 100644 --- a/scripts/reset_demo_data.py +++ b/scripts/reset_demo_data.py @@ -12,6 +12,7 @@ from sqlalchemy.orm import Session ROOT = Path(__file__).resolve().parents[1] sys.path.append(str(ROOT / 'backend')) +sys.path.append(str(ROOT)) from app.main import run_migrations from app.core.config import settings @@ -20,11 +21,16 @@ from app.models.mission import MissionSubmission from app.models.store import Order from app.models.journal import JournalEntry from app.models.user import User +from scripts import seed_data def reset() -> None: """Очищаем пользовательскую активность и загруженные документы.""" + db_file = settings.sqlite_path + if db_file.exists(): + db_file.unlink() + original_cwd = Path.cwd() try: os.chdir(ROOT / 'backend') @@ -52,7 +58,13 @@ def reset() -> None: shutil.rmtree(uploads_dir) uploads_dir.mkdir(parents=True, exist_ok=True) - print("Demo data cleared. Mission submissions, journal entries, orders и загруженные файлы удалены.") + sentinel = settings.sqlite_path.parent / ".seeded" + if sentinel.exists(): + sentinel.unlink() + + seed_data.seed() + + print("Demo data reset and reseeded with fresh hitchhiker-ready fixtures.") if __name__ == "__main__": diff --git a/scripts/seed_data.py b/scripts/seed_data.py index 48ef6dd..0408118 100644 --- a/scripts/seed_data.py +++ b/scripts/seed_data.py @@ -3,7 +3,7 @@ from __future__ import annotations from pathlib import Path - +import os import sys from sqlalchemy.orm import Session @@ -33,7 +33,12 @@ def seed() -> None: return # Перед наполнением БД убеждаемся, что применены все миграции. - run_migrations() + original_cwd = Path.cwd() + try: + os.chdir(ROOT / 'backend') + run_migrations() + finally: + os.chdir(original_cwd) session: Session = SessionLocal() try: