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
@@ -223,3 +223,73 @@ class RepairRepository:
|
||||
raise RepairPersistenceError(
|
||||
"Miner lifecycle transition did not update one record"
|
||||
)
|
||||
|
||||
def get_repair_detail(self, repair_id: UUID) -> dict | None:
|
||||
with self._connection_scope() as connection:
|
||||
with connection.cursor(row_factory=dict_row) as cur:
|
||||
cur.execute(
|
||||
"""
|
||||
SELECT
|
||||
repair.id AS repair_id,
|
||||
repair.miner_id,
|
||||
miner.asset_tag AS miner_asset_id,
|
||||
repair.status,
|
||||
repair.reason,
|
||||
repair.opened_at,
|
||||
opened_actor.id AS opened_by_user_id,
|
||||
opened_actor.display_name AS opened_by_display_name,
|
||||
repair.completed_at AS closed_at,
|
||||
closed_actor.id AS closed_by_user_id,
|
||||
closed_actor.display_name AS closed_by_display_name,
|
||||
miner.lifecycle_status AS miner_lifecycle,
|
||||
(
|
||||
SELECT max(event.sequence)
|
||||
FROM repair_events AS event
|
||||
WHERE event.repair_id = repair.id
|
||||
) AS latest_event_sequence
|
||||
FROM repairs AS repair
|
||||
JOIN miners AS miner ON miner.id = repair.miner_id
|
||||
JOIN users AS opened_actor
|
||||
ON opened_actor.id = repair.opened_by
|
||||
LEFT JOIN users AS closed_actor
|
||||
ON closed_actor.id = repair.completed_by
|
||||
WHERE repair.id = %s
|
||||
""",
|
||||
(repair_id,),
|
||||
)
|
||||
row = cur.fetchone()
|
||||
return dict(row) if row else None
|
||||
|
||||
def get_repair_events(
|
||||
self,
|
||||
repair_id: UUID,
|
||||
) -> list[dict] | None:
|
||||
with self._connection_scope() as connection:
|
||||
with connection.cursor(row_factory=dict_row) as cur:
|
||||
cur.execute(
|
||||
"""
|
||||
SELECT
|
||||
repair.id AS repair_id,
|
||||
event.id AS event_id,
|
||||
event.sequence,
|
||||
event.event_type,
|
||||
actor.id AS actor_user_id,
|
||||
actor.display_name AS actor_display_name,
|
||||
event.created_at AS occurred_at,
|
||||
event.payload
|
||||
FROM repairs AS repair
|
||||
LEFT JOIN (
|
||||
repair_events AS event
|
||||
JOIN users AS actor
|
||||
ON actor.id = event.created_by
|
||||
) ON event.repair_id = repair.id
|
||||
WHERE repair.id = %s
|
||||
ORDER BY event.sequence ASC
|
||||
""",
|
||||
(repair_id,),
|
||||
)
|
||||
rows = [dict(row) for row in cur.fetchall()]
|
||||
|
||||
if not rows:
|
||||
return None
|
||||
return [row for row in rows if row["event_id"] is not None]
|
||||
Reference in new issue
Block a user