backend: add push token API and FCM delivery pipeline
This commit is contained in:
@@ -5,8 +5,18 @@ from sqlalchemy.ext.asyncio import AsyncSession
|
||||
|
||||
from app.chats.repository import is_chat_muted_for_user, list_chat_members
|
||||
from app.messages.models import Message
|
||||
from app.notifications.repository import create_notification_log, list_user_notifications
|
||||
from app.notifications.schemas import NotificationRead, NotificationRequest
|
||||
from app.notifications.repository import (
|
||||
create_notification_log,
|
||||
delete_push_device_token,
|
||||
list_user_notifications,
|
||||
upsert_push_device_token,
|
||||
)
|
||||
from app.notifications.schemas import (
|
||||
NotificationRead,
|
||||
NotificationRequest,
|
||||
PushTokenDeleteRequest,
|
||||
PushTokenUpsertRequest,
|
||||
)
|
||||
from app.notifications.tasks import send_mention_notification_task, send_push_notification_task
|
||||
from app.realtime.presence import is_user_online
|
||||
from app.users.repository import list_users_by_ids
|
||||
@@ -98,3 +108,25 @@ async def get_notifications_for_user(db: AsyncSession, *, user_id: int, limit: i
|
||||
safe_limit = max(1, min(limit, 100))
|
||||
rows = await list_user_notifications(db, user_id=user_id, limit=safe_limit)
|
||||
return [NotificationRead.model_validate(item) for item in rows]
|
||||
|
||||
|
||||
async def register_push_token(db: AsyncSession, *, user_id: int, payload: PushTokenUpsertRequest) -> None:
|
||||
await upsert_push_device_token(
|
||||
db,
|
||||
user_id=user_id,
|
||||
platform=payload.platform.strip().lower(),
|
||||
token=payload.token.strip(),
|
||||
device_id=payload.device_id.strip() if payload.device_id else None,
|
||||
app_version=payload.app_version.strip() if payload.app_version else None,
|
||||
)
|
||||
await db.commit()
|
||||
|
||||
|
||||
async def unregister_push_token(db: AsyncSession, *, user_id: int, payload: PushTokenDeleteRequest) -> None:
|
||||
await delete_push_device_token(
|
||||
db,
|
||||
user_id=user_id,
|
||||
platform=payload.platform.strip().lower(),
|
||||
token=payload.token.strip(),
|
||||
)
|
||||
await db.commit()
|
||||
|
||||
Reference in New Issue
Block a user