42 lines
1.2 KiB
Python
42 lines
1.2 KiB
Python
"""API schemas (Pydantic) for PersonalData.
|
|
|
|
Schemas validate request bodies and shape responses. Separate from domain entities
|
|
so the wire format can evolve independently.
|
|
"""
|
|
|
|
from datetime import datetime
|
|
from uuid import UUID
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
from app.entities.personal_data import PersonalData
|
|
|
|
|
|
class PersonalDataUpdate(BaseModel):
|
|
"""Partial update — all fields optional."""
|
|
|
|
salary_type: str | None = Field(None, pattern="^(monthly|hourly)$")
|
|
employment_status: str | None = Field(None, pattern="^(employed|jobseeking|none)$")
|
|
|
|
|
|
class PersonalDataResponse(BaseModel):
|
|
uuid: UUID
|
|
workspace_id: UUID
|
|
name: str
|
|
salary_type: str
|
|
employment_status: str
|
|
created_at: datetime | None
|
|
deleted_at: datetime | None
|
|
|
|
@classmethod
|
|
def from_entity(cls, entity: PersonalData) -> "PersonalDataResponse":
|
|
return cls(
|
|
uuid=entity.uuid,
|
|
workspace_id=entity.workspace_id,
|
|
name=entity.name,
|
|
salary_type=entity.salary_type,
|
|
employment_status=entity.employment_status,
|
|
created_at=entity.created_at,
|
|
deleted_at=entity.deleted_at,
|
|
)
|