Files
F-r-ldraledigplannerare/backend/app/models/workspace.py
T
2026-06-01 16:48:21 +02:00

69 lines
1.6 KiB
Python

"""Pydantic schemas for workspace and invitation endpoints."""
from datetime import datetime
from uuid import UUID
from pydantic import BaseModel, Field
from app.entities.workspace import Workspace
from app.entities.workspace_invitation import WorkspaceInvitation
class WorkspaceCreate(BaseModel):
name: str = Field(min_length=1, max_length=100)
class WorkspaceUpdate(BaseModel):
name: str | None = Field(default=None, min_length=1, max_length=100)
planning_goal: str | None = None
class WorkspaceResponse(BaseModel):
id: UUID
name: str
planning_goal: str
created_at: datetime | None
@classmethod
def from_entity(cls, ws: Workspace) -> "WorkspaceResponse":
return cls(id=ws.id, name=ws.name, planning_goal=ws.planning_goal, created_at=ws.created_at)
class PersonalDataResponse(BaseModel):
uuid: UUID
workspace_id: UUID
name: str
salary_type: str
employment_status: str
created_at: datetime | None
class PersonalDataCreate(BaseModel):
display_name: str = Field(min_length=1, max_length=100)
class InviteResponse(BaseModel):
token: str # raw one-time token — share out-of-band; not stored on backend
class RedeemInviteRequest(BaseModel):
token: str
class InvitationResponse(BaseModel):
id: UUID
workspace_id: UUID
status: str
expires_at: datetime
created_at: datetime
@classmethod
def from_entity(cls, inv: WorkspaceInvitation) -> "InvitationResponse":
return cls(
id=inv.id,
workspace_id=inv.workspace_id,
status=inv.status,
expires_at=inv.expires_at,
created_at=inv.created_at,
)