from typing import List from fastapi import APIRouter, HTTPException, Depends from sqlalchemy.orm import Session from app.infrastructure.database.dependencies import get_db from app.core.entities.delivery import DeliveryEntity from app.core.usecases.delivery_service import DeliveryService router = APIRouter() @router.get("/deliveries", response_model=List[DeliveryEntity]) def read_deliveries(db: Session = Depends(get_db)): service = DeliveryService(db) return service.get_all_deliveries() @router.get("/deliveries/{delivery_id}", response_model=DeliveryEntity) def read_delivery(delivery_id: int, db: Session = Depends(get_db)): service = DeliveryService(db) delivery = service.get_delivery_by_id(delivery_id) if delivery is None: raise HTTPException(status_code=404, detail="Delivery not found") return delivery @router.post("/deliveries", response_model=DeliveryEntity) def create_delivery(delivery: DeliveryEntity, db: Session = Depends(get_db)): service = DeliveryService(db) return service.create_delivery(delivery) @router.put("/deliveries/{delivery_id}", response_model=DeliveryEntity) def update_delivery(delivery_id: int, delivery: DeliveryEntity, db: Session = Depends(get_db)): service = DeliveryService(db) updated_delivery = service.update_delivery(delivery_id, delivery) if updated_delivery is None: raise HTTPException(status_code=404, detail="Delivery not found") return updated_delivery @router.delete("/deliveries/{delivery_id}", response_model=bool) def delete_delivery(delivery_id: int, db: Session = Depends(get_db)): service = DeliveryService(db) success = service.delete_delivery(delivery_id) if not success: raise HTTPException(status_code=404, detail="Delivery not found") return success