Files
orion/models/schemas/vendor.py

64 lines
2.1 KiB
Python

# 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