Fix StatusUpdate field annotation and is_online batch-call mismatch
- status_message: str | Field(...) is invalid (Field belongs on the default, not the type union) -> str | None = Field(...) - router called is_online(ids) with a list and treated the bool result as a collection (uid in online_ids would TypeError on the first real call) -> added is_online_batch() using MGET, one round trip, tested against a live Redis instance
This commit is contained in:
@@ -95,6 +95,16 @@ class PresenceStore:
|
||||
exists = await self.client.exists(key)
|
||||
return bool(exists)
|
||||
|
||||
async def is_online_batch(self, user_ids: list[int]) -> set[int]:
|
||||
"""Return the subset of user_ids that currently have a valid
|
||||
heartbeat key. Uses MGET (one round trip) rather than one EXISTS
|
||||
per user."""
|
||||
if not user_ids:
|
||||
return set()
|
||||
keys = [self._heartbeat_key(uid) for uid in user_ids]
|
||||
values = await self.client.mget(keys)
|
||||
return {uid for uid, v in zip(user_ids, values) if v is not None}
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# Presence lookup
|
||||
# ------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user