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)
|
@router.get("/{car_id}", response_model=CarResponse)
|
||||||
def get_car(car_id: int, admin: bool = Query(False), db: Session = Depends(get_db)):
|
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)}")
|
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 ====================
|
# ==================== Soldout APIs ====================
|
||||||
|
|
||||||
@router.post("/{car_id}/soldout")
|
@router.post("/{car_id}/soldout")
|
||||||
|
|||||||
@@ -47,20 +47,18 @@ export default function Home() {
|
|||||||
<FilmStripSlider banners={banners} settings={bannerSettings} />
|
<FilmStripSlider banners={banners} settings={bannerSettings} />
|
||||||
|
|
||||||
<div className="container mx-auto px-4 py-4 sm:py-8">
|
<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 - Centered */}
|
||||||
{/* Request Vehicle Button */}
|
<div className="flex justify-center mb-6">
|
||||||
<Link
|
<Link
|
||||||
href="/vehicle-request"
|
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"
|
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}
|
{t.requestVehicle}
|
||||||
</Link>
|
</Link>
|
||||||
|
</div>
|
||||||
|
|
||||||
{/* Divider */}
|
{/* Promo Preference - Right aligned */}
|
||||||
<div className="hidden lg:block w-px h-24 bg-white/30"></div>
|
<div className="flex justify-center lg:justify-end">
|
||||||
<div className="lg:hidden w-32 h-px bg-white/30"></div>
|
|
||||||
|
|
||||||
{/* Promo Preference */}
|
|
||||||
<PromoPreference />
|
<PromoPreference />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user