from datetime import datetime from pydantic import BaseModel, model_validator # ---------- Profile ---------- class ProfileCreate(BaseModel): nickname: str country: str | None = None class ProfileUpdate(BaseModel): nickname: str | None = None country: str | None = None class ProfileOut(BaseModel): id: int nickname: str country: str | None created_at: datetime model_config = {"from_attributes": True} @model_validator(mode="after") def _resolve_image_urls(self) -> "PostcardOut": from app.storage import resolve_url self.image_front = resolve_url(self.image_front) or None self.image_back = resolve_url(self.image_back) or None return self # ---------- Postcard ---------- class PostcardCreate(BaseModel): card_number: str status: str recipient_name: str | None = None country_from: str | None = None country_to: str | None = None send_time: datetime | None = None arrival_time: datetime | None = None sender_name: str | None = None receive_time: datetime | None = None class PostcardUpdate(BaseModel): card_number: str | None = None status: str | None = None recipient_name: str | None = None country_from: str | None = None country_to: str | None = None send_time: datetime | None = None arrival_time: datetime | None = None sender_name: str | None = None receive_time: str | None = None class PostcardOut(BaseModel): id: int profile_id: int card_number: str status: str recipient_name: str | None country_from: str | None country_to: str | None send_time: datetime | None arrival_time: datetime | None sender_name: str | None receive_time: datetime | None image_front: str | None image_back: str | None created_at: datetime updated_at: datetime model_config = {"from_attributes": True} @model_validator(mode="after") def _resolve_image_urls(self) -> "PostcardOut": from app.storage import resolve_url self.image_front = resolve_url(self.image_front) or None self.image_back = resolve_url(self.image_back) or None return self