feat: adapt trail page to show the user certificates

This commit is contained in:
swve 2025-07-20 11:03:44 +02:00
parent f01f7efb06
commit d58336795a
13 changed files with 457 additions and 20 deletions

View file

@ -18,6 +18,7 @@ from src.services.courses.certifications import (
delete_certification,
get_user_certificates_for_course,
get_certificate_by_user_certification_uuid,
get_all_user_certificates,
)
router = APIRouter()
@ -126,4 +127,18 @@ async def api_get_certificate_by_user_certification_uuid(
"""
return await get_certificate_by_user_certification_uuid(
request, user_certification_uuid, current_user, db_session
)
@router.get("/user/all")
async def api_get_all_user_certificates(
request: Request,
current_user: PublicUser = Depends(get_current_user),
db_session: Session = Depends(get_db_session),
) -> List[dict]:
"""
Get all certificates obtained by the current user with complete linked information
"""
return await get_all_user_certificates(
request, current_user, db_session
)

View file

@ -454,6 +454,64 @@ async def get_certificate_by_user_certification_uuid(
}
async def get_all_user_certificates(
request: Request,
current_user: PublicUser | AnonymousUser,
db_session: Session,
) -> List[dict]:
"""Get all certificates for the current user with complete linked information"""
# Get all certificate users for this user
statement = select(CertificateUser).where(CertificateUser.user_id == current_user.id)
certificate_users = db_session.exec(statement).all()
if not certificate_users:
return []
result = []
for cert_user in certificate_users:
# Get the associated certification
statement = select(Certifications).where(Certifications.id == cert_user.certification_id)
certification = db_session.exec(statement).first()
if not certification:
continue
# Get course information
statement = select(Course).where(Course.id == certification.course_id)
course = db_session.exec(statement).first()
if not course:
continue
# Get user information
from src.db.users import User
statement = select(User).where(User.id == cert_user.user_id)
user = db_session.exec(statement).first()
result.append({
"certificate_user": CertificateUserRead(**cert_user.model_dump()),
"certification": CertificationRead(**certification.model_dump()),
"course": {
"id": course.id,
"course_uuid": course.course_uuid,
"name": course.name,
"description": course.description,
"thumbnail_image": course.thumbnail_image,
},
"user": {
"id": user.id if user else None,
"user_uuid": user.user_uuid if user else None,
"username": user.username if user else None,
"email": user.email if user else None,
"first_name": user.first_name if user else None,
"last_name": user.last_name if user else None,
} if user else None
})
return result
####################################################
# RBAC Utils
####################################################