from uuid import UUID from fastapi import APIRouter, Depends, Query from common.models.gmodel import PageParams, UserInfo from router.v1.validator.dependencies import RemoveNoneResponse, RequireOwner from services.company_user_service import CompanyUserService from .protocol import ( Req_CreateCompanyUser, Req_UpdateCompanyUser, Res_CompanyUser, Res_CompanyUserList, Res_DeleteCompanyUser, ) # 최고관리자(OWNER) 전용. 모든 엔드포인트가 RequireOwner 로 게이트되며 company_id 는 토큰값으로 스코프된다. router = APIRouter(prefix="/v1/company/user", tags=["CompanyUser"], responses={404: {"description": "Not found"}}) @router.get(path="/list", response_model=Res_CompanyUserList, summary="회사 유저 목록(최고관리자)") async def list_users( service: CompanyUserService = Depends(), owner: UserInfo = Depends(RequireOwner), search: str | None = Query(None, description="로그인ID/이름/이메일 검색"), pg: PageParams = Depends(), ): return RemoveNoneResponse(await service.list_users(owner.company_id, search, pg)) @router.post(path="/create", response_model=Res_CompanyUser, summary="회사 유저 생성(일반 권한 고정)") async def create_user( req: Req_CreateCompanyUser, service: CompanyUserService = Depends(), owner: UserInfo = Depends(RequireOwner) ): return RemoveNoneResponse(await service.create_user(owner.company_id, req)) @router.get(path="/{user_id}", response_model=Res_CompanyUser, summary="회사 유저 조회") async def get_user(user_id: UUID, service: CompanyUserService = Depends(), owner: UserInfo = Depends(RequireOwner)): return RemoveNoneResponse(await service.get_user(owner.company_id, str(user_id))) @router.patch(path="/update/{user_id}", response_model=Res_CompanyUser, summary="회사 유저 수정") async def update_user( user_id: UUID, req: Req_UpdateCompanyUser, service: CompanyUserService = Depends(), owner: UserInfo = Depends(RequireOwner) ): return RemoveNoneResponse(await service.update_user(owner.company_id, str(user_id), req)) @router.delete(path="/delete/{user_id}", response_model=Res_DeleteCompanyUser, summary="회사 유저 삭제") async def delete_user(user_id: UUID, service: CompanyUserService = Depends(), owner: UserInfo = Depends(RequireOwner)): return RemoveNoneResponse(await service.delete_user(owner.company_id, str(user_id)))