87 lines
2.5 KiB
Python
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"
|
|
}
|
|
} |