Merge remote-tracking branch 'origin/20-create-a-controller-layer-on-backend-side' into 20-create-a-controller-layer-on-backend-side

This commit is contained in:
ribardej
2025-10-13 13:57:04 +02:00

View File

@@ -44,7 +44,10 @@ async def create_transaction(
) )
categories = list(res.scalars()) categories = list(res.scalars())
if len(categories) != len(set(payload.category_ids)): if len(categories) != len(set(payload.category_ids)):
raise HTTPException(status_code=400, detail="One or more categories not found") raise HTTPException(
status_code=400,
detail="Duplicate category IDs provided or one or more categories not found"
)
tx.categories = categories tx.categories = categories
session.add(tx) session.add(tx)
@@ -113,13 +116,16 @@ async def update_transaction(
# Preload categories to avoid async lazy-load during assignment # Preload categories to avoid async lazy-load during assignment
await session.refresh(tx, attribute_names=["categories"]) await session.refresh(tx, attribute_names=["categories"])
if payload.category_ids: if payload.category_ids:
# Check for duplicate category IDs in the payload
if len(payload.category_ids) != len(set(payload.category_ids)):
raise HTTPException(status_code=400, detail="Duplicate category IDs in payload")
res = await session.execute( res = await session.execute(
select(Category).where( select(Category).where(
Category.user_id == user.id, Category.id.in_(payload.category_ids) Category.user_id == user.id, Category.id.in_(payload.category_ids)
) )
) )
categories = list(res.scalars()) categories = list(res.scalars())
if len(categories) != len(set(payload.category_ids)): if len(categories) != len(payload.category_ids):
raise HTTPException(status_code=400, detail="One or more categories not found") raise HTTPException(status_code=400, detail="One or more categories not found")
tx.categories = categories tx.categories = categories
else: else: