feat: Game-Service mit CRUD und Suche (Issue 1)
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user