o2o-negosium-original/negodata/backend/router/v1/company/protocol.py

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