diff --git a/src/routers/users.py b/src/routers/users.py index a1f9eded..aea469a6 100644 --- a/src/routers/users.py +++ b/src/routers/users.py @@ -25,7 +25,7 @@ async def api_get_current_user(current_user: User = Depends(get_current_user)): return current_user.dict() @router.get("/profile_metadata") -async def api_get_current_user(current_user: User = Depends(get_current_user)): +async def api_get_current_user_metadata(current_user: User = Depends(get_current_user)): """ Get current user """ diff --git a/src/services/courses/chapters.py b/src/services/courses/chapters.py index ebd5270c..34829cc2 100644 --- a/src/services/courses/chapters.py +++ b/src/services/courses/chapters.py @@ -11,7 +11,6 @@ from src.services.users import PublicUser from fastapi import FastAPI, HTTPException, status, Request, Response, BackgroundTasks, UploadFile, File - class CourseChapter(BaseModel): name: str description: str @@ -187,21 +186,19 @@ async def get_coursechapters_meta(course_id: str, current_user: PublicUser): chapters[coursechapter.coursechapter_id] = { "id": coursechapter.coursechapter_id, "name": coursechapter.name, "elementIds": coursechapter_elementIds } - - # elements + + # elements elements_list = {} for element in elements.find({"element_id": {"$in": coursechapter_elementIds_global}}): element = ElementInDB(**element) elements_list[element.element_id] = { - "id": element.element_id, "name": element.name, "type": element.type , "content": element.content + "id": element.element_id, "name": element.name, "type": element.type, "content": element.content } - - final = { "chapters": chapters, "chapterOrder": course.chapters, - "elements" : elements_list + "elements": elements_list } return final @@ -216,16 +213,13 @@ async def update_coursechapters_meta(course_id: str, coursechapters_metadata: Co courseInDB = courses.update_one({"course_id": course_id}, { "$set": {"chapters": coursechapters_metadata.chapterOrder}}) - # update elements in coursechapters # TODO : performance/optimization improvement - for coursechapter in coursechapters_metadata.chapters: + for coursechapter in coursechapters_metadata.chapters.__dict__.items(): coursechapters.update_one({"coursechapter_id": coursechapter}, { "$set": {"elements": coursechapters_metadata.chapters[coursechapter]["elementIds"]}}) - - - return {"ok"} + return {"detail": "coursechapters metadata updated"} #### Security #################################################### diff --git a/src/services/courses/elements/video.py b/src/services/courses/elements/video.py index 6b2677fe..ed096836 100644 --- a/src/services/courses/elements/video.py +++ b/src/services/courses/elements/video.py @@ -17,6 +17,11 @@ async def create_video_element(name: str, coursechapter_id: str, current_user: # generate element_id element_id = str(f"element_{uuid4()}") + # check if video_file is not None + if not video_file: + raise HTTPException( + status_code=status.HTTP_409_CONFLICT, detail="Video : No video file provided") + video_format = video_file.filename.split(".")[-1] element_object = ElementInDB( element_id=element_id, diff --git a/src/services/files/pictures.py b/src/services/files/pictures.py index 3a0fdba0..709d10a8 100644 --- a/src/services/files/pictures.py +++ b/src/services/files/pictures.py @@ -34,7 +34,6 @@ async def create_picture_file(picture_file: UploadFile, element_id: str): # create file file = await picture_file.read() - # get file size file_size = len(file) @@ -95,14 +94,15 @@ async def get_picture_file(file_id: str, current_user: PublicUser): photo_file = photos.find_one({"file_id": file_id}) - # check media type - if photo_file.format not in ["jpg", "jpeg", "png", "gif"]: - raise HTTPException( - status_code=status.HTTP_409_CONFLICT, detail="Photo file format not supported") - # TODO : check if user has access to file if photo_file: + + # check media type + if photo_file.format not in ["jpg", "jpeg", "png", "gif"]: + raise HTTPException( + status_code=status.HTTP_409_CONFLICT, detail="Photo file format not supported") + # stream file photo_file = PhotoFile(**photo_file) file_format = photo_file.file_format diff --git a/src/services/files/videos.py b/src/services/files/videos.py index 47b5a563..df18caa3 100644 --- a/src/services/files/videos.py +++ b/src/services/files/videos.py @@ -94,14 +94,15 @@ async def get_video_file(file_id: str, current_user: PublicUser): video_file = photos.find_one({"file_id": file_id}) - # check media type - if video_file.format not in ["mp4", "webm", "ogg"]: - raise HTTPException( - status_code=status.HTTP_409_CONFLICT, detail="Video file format not supported") - # TODO : check if user has access to file if video_file: + + # check media type + if video_file.format not in ["mp4", "webm", "ogg"]: + raise HTTPException( + status_code=status.HTTP_409_CONFLICT, detail="Video file format not supported") + # stream file video_file = VideoFile(**video_file) file_format = video_file.file_format