# shop.py - Keep basic format validation, remove business logic import re from datetime import datetime from typing import List, Optional from pydantic import BaseModel, ConfigDict, Field, field_validator from models.schemas.product import ProductResponse class ShopCreate(BaseModel): shop_code: str = Field(..., description="Unique shop identifier") shop_name: str = Field(..., description="Display name of the shop") description: Optional[str] = Field(None, description="Shop description") contact_email: Optional[str] = None contact_phone: Optional[str] = None website: Optional[str] = None business_address: Optional[str] = None tax_number: Optional[str] = None # Removed: min_length, max_length constraints - let service handle @field_validator("contact_email") @classmethod def validate_contact_email(cls, v): # Keep basic format validation for data integrity if v and ("@" not in v or "." not in v): raise ValueError("Invalid email format") return v.lower() if v else v class ShopUpdate(BaseModel): shop_name: Optional[str] = None description: Optional[str] = None contact_email: Optional[str] = None contact_phone: Optional[str] = None website: Optional[str] = None business_address: Optional[str] = None tax_number: Optional[str] = None @field_validator("contact_email") @classmethod def validate_contact_email(cls, v): if v and ("@" not in v or "." not in v): raise ValueError("Invalid email format") return v.lower() if v else v class ShopResponse(BaseModel): model_config = ConfigDict(from_attributes=True) id: int shop_code: str shop_name: str description: Optional[str] owner_id: int contact_email: Optional[str] contact_phone: Optional[str] website: Optional[str] business_address: Optional[str] tax_number: Optional[str] is_active: bool is_verified: bool created_at: datetime updated_at: datetime class ShopListResponse(BaseModel): shops: List[ShopResponse] total: int skip: int limit: int class ShopProductCreate(BaseModel): product_id: str = Field(..., description="Product ID to add to shop") shop_product_id: Optional[str] = None shop_price: Optional[float] = None # Removed: ge=0 constraint shop_sale_price: Optional[float] = None # Removed: ge=0 constraint shop_currency: Optional[str] = None shop_availability: Optional[str] = None shop_condition: Optional[str] = None is_featured: bool = Field(False, description="Featured product flag") min_quantity: int = Field(1, description="Minimum order quantity") max_quantity: Optional[int] = None # Removed: ge=1 constraint # Service will validate price ranges and quantity logic class ShopProductResponse(BaseModel): model_config = ConfigDict(from_attributes=True) id: int shop_id: int product: ProductResponse shop_product_id: Optional[str] shop_price: Optional[float] shop_sale_price: Optional[float] shop_currency: Optional[str] shop_availability: Optional[str] shop_condition: Optional[str] is_featured: bool is_active: bool min_quantity: int max_quantity: Optional[int] created_at: datetime updated_at: datetime