feat: add repair timeline read APIs
This commit is contained in:
1 parent
f6a2512e23
commit
36a0caecd8
16 files changed
+1562
-9
No files matched your search
@@ -1,10 +1,10 @@
|
||||
"""Typed contracts for the Repairs domain."""
|
||||
|
||||
from datetime import datetime
|
||||
from typing import Literal
|
||||
from typing import Any, Literal
|
||||
from uuid import UUID
|
||||
|
||||
from pydantic import BaseModel, ConfigDict, Field
|
||||
from pydantic import AwareDatetime, BaseModel, ConfigDict, Field
|
||||
|
||||
|
||||
RepairReason = Literal[
|
||||
@@ -30,6 +30,7 @@ RepairStatus = Literal[
|
||||
]
|
||||
RepairEventType = Literal["REPAIR_STARTED", "INITIAL_NOTE"]
|
||||
RepairEligibleLifecycle = Literal["active", "spare"]
|
||||
RepairMinerLifecycle = Literal["active", "spare", "retired", "in_repair"]
|
||||
|
||||
|
||||
class BeginRepairRequest(BaseModel):
|
||||
@@ -63,3 +64,48 @@ class BeginRepairResponse(BaseModel):
|
||||
data: BeginRepairResult
|
||||
meta: dict[str, object] = Field(default_factory=dict)
|
||||
error: None = None
|
||||
|
||||
|
||||
class RepairActor(BaseModel):
|
||||
user_id: UUID
|
||||
display_name: str
|
||||
|
||||
|
||||
class RepairDetail(BaseModel):
|
||||
repair_id: UUID
|
||||
miner_id: UUID
|
||||
miner_asset_id: str | None = None
|
||||
status: RepairStatus
|
||||
reason: RepairReason
|
||||
opened_at: AwareDatetime
|
||||
opened_by: RepairActor
|
||||
closed_at: AwareDatetime | None = None
|
||||
closed_by: RepairActor | None = None
|
||||
miner_lifecycle: RepairMinerLifecycle
|
||||
latest_event_sequence: int | None = Field(default=None, ge=1)
|
||||
|
||||
|
||||
class RepairTimelineEvent(BaseModel):
|
||||
event_id: UUID
|
||||
sequence: int = Field(ge=1)
|
||||
event_type: RepairEventType
|
||||
actor: RepairActor
|
||||
occurred_at: AwareDatetime
|
||||
payload: dict[str, Any]
|
||||
|
||||
|
||||
class RepairTimeline(BaseModel):
|
||||
repair_id: UUID
|
||||
events: list[RepairTimelineEvent] = Field(default_factory=list)
|
||||
|
||||
|
||||
class RepairDetailResponse(BaseModel):
|
||||
data: RepairDetail
|
||||
meta: dict[str, object] = Field(default_factory=dict)
|
||||
error: None = None
|
||||
|
||||
|
||||
class RepairTimelineResponse(BaseModel):
|
||||
data: RepairTimeline
|
||||
meta: dict[str, object] = Field(default_factory=dict)
|
||||
error: None = None
|
||||
Reference in new issue
Block a user