53 lines
1.4 KiB
Python
53 lines
1.4 KiB
Python
"""Pydantic schemas for rental requests."""
|
|
from pydantic import BaseModel, EmailStr, field_validator
|
|
from datetime import date
|
|
|
|
|
|
class RentalRequestItemCreate(BaseModel):
|
|
equipment_id: int
|
|
quantity: int = 1
|
|
|
|
@field_validator("quantity")
|
|
@classmethod
|
|
def quantity_positive(cls, v: int) -> int:
|
|
if v < 1:
|
|
raise ValueError("quantity must be >= 1")
|
|
return v
|
|
|
|
|
|
class RentalRequestCreate(BaseModel):
|
|
event_name: str
|
|
date_start: date
|
|
date_end: date
|
|
location: str | None = None
|
|
person_count: int | None = None
|
|
contact_name: str
|
|
contact_company: str | None = None
|
|
contact_email: EmailStr
|
|
contact_phone: str | None = None
|
|
contact_street: str | None = None
|
|
contact_postalcode: str | None = None
|
|
contact_city: str | None = None
|
|
message: str | None = None
|
|
items: list[RentalRequestItemCreate]
|
|
|
|
@field_validator("date_end")
|
|
@classmethod
|
|
def date_end_after_start(cls, v: date, values) -> date:
|
|
start = values.data.get("date_start")
|
|
if start and v < start:
|
|
raise ValueError("date_end must be >= date_start")
|
|
return v
|
|
|
|
@field_validator("items")
|
|
@classmethod
|
|
def items_not_empty(cls, v: list) -> list:
|
|
if len(v) == 0:
|
|
raise ValueError("items must not be empty")
|
|
return v
|
|
|
|
|
|
class RentalRequestResponse(BaseModel):
|
|
reference_number: str
|
|
status: str
|