from fastapi import APIRouter, Depends, Query from common.enums import LocalContentStatus from common.models.gmodel import UserInfo from router.v1.validator.dependencies import RequireOwner, RemoveNoneResponse from services.local_content_service import LocalContentService from .protocol import ReqPublishLocalContent, ReqSyncFestivals, ReqUpdateLocalContent, ResLocalContentList, ResSyncFestivals, ResWeather router = APIRouter(prefix="/v1/admin/local-content", tags=["LocalContent"]) weather_router = APIRouter(prefix="/v1/local", tags=["LocalContent"]) @weather_router.get("/weather", response_model=ResWeather, summary="현재 날씨 조회 (cache-aside)") async def get_weather( region_code: str = Query(min_length=1, max_length=10), latitude: float = Query(ge=-90, le=90), longitude: float = Query(ge=-180, le=180), service: LocalContentService = Depends(), ): return RemoveNoneResponse(await service.get_weather(region_code, latitude, longitude)) @router.get("", response_model=ResLocalContentList) async def list_contents( status: LocalContentStatus | None = Query(None), region_code: str | None = Query(None), service: LocalContentService = Depends(), _user: UserInfo = Depends(RequireOwner), ): return RemoveNoneResponse(await service.list(status.value if status else None, region_code)) @router.post("/sync-festivals", response_model=ResSyncFestivals) async def sync_festivals(req: ReqSyncFestivals, service: LocalContentService = Depends(), _user=Depends(RequireOwner)): return RemoveNoneResponse(await service.sync_festivals(req)) @router.post("/publish", response_model=ResLocalContentList) async def publish(req: ReqPublishLocalContent, service: LocalContentService = Depends(), user=Depends(RequireOwner)): return RemoveNoneResponse(await service.publish(req.content_ids, user.user_id)) @router.patch("/{content_id}", response_model=ResLocalContentList) async def update_content(content_id: str, req: ReqUpdateLocalContent, service: LocalContentService = Depends(), _user=Depends(RequireOwner)): return RemoveNoneResponse(await service.update(content_id, req)) @router.post("/{content_id}/end", response_model=ResLocalContentList) async def end_content(content_id: str, service: LocalContentService = Depends(), _user=Depends(RequireOwner)): return RemoveNoneResponse(await service.end(content_id))