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 <noreply@anthropic.com>
This commit is contained in:
@@ -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")
|
||||
|
||||
@@ -47,20 +47,18 @@ export default function Home() {
|
||||
<FilmStripSlider banners={banners} settings={bannerSettings} />
|
||||
|
||||
<div className="container mx-auto px-4 py-4 sm:py-8">
|
||||
<div className="flex flex-col lg:flex-row items-center justify-center gap-4 lg:gap-8">
|
||||
{/* Request Vehicle Button */}
|
||||
{/* Request Vehicle Button - Centered */}
|
||||
<div className="flex justify-center mb-6">
|
||||
<Link
|
||||
href="/vehicle-request"
|
||||
className="inline-block bg-yellow-500 text-white font-semibold px-6 py-2.5 sm:px-8 sm:py-3 rounded-lg hover:bg-yellow-600 transition shadow-lg text-sm sm:text-base"
|
||||
>
|
||||
{t.requestVehicle}
|
||||
</Link>
|
||||
</div>
|
||||
|
||||
{/* Divider */}
|
||||
<div className="hidden lg:block w-px h-24 bg-white/30"></div>
|
||||
<div className="lg:hidden w-32 h-px bg-white/30"></div>
|
||||
|
||||
{/* Promo Preference */}
|
||||
{/* Promo Preference - Right aligned */}
|
||||
<div className="flex justify-center lg:justify-end">
|
||||
<PromoPreference />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user