Almost there

This commit is contained in:
lvrossem
2023-04-18 07:01:12 -06:00
parent 4235395579
commit d376e39773
5 changed files with 59 additions and 62 deletions

View File

@@ -3,7 +3,8 @@ from sqlalchemy.orm import Session
from src.enums import CourseEnum from src.enums import CourseEnum
from src.models import CourseProgress, User 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): 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] courses_to_fetch = [course]
if course == CourseEnum.All: if course == CourseEnum.All:
all_courses_list = [course for course in CourseEnum] 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 lambda course: course != CourseEnum.All, all_courses_list
) )]
print([course for course in courses_to_fetch])
for course in courses_to_fetch: for course in courses_to_fetch:
course_progress = ( course_progress = (
db.query(CourseProgress) db.query(CourseProgress)
@@ -25,13 +28,42 @@ def get_course_progress(db: Session, user: User, course: CourseEnum):
) )
if course_progress: if course_progress:
result.append( print("CURRENT COURSE: " + course_progress.course)
CourseProgressParent(progress=course_progress.progress, course=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: else:
db.add(CourseProgress(progress=0.0, course=course, owner_id=user.user_id)) db.add(CourseProgress(progress=0.0, course=course, owner_id=user.user_id))
db.commit() 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 return result
@@ -73,6 +105,13 @@ def patch_course_progress(
db.commit() db.commit()
return [ 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 for db_cp in db_course_progress_list
] ]

View File

@@ -1,5 +1,6 @@
from fastapi import HTTPException from fastapi import HTTPException
from sqlalchemy.orm import Session from sqlalchemy.orm import Session
from sqlalchemy import asc
from src.enums import CourseEnum from src.enums import CourseEnum
from src.models import CourseProgress, LearnableProgress, User from src.models import CourseProgress, LearnableProgress, User
@@ -15,9 +16,11 @@ def get_learnables(db: Session, user: User, course: CourseEnum):
) )
.first() .first()
) )
db_learnable_query = ( db_learnable_query = (
db.query(LearnableProgress) db.query(LearnableProgress)
.filter(LearnableProgress.course_progress_id == db_course.course_progress_id) .filter(LearnableProgress.course_progress_id == db_course.course_progress_id)
.order_by(asc(LearnableProgress.index))
.all() .all()
) )

View File

@@ -4,6 +4,8 @@ from sqlalchemy.orm import Session
from src.crud.highscores import (get_highest_high_scores, from src.crud.highscores import (get_highest_high_scores,
get_most_recent_high_scores) get_most_recent_high_scores)
from src.crud.courseprogress import get_course_progress
from src.enums import CourseEnum, MinigameEnum from src.enums import CourseEnum, MinigameEnum
from src.models import CourseProgress, LearnableProgress, User from src.models import CourseProgress, LearnableProgress, User
from src.schemas.courseprogress import SavedCourseProgress 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""" """Fetches all saved progress for the current user from the database"""
user = get_user_by_username(db, username) user = get_user_by_username(db, username)
minigames = [] minigames = []
courses = [] courses = get_course_progress(db, user, CourseEnum.All)
for minigame in MinigameEnum: for minigame in MinigameEnum:
minigames.append( minigames.append(
SavedMinigameProgress( SavedMinigameProgress(
minigame_index=minigame, minigame_index=minigame,
latest_scores=[ latest_scores=get_most_recent_high_scores(db, minigame, 10),
score for score in get_most_recent_high_scores(db, minigame, 10) highest_scores=get_highest_high_scores(db, minigame, user, 10, False),
],
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,
) )
) )

View File

@@ -102,7 +102,7 @@ async def create_high_score(
@app.get( @app.get(
"/courseprogress/{course}", response_model=List[courseprogress.CourseProgressParent] "/courseprogress/{course}", response_model=List[courseprogress.SavedCourseProgress]
) )
async def get_course_progress( async def get_course_progress(
course: Optional[CourseEnum] = CourseEnum.All, course: Optional[CourseEnum] = CourseEnum.All,
@@ -114,7 +114,7 @@ async def get_course_progress(
@app.patch( @app.patch(
"/courseprogress/{course}", response_model=List[courseprogress.CourseProgressParent] "/courseprogress/{course}", response_model=List[courseprogress.CourseProgressBase]
) )
async def patch_course_progress( async def patch_course_progress(
course: CourseEnum, course: CourseEnum,

View File

@@ -23,7 +23,7 @@ async def test_register_should_create_progress_of_zero():
response = response.json()[0] response = response.json()[0]
assert response["progress"] == 0.0 assert response["progress"] == 0.0
assert response["course"] == course assert response["course_index"] == course
@pytest.mark.asyncio @pytest.mark.asyncio
@@ -40,7 +40,7 @@ async def test_get_all_sould_return_all():
for course in CourseEnum: for course in CourseEnum:
if course != CourseEnum.All: 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 @pytest.mark.asyncio
@@ -117,7 +117,7 @@ async def test_patch_all_should_patch_all_courses():
for course in CourseEnum: for course in CourseEnum:
if course != CourseEnum.All: 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 @pytest.mark.asyncio