1
+ from app .utils .helpers import calculate_total_points
1
2
from fastapi import APIRouter , Depends , HTTPException , Query
2
3
from sqlalchemy .orm import Session
3
4
from datetime import datetime , timedelta
4
5
import random , string
5
-
6
6
from app .db import models , crud
7
7
from app .db .db import get_db
8
- from app .schemas .user import UserCreate , UserOut
8
+ from app .schemas .user import UserCreate , UserOut , UserOutWithPoints
9
9
from app .utils .mail import send_email
10
+ from sqlalchemy import func
10
11
11
12
router = APIRouter ()
12
13
@@ -56,9 +57,24 @@ def verify_otp(email: str, otp: str = Query(...), db: Session = Depends(get_db))
56
57
57
58
return user
58
59
59
- @router .get ("/user/{email}" , response_model = UserOut )
60
+
61
+ @router .get ("/user/{email}" , response_model = UserOutWithPoints )
60
62
def get_user_by_email (email : str , db : Session = Depends (get_db )):
61
- user = crud . get_user_by_email ( db , email )
63
+ user = db . query ( models . User ). filter ( models . User . email == email ). first ( )
62
64
if not user :
63
65
raise HTTPException (status_code = 404 , detail = "User not found" )
64
- return user
66
+ submissions = db .query (models .Submission ).filter_by (mentee_id = user .id ).all ()
67
+ task_ids = [s .task_id for s in submissions ]
68
+ if task_ids :
69
+ tasks = db .query (models .Task ).filter (models .Task .id .in_ (task_ids )).all ()
70
+ task_lookup = {task .id : task .points for task in tasks }
71
+ else :
72
+ task_lookup = {}
73
+ total_points = calculate_total_points (submissions , task_lookup )
74
+ return {
75
+ "id" : user .id ,
76
+ "email" : user .email ,
77
+ "name" : user .name ,
78
+ "role" : user .role ,
79
+ "total_points" : total_points
80
+ }
0 commit comments