import logging from fastapi import APIRouter, Depends from fastapi.responses import JSONResponse from fastapi.encoders import jsonable_encoder from database import session from app.models.auto import Auto_Delivery, Tickets_Auto_Delivery from app.models.delivery import Delivery from app.models.auth import Auth_User from app.auth import get_current_user logger = logging.getLogger(__name__) router = APIRouter( prefix="/delivery", tags=["delivery"], responses={404: {"description": "Not found"}}, ) @router.get("/all/customers", status_code=200) def get_delivery_customers(current_user: Auth_User = Depends(get_current_user)): logger.info(f"GET /delivery/all/customers - User: {current_user.username}") automatics = ( session.query(Auto_Delivery) .filter(Auto_Delivery.auto_status.in_([1, 3])) .order_by(Auto_Delivery.estimated_gallons_left.asc()) .all() ) return JSONResponse(content=jsonable_encoder(automatics), status_code=200) @router.get("/driver/{driver_employee_id}", status_code=200) def get_delivery_for_specific_driver(driver_employee_id: int, current_user: Auth_User = Depends(get_current_user)): logger.info(f"GET /delivery/driver/{driver_employee_id} - User: {current_user.username}") automatics = ( session.query(Delivery) .filter(Delivery.driver_employee_id == driver_employee_id) .filter(Delivery.automatic == 1) .filter(Delivery.delivery_status == 0) .all() ) return JSONResponse(content=jsonable_encoder(automatics), status_code=200) @router.get("/delivery/{ticket_id}", status_code=200) def get_delivery_by_openticket(ticket_id, current_user: Auth_User = Depends(get_current_user)): logger.info(f"GET /delivery/delivery/{ticket_id} - User: {current_user.username}") get_delivery = ( session.query(Auto_Delivery) .filter(Auto_Delivery.id == ticket_id) .first() ) return JSONResponse(content=jsonable_encoder(get_delivery), status_code=200) @router.get("/finddelivery/{ticket_id}", status_code=200) def get_delivery_by_findticket(ticket_id, current_user: Auth_User = Depends(get_current_user)): logger.info(f"GET /delivery/finddelivery/{ticket_id} - User: {current_user.username}") get_delivery = ( session.query(Auto_Delivery) .filter(Auto_Delivery.open_ticket_id == ticket_id) .first() ) return JSONResponse(content=jsonable_encoder(get_delivery), status_code=200) @router.get("/autoticket/{delivery_id_order}", status_code=200) def get_auto_by_ticket(delivery_id_order, current_user: Auth_User = Depends(get_current_user)): logger.info(f"GET /delivery/autoticket/{delivery_id_order} - User: {current_user.username}") get_delivery = ( session.query(Tickets_Auto_Delivery) .filter(Tickets_Auto_Delivery.id == delivery_id_order) .first() ) return JSONResponse(content=jsonable_encoder(get_delivery), status_code=200) @router.get("/all/profile/{customer_id}", status_code=200) def get_autos_customers(customer_id, current_user: Auth_User = Depends(get_current_user)): logger.info(f"GET /delivery/all/profile/{customer_id} - User: {current_user.username}") get_delivery = ( session.query(Tickets_Auto_Delivery) .filter(Tickets_Auto_Delivery.customer_id == customer_id) .order_by(Tickets_Auto_Delivery.id.desc()) .limit(5) .all() ) return JSONResponse(content=jsonable_encoder(get_delivery), status_code=200) @router.get("/all/profile/profile/{customer_id}", status_code=200) def get_autos_customers_extended(customer_id, current_user: Auth_User = Depends(get_current_user)): logger.info(f"GET /delivery/all/profile/profile/{customer_id} - User: {current_user.username}") get_delivery = ( session.query(Tickets_Auto_Delivery) .filter(Tickets_Auto_Delivery.customer_id == customer_id) .order_by(Tickets_Auto_Delivery.id.desc()) .limit(25) .all() ) return JSONResponse(content=jsonable_encoder(get_delivery), status_code=200) @router.get("/auto/customer/{customer_id}", status_code=200) def get_auto_delivery_by_customer(customer_id, current_user: Auth_User = Depends(get_current_user)): logger.info(f"GET /delivery/auto/customer/{customer_id} - User: {current_user.username}") get_auto_delivery = ( session.query(Auto_Delivery) .filter(Auto_Delivery.customer_id == customer_id) .first() ) return JSONResponse(content=jsonable_encoder(get_auto_delivery), status_code=200) @router.put("/update_status/{auto_id}", status_code=200) def update_auto_status(auto_id: int, current_user: Auth_User = Depends(get_current_user)): logger.info(f"PUT /delivery/update_status/{auto_id} - User: {current_user.username}") update_status = ( session.query(Auto_Delivery) .filter(Auto_Delivery.id == auto_id) .first() ) if update_status: update_status.auto_status = 3 session.commit() return {"message": "Auto status updated to 3"} return {"error": "Auto delivery not found"}