# 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 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