From 86645fa81a4d2db07738da8e7d123d6b0481bd49 Mon Sep 17 00:00:00 2001 From: swve Date: Thu, 13 Apr 2023 21:33:03 +0200 Subject: [PATCH] fix: video activites issue --- .../NewActivityModal/DynamicCanva.tsx | 2 ++ front/services/courses/activities.ts | 6 ++-- .../courses/activities/uploads/videos.py | 5 ++++ src/services/courses/activities/video.py | 29 +++++++++++++++---- src/services/courses/thumbnails.py | 3 ++ 5 files changed, 38 insertions(+), 7 deletions(-) diff --git a/front/components/Pages/CourseEdit/NewActivityModal/DynamicCanva.tsx b/front/components/Pages/CourseEdit/NewActivityModal/DynamicCanva.tsx index 1f92fa30..3a6fc7f3 100644 --- a/front/components/Pages/CourseEdit/NewActivityModal/DynamicCanva.tsx +++ b/front/components/Pages/CourseEdit/NewActivityModal/DynamicCanva.tsx @@ -17,10 +17,12 @@ function DynamicCanvaModal({ submitActivity, chapterId }: any) { const handleSubmit = async (e: any) => { e.preventDefault(); console.log({ activityName, activityDescription, chapterId }); + submitActivity({ name: activityName, chapterId: chapterId, type: "dynamic", + org_id : "test", }); }; return ( diff --git a/front/services/courses/activities.ts b/front/services/courses/activities.ts index fa378281..b745b315 100644 --- a/front/services/courses/activities.ts +++ b/front/services/courses/activities.ts @@ -16,12 +16,14 @@ export async function createFileActivity(file: File, type: string, data: any, ch const formData = new FormData(); formData.append("coursechapter_id", chapter_id); - let endpoint = `${getAPIUrl()}activities/video`; + let org_id = "test"; + + let endpoint = `${getAPIUrl()}activities/video?org_id=${org_id}`; if (type === "video") { formData.append("name", data.name); formData.append("video_file", file); - endpoint = `${getAPIUrl()}activities/video`; + endpoint = endpoint; } const result: any = await fetch(endpoint, RequestBodyForm("POST", formData)); diff --git a/src/services/courses/activities/uploads/videos.py b/src/services/courses/activities/uploads/videos.py index 70012d98..4055e335 100644 --- a/src/services/courses/activities/uploads/videos.py +++ b/src/services/courses/activities/uploads/videos.py @@ -4,6 +4,11 @@ import os async def upload_video(video_file, activity_id): contents = video_file.file.read() video_format = video_file.filename.split(".")[-1] + + if not os.path.exists("content/uploads/video"): + # create folder + os.mkdir("content/uploads/video") + # create folder os.mkdir(f"content/uploads/video/{activity_id}") diff --git a/src/services/courses/activities/video.py b/src/services/courses/activities/video.py index f4ac26aa..4d2fbabe 100644 --- a/src/services/courses/activities/video.py +++ b/src/services/courses/activities/video.py @@ -10,18 +10,37 @@ from datetime import datetime async def create_video_activity(request: Request,name: str, coursechapter_id: str, current_user: PublicUser, video_file: UploadFile | None = None): activities = request.app.db["activities"] - coursechapters = request.app.db["coursechapters"] + courses = request.app.db["courses"] # generate activity_id activity_id = str(f"activity_{uuid4()}") + # get org_id from course + coursechapter = await courses.find_one( + {"chapters_content.coursechapter_id": coursechapter_id}) + + org_id = coursechapter["org_id"] + + # 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] + if video_file.content_type not in ["video/mp4", "video/webm"]: + raise HTTPException( + status_code=status.HTTP_409_CONFLICT, detail="Video : Wrong video format") + + # get video format + if video_file.filename: + video_format = video_file.filename.split(".")[-1] + + else: + raise HTTPException( + status_code=status.HTTP_409_CONFLICT, detail="Video : No video file provided") + activity_object = ActivityInDB( + org_id=org_id, activity_id=activity_id, coursechapter_id=coursechapter_id, name=name, @@ -36,7 +55,7 @@ async def create_video_activity(request: Request,name: str, coursechapter_id: s updateDate=str(datetime.now()), ) - hasRoleRights = await verify_user_rights_with_roles(request,"create", current_user.user_id, activity_id) + hasRoleRights = await verify_user_rights_with_roles(request,"create", current_user.user_id, activity_id, element_org_id=org_id) if not hasRoleRights: raise HTTPException( @@ -53,7 +72,7 @@ async def create_video_activity(request: Request,name: str, coursechapter_id: s # todo : choose whether to update the chapter or not # update chapter - await coursechapters.update_one({"coursechapter_id": coursechapter_id}, { - "$addToSet": {"activities": activity_id}}) + await courses.update_one({"chapters_content.coursechapter_id": coursechapter_id}, { + "$addToSet": {"chapters_content.$.activities": activity_id}}) return activity diff --git a/src/services/courses/thumbnails.py b/src/services/courses/thumbnails.py index cef0d41c..3cde41f4 100644 --- a/src/services/courses/thumbnails.py +++ b/src/services/courses/thumbnails.py @@ -4,6 +4,9 @@ import os async def upload_thumbnail(thumbnail_file, name_in_disk): contents = thumbnail_file.file.read() try: + if not os.path.exists("content/uploads/img"): + os.makedirs("content/uploads/img") + with open(f"content/uploads/img/{name_in_disk}", 'wb') as f: f.write(contents) f.close()