feat: Game-Service mit CRUD und Suche (Issue 1)

This commit is contained in:
hermes
2026-06-22 09:28:16 +00:00
parent 5537f49103
commit a6c0dd5d23
2 changed files with 148 additions and 0 deletions
+84
View File
@@ -0,0 +1,84 @@
"""Game-Service: Spiele-Datenbank und CRUD-Operationen."""
from __future__ import annotations
from pydantic import BaseModel, Field
class Spiel(BaseModel):
"""Ein Brettspiel-Datenmodell."""
id: int | None = None
name: str = Field(..., min_length=1, max_length=200)
min_spieler: int = Field(default=1, ge=1, le=20)
max_spieler: int = Field(default=10, ge=1, le=20)
dauer_min: int = Field(default=30, ge=1)
komplexitaet: float = Field(default=2.5, ge=1.0, le=5.0)
kategorie: str = Field(default="Familienspiel")
class GameService:
"""Verwaltet die Spiele-Datenbank (In-Memory für jetzt, später DB)."""
def __init__(self) -> None:
self._spiele: dict[int, Spiel] = {}
self._next_id = 1
def hinzufuegen(self, spiel: Spiel) -> Spiel:
"""Fügt ein Spiel hinzu und weist eine ID zu.
Args:
spiel: Das hinzuzufügende Spiel.
Returns:
Das zugewiesene Spiel mit ID.
"""
spiel.id = self._next_id
self._spiele[self._next_id] = spiel
self._next_id += 1
return spiel
def alle(self) -> list[Spiel]:
"""Gibt alle Spiele zurück.
Returns:
Liste aller Spiele.
"""
return list(self._spiele.values())
def suchen(self, name: str) -> list[Spiel]:
"""Sucht Spiele nach Name (case-insensitive Teilstring).
Args:
name: Der Suchbegriff.
Returns:
Liste der gefundenen Spiele.
"""
name_lower = name.lower()
return [spiel for spiel in self._spiele.values() if name_lower in spiel.name.lower()]
def nach_id(self, spiel_id: int) -> Spiel | None:
"""Holt ein Spiel anhand seiner ID.
Args:
spiel_id: Die ID des Spiels.
Returns:
Das gefundene Spiel oder None.
"""
return self._spiele.get(spiel_id)
def loesche(self, spiel_id: int) -> bool:
"""Löscht ein Spiel anhand seiner ID.
Args:
spiel_id: Die ID des zu löschenden Spiels.
Returns:
True wenn gelöscht, False wenn nicht existiert.
"""
if spiel_id in self._spiele:
del self._spiele[spiel_id]
return True
return False