Coverage for app/services/user.py: 95%
18 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
1from app.db.models import Campaign, UserCampaignRole, World
2from fastapi import HTTPException
3from app.core.exceptions import DatabaseQueryError, UserNotFoundError
4from sqlalchemy.exc import SQLAlchemyError
6def get_user_info(user_id: str, db):
7 try:
8 # load user's roles in every campaign
9 user_involvements = db.query(UserCampaignRole).filter_by(user_id = user_id).all()
11 if not user_involvements:
12 raise UserNotFoundError()
14 # extract campaign ID's
15 user_campaign_ids = {item.campaign_id for item in user_involvements}
17 # load campaign object
18 user_campaigns = db.query(Campaign).filter(Campaign.id.in_(user_campaign_ids)).all()
20 # extract campaign name
21 user_campaign_names = [c.name for c in user_campaigns]
23 # extract world ID's
24 user_world_ids = {item.world_id for item in user_involvements}
26 # load world objects
27 user_worlds = db.query(World).filter(World.id.in_(user_world_ids)).all()
29 # extract world name
30 user_world_names = [w.name for w in user_worlds]
32 return {
33 "campaign_names": user_campaign_names,
34 "campaign_info": user_campaigns,
35 "world_names": user_world_names,
36 "world_info": user_worlds,
37 }
39 except SQLAlchemyError as e:
40 raise DatabaseQueryError()