Almost there
This commit is contained in:
@@ -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
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -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()
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -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,
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user