Added full CRUD operations for vendors

This commit is contained in:
Donkie
2023-04-02 14:27:39 +02:00
parent 43dd74c223
commit 7fc6b7232c
2 changed files with 119 additions and 1 deletions

View File

@@ -1,14 +1,52 @@
"""Helper functions for interacting with vendor database objects."""
from typing import Optional
from sqlalchemy.ext.asyncio import AsyncSession
from spoolson.database import models
from spoolson.exceptions import ItemNotFoundError
async def create(
*,
db: AsyncSession,
name: Optional[str] = None,
comment: Optional[str] = None,
) -> models.Vendor:
"""Add a new vendor to the database."""
db_item = models.Vendor(
name=name,
comment=comment,
)
db.add(db_item)
await db.flush()
return db_item
async def get_by_id(db: AsyncSession, vendor_id: int) -> models.Vendor:
"""Get a vendor object from the database by the unique ID."""
vendor = await db.get(models.Vendor, vendor_id)
if vendor is None:
raise ItemNotFoundError(f"No vendor with ID {vendor_id} found.")
return vendor
async def update(
*,
db: AsyncSession,
vendor_id: int,
data: dict,
) -> models.Vendor:
"""Update the fields of a vendor object."""
vendor = await get_by_id(db, vendor_id)
for k, v in data.items():
setattr(vendor, k, v)
await db.flush()
return vendor
async def delete(db: AsyncSession, vendor_id: int) -> None:
"""Delete a vendor object."""
vendor = await get_by_id(db, vendor_id)
await db.delete(vendor)