from datetime import datetime from pydantic import BaseModel from app.schemas.user import UserInfo class ShootingRequestCreate(BaseModel): title: str city: str description: str | None = None style: str | None = None shoot_date: datetime | None = None is_free: bool = False budget_min: float | None = None budget_max: float | None = None role_needed: str = "photographer" max_applicants: int = 1 contact_info: str | None = None spot_id: int | None = None class ShootingRequestUpdate(BaseModel): title: str | None = None city: str | None = None description: str | None = None style: str | None = None shoot_date: datetime | None = None is_free: bool | None = None budget_min: float | None = None budget_max: float | None = None role_needed: str | None = None max_applicants: int | None = None contact_info: str | None = None spot_id: int | None = None class ShootingRequestBrief(BaseModel): id: int title: str city: str style: str | None = None shoot_date: datetime | None = None is_free: bool = False budget_min: float | None = None budget_max: float | None = None role_needed: str = "photographer" status: str = "open" audit_status: str = "pending" creator: UserInfo | None = None application_count: int = 0 created_at: datetime | None = None model_config = {"from_attributes": True} class ShootingRequestDetail(ShootingRequestBrief): description: str | None = None max_applicants: int = 1 contact_info: str | None = None spot_id: int | None = None reject_reason: str | None = None has_applied: bool = False class ApplicationCreate(BaseModel): message: str | None = None class ApplicationOut(BaseModel): id: int request_id: int applicant: UserInfo | None = None message: str | None = None status: str = "pending" created_at: datetime | None = None model_config = {"from_attributes": True}