alabuga/scripts/reset_demo_data.py

72 lines
1.9 KiB
Python

"""Удаление тестовых данных и вложений."""
from __future__ import annotations
import shutil
from pathlib import Path
import sys
import os
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
from app.db.session import SessionLocal
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')
run_migrations()
finally:
os.chdir(original_cwd)
session: Session = SessionLocal()
try:
session.query(MissionSubmission).delete()
session.query(Order).delete()
session.query(JournalEntry).delete()
# Сбрасываем опыт и ману демо-пользователям, чтобы они начинали «с нуля».
for user in session.query(User).all():
user.xp = 0
user.mana = 0
session.commit()
finally:
session.close()
uploads_dir: Path = settings.uploads_path
if uploads_dir.exists():
shutil.rmtree(uploads_dir)
uploads_dir.mkdir(parents=True, exist_ok=True)
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__":
reset()