Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
53 lines
1.8 KiB
Python
53 lines
1.8 KiB
Python
import uuid
|
|
from decimal import Decimal
|
|
|
|
from sqlalchemy import select
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
|
from app.models.materialset import MaterialSet, MaterialSetMitglied
|
|
|
|
|
|
async def erstelle_set(db: AsyncSession, *, name: str, beschreibung: str | None, code: str | None) -> MaterialSet:
|
|
material_set = MaterialSet(name=name, beschreibung=beschreibung, code=code)
|
|
db.add(material_set)
|
|
await db.flush()
|
|
return material_set
|
|
|
|
|
|
async def liste_sets(db: AsyncSession) -> list[MaterialSet]:
|
|
result = await db.execute(select(MaterialSet))
|
|
return list(result.scalars().all())
|
|
|
|
|
|
async def aendere_set(db: AsyncSession, material_set: MaterialSet, **felder) -> MaterialSet:
|
|
for feld, wert in felder.items():
|
|
if wert is not None:
|
|
setattr(material_set, feld, wert)
|
|
await db.flush()
|
|
return material_set
|
|
|
|
|
|
async def loesche_set(db: AsyncSession, material_set: MaterialSet) -> None:
|
|
await db.delete(material_set)
|
|
|
|
|
|
async def mitglieder_fuer_set(db: AsyncSession, set_id: uuid.UUID) -> list[MaterialSetMitglied]:
|
|
result = await db.execute(select(MaterialSetMitglied).where(MaterialSetMitglied.set_id == set_id))
|
|
return list(result.scalars().all())
|
|
|
|
|
|
async def setze_mitglied(db: AsyncSession, set_id: uuid.UUID, material_id: int, menge: Decimal) -> None:
|
|
bestehend = await db.get(MaterialSetMitglied, {"set_id": set_id, "material_id": material_id})
|
|
if bestehend is not None:
|
|
bestehend.menge = menge
|
|
else:
|
|
db.add(MaterialSetMitglied(set_id=set_id, material_id=material_id, menge=menge))
|
|
await db.flush()
|
|
|
|
|
|
async def entferne_mitglied(db: AsyncSession, set_id: uuid.UUID, material_id: int) -> None:
|
|
bestehend = await db.get(MaterialSetMitglied, {"set_id": set_id, "material_id": material_id})
|
|
if bestehend is not None:
|
|
await db.delete(bestehend)
|
|
await db.flush()
|