redis & listening works!!

This commit is contained in:
2024-05-10 15:11:25 +03:00
parent 2a696f96c1
commit 0ebfd11851
10 changed files with 105 additions and 14 deletions

View File

@ -2,8 +2,10 @@ from fastapi import Depends, HTTPException, status
from typing import Annotated
from sqlalchemy.orm import Session
from uuid import UUID
import redis
import asyncio
from ...dependencies import get_db
from ...dependencies import get_db, get_pubsub
from ...db import models
from ..auth import services as auth_services
@ -50,6 +52,9 @@ def get_detailed_queue(
participants=schemas.ParticipantInfo(
total=q.users.count(),
remaining=q.users.filter(models.QueueUser.passed == False).count(),
users_list=q.users.filter(models.QueueUser.passed == False).order_by(
models.QueueUser.position.asc()
),
),
)
raise HTTPException(
@ -82,3 +87,18 @@ def join_queue(
status_code=status.HTTP_404_NOT_FOUND,
detail="Not Found",
)
async def set_queue_listener(
queue_id: UUID,
db: Annotated[Session, Depends(get_db)],
ps: Annotated[redis.client.PubSub, Depends(get_pubsub)],
) -> schemas.QueueDetail:
await ps.subscribe(str(queue_id))
async for m in ps.listen():
print(m, flush=True)
if m.get("data", None) == b"updated":
print("UPDATED", flush=True)
break
new_queue = get_detailed_queue(queue_id=queue_id, db=db)
return new_queue