Files
service-finder/backend/app/tests_internal/seeds/seed_system.py

79 lines
3.1 KiB
Python
Executable File

# /app/tests_internal/seeds/seed_system.py
import asyncio
import logging
import uuid
from sqlalchemy import select
from app.database import AsyncSessionLocal
from app.models.identity import User, Person, UserRole
from app.models.system import SystemParameter
# JAVÍTOTT IMPORTOK: A grep alapján szétválasztva
from app.models.gamification import PointRule, LevelConfig, UserStats
from app.models.core_logic import SubscriptionTier
from app.core.security import get_password_hash
from app.core.config import settings
logging.basicConfig(level=logging.INFO, format='%(asctime)s [%(levelname)s] Sentinel-Seed: %(message)s')
logger = logging.getLogger("System-Seeder")
async def seed_data():
""" Rendszer alapadatok inicializálása a megfelelő modellekből. """
async with AsyncSessionLocal() as db:
logger.info("🚀 Rendszer-alapozás indítása (MB2.0 Standard)...")
admin_email = settings.INITIAL_ADMIN_EMAIL
admin_password = settings.INITIAL_ADMIN_PASSWORD
if not admin_email or not admin_password:
logger.error("❌ HIBA: Admin hitelesítési adatok hiányoznak!")
return
# 1. Superadmin és Person kapcsolat
stmt = select(User).where(User.email == admin_email)
admin_exists = (await db.execute(stmt)).scalar_one_or_none()
if not admin_exists:
new_person = Person(
first_name="Rendszer",
last_name="Adminisztrátor",
id_uuid=uuid.uuid4(),
is_active=True
)
db.add(new_person)
await db.flush()
new_admin = User(
email=admin_email,
hashed_password=get_password_hash(admin_password),
role=UserRole.superadmin,
is_active=True,
person_id=new_person.id
)
db.add(new_admin)
await db.flush()
# Statisztikai rekord (Gamification)
db.add(UserStats(user_id=new_admin.id, total_xp=0, current_level=1))
logger.info(f"✅ Superadmin létrehozva: {admin_email}")
# 2. Rendszerparaméterek (JSONB értékekkel)
params = [
("SECURITY_MAX_RECORDS_PER_HOUR", {"limit": 50}, "Biztonsági limit"),
("VEHICLE_LIMIT", {"default": 5}, "Alapértelmezett jármű limit")
]
for key, val, desc in params:
stmt_p = select(SystemParameter).where(SystemParameter.key == key)
if not (await db.execute(stmt_p)).scalar_one_or_none():
db.add(SystemParameter(key=key, value=val, description=desc))
# 3. Gamification Szabályok (gamification.py-ból)
rules = [("ASSET_REGISTER", 100), ("ASSET_REVIEW", 75)]
for key, pts in rules:
stmt_r = select(PointRule).where(PointRule.action_key == key)
if not (await db.execute(stmt_r)).scalar_one_or_none():
db.add(PointRule(action_key=key, points=pts))
await db.commit()
logger.info("✨ Rendszer alapadatok rögzítve.")
if __name__ == "__main__":
asyncio.run(seed_data())