feat: save course chapters/elements

This commit is contained in:
swve 2022-11-13 22:33:05 +01:00
parent 57e64a2b74
commit 3fe5f47eea
3 changed files with 59 additions and 14 deletions

View file

@ -7,7 +7,7 @@ import { Title } from "../../../../../../components/ui/styles/Title";
import { DragDropContext, Droppable, Draggable } from "react-beautiful-dnd"; import { DragDropContext, Droppable, Draggable } from "react-beautiful-dnd";
import { initialData, initialData2 } from "../../../../../../components/drags/data"; import { initialData, initialData2 } from "../../../../../../components/drags/data";
import Chapter from "../../../../../../components/drags/Chapter"; 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 { useRouter } from "next/router";
import NewChapterModal from "../../../../../../components/modals/CourseEdit/NewChapter"; import NewChapterModal from "../../../../../../components/modals/CourseEdit/NewChapter";
import NewElementModal from "../../../../../../components/modals/CourseEdit/NewElement"; import NewElementModal from "../../../../../../components/modals/CourseEdit/NewElement";
@ -73,6 +73,7 @@ function CourseEdit() {
// Submit new element // Submit new element
const submitElement = async (element: any) => { const submitElement = async (element: any) => {
console.log("submitElement", element); console.log("submitElement", element);
updateChaptersMetadata(courseid, data);
await createElement(element, element.chapterId); await createElement(element, element.chapterId);
getCourseChapters(); getCourseChapters();
setNewElementModal(false); setNewElementModal(false);
@ -84,10 +85,9 @@ function CourseEdit() {
getCourseChapters(); getCourseChapters();
}; };
const openNewElementModal = async (chapterId: any) => { const updateChapters = () => {
console.log("openNewElementModal", chapterId); console.log(data);
setNewElementModal(true); updateChaptersMetadata(courseid,data);
setNewElementModalData(chapterId);
}; };
/* /*
@ -95,6 +95,13 @@ function CourseEdit() {
Modals Modals
*/ */
const openNewElementModal = async (chapterId: any) => {
console.log("openNewElementModal", chapterId);
setNewElementModal(true);
setNewElementModalData(chapterId);
};
// Close new chapter modal // Close new chapter modal
const closeNewChapterModal = () => { const closeNewChapterModal = () => {
setNewChapterModal(false); setNewChapterModal(false);
@ -218,6 +225,13 @@ function CourseEdit() {
> >
+ +
</button> </button>
<button
onClick={() => {
updateChapters();
}}
>
Save Chapters
</button>
</Title> </Title>
{newChapterModal && <NewChapterModal closeModal={closeNewChapterModal} submitChapter={submitChapter}></NewChapterModal>} {newChapterModal && <NewChapterModal closeModal={closeNewChapterModal} submitChapter={submitChapter}></NewChapterModal>}
{newElementModal && <NewElementModal closeModal={closeNewElementModal} submitElement={submitElement} chapterId={newElementModalData}></NewElementModal>} {newElementModal && <NewElementModal closeModal={closeNewElementModal} submitElement={submitElement} chapterId={newElementModalData}></NewElementModal>}
@ -232,7 +246,15 @@ function CourseEdit() {
<div key={"chapters"} {...provided.droppableProps} ref={provided.innerRef}> <div key={"chapters"} {...provided.droppableProps} ref={provided.innerRef}>
{getChapters().map((info: any, index: any) => ( {getChapters().map((info: any, index: any) => (
<> <>
<Chapter orgslug={orgslug} courseid={courseid} openNewElementModal={openNewElementModal} deleteChapter={deleteChapterUI} key={index} info={info} index={index}></Chapter> <Chapter
orgslug={orgslug}
courseid={courseid}
openNewElementModal={openNewElementModal}
deleteChapter={deleteChapterUI}
key={index}
info={info}
index={index}
></Chapter>
</> </>
))} ))}
{provided.placeholder} {provided.placeholder}

View file

@ -20,6 +20,26 @@ export async function getCourseChaptersMetadata(course_id: any) {
return data; 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) { export async function createChapter(data: any, course_id: any) {
console.log("data", data, course_id); console.log("data", data, course_id);

View file

@ -28,7 +28,8 @@ class CourseChapterInDB(CourseChapter):
# Frontend # Frontend
class CourseChapterMetaData(BaseModel): class CourseChapterMetaData(BaseModel):
chapterOrder: List[str] chapterOrder: List[str]
chapters: List chapters: object
elements: object
#### Classes #################################################### #### Classes ####################################################
@ -167,8 +168,6 @@ async def get_coursechapters_meta(course_id: str, current_user: PublicUser):
coursechapters = coursechapters.find( coursechapters = coursechapters.find(
{"course_id": course_id}).sort("name", 1) {"course_id": course_id}).sort("name", 1)
course = courses.find_one({"course_id": course_id}) course = courses.find_one({"course_id": course_id})
course = Course(**course) # type: ignore course = Course(**course) # type: ignore
@ -213,16 +212,20 @@ async def update_coursechapters_meta(course_id: str, coursechapters_metadata: Co
coursechapters = learnhouseDB["coursechapters"] coursechapters = learnhouseDB["coursechapters"]
courses = learnhouseDB["courses"] courses = learnhouseDB["courses"]
course = courses.find_one({"course_id": course_id})
course = Course(**course) # type: ignore
# update chapters in course # update chapters in course
courseInDB = courses.update_one({"course_id": course_id}, { courseInDB = courses.update_one({"course_id": course_id}, {
"$set": {"chapters": coursechapters_metadata.chapterOrder}}) "$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 #################################################### #### Security ####################################################