Initial commit: Robot ökoszisztéma v2.0 - Stabilizált jármű és szerviz robotok

This commit is contained in:
Kincses
2026-03-04 02:03:03 +01:00
commit 250f4f4b8f
7942 changed files with 449625 additions and 0 deletions

View File

@@ -0,0 +1,106 @@
# /opt/docker/dev/service_finder/backend/app/seed_data.py
import asyncio
import uuid
from datetime import datetime, timedelta, timezone
from sqlalchemy import text, select
from app.database import AsyncSessionLocal
from app.models.identity import User, Person, UserRole
from app.models.social import ServiceProvider, Vote, ModerationStatus, Competition
from app.services.social_service import SocialService
from app.core.security import get_password_hash
async def run_simulation():
async with AsyncSessionLocal() as db:
print("--- 1. TAKARÍTÁS (MB2.0 Séma-tisztítás) ---")
# Szigorú sorrend a kényszerek miatt (Cascade)
await db.execute(text("TRUNCATE identity.users, identity.persons, data.service_providers, data.votes, data.competitions RESTART IDENTITY CASCADE"))
await db.commit()
print("\n--- 2. SZEREPLŐK LÉTREHOZÁSA (Person + User) ---")
users_to_create = [
("admin@test.com", "Adminisztrátor", UserRole.superadmin),
("good@test.com", "Rendes Srác", UserRole.user),
("bad@test.com", "Spammer Aladár", UserRole.user),
("voter@test.com", "Szavazó Gép", UserRole.user)
]
created_users = {}
for email, name, role in users_to_create:
p = Person(id_uuid=uuid.uuid4(), first_name=name.split()[0], last_name=name.split()[1], is_active=True)
db.add(p)
await db.flush()
u = User(
email=email,
hashed_password=get_password_hash("test1234"),
person_id=p.id,
role=role,
is_active=True,
reputation_score=5 if "good" in email else (-8 if "bad" in email else 0)
)
db.add(u)
await db.flush()
created_users[email] = u
await db.commit()
print("\n--- 3. VERSENY INDÍTÁSA ---")
race = Competition(
name="Téli Szervizvadászat",
start_date=datetime.now(timezone.utc) - timedelta(days=1),
end_date=datetime.now(timezone.utc) + timedelta(days=30),
is_active=True
)
db.add(race)
await db.commit()
# Szereplők kiemelése a szimulációhoz
good_user = created_users["good@test.com"]
bad_user = created_users["bad@test.com"]
voter = created_users["voter@test.com"]
print("\n--- 4. SZCENÁRIÓ A: POZITÍV VALIDÁCIÓ ---")
# Rendes srác beküld egy szervizt
shop = ServiceProvider(
name="Profi Gumis",
address="Budapest, Váci út 10.",
added_by_user_id=good_user.id,
status=ModerationStatus.pending
)
db.add(shop)
await db.flush()
# Szavazatok szimulálása (SocialService használatával a pontszámítás miatt)
print(f"Szavazás a '{shop.name}'-re...")
# Szimulálunk 5 pozitív szavazatot különböző "virtuális" szavazóktól
for _ in range(5):
await SocialService.vote_for_provider(db, voter.id, shop.id, 1)
await db.refresh(good_user)
print(f"Jó felhasználó hírneve: {good_user.reputation_score}")
print("\n--- 5. SZCENÁRIÓ B: AUTO-BAN (SPAM SZŰRÉS) ---")
fake_shop = ServiceProvider(
name="KAMU SZERVIZ",
address="Nincs ilyen utca 0.",
added_by_user_id=bad_user.id,
status=ModerationStatus.pending
)
db.add(fake_shop)
await db.flush()
# Leszavazás (Kell -3 a bukáshoz)
print("Spam jelentése...")
await SocialService.vote_for_provider(db, voter.id, fake_shop.id, -1)
await SocialService.vote_for_provider(db, voter.id, fake_shop.id, -1)
await SocialService.vote_for_provider(db, voter.id, fake_shop.id, -1)
await db.refresh(bad_user)
print(f"Rossz felhasználó hírneve: {bad_user.reputation_score}")
print(f"Fiók státusza: {'KITILTVA' if not bad_user.is_active else 'AKTÍV'}")
if not bad_user.is_active:
print("✅ SIKER: A Sentinel automatikusan leállította a spammert!")
if __name__ == "__main__":
asyncio.run(run_simulation())