78 lines
3.5 KiB
Python
78 lines
3.5 KiB
Python
from uuid import UUID
|
|
|
|
from fastapi import APIRouter, Depends, File, Query, UploadFile
|
|
|
|
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_ExcelUpload,
|
|
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.model_dump(exclude_unset=True))
|
|
)
|
|
|
|
|
|
@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.post(path="/upload-excel", response_model=Res_ExcelUpload, summary="협력사 엑셀 일괄 등록(스텁)")
|
|
async def upload_suppliers_excel(
|
|
service: SupplierService = Depends(),
|
|
user_info: UserInfo = Depends(IsValidAccessToken),
|
|
file: UploadFile = File(...),
|
|
):
|
|
return RemoveNoneResponse(
|
|
Res_ExcelUpload(received_filename=file.filename, status="not_implemented", message="엑셀 일괄 등록은 추후 구현")
|
|
)
|
|
|
|
|
|
@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.model_dump(exclude_unset=True))
|
|
)
|
|
|
|
|
|
@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)))
|