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.supplier_service import SupplierService from .protocol import ( Req_CheckCodes, Req_CreateSupplier, Req_UpdateSupplier, Res_CheckCodes, Res_DeleteSupplier, Res_Supplier, Res_SupplierList, ) # 라우터(컨트롤러). 인증(Depends(IsValidAccessToken))으로 UserInfo 를 받아 company_id 로 스코프. router = APIRouter(prefix="/v1/supplier", tags=["Supplier"], responses={404: {"description": "Not found"}}) @router.get(path="/list", response_model=Res_SupplierList, summary="협력사 목록") async def list_suppliers( service: SupplierService = Depends(), user_info: UserInfo = Depends(IsValidAccessToken), search: str | None = Query(None, description="협력사명/코드/담당자명 검색"), priority: str | None = Query(None, description="우선순위 필터(HIGH/MEDIUM/LOW)"), pg: PageParams = Depends(), ): return RemoveNoneResponse(await service.list_suppliers(user_info.company_id, search, priority, pg)) @router.post(path="/create", response_model=Res_Supplier, summary="협력사 등록") async def create_supplier( req: Req_CreateSupplier, service: SupplierService = Depends(), user_info: UserInfo = Depends(IsValidAccessToken) ): return RemoveNoneResponse( await service.create_supplier(user_info.company_id, user_info.user_id, req) ) @router.post(path="/check-codes", response_model=Res_CheckCodes, summary="코드 중복 사전검사(업로드 즉시)") async def check_supplier_codes( req: Req_CheckCodes, service: SupplierService = Depends(), user_info: UserInfo = Depends(IsValidAccessToken) ): return RemoveNoneResponse(await service.check_codes(user_info.company_id, req.codes)) @router.get(path="/{supplier_id}", response_model=Res_Supplier, summary="협력사 조회") async def get_supplier(supplier_id: UUID, service: SupplierService = Depends(), user_info: UserInfo = Depends(IsValidAccessToken)): return RemoveNoneResponse(await service.get_supplier(user_info.company_id, str(supplier_id))) @router.patch(path="/update/{supplier_id}", response_model=Res_Supplier, summary="협력사 수정") async def update_supplier( supplier_id: UUID, req: Req_UpdateSupplier, service: SupplierService = Depends(), user_info: UserInfo = Depends(IsValidAccessToken) ): return RemoveNoneResponse( await service.update_supplier(user_info.company_id, str(supplier_id), req) ) @router.delete(path="/delete/{supplier_id}", response_model=Res_DeleteSupplier, summary="협력사 삭제") async def delete_supplier(supplier_id: UUID, service: SupplierService = Depends(), user_info: UserInfo = Depends(IsValidAccessToken)): return RemoveNoneResponse(await service.delete_supplier(user_info.company_id, str(supplier_id)))