from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker from models import Event, EventMedia, EventType from dotenv import load_dotenv import os from datetime import datetime, timedelta import random # .env laden load_dotenv() DB_USER = os.getenv("DB_USER") DB_PASSWORD = os.getenv("DB_PASSWORD") DB_HOST = os.getenv("DB_HOST") DB_NAME = os.getenv("DB_NAME") db_conn_str = f"mysql+pymysql://{DB_USER}:{DB_PASSWORD}@{DB_HOST}/{DB_NAME}" engine = create_engine(db_conn_str) Session = sessionmaker(bind=engine) session = Session() # Beispiel-Events (client_uuid und created_by müssen existieren!) client_uuid = "36671351-7a90-44af-bfef-a192c541373b" created_by = 1 # ID eines existierenden Users # --- Alte Testdaten löschen --- # Zuerst alle EventMedia zu den Events dieses Clients löschen event_ids = [e.id for e in session.query( Event.id).filter_by(client_uuid=client_uuid).all()] if event_ids: session.query(EventMedia).filter(EventMedia.event_id.in_( event_ids)).delete(synchronize_session=False) # Dann alle Events dieses Clients löschen session.query(Event).filter_by(client_uuid=client_uuid).delete() session.commit() # --- Ende Löschungen --- now = datetime.now() def random_time_on_day(day_offset: int, duration_hours: int = 1): """Erzeugt eine zufällige Start- und Endzeit zwischen 8 und 16 Uhr für einen Tag.""" start_hour = random.randint(8, 15 - duration_hours + 1) start = (now + timedelta(days=day_offset)).replace(hour=start_hour, minute=0, second=0, microsecond=0) end = start + timedelta(hours=duration_hours) return start, end events = [ Event( client_uuid=client_uuid, title="Mathe Präsentation", description="Präsentation zum Thema Algebra.", start=random_time_on_day(1)[0], end=random_time_on_day(1)[1], event_type=EventType.presentation, created_by=created_by, updated_by=None, is_active=True ), Event( client_uuid=client_uuid, title="Schulwebsite Update", description="Neue Inhalte auf der Schulwebsite.", start=random_time_on_day(2)[0], end=random_time_on_day(2)[1], event_type=EventType.website, created_by=created_by, updated_by=None, is_active=True ), Event( client_uuid=client_uuid, title="Lehrvideo ansehen", description="Video zum Thema Photosynthese.", start=random_time_on_day(3)[0], end=random_time_on_day(3)[1], event_type=EventType.video, created_by=created_by, updated_by=None, is_active=True ), Event( client_uuid=client_uuid, title="Nachricht vom Lehrer", description="Wichtige Mitteilung zum Unterricht.", start=random_time_on_day(4)[0], end=random_time_on_day(4)[1], event_type=EventType.message, created_by=created_by, updated_by=None, is_active=True ), Event( client_uuid=client_uuid, title="Sonstiges Event", description="Allgemeines Event ohne Kategorie.", start=random_time_on_day(5)[0], end=random_time_on_day(5)[1], event_type=EventType.other, created_by=created_by, updated_by=None, is_active=True ), Event( client_uuid=client_uuid, title="WebUntis Termin", description="Termin aus WebUntis importiert.", start=random_time_on_day(6)[0], end=random_time_on_day(6)[1], event_type=EventType.webuntis, created_by=created_by, updated_by=None, is_active=True ), Event( client_uuid=client_uuid, title="Englisch Präsentation", description="Präsentation zu Shakespeare.", start=random_time_on_day(8)[0], end=random_time_on_day(8)[1], event_type=EventType.presentation, created_by=created_by, updated_by=None, is_active=True ), Event( client_uuid=client_uuid, title="Website Relaunch", description="Vorstellung der neuen Schulwebsite.", start=random_time_on_day(10)[0], end=random_time_on_day(10)[1], event_type=EventType.website, created_by=created_by, updated_by=None, is_active=True ), Event( client_uuid=client_uuid, title="Videoanalyse", description="Analyse eines Lehrvideos.", start=random_time_on_day(12)[0], end=random_time_on_day(12)[1], event_type=EventType.video, created_by=created_by, updated_by=None, is_active=True ), Event( client_uuid=client_uuid, title="WebUntis Info", description="Weitere Termine aus WebUntis.", start=random_time_on_day(14)[0], end=random_time_on_day(14)[1], event_type=EventType.webuntis, created_by=created_by, updated_by=None, is_active=True ), ] # Events anlegen und speichern for event in events: session.add(event) session.commit() # Jetzt haben alle Events eine ID # EventMedia mit den richtigen event_id-Werten anlegen event_media = [ EventMedia( event_id=events[0].id, media_type=EventType.presentation, url="https://example.com/praesentation-mathe.pdf", order=1 ), EventMedia( event_id=events[1].id, media_type=EventType.website, url="https://schule.example.com/update", order=1 ), EventMedia( event_id=events[2].id, media_type=EventType.video, url="https://example.com/photosynthese-video.mp4", order=1 ), EventMedia( event_id=events[3].id, media_type=EventType.message, url="https://example.com/lehrer-nachricht", order=1 ), EventMedia( event_id=events[4].id, media_type=EventType.other, url="https://example.com/sonstiges-event.pdf", order=1 ), EventMedia( event_id=events[5].id, media_type=EventType.webuntis, url="https://webuntis.example.com/termin", order=1 ), EventMedia( event_id=events[6].id, media_type=EventType.presentation, url="https://example.com/praesentation-englisch.pdf", order=1 ), EventMedia( event_id=events[7].id, media_type=EventType.website, url="https://schule.example.com/relaunch", order=1 ), EventMedia( event_id=events[8].id, media_type=EventType.video, url="https://example.com/videoanalyse.mp4", order=1 ), EventMedia( event_id=events[9].id, media_type=EventType.webuntis, url="https://webuntis.example.com/info", order=1 ), ] for media in event_media: session.add(media) session.commit() print("Test-Events und EventMedia wurden angelegt.")