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 class Req_PreviewInviteEmail(CompanySettingsProtocol): # 저장 전 편집값으로 초청 메일을 렌더한다. settings.branding 서브키 중 email_* 만 쓴다. branding: dict = {} class Res_PreviewInviteEmail(Res_WebPacketProtocol): subject: str = "" html: str = ""