Fix banner reorder API with proper request schema
- Create BannerReorderRequest Pydantic model for reorder endpoint - Update frontend to send car_ids wrapped in object - Fixes 422 Unprocessable Entity on reorder API 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -12,6 +12,7 @@ from ..schemas.hero_banner import (
|
|||||||
HeroBannerCreate, HeroBannerUpdate, HeroBannerResponse,
|
HeroBannerCreate, HeroBannerUpdate, HeroBannerResponse,
|
||||||
HeroBannerListResponse, HeroBannerLocalizedResponse,
|
HeroBannerListResponse, HeroBannerLocalizedResponse,
|
||||||
HeroBannerSettingsUpdate, HeroBannerSettingsResponse,
|
HeroBannerSettingsUpdate, HeroBannerSettingsResponse,
|
||||||
|
BannerReorderRequest,
|
||||||
)
|
)
|
||||||
from .auth import get_current_user
|
from .auth import get_current_user
|
||||||
from ..models import User
|
from ..models import User
|
||||||
@@ -325,7 +326,7 @@ def toggle_banner(
|
|||||||
|
|
||||||
@router.put("/admin/reorder")
|
@router.put("/admin/reorder")
|
||||||
def reorder_banners(
|
def reorder_banners(
|
||||||
car_ids: List[int] = Body(...),
|
request: BannerReorderRequest,
|
||||||
db: Session = Depends(get_db),
|
db: Session = Depends(get_db),
|
||||||
current_user: User = Depends(get_admin_user)
|
current_user: User = Depends(get_admin_user)
|
||||||
):
|
):
|
||||||
@@ -333,13 +334,13 @@ def reorder_banners(
|
|||||||
|
|
||||||
car_ids: 배너 차량 ID 목록 (원하는 순서대로)
|
car_ids: 배너 차량 ID 목록 (원하는 순서대로)
|
||||||
"""
|
"""
|
||||||
for order, car_id in enumerate(car_ids):
|
for order, car_id in enumerate(request.car_ids):
|
||||||
banner = db.query(HeroBanner).filter(HeroBanner.car_id == car_id).first()
|
banner = db.query(HeroBanner).filter(HeroBanner.car_id == car_id).first()
|
||||||
if banner:
|
if banner:
|
||||||
banner.display_order = order
|
banner.display_order = order
|
||||||
|
|
||||||
db.commit()
|
db.commit()
|
||||||
return {"message": "Banner order updated", "count": len(car_ids)}
|
return {"message": "Banner order updated", "count": len(request.car_ids)}
|
||||||
|
|
||||||
|
|
||||||
@router.get("/admin/banner-cars")
|
@router.get("/admin/banner-cars")
|
||||||
|
|||||||
@@ -103,3 +103,8 @@ class HeroBannerLocalizedResponse(BaseModel):
|
|||||||
|
|
||||||
class Config:
|
class Config:
|
||||||
from_attributes = True
|
from_attributes = True
|
||||||
|
|
||||||
|
|
||||||
|
# 배너 순서 재정렬 요청
|
||||||
|
class BannerReorderRequest(BaseModel):
|
||||||
|
car_ids: list[int]
|
||||||
|
|||||||
@@ -211,7 +211,7 @@ export const heroBannersApi = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
adminReorderBanners: async (carIds: number[]): Promise<{ message: string; count: number }> => {
|
adminReorderBanners: async (carIds: number[]): Promise<{ message: string; count: number }> => {
|
||||||
const { data } = await api.put('/hero-banners/admin/reorder', carIds);
|
const { data } = await api.put('/hero-banners/admin/reorder', { car_ids: carIds });
|
||||||
return data;
|
return data;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user