Initial commit: Robot ökoszisztéma v2.0 - Stabilizált jármű és szerviz robotok
This commit is contained in:
114
code-server-config/data/User/History/-638902d7/2Pxf.py
Executable file
114
code-server-config/data/User/History/-638902d7/2Pxf.py
Executable file
@@ -0,0 +1,114 @@
|
||||
import asyncio
|
||||
import sys
|
||||
import os
|
||||
|
||||
# Hozzáadjuk az app könyvtárat az útvonalhoz, hogy működjenek az importok
|
||||
sys.path.append(os.path.join(os.path.dirname(__file__), '..'))
|
||||
|
||||
from app.core.database import SessionLocal # FIGYELEM: Itt a régi vagy új helytől függően ellenőrizd!
|
||||
# Ha a SessionLocal a db/session.py-ben van:
|
||||
# from app.db.session import SessionLocal
|
||||
|
||||
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():
|
||||
async with SessionLocal() 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 közvetlen SQL-el a biztonság kedvéért
|
||||
points = await db.execute(text(f"SELECT points FROM data.user_scores WHERE user_id={good_user.id}"))
|
||||
print(f"Good Guy Verseny Pontjai (Elvárt: 10): {points.scalar()}")
|
||||
|
||||
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())
|
||||
Reference in New Issue
Block a user