87 lines
2.5 KiB
Python

from pydantic import BaseModel, Field, EmailStr, validator
from typing import Optional
from datetime import datetime
from uuid import UUID
class ContactBase(BaseModel):
name: str = Field(
...,
min_length=1,
description="Contact name",
error_messages={"min_length": "Name cannot be empty"}
)
email: EmailStr = Field(
...,
description="Contact email address",
error_messages={"type": "Invalid email format"}
)
message: str = Field(
...,
min_length=1,
description="Contact message",
error_messages={"min_length": "Message cannot be empty"}
)
@validator('name')
def validate_name(cls, v):
if not v.strip():
raise ValueError("Name cannot consist of only whitespace")
return v.strip()
@validator('message')
def validate_message(cls, v):
if not v.strip():
raise ValueError("Message cannot consist of only whitespace")
return v.strip()
class ContactCreate(ContactBase):
pass
class ContactUpdate(BaseModel):
name: Optional[str] = Field(
None,
min_length=1,
description="Contact name",
error_messages={"min_length": "Name cannot be empty"}
)
email: Optional[EmailStr] = Field(
None,
description="Contact email address",
error_messages={"type": "Invalid email format"}
)
message: Optional[str] = Field(
None,
min_length=1,
description="Contact message",
error_messages={"min_length": "Message cannot be empty"}
)
@validator('name')
def validate_name(cls, v):
if v is not None and not v.strip():
raise ValueError("Name cannot consist of only whitespace")
return v.strip() if v else v
@validator('message')
def validate_message(cls, v):
if v is not None and not v.strip():
raise ValueError("Message cannot consist of only whitespace")
return v.strip() if v else v
class ContactSchema(ContactBase):
id: UUID
created_at: datetime
updated_at: datetime
class Config:
orm_mode = True
schema_extra = {
"example": {
"id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"name": "John Doe",
"email": "john.doe@example.com",
"message": "Hello, I would like to get in touch.",
"created_at": "2023-01-01T12:00:00",
"updated_at": "2023-01-01T12:00:00"
}
}