import uuid from datetime import datetime from typing import Optional from pydantic import ConfigDict from common.enums import DeliveryType from common.models.gmodel import Res_PageProtocol, Res_WebPacketProtocol, WebPacketProtocol class ItemProtocol(WebPacketProtocol): pass class Req_CreateItem(ItemProtocol): name: str = "" code: Optional[str] = None category: Optional[str] = None category_type: int = 1 image_url: Optional[str] = None model_name: Optional[str] = None spec: Optional[str] = None manufacturer: Optional[str] = None made_in: Optional[str] = None price: Optional[int] = None internet_lowest_price_yn: bool = False moq: Optional[str] = None lead_time: Optional[int] = None quantity_unit: Optional[str] = None delivery_type: Optional[int] = None vat_yn: Optional[bool] = None delivery_fee_yn: Optional[bool] = None class Req_UpdateItem(ItemProtocol): name: Optional[str] = None code: Optional[str] = None category: Optional[str] = None category_type: Optional[int] = None image_url: Optional[str] = None model_name: Optional[str] = None spec: Optional[str] = None manufacturer: Optional[str] = None made_in: Optional[str] = None price: Optional[int] = None internet_lowest_price_yn: Optional[bool] = None moq: Optional[str] = None lead_time: Optional[int] = None quantity_unit: Optional[str] = None delivery_type: Optional[int] = None vat_yn: Optional[bool] = None delivery_fee_yn: Optional[bool] = None class ItemData(WebPacketProtocol): model_config = ConfigDict(from_attributes=True) item_id: uuid.UUID company_id: uuid.UUID user_id: uuid.UUID name: str code: Optional[str] = None category: Optional[str] = None category_type: int = 1 image_url: Optional[str] = None model_name: Optional[str] = None spec: Optional[str] = None manufacturer: Optional[str] = None made_in: Optional[str] = None price: Optional[int] = None internet_lowest_price_yn: bool = False moq: Optional[str] = None lead_time: Optional[int] = None quantity_unit: Optional[str] = None delivery_type: Optional[DeliveryType] = None vat_yn: Optional[bool] = None delivery_fee_yn: Optional[bool] = None created_at: Optional[datetime] = None updated_at: Optional[datetime] = None class Res_Item(Res_WebPacketProtocol): item: Optional[ItemData] = None class Res_ItemList(Res_PageProtocol): items: list[ItemData] = [] class ItemCategory(WebPacketProtocol): name: str category_type: int = 1 class Res_ItemCategories(Res_WebPacketProtocol): categories: list[ItemCategory] = [] class Req_CheckCodes(ItemProtocol): codes: list[str] = [] class Res_CheckCodes(Res_WebPacketProtocol): existing: list[str] = [] # codes 중 이미 DB(같은 회사)에 존재하는 코드들 class Res_DeleteItem(Res_WebPacketProtocol): pass class Res_ItemImage(Res_WebPacketProtocol): image_url: Optional[str] = None filename: Optional[str] = None size: Optional[int] = None class Res_LowestPriceTrigger(Res_WebPacketProtocol): item_id: str = "" status: str = "" message: str = "" class Res_LowestPriceResult(Res_WebPacketProtocol): item_id: str = "" results: list = [] message: str = ""