from uuid import UUID from fastapi import APIRouter, Depends, Query from common.models.gmodel import PageParams, UserInfo from router.v1.validator.dependencies import IsValidAccessToken, RemoveNoneResponse from services.card_service import CardService from .protocol import ( Req_CreateCard, Req_UpdateCard, Res_Card, Res_CardList, Res_DeleteCard, ) router = APIRouter(prefix="/v1/card", tags=["Card"], responses={404: {"description": "Not found"}}) @router.get(path="/list", response_model=Res_CardList, summary="협상카드 목록") async def list_cards( service: CardService = Depends(), user_info: UserInfo = Depends(IsValidAccessToken), search: str | None = Query(None, description="카드명/카드번호/스크립트 검색"), is_wildcard: bool | None = Query(None, description="탭 필터: 미지정=전체 / false=협상카드 / true=와일드카드"), pg: PageParams = Depends(), ): return RemoveNoneResponse(await service.list_cards(user_info.company_id, search, is_wildcard, pg)) @router.post(path="/create", response_model=Res_Card, summary="협상카드 등록") async def create_card(req: Req_CreateCard, service: CardService = Depends(), user_info: UserInfo = Depends(IsValidAccessToken)): return RemoveNoneResponse( await service.create_card(user_info.user_id, user_info.company_id, req) ) @router.get(path="/{card_id}", response_model=Res_Card, summary="협상카드 조회") async def get_card(card_id: UUID, service: CardService = Depends(), user_info: UserInfo = Depends(IsValidAccessToken)): return RemoveNoneResponse(await service.get_card(user_info.company_id, str(card_id))) @router.patch(path="/update/{card_id}", response_model=Res_Card, summary="협상카드 수정") async def update_card( card_id: UUID, req: Req_UpdateCard, service: CardService = Depends(), user_info: UserInfo = Depends(IsValidAccessToken) ): return RemoveNoneResponse( await service.update_card(user_info.user_id, user_info.company_id, user_info.role, str(card_id), req) ) @router.delete(path="/delete/{card_id}", response_model=Res_DeleteCard, summary="협상카드 삭제") async def delete_card(card_id: UUID, service: CardService = Depends(), user_info: UserInfo = Depends(IsValidAccessToken)): return RemoveNoneResponse( await service.delete_card(user_info.user_id, user_info.company_id, user_info.role, str(card_id)) )