114 lines
3.7 KiB
Python
114 lines
3.7 KiB
Python
from fastapi import APIRouter, Depends, Query
|
|
from sqlalchemy.orm import Session
|
|
|
|
from backend.app.api.deps import get_logistics_service
|
|
from backend.app.db import get_db_session
|
|
from backend.app.schemas.common import success_payload
|
|
from backend.app.schemas.logistics import CreateLogisticsTaskRequest
|
|
from backend.app.services.logistics_service import LogisticsService
|
|
|
|
router = APIRouter(tags=["logistics"])
|
|
|
|
|
|
@router.get("/api/logistics/tasks")
|
|
def list_logistics_tasks(
|
|
order_id: int | None = Query(default=None),
|
|
task_no: str | None = Query(default=None),
|
|
status: str | None = Query(default=None),
|
|
driver_id: int | None = Query(default=None),
|
|
factory_id: int | None = Query(default=None),
|
|
logistics_service: LogisticsService = Depends(get_logistics_service),
|
|
session: Session = Depends(get_db_session),
|
|
) -> dict:
|
|
return success_payload(
|
|
logistics_service.list_tasks(
|
|
session=session,
|
|
filters={
|
|
"order_id": order_id,
|
|
"task_no": task_no,
|
|
"status": status,
|
|
"driver_id": driver_id,
|
|
"factory_id": factory_id,
|
|
},
|
|
)
|
|
)
|
|
|
|
|
|
@router.post("/api/logistics/tasks")
|
|
def create_logistics_task(
|
|
payload: CreateLogisticsTaskRequest,
|
|
logistics_service: LogisticsService = Depends(get_logistics_service),
|
|
session: Session = Depends(get_db_session),
|
|
) -> dict:
|
|
return success_payload(logistics_service.create_task(payload.model_dump(), session))
|
|
|
|
|
|
@router.get("/api/logistics/tasks/{task_id}")
|
|
def get_logistics_task(
|
|
task_id: int,
|
|
logistics_service: LogisticsService = Depends(get_logistics_service),
|
|
session: Session = Depends(get_db_session),
|
|
) -> dict:
|
|
return success_payload(logistics_service.get_task(task_id, session))
|
|
|
|
|
|
@router.get("/api/driver/tasks")
|
|
def list_driver_tasks(
|
|
logistics_service: LogisticsService = Depends(get_logistics_service),
|
|
session: Session = Depends(get_db_session),
|
|
) -> dict:
|
|
return success_payload(logistics_service.list_driver_tasks(session))
|
|
|
|
|
|
@router.get("/api/driver/tasks/{task_id}")
|
|
def get_driver_task(
|
|
task_id: int,
|
|
logistics_service: LogisticsService = Depends(get_logistics_service),
|
|
session: Session = Depends(get_db_session),
|
|
) -> dict:
|
|
return success_payload(logistics_service.get_driver_task(task_id, session))
|
|
|
|
|
|
@router.post("/api/driver/tasks/{task_id}/accept")
|
|
def accept_driver_task(
|
|
task_id: int,
|
|
logistics_service: LogisticsService = Depends(get_logistics_service),
|
|
session: Session = Depends(get_db_session),
|
|
) -> dict:
|
|
return success_payload(logistics_service.accept_task(task_id, session))
|
|
|
|
|
|
@router.post("/api/driver/tasks/{task_id}/pickup")
|
|
def pickup_driver_task(
|
|
task_id: int,
|
|
logistics_service: LogisticsService = Depends(get_logistics_service),
|
|
session: Session = Depends(get_db_session),
|
|
) -> dict:
|
|
return success_payload(logistics_service.pickup_task(task_id, session))
|
|
|
|
|
|
@router.post("/api/driver/tasks/{task_id}/deliver")
|
|
def deliver_driver_task(
|
|
task_id: int,
|
|
logistics_service: LogisticsService = Depends(get_logistics_service),
|
|
session: Session = Depends(get_db_session),
|
|
) -> dict:
|
|
return success_payload(logistics_service.deliver_task(task_id, session))
|
|
|
|
|
|
@router.get("/api/logistics/{order_id}/trace")
|
|
def get_logistics_trace(
|
|
order_id: int,
|
|
logistics_service: LogisticsService = Depends(get_logistics_service),
|
|
) -> dict:
|
|
return success_payload(logistics_service.get_trace(order_id))
|
|
|
|
|
|
@router.post("/api/logistics/{order_id}/trace")
|
|
def create_logistics_trace(
|
|
order_id: int,
|
|
logistics_service: LogisticsService = Depends(get_logistics_service),
|
|
) -> dict:
|
|
return success_payload(logistics_service.create_trace(order_id))
|
|
|