- UserRole 1=일반 2=최고관리자 3=개발자(내부 운영). 개발자 계정은 회원 목록·총계에서 제외해 고객사에 노출하지 않음 - 계정 생성 시 권한 선택(일반/최고관리자) 추가, 개발자는 앱에서 부여 불가(DB 시드 전용) - 사이드바 '개발자' 그룹 신설 — 회사 설정·디자인 시스템을 개발자에게만 노출 - /dev/design 디자인 시스템 페이지: 색 토큰·타이포·버튼·배지·입력·반경, 목록 화면 구조, 반응형 기준, URL 상태 규칙, 회사 커스터마이징 훅 - 공급사 재협상 요청(#15) 플로우 문서 — sessions.custom 기반(DDL 0)
73 lines
2.0 KiB
Python
73 lines
2.0 KiB
Python
import uuid
|
|
from datetime import datetime
|
|
from typing import Optional
|
|
|
|
from pydantic import ConfigDict
|
|
|
|
from common.enums import UserRole, UserStatus
|
|
from common.models.gmodel import Res_PageProtocol, Res_WebPacketProtocol, WebPacketProtocol
|
|
|
|
|
|
# 최고관리자가 자기 회사 유저를 관리하는 도메인. company_id 는 토큰값으로 강제된다.
|
|
class CompanyUserProtocol(WebPacketProtocol):
|
|
pass
|
|
|
|
|
|
class Req_CreateCompanyUser(CompanyUserProtocol):
|
|
# role 은 일반(1)·최고관리자(2)만 허용 — 개발자(3)는 앱에서 만들 수 없다(DB 시드로만).
|
|
id: str = ""
|
|
password: str = ""
|
|
name: str = ""
|
|
email: str = ""
|
|
contact_number: str = ""
|
|
role: int = 1
|
|
|
|
|
|
class Req_UpdateCompanyUser(CompanyUserProtocol):
|
|
name: Optional[str] = None
|
|
email: Optional[str] = None
|
|
contact_number: Optional[str] = None
|
|
status: Optional[UserStatus] = None # 활성/비활성 전환
|
|
password: Optional[str] = None # 비밀번호 초기화(옵션)
|
|
|
|
|
|
class CompanyUserData(WebPacketProtocol):
|
|
model_config = ConfigDict(from_attributes=True)
|
|
|
|
user_id: uuid.UUID
|
|
company_id: uuid.UUID
|
|
id: str
|
|
name: Optional[str] = None
|
|
email: Optional[str] = None
|
|
contact_number: Optional[str] = None
|
|
status: UserStatus
|
|
role: UserRole
|
|
last_accessed_at: Optional[datetime] = None
|
|
created_at: Optional[datetime] = None
|
|
updated_at: Optional[datetime] = None
|
|
|
|
|
|
class Res_CompanyUser(Res_WebPacketProtocol):
|
|
user: Optional[CompanyUserData] = None
|
|
|
|
|
|
class Res_CompanyUserList(Res_PageProtocol):
|
|
users: list[CompanyUserData] = []
|
|
|
|
|
|
class Res_DeleteCompanyUser(Res_WebPacketProtocol):
|
|
pass
|
|
|
|
|
|
class CompanySettingsProtocol(WebPacketProtocol):
|
|
pass
|
|
|
|
|
|
class Req_UpdateCompanySettings(CompanySettingsProtocol):
|
|
# settings 전체 치환. 서브키: branding/labels/features/item_fields/supplier_fields/session_fields
|
|
settings: dict = {}
|
|
|
|
|
|
class Res_CompanySettings(Res_WebPacketProtocol):
|
|
settings: Optional[dict] = None
|