- UserRole 1=일반 2=최고관리자 3=개발자(내부 운영). 개발자 계정은 회원 목록·총계에서 제외해 고객사에 노출하지 않음 - 계정 생성 시 권한 선택(일반/최고관리자) 추가, 개발자는 앱에서 부여 불가(DB 시드 전용) - 사이드바 '개발자' 그룹 신설 — 회사 설정·디자인 시스템을 개발자에게만 노출 - /dev/design 디자인 시스템 페이지: 색 토큰·타이포·버튼·배지·입력·반경, 목록 화면 구조, 반응형 기준, URL 상태 규칙, 회사 커스터마이징 훅 - 공급사 재협상 요청(#15) 플로우 문서 — sessions.custom 기반(DDL 0)
54 lines
2.5 KiB
Python
54 lines
2.5 KiB
Python
from uuid import UUID
|
|
|
|
from fastapi import APIRouter, Depends, Query
|
|
|
|
from common.enums import UserRole
|
|
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,
|
|
)
|
|
|
|
# 최고관리자 이상 전용. 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(),
|
|
actor: UserInfo = Depends(RequireOwner),
|
|
search: str | None = Query(None, description="로그인ID/이름/이메일 검색"),
|
|
pg: PageParams = Depends(),
|
|
):
|
|
return RemoveNoneResponse(await service.list_users(actor.company_id, search, pg, hide_dev=actor.role != UserRole.DEVELOPER.value))
|
|
|
|
|
|
@router.post(path="/create", response_model=Res_CompanyUser, summary="회사 유저 생성(일반 권한 고정)")
|
|
async def create_user(
|
|
req: Req_CreateCompanyUser, service: CompanyUserService = Depends(), actor: UserInfo = Depends(RequireOwner)
|
|
):
|
|
return RemoveNoneResponse(await service.create_user(actor.company_id, req))
|
|
|
|
|
|
@router.get(path="/{user_id}", response_model=Res_CompanyUser, summary="회사 유저 조회")
|
|
async def get_user(user_id: UUID, service: CompanyUserService = Depends(), actor: UserInfo = Depends(RequireOwner)):
|
|
return RemoveNoneResponse(await service.get_user(actor.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(), actor: UserInfo = Depends(RequireOwner)
|
|
):
|
|
return RemoveNoneResponse(await service.update_user(actor.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(), actor: UserInfo = Depends(RequireOwner)):
|
|
return RemoveNoneResponse(await service.delete_user(actor.company_id, str(user_id)))
|