feat: stage4 — SSE event streamer and ResultManager

This commit is contained in:
Yuzviak
2026-03-22 22:37:50 +02:00
parent f09061dd02
commit d5b6925a14
6 changed files with 232 additions and 25 deletions
+7 -10
View File
@@ -5,6 +5,7 @@ from __future__ import annotations
import asyncio
from datetime import datetime, timezone
from gps_denied.core.sse import SSEEventStreamer
from gps_denied.db.repository import FlightRepository
from gps_denied.schemas import GPSPoint
from gps_denied.schemas.flight import (
@@ -27,8 +28,9 @@ from gps_denied.schemas.flight import (
class FlightProcessor:
"""Orchestrates flight business logic."""
def __init__(self, repo: FlightRepository) -> None:
def __init__(self, repo: FlightRepository, sse: SSEEventStreamer) -> None:
self.repo = repo
self.sse = sse
async def create_flight(self, req: FlightCreateRequest) -> FlightResponse:
flight = await self.repo.insert_flight(
@@ -190,12 +192,7 @@ class FlightProcessor:
)
async def stream_events(self, flight_id: str, client_id: str):
"""Async generator for SSE dummy stream."""
from gps_denied.schemas.events import SSEEventType
import json
yield f"data: {json.dumps({'event': SSEEventType.FRAME_PROCESSED.value, 'data': {'msg': 'connected'}})}\n\n"
for i in range(5):
await asyncio.sleep(1)
yield f"data: {json.dumps({'event': SSEEventType.FRAME_PROCESSED.value, 'data': {'frame_id': i, 'gps': {'lat': 48, 'lon': 37}, 'confidence': 0.9, 'timestamp': datetime.now(timezone.utc).isoformat()}})}\n\n"
yield f"data: {json.dumps({'event': SSEEventType.FLIGHT_COMPLETED.value, 'data': {'frames_total': 5, 'frames_processed': 5}})}\n\n"
"""Async generator for SSE stream."""
# Yield from the real SSE streamer generator
async for event in self.sse.stream_generator(flight_id, client_id):
yield event