import uuid from datetime import datetime from typing import Optional from pydantic import ConfigDict from common.models.gmodel import Res_PageProtocol, Res_WebPacketProtocol, WebPacketProtocol class SupplierProtocol(WebPacketProtocol): pass class Req_CreateSupplier(SupplierProtocol): name: str = "" code: Optional[str] = None manager_name: Optional[str] = None manager_email: Optional[str] = None manager_contact_number: Optional[str] = None total_revenue: Optional[int] = None # 총매출액(원) class Req_UpdateSupplier(SupplierProtocol): name: Optional[str] = None code: Optional[str] = None manager_name: Optional[str] = None manager_email: Optional[str] = None manager_contact_number: Optional[str] = None total_revenue: Optional[int] = None class SupplierData(WebPacketProtocol): model_config = ConfigDict(from_attributes=True) supplier_id: uuid.UUID company_id: uuid.UUID user_id: uuid.UUID creator_name: Optional[str] = None # 등록자(작성자) 이름. user_id→company.users.name 조인 name: str code: Optional[str] = None manager_name: Optional[str] = None manager_email: Optional[str] = None manager_contact_number: Optional[str] = None total_revenue: Optional[int] = None # 총매출액(원) account_login_id: Optional[str] = None # 채팅(협상) 계정 로그인 ID. None=미발급 account_status: Optional[int] = None # SupplierUserStatus. None=미발급 created_at: Optional[datetime] = None updated_at: Optional[datetime] = None class Res_Supplier(Res_WebPacketProtocol): supplier: Optional[SupplierData] = None class Res_SupplierList(Res_PageProtocol): suppliers: list[SupplierData] = [] class Req_CheckCodes(SupplierProtocol): codes: list[str] = [] class Res_CheckCodes(Res_WebPacketProtocol): existing: list[str] = [] # codes 중 이미 DB(같은 회사)에 존재하는 코드들 class Res_DeleteSupplier(Res_WebPacketProtocol): pass class SupplierAccountData(WebPacketProtocol): su_id: uuid.UUID login_id: str status: int # SupplierUserStatus created_at: Optional[datetime] = None class Res_SupplierAccount(Res_WebPacketProtocol): account: Optional[SupplierAccountData] = None # None=미발급 class Req_CreateSupplierAccount(SupplierProtocol): login_id: str = "" class Res_CreateSupplierAccount(Res_WebPacketProtocol): account: Optional[SupplierAccountData] = None initial_password: Optional[str] = None # 평문 — 이 응답에서만 1회 노출, 저장은 bcrypt 해시 class Req_ResetSupplierAccountPassword(SupplierProtocol): password: Optional[str] = None # 지정 시 그 값으로, 미지정 시 서버 자동생성 class Res_ResetSupplierAccountPassword(Res_WebPacketProtocol): new_password: Optional[str] = None # 평문 — 이 응답에서만 1회 노출 class Req_UpdateSupplierAccountStatus(SupplierProtocol): status: int = 1 # SupplierUserStatus