From 3fe5f47eeaab63d9ca2a17da412765c1dfa6fbd9 Mon Sep 17 00:00:00 2001 From: swve Date: Sun, 13 Nov 2022 22:33:05 +0100 Subject: [PATCH] feat: save course chapters/elements --- .../course/[courseid]/edit/index.tsx | 34 +++++++++++++++---- front/services/courses/chapters.ts | 20 +++++++++++ src/services/courses/chapters.py | 19 ++++++----- 3 files changed, 59 insertions(+), 14 deletions(-) diff --git a/front/pages/org/[orgslug]/course/[courseid]/edit/index.tsx b/front/pages/org/[orgslug]/course/[courseid]/edit/index.tsx index 9f93d0ad..ba9adc3f 100644 --- a/front/pages/org/[orgslug]/course/[courseid]/edit/index.tsx +++ b/front/pages/org/[orgslug]/course/[courseid]/edit/index.tsx @@ -7,7 +7,7 @@ import { Title } from "../../../../../../components/ui/styles/Title"; import { DragDropContext, Droppable, Draggable } from "react-beautiful-dnd"; import { initialData, initialData2 } from "../../../../../../components/drags/data"; import Chapter from "../../../../../../components/drags/Chapter"; -import { createChapter, deleteChapter, getCourseChaptersMetadata } from "../../../../../../services/courses/chapters"; +import { createChapter, deleteChapter, getCourseChaptersMetadata, updateChaptersMetadata } from "../../../../../../services/courses/chapters"; import { useRouter } from "next/router"; import NewChapterModal from "../../../../../../components/modals/CourseEdit/NewChapter"; import NewElementModal from "../../../../../../components/modals/CourseEdit/NewElement"; @@ -73,6 +73,7 @@ function CourseEdit() { // Submit new element const submitElement = async (element: any) => { console.log("submitElement", element); + updateChaptersMetadata(courseid, data); await createElement(element, element.chapterId); getCourseChapters(); setNewElementModal(false); @@ -84,10 +85,9 @@ function CourseEdit() { getCourseChapters(); }; - const openNewElementModal = async (chapterId: any) => { - console.log("openNewElementModal", chapterId); - setNewElementModal(true); - setNewElementModalData(chapterId); + const updateChapters = () => { + console.log(data); + updateChaptersMetadata(courseid,data); }; /* @@ -95,6 +95,13 @@ function CourseEdit() { Modals */ + + const openNewElementModal = async (chapterId: any) => { + console.log("openNewElementModal", chapterId); + setNewElementModal(true); + setNewElementModalData(chapterId); + }; + // Close new chapter modal const closeNewChapterModal = () => { setNewChapterModal(false); @@ -218,6 +225,13 @@ function CourseEdit() { > + + {newChapterModal && } {newElementModal && } @@ -232,7 +246,15 @@ function CourseEdit() {
{getChapters().map((info: any, index: any) => ( <> - + ))} {provided.placeholder} diff --git a/front/services/courses/chapters.ts b/front/services/courses/chapters.ts index c594b7d6..63eb395d 100644 --- a/front/services/courses/chapters.ts +++ b/front/services/courses/chapters.ts @@ -20,6 +20,26 @@ export async function getCourseChaptersMetadata(course_id: any) { return data; } +export async function updateChaptersMetadata(course_id: any, data: any) { + const HeadersConfig = new Headers({ "Content-Type": "application/json" }); + + const requestOptions: any = { + method: "PUT", + headers: HeadersConfig, + redirect: "follow", + credentials: "include", + body: JSON.stringify(data), + }; + + const result: any = await fetch(`${getAPIUrl()}chapters/meta/course_${course_id}`, requestOptions) + .then((result) => result.json()) + .catch((error) => console.log("error", error)); + + console.log("result", result); + + return result; +} + export async function createChapter(data: any, course_id: any) { console.log("data", data, course_id); diff --git a/src/services/courses/chapters.py b/src/services/courses/chapters.py index c8619fea..11e1460f 100644 --- a/src/services/courses/chapters.py +++ b/src/services/courses/chapters.py @@ -28,7 +28,8 @@ class CourseChapterInDB(CourseChapter): # Frontend class CourseChapterMetaData(BaseModel): chapterOrder: List[str] - chapters: List + chapters: object + elements: object #### Classes #################################################### @@ -167,8 +168,6 @@ async def get_coursechapters_meta(course_id: str, current_user: PublicUser): coursechapters = coursechapters.find( {"course_id": course_id}).sort("name", 1) - - course = courses.find_one({"course_id": course_id}) course = Course(**course) # type: ignore @@ -213,16 +212,20 @@ async def update_coursechapters_meta(course_id: str, coursechapters_metadata: Co coursechapters = learnhouseDB["coursechapters"] courses = learnhouseDB["courses"] - course = courses.find_one({"course_id": course_id}) - course = Course(**course) # type: ignore - # update chapters in course courseInDB = courses.update_one({"course_id": course_id}, { "$set": {"chapters": coursechapters_metadata.chapterOrder}}) - # TODO : update chapters in coursechapters - return {courseInDB} + # update elements in coursechapters + # TODO : performance/optimization improvement + for coursechapter in coursechapters_metadata.chapters: + coursechapters.update_one({"coursechapter_id": coursechapter}, { + "$set": {"elements": coursechapters_metadata.chapters[coursechapter]["elementIds"]}}) + + + + return {"ok"} #### Security ####################################################