From 3bd1e496991307b3254597de018b398fce1ce335 Mon Sep 17 00:00:00 2001 From: AutonetSellCar Deploy Date: Mon, 12 Jan 2026 23:48:06 +0900 Subject: [PATCH] fix: Reorder API routes and update main page layout - Move /makers/ and /models/ routes before /{car_id} to fix route conflict - Center Request Vehicle button, move PromoPreference to the right Co-Authored-By: Claude Opus 4.5 --- backend/app/api/cars.py | 96 +++++++++++++++++++-------------------- frontend/src/app/page.tsx | 12 ++--- 2 files changed, 53 insertions(+), 55 deletions(-) diff --git a/backend/app/api/cars.py b/backend/app/api/cars.py index 8570fd7..8760eba 100644 --- a/backend/app/api/cars.py +++ b/backend/app/api/cars.py @@ -122,6 +122,54 @@ def get_cars( ) +# Makers - Must be defined before /{car_id} to avoid route conflict +@router.get("/makers/", response_model=List[CarMakerResponse]) +def get_makers(db: Session = Depends(get_db)): + """제조사 목록 조회""" + return db.query(CarMaker).all() + + +@router.post("/makers/", response_model=CarMakerResponse) +def create_maker(maker_data: CarMakerCreate, db: Session = Depends(get_db)): + """제조사 등록""" + existing = db.query(CarMaker).filter(CarMaker.code == maker_data.code).first() + if existing: + return existing + + maker = CarMaker(**maker_data.dict()) + db.add(maker) + db.commit() + db.refresh(maker) + return maker + + +# Models - Must be defined before /{car_id} to avoid route conflict +@router.get("/models/", response_model=List[CarModelResponse]) +def get_models(maker_id: Optional[int] = None, db: Session = Depends(get_db)): + """모델 목록 조회""" + query = db.query(CarModel) + if maker_id: + query = query.filter(CarModel.maker_id == maker_id) + return query.all() + + +@router.post("/models/", response_model=CarModelResponse) +def create_model(model_data: CarModelCreate, db: Session = Depends(get_db)): + """모델 등록""" + existing = db.query(CarModel).filter( + CarModel.code == model_data.code, + CarModel.maker_id == model_data.maker_id + ).first() + if existing: + return existing + + model = CarModel(**model_data.dict()) + db.add(model) + db.commit() + db.refresh(model) + return model + + @router.get("/{car_id}", response_model=CarResponse) def get_car(car_id: int, admin: bool = Query(False), db: Session = Depends(get_db)): """차량 상세 조회""" @@ -295,54 +343,6 @@ def delete_car(car_id: int, db: Session = Depends(get_db)): raise HTTPException(status_code=500, detail=f"Delete failed: {str(e)}") -# Makers -@router.get("/makers/", response_model=List[CarMakerResponse]) -def get_makers(db: Session = Depends(get_db)): - """제조사 목록 조회""" - return db.query(CarMaker).all() - - -@router.post("/makers/", response_model=CarMakerResponse) -def create_maker(maker_data: CarMakerCreate, db: Session = Depends(get_db)): - """제조사 등록""" - existing = db.query(CarMaker).filter(CarMaker.code == maker_data.code).first() - if existing: - return existing - - maker = CarMaker(**maker_data.dict()) - db.add(maker) - db.commit() - db.refresh(maker) - return maker - - -# Models -@router.get("/models/", response_model=List[CarModelResponse]) -def get_models(maker_id: Optional[int] = None, db: Session = Depends(get_db)): - """모델 목록 조회""" - query = db.query(CarModel) - if maker_id: - query = query.filter(CarModel.maker_id == maker_id) - return query.all() - - -@router.post("/models/", response_model=CarModelResponse) -def create_model(model_data: CarModelCreate, db: Session = Depends(get_db)): - """모델 등록""" - existing = db.query(CarModel).filter( - CarModel.code == model_data.code, - CarModel.maker_id == model_data.maker_id - ).first() - if existing: - return existing - - model = CarModel(**model_data.dict()) - db.add(model) - db.commit() - db.refresh(model) - return model - - # ==================== Soldout APIs ==================== @router.post("/{car_id}/soldout") diff --git a/frontend/src/app/page.tsx b/frontend/src/app/page.tsx index cef2fc1..2a77270 100644 --- a/frontend/src/app/page.tsx +++ b/frontend/src/app/page.tsx @@ -47,20 +47,18 @@ export default function Home() {
-
- {/* Request Vehicle Button */} + {/* Request Vehicle Button - Centered */} +
{t.requestVehicle} +
- {/* Divider */} -
-
- - {/* Promo Preference */} + {/* Promo Preference - Right aligned */} +