Skip to content

Commit 5540f5d

Browse files
authored
Merge pull request #24 from amfoss/develop
fix: display total_points in user profile and expose all auth endpoints
2 parents 5b9189f + 7077581 commit 5540f5d

File tree

3 files changed

+27
-7
lines changed

3 files changed

+27
-7
lines changed

app/main.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from fastapi import FastAPI
22
from app.db.db import Base, engine
3-
from app.routes import auth, progress, tracks, leaderboard, mentors , submissions
3+
from app.routes import auth, progress, tracks, leaderboard, mentors , submissions
44
from fastapi.middleware.cors import CORSMiddleware
55

66
app = FastAPI(title="amMentor API")

app/routes/auth.py

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
1+
from app.utils.helpers import calculate_total_points
12
from fastapi import APIRouter, Depends, HTTPException, Query
23
from sqlalchemy.orm import Session
34
from datetime import datetime, timedelta
45
import random, string
5-
66
from app.db import models, crud
77
from app.db.db import get_db
8-
from app.schemas.user import UserCreate, UserOut
8+
from app.schemas.user import UserCreate, UserOut, UserOutWithPoints
99
from app.utils.mail import send_email
10+
from sqlalchemy import func
1011

1112
router = APIRouter()
1213

@@ -56,9 +57,24 @@ def verify_otp(email: str, otp: str = Query(...), db: Session = Depends(get_db))
5657

5758
return user
5859

59-
@router.get("/user/{email}", response_model=UserOut)
60+
61+
@router.get("/user/{email}", response_model=UserOutWithPoints)
6062
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()
6264
if not user:
6365
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+
}

app/schemas/user.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@ class UserCreate(UserBase):
1010
class UserOut(UserBase):
1111
id: int
1212
role: str
13+
name: str
14+
email: str
1315

1416
class Config:
15-
orm_mode = True
17+
orm_mode = True
18+
class UserOutWithPoints(UserOut):
19+
total_points: int

0 commit comments

Comments
 (0)