# vendor.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 VendorCreate(BaseModel): vendor_code: str = Field(..., description="Unique vendor identifier") vendor_name: str = Field(..., description="Display name of the vendor ") description: Optional[str] = Field(None, description="Vendor 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 VendorUpdate(BaseModel): vendor_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 VendorResponse(BaseModel): model_config = ConfigDict(from_attributes=True) id: int vendor_code: str vendor_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 VendorListResponse(BaseModel): vendors: List[VendorResponse] total: int skip: int limit: int