52 lines
1.2 KiB
Python
52 lines
1.2 KiB
Python
|
|
from __future__ import annotations
|
||
|
|
|
||
|
|
from datetime import datetime
|
||
|
|
from typing import Any
|
||
|
|
|
||
|
|
from pydantic import BaseModel, ConfigDict, Field
|
||
|
|
|
||
|
|
|
||
|
|
class ExpenseCaseLinkRead(BaseModel):
|
||
|
|
model_config = ConfigDict(from_attributes=True)
|
||
|
|
|
||
|
|
id: str
|
||
|
|
resource_type: str
|
||
|
|
resource_id: str
|
||
|
|
relation_type: str
|
||
|
|
created_at: datetime
|
||
|
|
|
||
|
|
|
||
|
|
class BusinessEventRead(BaseModel):
|
||
|
|
model_config = ConfigDict(from_attributes=True)
|
||
|
|
|
||
|
|
id: str
|
||
|
|
event_type: str
|
||
|
|
event_version: int
|
||
|
|
idempotency_key: str
|
||
|
|
aggregate_type: str
|
||
|
|
aggregate_id: str
|
||
|
|
correlation_id: str
|
||
|
|
causation_id: str | None
|
||
|
|
actor_id: str
|
||
|
|
actor_type: str
|
||
|
|
payload_json: dict[str, Any] = Field(default_factory=dict)
|
||
|
|
delivery_status: str
|
||
|
|
occurred_at: datetime
|
||
|
|
published_at: datetime | None
|
||
|
|
|
||
|
|
|
||
|
|
class ExpenseCaseTimelineRead(BaseModel):
|
||
|
|
model_config = ConfigDict(from_attributes=True)
|
||
|
|
|
||
|
|
id: str
|
||
|
|
case_no: str
|
||
|
|
scene_code: str
|
||
|
|
title: str
|
||
|
|
owner_employee_id: str | None
|
||
|
|
current_stage: str
|
||
|
|
status: str
|
||
|
|
created_at: datetime
|
||
|
|
updated_at: datetime
|
||
|
|
links: list[ExpenseCaseLinkRead] = Field(default_factory=list)
|
||
|
|
events: list[BusinessEventRead] = Field(default_factory=list)
|