45 lines
1.2 KiB
Python
45 lines
1.2 KiB
Python
|
|
"""Pydantic schemas for DATEV export request and response bodies."""
|
||
|
|
|
||
|
|
import uuid
|
||
|
|
from datetime import date, datetime
|
||
|
|
from decimal import Decimal
|
||
|
|
from typing import Optional
|
||
|
|
|
||
|
|
from pydantic import BaseModel, ConfigDict, Field, model_validator
|
||
|
|
|
||
|
|
|
||
|
|
class DATEVExportCreate(BaseModel):
|
||
|
|
"""POST /api/v1/datev/export request body."""
|
||
|
|
|
||
|
|
start_date: date = Field(..., description="Start date of the export range")
|
||
|
|
end_date: date = Field(..., description="End date of the export range (inclusive)")
|
||
|
|
|
||
|
|
@model_validator(mode="after")
|
||
|
|
def validate_date_range(self) -> "DATEVExportCreate":
|
||
|
|
"""Ensure start_date is not after end_date."""
|
||
|
|
if self.start_date > self.end_date:
|
||
|
|
raise ValueError("start_date must not be after end_date")
|
||
|
|
return self
|
||
|
|
|
||
|
|
|
||
|
|
class DATEVExportResponse(BaseModel):
|
||
|
|
"""DATEV export response schema."""
|
||
|
|
|
||
|
|
model_config = ConfigDict(from_attributes=True)
|
||
|
|
|
||
|
|
id: uuid.UUID
|
||
|
|
start_date: date
|
||
|
|
end_date: date
|
||
|
|
file_path: Optional[str] = None
|
||
|
|
total_amount: Decimal
|
||
|
|
created_at: Optional[datetime] = None
|
||
|
|
|
||
|
|
|
||
|
|
class DATEVExportListResponse(BaseModel):
|
||
|
|
"""Paginated DATEV export list response."""
|
||
|
|
|
||
|
|
items: list[DATEVExportResponse]
|
||
|
|
total: int
|
||
|
|
page: int
|
||
|
|
page_size: int
|