FastApi-ISS/utils/seen_store.py
2025-08-11 22:19:23 +03:30

22 lines
658 B
Python

# utils/seen_store.py
import os, redis
from typing import Iterable
REDIS_URL = os.environ.get("REDIS_URL", "redis://localhost:6379/0")
r = redis.from_url(REDIS_URL, decode_responses=True)
def seen_key(username: str) -> str:
return f"ig:seen:{username}"
def mark_seen(username: str, ids: Iterable[str]) -> None:
if not ids: return
r.sadd(seen_key(username), *ids)
def filter_unseen(username: str, ids: Iterable[str]) -> list[str]:
# pipeline for speed
key = seen_key(username)
pipe = r.pipeline()
for i in ids:
pipe.sismember(key, i)
flags = pipe.execute()
return [i for i, seen in zip(ids, flags) if not seen]