From 8813f1a81a6c5044bbd0c8dd8baa6dfc30462b76 Mon Sep 17 00:00:00 2001 From: swve Date: Mon, 3 Jul 2023 14:29:14 +0100 Subject: [PATCH] fix: config issue --- config/config.py | 4 +- front/app/orgs/[orgslug]/(withmenu)/page.tsx | 5 +- src/services/trail.py | 156 ++++++++++++------- 3 files changed, 102 insertions(+), 63 deletions(-) diff --git a/config/config.py b/config/config.py index 0884aea3..ffdd8905 100644 --- a/config/config.py +++ b/config/config.py @@ -23,8 +23,8 @@ class SecurityConfig(BaseModel): class S3ApiConfig(BaseModel): - bucket_name: str - endpoint_url: str + bucket_name: str | None + endpoint_url: str | None class ContentDeliveryConfig(BaseModel): diff --git a/front/app/orgs/[orgslug]/(withmenu)/page.tsx b/front/app/orgs/[orgslug]/(withmenu)/page.tsx index 046bda78..a6f7d4b7 100644 --- a/front/app/orgs/[orgslug]/(withmenu)/page.tsx +++ b/front/app/orgs/[orgslug]/(withmenu)/page.tsx @@ -11,6 +11,7 @@ import { getOrganizationContextInfo } from '@services/organizations/orgs'; import { cookies } from 'next/headers'; import GeneralWrapperStyled from '@components/StyledElements/Wrappers/GeneralWrapper'; import TypeOfContentTitle from '@components/StyledElements/Titles/TypeOfContentTitle'; +import { getCourseThumbnailMediaDirectory } from '@services/media/media'; type MetadataProps = { params: { orgslug: string }; @@ -63,7 +64,7 @@ const OrgHomePage = async (params: any) => {
{collection.courses.slice(0, 3).map((course: any) => ( - {course.name} + {course.name} ))}
@@ -80,7 +81,7 @@ const OrgHomePage = async (params: any) => { {courses.map((course: any) => (
-
+

{course.name}

diff --git a/src/services/trail.py b/src/services/trail.py index 6e7970e7..6c133b3c 100644 --- a/src/services/trail.py +++ b/src/services/trail.py @@ -19,9 +19,9 @@ class ActivityData(BaseModel): class TrailCourse(BaseModel): course_id: str - elements_type: Optional[Literal['course']] = 'course' - status: Optional[Literal['ongoing', 'done', 'closed']] = 'ongoing' - course_object: dict + elements_type: Optional[Literal["course"]] = "course" + status: Optional[Literal["ongoing", "done", "closed"]] = "ongoing" + course_object: dict masked: Optional[bool] = False activities_marked_complete: Optional[List[str]] activities_data: Optional[List[ActivityData]] @@ -29,7 +29,7 @@ class TrailCourse(BaseModel): class Trail(BaseModel): - status: Optional[Literal['ongoing', 'done', 'closed']] = 'ongoing' + status: Optional[Literal["ongoing", "done", "closed"]] = "ongoing" masked: Optional[bool] = False courses: Optional[List[TrailCourse]] @@ -45,7 +45,9 @@ class TrailInDB(Trail): #### Classes #################################################### -async def create_trail(request: Request, user: PublicUser, org_id: str, trail_object: Trail) -> Trail: +async def create_trail( + request: Request, user: PublicUser, org_id: str, trail_object: Trail +) -> Trail: trails = request.app.db["trails"] # get list of courses @@ -55,21 +57,26 @@ async def create_trail(request: Request, user: PublicUser, org_id: str, trail_ob course_ids = [course.course_id for course in courses] # find if the user has already started the course - existing_trail = await trails.find_one({'user_id': user.user_id, 'courses.course_id': {'$in': course_ids}}) + existing_trail = await trails.find_one( + {"user_id": user.user_id, "courses.course_id": {"$in": course_ids}} + ) if existing_trail: # update the status of the element with the matching course_id to "ongoing" - for element in existing_trail['courses']: - if element['course_id'] in course_ids: - element['status'] = 'ongoing' + for element in existing_trail["courses"]: + if element["course_id"] in course_ids: + element["status"] = "ongoing" # update the existing trail in the database - await trails.replace_one({'trail_id': existing_trail['trail_id']}, existing_trail) + await trails.replace_one( + {"trail_id": existing_trail["trail_id"]}, existing_trail + ) # create trail id trail_id = f"trail_{uuid4()}" # create trail - trail = TrailInDB(**trail_object.dict(), trail_id=trail_id, - user_id=user.user_id, org_id=org_id) + trail = TrailInDB( + **trail_object.dict(), trail_id=trail_id, user_id=user.user_id, org_id=org_id + ) await trails.insert_one(trail.dict()) @@ -81,22 +88,27 @@ async def get_user_trail(request: Request, org_slug: str, user: PublicUser) -> T trail = await trails.find_one({"user_id": user.user_id}) if not trail: raise HTTPException( - status_code=status.HTTP_404_NOT_FOUND, detail="Trail not found") + status_code=status.HTTP_404_NOT_FOUND, detail="Trail not found" + ) for element in trail["courses"]: course_id = element["course_id"] chapters_meta = await get_coursechapters_meta(request, course_id, user) activities = chapters_meta["activities"] num_activities = len(activities) - num_completed_activities = len( - element.get("activities_marked_complete", [])) - element["progress"] = round( - (num_completed_activities / num_activities) * 100, 2) if num_activities > 0 else 0 + num_completed_activities = len(element.get("activities_marked_complete", [])) + element["progress"] = ( + round((num_completed_activities / num_activities) * 100, 2) + if num_activities > 0 + else 0 + ) return Trail(**trail) -async def get_user_trail_with_orgslug(request: Request, user: PublicUser, org_slug: str) -> Trail: +async def get_user_trail_with_orgslug( + request: Request, user: PublicUser, org_slug: str +) -> Trail: trails = request.app.db["trails"] orgs = request.app.db["organizations"] courses_mongo = request.app.db["courses"] @@ -108,39 +120,48 @@ async def get_user_trail_with_orgslug(request: Request, user: PublicUser, org_sl if not trail: return Trail(masked=False, courses=[]) - + # Check if these courses still exist in the database for course in trail["courses"]: - course_id = course["course_id"] - course_object = await courses_mongo.find_one({"course_id": course_id}, {"_id": 0}) + course_object = await courses_mongo.find_one( + {"course_id": course_id}, {"_id": 0} + ) + print('checking course ' + course_id) if not course_object: + print("Course not found " + course_id) trail["courses"].remove(course) continue course["course_object"] = course_object - + for courses in trail["courses"]: course_id = courses["course_id"] - + chapters_meta = await get_coursechapters_meta(request, course_id, user) activities = chapters_meta["activities"] - + # get course object without _id - course_object = await courses_mongo.find_one({"course_id": course_id}, {"_id": 0}) + course_object = await courses_mongo.find_one( + {"course_id": course_id}, {"_id": 0} + ) courses["course_object"] = course_object num_activities = len(activities) - num_completed_activities = len( - courses.get("activities_marked_complete", [])) - courses["progress"] = round( - (num_completed_activities / num_activities) * 100, 2) if num_activities > 0 else 0 + num_completed_activities = len(courses.get("activities_marked_complete", [])) + courses["progress"] = ( + round((num_completed_activities / num_activities) * 100, 2) + if num_activities > 0 + else 0 + ) return Trail(**trail) -async def add_activity_to_trail(request: Request, user: PublicUser, course_id: str, org_slug: str, activity_id: str) -> Trail: +async def add_activity_to_trail( + request: Request, user: PublicUser, course_id: str, org_slug: str, activity_id: str +) -> Trail: trails = request.app.db["trails"] orgs = request.app.db["organizations"] courseid = "course_" + course_id @@ -149,49 +170,55 @@ async def add_activity_to_trail(request: Request, user: PublicUser, course_id: # get org_id from orgslug org = await orgs.find_one({"slug": org_slug}) org_id = org["org_id"] - - - # find a trail with the user_id and course_id in the courses array - trail = await trails.find_one({"user_id": user.user_id, "courses.course_id": courseid , "org_id": org_id}) - + + # find a trail with the user_id and course_id in the courses array + trail = await trails.find_one( + {"user_id": user.user_id, "courses.course_id": courseid, "org_id": org_id} + ) + if not trail: return Trail(masked=False, courses=[]) - + # if a trail has course_id in the courses array, then add the activity_id to the activities_marked_complete array for element in trail["courses"]: if element["course_id"] == courseid: if "activities_marked_complete" in element: - # check if activity_id is already in the array if activityid not in element["activities_marked_complete"]: element["activities_marked_complete"].append(activityid) - else: + else: raise HTTPException( - status_code=status.HTTP_400_BAD_REQUEST, detail="Activity already marked complete") + status_code=status.HTTP_400_BAD_REQUEST, + detail="Activity already marked complete", + ) else: element["activities_marked_complete"] = [activity_id] - - # modify trail object + + # modify trail object await trails.replace_one({"trail_id": trail["trail_id"]}, trail) return Trail(**trail) -async def add_course_to_trail(request: Request, user: PublicUser, orgslug: str, course_id: str) -> Trail: +async def add_course_to_trail( + request: Request, user: PublicUser, orgslug: str, course_id: str +) -> Trail: trails = request.app.db["trails"] orgs = request.app.db["organizations"] - org = await orgs.find_one({"slug": orgslug}) - org = PublicOrganization(**org) + org = PublicOrganization(**org) - trail = await trails.find_one( - {"user_id": user.user_id, "org_id": org["org_id"]}) - + trail = await trails.find_one({"user_id": user.user_id, "org_id": org["org_id"]}) if not trail: - trail_to_insert = TrailInDB(trail_id=f"trail_{uuid4()}", user_id=user.user_id, org_id=org["org_id"], courses=[]) + trail_to_insert = TrailInDB( + trail_id=f"trail_{uuid4()}", + user_id=user.user_id, + org_id=org["org_id"], + courses=[], + ) trail_to_insert = await trails.insert_one(trail_to_insert.dict()) trail = await trails.find_one({"_id": trail_to_insert.inserted_id}) @@ -200,31 +227,42 @@ async def add_course_to_trail(request: Request, user: PublicUser, orgslug: str, for element in trail["courses"]: if element["course_id"] == course_id: raise HTTPException( - status_code=status.HTTP_400_BAD_REQUEST, detail="Course already present in the trail") + status_code=status.HTTP_400_BAD_REQUEST, + detail="Course already present in the trail", + ) - updated_trail = TrailCourse(course_id=course_id, activities_data=[ - ], activities_marked_complete=[], progress=0, course_object={}, status="ongoing", masked=False) + updated_trail = TrailCourse( + course_id=course_id, + activities_data=[], + activities_marked_complete=[], + progress=0, + course_object={}, + status="ongoing", + masked=False, + ) trail["courses"].append(updated_trail.dict()) - await trails.replace_one({"trail_id": trail['trail_id']}, trail) + await trails.replace_one({"trail_id": trail["trail_id"]}, trail) return Trail(**trail) -async def remove_course_from_trail(request: Request, user: PublicUser, orgslug: str, course_id: str) -> Trail: + +async def remove_course_from_trail( + request: Request, user: PublicUser, orgslug: str, course_id: str +) -> Trail: trails = request.app.db["trails"] orgs = request.app.db["organizations"] - org = await orgs.find_one({"slug": orgslug}) org = PublicOrganization(**org) print(org) - trail = await trails.find_one( - {"user_id": user.user_id, "org_id": org["org_id"]}) + trail = await trails.find_one({"user_id": user.user_id, "org_id": org["org_id"]}) if not trail: raise HTTPException( - status_code=status.HTTP_404_NOT_FOUND, detail="Trail not found") + status_code=status.HTTP_404_NOT_FOUND, detail="Trail not found" + ) # check if course is already present in the trail @@ -233,5 +271,5 @@ async def remove_course_from_trail(request: Request, user: PublicUser, orgslug: trail["courses"].remove(element) break - await trails.replace_one({"trail_id": trail['trail_id']}, trail) - return Trail(**trail) \ No newline at end of file + await trails.replace_one({"trail_id": trail["trail_id"]}, trail) + return Trail(**trail)