feat(notifications): durable per-user inbox (P1) + maintenance schema
Add a server-backed notification center that coexists with the client-side transient bell: a per-user `notifications` table (type/title/body/data JSON/ read/dismissed), a `/api/me/notifications` CRUD API (list, unread_count, read, read_all, dismiss, clear), and a left-nav inbox module with a live unread badge polled via useLiveQuery. Known types render trilingual text from type+data (English stored text is the fallback); read rows are trimmed past a soft cap. Also adds the schema the maintenance job builds on: videos.list?part=status columns (embeddable/privacy_status/upload_status) and the validation lifecycle columns (last_checked_at, unavailable_since, unavailable_reason). Page-id validation is centralized in one PAGES source of truth (isPage) so the new page survives reload without a second allowlist to keep in sync.
This commit is contained in:
parent
74d46f61eb
commit
3ae42409b3
14 changed files with 649 additions and 22 deletions
|
|
@ -32,6 +32,7 @@ from app.routes import (
|
|||
feed,
|
||||
health,
|
||||
me,
|
||||
notifications,
|
||||
playlists,
|
||||
quota,
|
||||
scheduler as scheduler_routes,
|
||||
|
|
@ -77,6 +78,7 @@ app.include_router(sync.router)
|
|||
app.include_router(tags.router)
|
||||
app.include_router(feed.router)
|
||||
app.include_router(me.router)
|
||||
app.include_router(notifications.router)
|
||||
app.include_router(channels.router)
|
||||
app.include_router(playlists.router)
|
||||
app.include_router(admin.router)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue