mirror of
https://github.com/rzmk/learnhouse.git
synced 2025-12-19 04:19:25 +00:00
feat: adapt trail page to show the user certificates
This commit is contained in:
parent
f01f7efb06
commit
d58336795a
13 changed files with 457 additions and 20 deletions
|
|
@ -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
|
||||
)
|
||||
|
|
@ -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
|
||||
####################################################
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue