Skip to content

Commit 2a3210a

Browse files
committed
fix: ssse ordered requests
1 parent 646963e commit 2a3210a

2 files changed

Lines changed: 20 additions & 0 deletions

File tree

api/routes/articles.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,15 @@ def start_ebay_batch(
216216
detail=f"Article {aid} needs at least one HTTPS image for eBay.",
217217
)
218218

219+
# Enregistre les canaux SSE **avant** de retourner 202 : `BackgroundTasks`
220+
# ne démarre qu'après l'envoi de la réponse, et le front ouvre
221+
# `GET /articles/{id}/listing-progress` dès réception → sans ces registers
222+
# upfront, l'ouverture du SSE gagne la course et on renvoie l'erreur
223+
# « Aucune session de publication pour cet article. » alors que la publication
224+
# va en fait se dérouler juste après sans logs visibles côté UI.
225+
for aid in unique_ids:
226+
vinted_progress_hub.register(aid)
227+
219228
background_tasks.add_task(
220229
EbayBackgroundService.run_ebay_batch_sequential,
221230
user.id,

api/services/vinted_progress_session_service.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,18 @@ async def finish(cls, article_id: int, payload: dict[str, Any]) -> None:
8080

8181
@classmethod
8282
async def event_stream(cls, article_id: int) -> AsyncIterator[dict[str, Any]]:
83+
# Petit filet de sécurité : si une route a enregistré la session via
84+
# `BackgroundTasks` (donc après le retour HTTP) ou si le front ouvre le
85+
# SSE très vite après un POST 202, on laisse jusqu'à ~1,5 s pour que
86+
# `register()` soit appelé. Au-delà on considère qu'il n'y a vraiment
87+
# pas de publication en cours pour cet article.
8388
s = cls._sessions.get(article_id)
89+
if s is None:
90+
for _ in range(15):
91+
await asyncio.sleep(0.1)
92+
s = cls._sessions.get(article_id)
93+
if s is not None:
94+
break
8495
if s is None:
8596
yield {"type": "error", "message": "Aucune session de publication pour cet article."}
8697
return

0 commit comments

Comments
 (0)