Coverage for modules\notifications\api.py: 58%
26 statements
« prev ^ index » next coverage.py v7.16.0, created at 2026-09-05 09:25 +0800
« prev ^ index » next coverage.py v7.16.0, created at 2026-09-05 09:25 +0800
1from ninja import Router
2from typing import List, Optional
3from uuid import UUID
4from core.auth import JWTAuth
5from core.permissions import require_tenant
6from .schemas import NotificationOut
7from .models import Notification
8from .services import NotificationService
10router = Router(tags=["Notifications"])
12@router.get("", auth=JWTAuth(), response={200: List[NotificationOut]})
13def list_notifications(request, unread_only: bool = False):
14 tenant_id = require_tenant(request)
15 qs = Notification.objects.filter(recipient=request.user, tenant_id=tenant_id)
16 if unread_only:
17 qs = qs.filter(is_read=False)
18 return list(qs[:50])
20@router.post("/read-all", auth=JWTAuth(), response={200: dict})
21def mark_all_read(request):
22 tenant_id = require_tenant(request)
23 NotificationService.mark_as_read(tenant_id, request.user)
24 return {"success": True}
26@router.post("/{notification_id}/read", auth=JWTAuth(), response={200: dict})
27def mark_read(request, notification_id: UUID):
28 tenant_id = require_tenant(request)
29 NotificationService.mark_as_read(tenant_id, request.user, notification_id)
30 return {"success": True}