Coverage for app/services/notifications.py: 86%
14 statements
« prev ^ index » next coverage.py v7.8.2, created at 2025-06-02 23:27 +0000
« prev ^ index » next coverage.py v7.8.2, created at 2025-06-02 23:27 +0000
1import sqlalchemy
2from app.core.exceptions import DatabaseQueryError
3from app.db.models import Notification, UserCampaignRole
4from fastapi import HTTPException
5from sqlalchemy.exc import SQLAlchemyError
8def get_user_notifications(limit, offset, user_participations, db):
9 try:
10 # make set of all world and campaign id's
11 user_campaigns = {item.id for item in user_participations["campaign_info"]}
12 user_worlds = {item.id for item in user_participations["world_info"]}
14 # get all notifications for worlds and campaigns the user is a part of
15 world_notifications = db.query(Notification).filter(Notification.world_id.in_(user_worlds)).limit(limit).offset(offset)
16 campaign_notifications = db.query(Notification).filter(Notification.campaign_id.in_(user_campaigns)).limit(limit).offset(offset)
18 return {
19 "user_world_notifications": world_notifications,
20 "user_campaign_notifications": campaign_notifications,
21 }
23 except SQLAlchemyError as e:
24 raise DatabaseQueryError()