76b7f453c1
Events and people are now editable, not write-once: PATCH /events/{id} (type, structured date, place, notes) and PATCH /persons/{id} (vitals, privacy, and the primary name's given/surname). CLAUDE.md gains rule #8: every stored object must support full CRUD in API and UI — historical research is constant correction. Tests cover both updates.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Justin Paul <justin@jpaul.me>
53 lines
1.5 KiB
Python
53 lines
1.5 KiB
Python
import uuid
|
|
from datetime import date, datetime
|
|
|
|
from pydantic import BaseModel, ConfigDict
|
|
|
|
|
|
class EventCreate(BaseModel):
|
|
event_type: str
|
|
# Exactly one subject: a person or a partnership (relationship).
|
|
person_id: uuid.UUID | None = None
|
|
relationship_id: uuid.UUID | None = None
|
|
place_id: uuid.UUID | None = None
|
|
# Verbatim date string (e.g. "ABT 1850") and/or a normalized range.
|
|
date_value: str | None = None
|
|
date_start: date | None = None
|
|
date_end: date | None = None
|
|
date_precision: str | None = None
|
|
calendar: str = "gregorian"
|
|
detail: str | None = None
|
|
notes: str | None = None
|
|
|
|
|
|
class EventUpdate(BaseModel):
|
|
# All optional; only fields explicitly sent are changed (PATCH semantics).
|
|
event_type: str | None = None
|
|
place_id: uuid.UUID | None = None
|
|
date_value: str | None = None
|
|
date_start: date | None = None
|
|
date_end: date | None = None
|
|
date_precision: str | None = None
|
|
calendar: str | None = None
|
|
detail: str | None = None
|
|
notes: str | None = None
|
|
|
|
|
|
class EventRead(BaseModel):
|
|
model_config = ConfigDict(from_attributes=True)
|
|
|
|
id: uuid.UUID
|
|
tree_id: uuid.UUID
|
|
event_type: str
|
|
person_id: uuid.UUID | None
|
|
relationship_id: uuid.UUID | None
|
|
place_id: uuid.UUID | None
|
|
date_value: str | None
|
|
date_start: date | None
|
|
date_end: date | None
|
|
date_precision: str | None
|
|
calendar: str
|
|
detail: str | None
|
|
notes: str | None
|
|
created_at: datetime
|