diff --git a/app/api/__init__.py b/app/api/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/app/api/v1/__init__.py b/app/api/v1/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/app/api/v1/location.py b/app/api/v1/location.py new file mode 100644 index 0000000..8405b02 --- /dev/null +++ b/app/api/v1/location.py @@ -0,0 +1,18 @@ +from fastapi import APIRouter, Depends +from sqlalchemy.orm import Session + +from app.core.database import get_db +from app.schemas.location import LocationRequest, LocationResponse +from app.services.location_service import register_location + +router = APIRouter() + + +@router.post("/location", response_model=LocationResponse) +def create_location(req: LocationRequest, db: Session = Depends(get_db)): + record = register_location(db, req) + return LocationResponse( + zongpai_no=record.zongpai_no, + location_code=record.location_code, + created_at=record.created_at.isoformat(), + ) diff --git a/app/main.py b/app/main.py index 7019b25..f50b871 100644 --- a/app/main.py +++ b/app/main.py @@ -1,7 +1,29 @@ -from fastapi import FastAPI +from fastapi import FastAPI, Request +from fastapi.responses import JSONResponse + +from app.api.v1.location import router as location_router app = FastAPI(title="CargoTrace API", version="0.1.0") +app.include_router(location_router, prefix="/CargoTrace") + + +@app.exception_handler(ValueError) +async def value_error_handler(request: Request, exc: ValueError): + error_code = str(exc) + status_map = { + "INVALID_ZONGPAI": 400, + "INVALID_LOCATION": 400, + } + status = status_map.get(error_code, 400) + return JSONResponse( + status_code=status, + content={ + "error_code": error_code, + "message": str(exc), + }, + ) + @app.get("/") async def root():