Refactor reset_demo_data and seed_data scripts to improve demo data reset process. Added functionality to unlink existing database and seed fresh data, ensuring a clean state for testing.

This commit is contained in:
danilgryaznev 2025-09-28 21:34:40 +03:00
parent f6e661ee60
commit 0733c03981
3 changed files with 48 additions and 3 deletions

View File

@ -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')

View File

@ -12,6 +12,7 @@ from sqlalchemy.orm import Session
ROOT = Path(__file__).resolve().parents[1] ROOT = Path(__file__).resolve().parents[1]
sys.path.append(str(ROOT / 'backend')) sys.path.append(str(ROOT / 'backend'))
sys.path.append(str(ROOT))
from app.main import run_migrations from app.main import run_migrations
from app.core.config import settings 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.store import Order
from app.models.journal import JournalEntry from app.models.journal import JournalEntry
from app.models.user import User from app.models.user import User
from scripts import seed_data
def reset() -> None: def reset() -> None:
"""Очищаем пользовательскую активность и загруженные документы.""" """Очищаем пользовательскую активность и загруженные документы."""
db_file = settings.sqlite_path
if db_file.exists():
db_file.unlink()
original_cwd = Path.cwd() original_cwd = Path.cwd()
try: try:
os.chdir(ROOT / 'backend') os.chdir(ROOT / 'backend')
@ -52,7 +58,13 @@ def reset() -> None:
shutil.rmtree(uploads_dir) shutil.rmtree(uploads_dir)
uploads_dir.mkdir(parents=True, exist_ok=True) 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__": if __name__ == "__main__":

View File

@ -3,7 +3,7 @@
from __future__ import annotations from __future__ import annotations
from pathlib import Path from pathlib import Path
import os
import sys import sys
from sqlalchemy.orm import Session from sqlalchemy.orm import Session
@ -33,7 +33,12 @@ def seed() -> None:
return return
# Перед наполнением БД убеждаемся, что применены все миграции. # Перед наполнением БД убеждаемся, что применены все миграции.
original_cwd = Path.cwd()
try:
os.chdir(ROOT / 'backend')
run_migrations() run_migrations()
finally:
os.chdir(original_cwd)
session: Session = SessionLocal() session: Session = SessionLocal()
try: try: