Files
service-finder/backend/app/seed_data.py

118 lines
5.1 KiB
Python
Executable File

import asyncio
import sys
import os
# Útvonal beállítása
sys.path.append(os.path.join(os.path.dirname(__file__), '..'))
# --- JAVÍTÁS 1: A Helyes Aszinkron Session Importálása ---
from app.db.session import AsyncSessionLocal
# ---------------------------------------------------------
from app.models.user import User
from app.models.social import ServiceProvider, Competition, ModerationStatus
from app.services.social_service import vote_for_provider
from sqlalchemy import text
from datetime import datetime, timedelta
async def run_simulation():
# --- JAVÍTÁS 2: Itt is az AsyncSessionLocal-t használjuk ---
async with AsyncSessionLocal() as db:
# -----------------------------------------------------------
print("--- 1. TAKARÍTÁS (Előző tesztadatok törlése) ---")
# Kaszkádolt törlés a data sémában
await db.execute(text("TRUNCATE TABLE data.user_scores, data.votes, data.service_providers, data.competitions, data.users RESTART IDENTITY CASCADE"))
await db.commit()
print("\n--- 2. SZEREPLŐK LÉTREHOZÁSA ---")
# Admin
admin = User(email="admin@test.com", password_hash="hash", full_name="Admin", is_superuser=True)
# Jófiú (aki valós boltokat tölt fel)
good_user = User(email="good@test.com", password_hash="hash", full_name="Good Guy", reputation_score=5)
# Rosszfiú (aki fake boltokat tölt fel)
bad_user = User(email="bad@test.com", password_hash="hash", full_name="Spammer", reputation_score=-8) # Közel a banhoz
# Szavazóközönség
voter1 = User(email="voter1@test.com", password_hash="hash", full_name="Voter 1")
voter2 = User(email="voter2@test.com", password_hash="hash", full_name="Voter 2")
voter3 = User(email="voter3@test.com", password_hash="hash", full_name="Voter 3")
voter4 = User(email="voter4@test.com", password_hash="hash", full_name="Voter 4")
voter5 = User(email="voter5@test.com", password_hash="hash", full_name="Voter 5")
db.add_all([admin, good_user, bad_user, voter1, voter2, voter3, voter4, voter5])
await db.commit()
# ID-k lekérése
for u in [good_user, bad_user, voter1, voter2, voter3, voter4, voter5]:
await db.refresh(u)
print("\n--- 3. VERSENY INDÍTÁSA ---")
race = Competition(
name="Nagy Januári Verseny",
description="Töltsd fel a legtöbb boltot!",
start_date=datetime.utcnow() - timedelta(days=1),
end_date=datetime.utcnow() + timedelta(days=30),
is_active=True
)
db.add(race)
await db.commit()
await db.refresh(race)
print("\n--- 4. SZCENÁRIÓ A: A JÓ FELHASZNÁLÓ ---")
# Good Guy feltölt egy boltot
good_shop = ServiceProvider(
name="Korrekt Gumiszerviz",
address="Fő utca 1.",
added_by_user_id=good_user.id,
status=ModerationStatus.pending
)
db.add(good_shop)
await db.commit()
await db.refresh(good_shop)
# A tömeg megszavazza (Kell 5 pont az elfogadáshoz)
print(f"Szavazás a '{good_shop.name}' boltra...")
await vote_for_provider(db, voter1.id, good_shop.id, 1)
await vote_for_provider(db, voter2.id, good_shop.id, 1)
await vote_for_provider(db, voter3.id, good_shop.id, 1)
await vote_for_provider(db, voter4.id, good_shop.id, 1)
await vote_for_provider(db, voter5.id, good_shop.id, 1) # Itt éri el az 5-öt!
# Eredmény ellenőrzése
await db.refresh(good_user)
print(f"Good Guy Hírneve (Elvárt: 6): {good_user.reputation_score}")
# Pontszám ellenőrzése
points = await db.execute(text(f"SELECT points FROM data.user_scores WHERE user_id={good_user.id}"))
scalar_points = points.scalar()
print(f"Good Guy Verseny Pontjai (Elvárt: 10): {scalar_points}")
print("\n--- 5. SZCENÁRIÓ B: A ROSSZ FELHASZNÁLÓ (AUTO-BAN TESZT) ---")
# Bad Guy feltölt egy fake boltot
fake_shop = ServiceProvider(
name="KAMU Bolt",
address="Nincs ilyen utca",
added_by_user_id=bad_user.id,
status=ModerationStatus.pending
)
db.add(fake_shop)
await db.commit()
await db.refresh(fake_shop)
# A tömeg leszavazza (Kell -3 az elutasításhoz)
print(f"Szavazás a '{fake_shop.name}' boltra...")
await vote_for_provider(db, voter1.id, fake_shop.id, -1)
await vote_for_provider(db, voter2.id, fake_shop.id, -1)
await vote_for_provider(db, voter3.id, fake_shop.id, -1) # Itt éri el a -3-at!
# Eredmény ellenőrzése
await db.refresh(bad_user)
print(f"Bad User Hírneve (Elvárt: -10): {bad_user.reputation_score}")
print(f"Bad User Aktív? (Elvárt: False/Banned): {bad_user.is_active}")
if not bad_user.is_active:
print("✅ SIKER: A rendszer automatikusan kitiltotta a csalót!")
else:
print("❌ HIBA: A felhasználó még mindig aktív.")
if __name__ == "__main__":
asyncio.run(run_simulation())