fix: clear unread notification cache after inserting new notifications in comments, follows, messages, votes, and mentions
This commit is contained in:
@@ -4,6 +4,7 @@ from fastapi import APIRouter, Request
|
||||
from fastapi.responses import RedirectResponse
|
||||
from devplacepy.database import get_table, resolve_by_slug
|
||||
from devplacepy.attachments import link_attachments, delete_target_attachments
|
||||
from devplacepy.templating import clear_unread_cache
|
||||
from devplacepy.utils import generate_uid, require_user, create_mention_notifications
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
@@ -91,6 +92,7 @@ async def create_comment(request: Request):
|
||||
"read": False,
|
||||
"created_at": datetime.now(timezone.utc).isoformat(),
|
||||
})
|
||||
clear_unread_cache(parent["user_uid"])
|
||||
else:
|
||||
posts = get_table("posts")
|
||||
post = posts.find_one(uid=target_uid)
|
||||
@@ -107,6 +109,7 @@ async def create_comment(request: Request):
|
||||
"read": False,
|
||||
"created_at": datetime.now(timezone.utc).isoformat(),
|
||||
})
|
||||
clear_unread_cache(post["user_uid"])
|
||||
|
||||
create_mention_notifications(content, user["uid"], redirect_url)
|
||||
logger.info(f"Comment by {user['username']} on {target_type} {target_uid}")
|
||||
|
||||
@@ -3,6 +3,7 @@ from datetime import datetime, timezone
|
||||
from fastapi import APIRouter, Request
|
||||
from fastapi.responses import RedirectResponse
|
||||
from devplacepy.database import get_table
|
||||
from devplacepy.templating import clear_unread_cache
|
||||
from devplacepy.utils import generate_uid, require_user
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
@@ -39,6 +40,7 @@ async def follow_user(request: Request, username: str):
|
||||
"read": False,
|
||||
"created_at": datetime.now(timezone.utc).isoformat(),
|
||||
})
|
||||
clear_unread_cache(target["uid"])
|
||||
|
||||
logger.info(f"{user['username']} followed {username}")
|
||||
return RedirectResponse(url=f"/profile/{username}", status_code=302)
|
||||
|
||||
@@ -4,7 +4,7 @@ from fastapi import APIRouter, Request
|
||||
from fastapi.responses import HTMLResponse, RedirectResponse, JSONResponse
|
||||
from devplacepy.database import get_table, db
|
||||
from devplacepy.attachments import get_attachments_batch
|
||||
from devplacepy.templating import templates
|
||||
from devplacepy.templating import templates, clear_unread_cache
|
||||
from devplacepy.utils import generate_uid, require_user, time_ago, create_mention_notifications
|
||||
from devplacepy.seo import base_seo_context
|
||||
|
||||
@@ -179,6 +179,7 @@ async def send_message(request: Request):
|
||||
"read": False,
|
||||
"created_at": datetime.now(timezone.utc).isoformat(),
|
||||
})
|
||||
clear_unread_cache(receiver_uid)
|
||||
|
||||
create_mention_notifications(content, user["uid"], f"/messages?with_uid={receiver_uid}")
|
||||
|
||||
|
||||
@@ -183,5 +183,6 @@ async def create_project(request: Request):
|
||||
if attachment_uids:
|
||||
link_attachments(attachment_uids, "project", uid)
|
||||
|
||||
create_mention_notifications(description, user["uid"], f"/projects/{project_slug}")
|
||||
logger.info(f"Project {uid} created by {user['username']}")
|
||||
return RedirectResponse(url=f"/projects/{project_slug}", status_code=302)
|
||||
|
||||
@@ -3,6 +3,7 @@ from datetime import datetime, timezone
|
||||
from fastapi import APIRouter, Request
|
||||
from fastapi.responses import RedirectResponse
|
||||
from devplacepy.database import get_table
|
||||
from devplacepy.templating import clear_unread_cache
|
||||
from devplacepy.utils import generate_uid, require_user
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
@@ -79,6 +80,7 @@ async def vote(request: Request, target_type: str, target_uid: str):
|
||||
"read": False,
|
||||
"created_at": datetime.now(timezone.utc).isoformat(),
|
||||
})
|
||||
clear_unread_cache(target_owner_uid)
|
||||
|
||||
referer = request.headers.get("Referer", "/feed")
|
||||
return RedirectResponse(url=referer, status_code=302)
|
||||
|
||||
@@ -16,6 +16,10 @@ templates = Jinja2Templates(directory=str(TEMPLATES_DIR))
|
||||
_unread_cache = {}
|
||||
_UNREAD_CACHE_TTL = 60
|
||||
|
||||
def clear_unread_cache(user_uid: str) -> None:
|
||||
_unread_cache.pop(user_uid, None)
|
||||
|
||||
|
||||
def jinja_unread_count(user_uid: str) -> int:
|
||||
cached = _unread_cache.get(user_uid)
|
||||
if cached:
|
||||
|
||||
@@ -134,6 +134,7 @@ def create_mention_notifications(content: str, actor_uid: str, target_url: str)
|
||||
usernames = extract_mentions(content)
|
||||
if not usernames:
|
||||
return
|
||||
from devplacepy.templating import clear_unread_cache
|
||||
users = get_table("users")
|
||||
notifs = get_table("notifications")
|
||||
seen = set()
|
||||
@@ -153,6 +154,7 @@ def create_mention_notifications(content: str, actor_uid: str, target_url: str)
|
||||
"read": False,
|
||||
"created_at": datetime.now(timezone.utc).isoformat(),
|
||||
})
|
||||
clear_unread_cache(mentioned["uid"])
|
||||
|
||||
|
||||
def format_date(dt_str: str, include_time: bool = False) -> str:
|
||||
|
||||
Reference in New Issue
Block a user