import uuid from datetime import datetime from typing import Any, Optional from pydantic import ConfigDict from common.enums import CardStatus from common.models.gmodel import Res_PageProtocol, Res_WebPacketProtocol, WebPacketProtocol class CardProtocol(WebPacketProtocol): pass class Req_CreateCard(CardProtocol): is_wildcard: bool = False name: Optional[str] = None number: Optional[str] = None script: Optional[str] = None edit_script: Optional[Any] = None status: int = CardStatus.ACTIVE.value # 와일드카드 적용 여부(available 매핑). 일반카드는 무시. condition: Optional[str] = None # 와일드카드 전용 memo: Optional[str] = None # 와일드카드 전용 class Req_UpdateCard(CardProtocol): name: Optional[str] = None number: Optional[str] = None script: Optional[str] = None edit_script: Optional[Any] = None status: Optional[int] = None condition: Optional[str] = None memo: Optional[str] = None # 통합 카드 표현(nego_cards + wild_cards 공통). nego_card_id 는 출처 테이블의 PK 를 그대로 담는다. class CardData(WebPacketProtocol): model_config = ConfigDict(from_attributes=True) nego_card_id: uuid.UUID # 통합 식별자(일반=nego_card_id / 와일드=wild_card_id) user_id: Optional[uuid.UUID] = None is_wildcard: bool = False name: Optional[str] = None number: Optional[str] = None script: Optional[str] = None edit_script: Optional[Any] = None status: int = CardStatus.ACTIVE.value condition: Optional[str] = None memo: Optional[str] = None created_at: Optional[datetime] = None updated_at: Optional[datetime] = None class Res_Card(Res_WebPacketProtocol): card: Optional[CardData] = None class Res_CardList(Res_PageProtocol): cards: list[CardData] = [] class Res_DeleteCard(Res_WebPacketProtocol): pass