Skip to content

Commit 50fd50e

Browse files
committed
removed extra conversion function from replay api
1 parent 78d5727 commit 50fd50e

File tree

2 files changed

+20
-22
lines changed

2 files changed

+20
-22
lines changed

backend/app/api/routes/replay.py

Lines changed: 5 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
from app.api.dependencies import admin_user
88
from app.domain.enums.replay import ReplayStatus
9-
from app.domain.replay import ReplayConfig, ReplaySessionState
9+
from app.domain.replay import ReplayConfig
1010
from app.schemas_pydantic.replay import (
1111
CleanupResponse,
1212
ReplayRequest,
@@ -16,22 +16,6 @@
1616
from app.schemas_pydantic.replay_models import ReplaySession
1717
from app.services.replay_service import ReplayService
1818

19-
20-
def _session_to_summary(state: ReplaySessionState) -> SessionSummary:
21-
"""Convert ReplaySessionState to SessionSummary."""
22-
state_data = asdict(state)
23-
state_data.update(state_data.pop("config")) # flatten config fields
24-
25-
duration = None
26-
throughput = None
27-
if state.started_at and state.completed_at:
28-
duration = (state.completed_at - state.started_at).total_seconds()
29-
if state.replayed_events > 0 and duration > 0:
30-
throughput = state.replayed_events / duration
31-
32-
return SessionSummary(**state_data, duration_seconds=duration, throughput_events_per_second=throughput)
33-
34-
3519
router = APIRouter(prefix="/replay", tags=["Event Replay"], route_class=DishkaRoute, dependencies=[Depends(admin_user)])
3620

3721

@@ -80,8 +64,10 @@ async def list_replay_sessions(
8064
status: ReplayStatus | None = Query(None),
8165
limit: int = Query(100, ge=1, le=1000),
8266
) -> list[SessionSummary]:
83-
states = service.list_sessions(status=status, limit=limit)
84-
return [_session_to_summary(s) for s in states]
67+
return [
68+
SessionSummary.model_validate({**asdict(s), **asdict(s)["config"]})
69+
for s in service.list_sessions(status=status, limit=limit)
70+
]
8571

8672

8773
@router.get("/sessions/{session_id}", response_model=ReplaySession)

backend/app/schemas_pydantic/replay.py

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from datetime import datetime
22
from typing import Dict
33

4-
from pydantic import BaseModel, ConfigDict, Field
4+
from pydantic import BaseModel, ConfigDict, Field, computed_field
55

66
from app.domain.enums.events import EventType
77
from app.domain.enums.replay import ReplayStatus, ReplayTarget, ReplayType
@@ -51,8 +51,20 @@ class SessionSummary(BaseModel):
5151
created_at: datetime
5252
started_at: datetime | None
5353
completed_at: datetime | None
54-
duration_seconds: float | None = None
55-
throughput_events_per_second: float | None = None
54+
55+
@computed_field # type: ignore[prop-decorator]
56+
@property
57+
def duration_seconds(self) -> float | None:
58+
if self.started_at and self.completed_at:
59+
return (self.completed_at - self.started_at).total_seconds()
60+
return None
61+
62+
@computed_field # type: ignore[prop-decorator]
63+
@property
64+
def throughput_events_per_second(self) -> float | None:
65+
if self.duration_seconds and self.duration_seconds > 0 and self.replayed_events > 0:
66+
return self.replayed_events / self.duration_seconds
67+
return None
5668

5769

5870
class CleanupResponse(BaseModel):

0 commit comments

Comments
 (0)