From d376e39773c60178c873849258af0040df33b588 Mon Sep 17 00:00:00 2001 From: lvrossem Date: Tue, 18 Apr 2023 07:01:12 -0600 Subject: [PATCH] Almost there --- src/crud/courseprogress.py | 53 ++++++++++++++++++++++++++++----- src/crud/learnableprogress.py | 3 ++ src/crud/users.py | 55 ++++------------------------------- src/main.py | 4 +-- tests/test_courseprogress.py | 6 ++-- 5 files changed, 59 insertions(+), 62 deletions(-) diff --git a/src/crud/courseprogress.py b/src/crud/courseprogress.py index 70c549b..b7d587e 100644 --- a/src/crud/courseprogress.py +++ b/src/crud/courseprogress.py @@ -3,7 +3,8 @@ from sqlalchemy.orm import Session from src.enums import CourseEnum from src.models import CourseProgress, User -from src.schemas.courseprogress import CourseProgressBase, CourseProgressParent +from src.schemas.courseprogress import CourseProgressBase, CourseProgressParent, SavedCourseProgress +from src.crud.learnableprogress import get_learnables def get_course_progress(db: Session, user: User, course: CourseEnum): @@ -12,9 +13,11 @@ def get_course_progress(db: Session, user: User, course: CourseEnum): courses_to_fetch = [course] if course == CourseEnum.All: all_courses_list = [course for course in CourseEnum] - courses_to_fetch = filter( + courses_to_fetch = [course for course in filter( lambda course: course != CourseEnum.All, all_courses_list - ) + )] + print([course for course in courses_to_fetch]) + for course in courses_to_fetch: course_progress = ( db.query(CourseProgress) @@ -25,13 +28,42 @@ def get_course_progress(db: Session, user: User, course: CourseEnum): ) if course_progress: - result.append( - CourseProgressParent(progress=course_progress.progress, course=course) + print("CURRENT COURSE: " + course_progress.course) + learnables = get_learnables(db, user, course) + + completed_learnables = sum( + [1 if learnable.progress == 5.0 else 0 for learnable in learnables] ) + + in_use_learnables = sum( + [1 if learnable.in_use else 0 for learnable in learnables] + ) + + total_learnables = len(learnables) + + result.append(SavedCourseProgress( + course_index=course_progress.course, + progress=course_progress.progress, + completed_learnables=completed_learnables, + in_use_learnables=in_use_learnables, + total_learnables=total_learnables, + learnables=learnables, + )) else: db.add(CourseProgress(progress=0.0, course=course, owner_id=user.user_id)) db.commit() - result.append(CourseProgressParent(progress=0.0, course=course)) + result.append(SavedCourseProgress( + course_index=course, + progress=0.0, + completed_learnables=0, + in_use_learnables=0, + total_learnables=0, + learnables=[], + )) + + + + print(f"RESULT: {result}") return result @@ -73,6 +105,13 @@ def patch_course_progress( db.commit() return [ - CourseProgressParent(course=db_cp.course, progress=db_cp.progress) + SavedCourseProgress( + course_index=db_cp.course, + progress=db_cp.progress, + completed_learnables=db, + in_use_learnables=0, + total_learnables=0, + learnables=[], + ) for db_cp in db_course_progress_list ] diff --git a/src/crud/learnableprogress.py b/src/crud/learnableprogress.py index 5ab0de1..75efe65 100644 --- a/src/crud/learnableprogress.py +++ b/src/crud/learnableprogress.py @@ -1,5 +1,6 @@ from fastapi import HTTPException from sqlalchemy.orm import Session +from sqlalchemy import asc from src.enums import CourseEnum from src.models import CourseProgress, LearnableProgress, User @@ -15,9 +16,11 @@ def get_learnables(db: Session, user: User, course: CourseEnum): ) .first() ) + db_learnable_query = ( db.query(LearnableProgress) .filter(LearnableProgress.course_progress_id == db_course.course_progress_id) + .order_by(asc(LearnableProgress.index)) .all() ) diff --git a/src/crud/users.py b/src/crud/users.py index c05f457..b8f0f8b 100644 --- a/src/crud/users.py +++ b/src/crud/users.py @@ -4,6 +4,8 @@ from sqlalchemy.orm import Session from src.crud.highscores import (get_highest_high_scores, get_most_recent_high_scores) + +from src.crud.courseprogress import get_course_progress from src.enums import CourseEnum, MinigameEnum from src.models import CourseProgress, LearnableProgress, User from src.schemas.courseprogress import SavedCourseProgress @@ -65,61 +67,14 @@ def get_saved_data(db: Session, username: str): """Fetches all saved progress for the current user from the database""" user = get_user_by_username(db, username) minigames = [] - courses = [] + courses = get_course_progress(db, user, CourseEnum.All) for minigame in MinigameEnum: minigames.append( SavedMinigameProgress( minigame_index=minigame, - latest_scores=[ - score for score in get_most_recent_high_scores(db, minigame, 10) - ], - highest_scores=[ - score - for score in get_highest_high_scores(db, minigame, user, 10, False) - ], - ) - ) - - course_progress_query = ( - db.query(CourseProgress).filter(CourseProgress.owner_id == user.user_id).all() - ) - - for course_progress in course_progress_query: - learnable_progress_query = ( - db.query(LearnableProgress) - .filter( - LearnableProgress.course_progress_id - == course_progress.course_progress_id - ) - .all() - ) - - learnables = [ - SavedLearnableProgress( - index=lp.index, in_use=lp.in_use, name=lp.name, progress=lp.progress - ) - for lp in learnable_progress_query - ] - - completed_learnables = sum( - [1 if learnable.progress == 5.0 else 0 for learnable in learnables] - ) - - in_use_learnables = sum( - [1 if learnable.in_use else 0 for learnable in learnables] - ) - - total_learnables = len(learnables) - - courses.append( - SavedCourseProgress( - course_index=course_progress.course, - progress=course_progress.progress, - completed_learnables=completed_learnables, - in_use_learnables=in_use_learnables, - total_learnables=total_learnables, - learnables=learnables, + latest_scores=get_most_recent_high_scores(db, minigame, 10), + highest_scores=get_highest_high_scores(db, minigame, user, 10, False), ) ) diff --git a/src/main.py b/src/main.py index 5a405c2..94a22b2 100644 --- a/src/main.py +++ b/src/main.py @@ -102,7 +102,7 @@ async def create_high_score( @app.get( - "/courseprogress/{course}", response_model=List[courseprogress.CourseProgressParent] + "/courseprogress/{course}", response_model=List[courseprogress.SavedCourseProgress] ) async def get_course_progress( course: Optional[CourseEnum] = CourseEnum.All, @@ -114,7 +114,7 @@ async def get_course_progress( @app.patch( - "/courseprogress/{course}", response_model=List[courseprogress.CourseProgressParent] + "/courseprogress/{course}", response_model=List[courseprogress.CourseProgressBase] ) async def patch_course_progress( course: CourseEnum, diff --git a/tests/test_courseprogress.py b/tests/test_courseprogress.py index 32a73a6..8345369 100644 --- a/tests/test_courseprogress.py +++ b/tests/test_courseprogress.py @@ -23,7 +23,7 @@ async def test_register_should_create_progress_of_zero(): response = response.json()[0] assert response["progress"] == 0.0 - assert response["course"] == course + assert response["course_index"] == course @pytest.mark.asyncio @@ -40,7 +40,7 @@ async def test_get_all_sould_return_all(): for course in CourseEnum: if course != CourseEnum.All: - assert {"progress": 0.0, "course": course} in response + assert {"progress": 0.0, "course_index": course, "completed_learnables": 0, "in_use_learnables": 0, "total_learnables": 0, "learnables": []} in response @pytest.mark.asyncio @@ -117,7 +117,7 @@ async def test_patch_all_should_patch_all_courses(): for course in CourseEnum: if course != CourseEnum.All: - assert {"progress": progress, "course": course} in response + assert {"progress": 0.0, "course_index": course, "completed_learnables": 0, "in_use_learnables": 0, "total_learnables": 0, "learnables": []} in response @pytest.mark.asyncio