diff --git a/front/components/Modals/CourseEdit/NewChapter.tsx b/front/components/Modals/CourseEdit/NewChapter.tsx
index 5a9bca70..1910ebde 100644
--- a/front/components/Modals/CourseEdit/NewChapter.tsx
+++ b/front/components/Modals/CourseEdit/NewChapter.tsx
@@ -16,7 +16,7 @@ function NewChapterModal({ submitChapter , closeModal }: any) {
const handleSubmit = async (e: any) => {
e.preventDefault();
console.log({ chapterName, chapterDescription });
- submitChapter({ name : chapterName, description : chapterDescription , lectures : [] });
+ submitChapter({ name : chapterName, description : chapterDescription , activities : [] });
};
return (
diff --git a/front/components/Modals/CourseEdit/NewLectureModal/DynamicCanva.tsx b/front/components/Modals/CourseEdit/NewLectureModal/DynamicCanva.tsx
deleted file mode 100644
index b4ff2314..00000000
--- a/front/components/Modals/CourseEdit/NewLectureModal/DynamicCanva.tsx
+++ /dev/null
@@ -1,36 +0,0 @@
-import React, { useState } from "react";
-
-function DynamicCanvaModal({ submitLecture, chapterId }: any) {
- const [lectureName, setLectureName] = useState("");
- const [lectureDescription, setLectureDescription] = useState("");
-
- const handleLectureNameChange = (e: any) => {
- setLectureName(e.target.value);
- };
-
- const handleLectureDescriptionChange = (e: any) => {
- setLectureDescription(e.target.value);
- };
-
- const handleSubmit = async (e: any) => {
- e.preventDefault();
- console.log({ lectureName, lectureDescription, chapterId });
- submitLecture({
- name: lectureName,
- chapterId: chapterId,
- type: "dynamic",
- });
- };
- return (
-
- );
-}
-
-export default DynamicCanvaModal;
diff --git a/front/middleware.ts b/front/middleware.ts
index e398e591..8093b6ca 100644
--- a/front/middleware.ts
+++ b/front/middleware.ts
@@ -30,7 +30,7 @@ export default function middleware(req: NextRequest) {
: hostname.replace(`.localhost:3000`, "");
/* Editor route */
- if (url.pathname.match(/^\/course\/[^/]+\/lecture\/[^/]+\/edit$/)) {
+ if (url.pathname.match(/^\/course\/[^/]+\/activity\/[^/]+\/edit$/)) {
url.pathname = `/_editor${url.pathname}`;
console.log("editor route", url.pathname);
diff --git a/front/services/blocks/Image/images.ts b/front/services/blocks/Image/images.ts
index 3e8db1ad..bb93582b 100644
--- a/front/services/blocks/Image/images.ts
+++ b/front/services/blocks/Image/images.ts
@@ -1,11 +1,11 @@
import { getAPIUrl } from "@services/config/config";
import { RequestBody, RequestBodyForm } from "@services/utils/requests";
-export async function uploadNewImageFile(file: any, lecture_id: string) {
+export async function uploadNewImageFile(file: any, activity_id: string) {
// Send file thumbnail as form data
const formData = new FormData();
formData.append("file_object", file);
- formData.append("lecture_id", lecture_id);
+ formData.append("activity_id", activity_id);
return fetch(`${getAPIUrl()}blocks/image`, RequestBodyForm("POST", formData))
.then((result) => result.json())
diff --git a/front/services/blocks/Pdf/pdf.ts b/front/services/blocks/Pdf/pdf.ts
index 5b3b1c22..2bff8fbe 100644
--- a/front/services/blocks/Pdf/pdf.ts
+++ b/front/services/blocks/Pdf/pdf.ts
@@ -1,11 +1,11 @@
import { getAPIUrl } from "@services/config/config";
import { RequestBody, RequestBodyForm } from "@services/utils/requests";
-export async function uploadNewPDFFile(file: any, lecture_id: string) {
+export async function uploadNewPDFFile(file: any, activity_id: string) {
// Send file thumbnail as form data
const formData = new FormData();
formData.append("file_object", file);
- formData.append("lecture_id", lecture_id);
+ formData.append("activity_id", activity_id);
return fetch(`${getAPIUrl()}blocks/pdf`, RequestBodyForm("POST", formData))
.then((result) => result.json())
diff --git a/front/services/blocks/Quiz/quiz.ts b/front/services/blocks/Quiz/quiz.ts
index 24e29b96..706bbf00 100644
--- a/front/services/blocks/Quiz/quiz.ts
+++ b/front/services/blocks/Quiz/quiz.ts
@@ -2,8 +2,8 @@ import { getAPIUrl } from "@services/config/config";
import { RequestBody, RequestBodyForm } from "@services/utils/requests";
-export async function submitQuizBlock(lecture_id: string, data: any) {
- const result: any = await fetch(`${getAPIUrl()}blocks/quiz/${lecture_id}"`, RequestBody("POST", data))
+export async function submitQuizBlock(activity_id: string, data: any) {
+ const result: any = await fetch(`${getAPIUrl()}blocks/quiz/${activity_id}"`, RequestBody("POST", data))
.then((result) => result.json())
.catch((error) => console.log("error", error));
return result;
diff --git a/front/services/blocks/Video/video.ts b/front/services/blocks/Video/video.ts
index fc9bccaf..a2c45388 100644
--- a/front/services/blocks/Video/video.ts
+++ b/front/services/blocks/Video/video.ts
@@ -1,11 +1,11 @@
import { getAPIUrl } from "@services/config/config";
import { RequestBody, RequestBodyForm } from "@services/utils/requests";
-export async function uploadNewVideoFile(file: any, lecture_id: string) {
+export async function uploadNewVideoFile(file: any, activity_id: string) {
// Send file thumbnail as form data
const formData = new FormData();
formData.append("file_object", file);
- formData.append("lecture_id", lecture_id);
+ formData.append("activity_id", activity_id);
return fetch(`${getAPIUrl()}blocks/video`, RequestBodyForm("POST", formData))
.then((result) => result.json())
diff --git a/front/services/courses/lectures.ts b/front/services/courses/activities.ts
similarity index 58%
rename from front/services/courses/lectures.ts
rename to front/services/courses/activities.ts
index 05458e80..9ee811d6 100644
--- a/front/services/courses/lectures.ts
+++ b/front/services/courses/activities.ts
@@ -1,13 +1,13 @@
import { getAPIUrl } from "@services/config/config";
import { RequestBody, RequestBodyForm } from "@services/utils/requests";
-export async function createLecture(data: any, chapter_id: any, org_id: any) {
+export async function createActivity(data: any, chapter_id: any, org_id: any) {
data.content = {};
// remove chapter_id from data
delete data.chapterId;
- const result: any = await fetch(`${getAPIUrl()}lectures/?coursechapter_id=${chapter_id}&org_id=${org_id}`, RequestBody("POST", data))
+ const result: any = await fetch(`${getAPIUrl()}activities/?coursechapter_id=${chapter_id}&org_id=${org_id}`, RequestBody("POST", data))
.then((result) => result.json())
.catch((error) => console.log("error", error));
@@ -16,17 +16,17 @@ export async function createLecture(data: any, chapter_id: any, org_id: any) {
return result;
}
-export async function createFileLecture(file: File, type: string, data: any, chapter_id: any) {
+export async function createFileActivity(file: File, type: string, data: any, chapter_id: any) {
// Send file thumbnail as form data
const formData = new FormData();
formData.append("coursechapter_id", chapter_id);
- let endpoint = `${getAPIUrl()}lectures/video`;
+ let endpoint = `${getAPIUrl()}activities/video`;
if (type === "video") {
formData.append("name", data.name);
formData.append("video_file", file);
- endpoint = `${getAPIUrl()}lectures/video`;
+ endpoint = `${getAPIUrl()}activities/video`;
}
const result: any = await fetch(endpoint, RequestBodyForm("POST", formData))
@@ -38,16 +38,16 @@ export async function createFileLecture(file: File, type: string, data: any, cha
return result;
}
-export async function getLecture(lecture_id: any) {
- const result: any = await fetch(`${getAPIUrl()}lectures/${lecture_id}`, RequestBody("GET", null))
+export async function getActivity(activity_id: any) {
+ const result: any = await fetch(`${getAPIUrl()}activities/${activity_id}`, RequestBody("GET", null))
.then((result) => result.json())
.catch((error) => console.log("error", error));
return result;
}
-export async function updateLecture(data: any, lecture_id: any) {
- const result: any = await fetch(`${getAPIUrl()}lectures/${lecture_id}`, RequestBody("PUT", data))
+export async function updateActivity(data: any, activity_id: any) {
+ const result: any = await fetch(`${getAPIUrl()}activities/${activity_id}`, RequestBody("PUT", data))
.then((result) => result.json())
.catch((error) => console.log("error", error));
diff --git a/front/services/courses/activity.ts b/front/services/courses/activity.ts
index d2d41c85..9bd6c481 100644
--- a/front/services/courses/activity.ts
+++ b/front/services/courses/activity.ts
@@ -23,8 +23,8 @@ export async function closeActivity(org_id: string, activity_id: string) {
return result;
}
-export async function maskLectureAsComplete(org_id: string, course_id: string, lecture_id: string) {
- const result: any = await fetch(`${getAPIUrl()}activity/${org_id}/add_lecture/${course_id}/${lecture_id}`, RequestBody("POST", null))
+export async function maskActivityAsComplete(org_id: string, course_id: string, activity_id: string) {
+ const result: any = await fetch(`${getAPIUrl()}activity/${org_id}/add_activity/${course_id}/${activity_id}`, RequestBody("POST", null))
.then((result) => result.json())
.catch((error) => console.log("error", error));
return result;
diff --git a/src/main.py b/src/main.py
index 6361f91b..3e9f6942 100644
--- a/src/main.py
+++ b/src/main.py
@@ -1,6 +1,6 @@
from fastapi import APIRouter
from src.routers import activity, blocks, users, auth, houses, orgs, roles
-from src.routers.courses import chapters, collections, courses,lectures
+from src.routers.courses import chapters, collections, courses,activities
global_router = APIRouter(prefix="/api")
@@ -15,7 +15,7 @@ global_router.include_router(roles.router, prefix="/roles", tags=["roles"])
global_router.include_router(blocks.router, prefix="/blocks", tags=["blocks"])
global_router.include_router(courses.router, prefix="/courses", tags=["courses"])
global_router.include_router(chapters.router, prefix="/chapters", tags=["chapters"])
-global_router.include_router(lectures.router, prefix="/lectures", tags=["lectures"])
+global_router.include_router(activities.router, prefix="/activities", tags=["activities"])
global_router.include_router(collections.router, prefix="/collections", tags=["collections"])
global_router.include_router(activity.router, prefix="/activity", tags=["activity"])
diff --git a/src/routers/activity.py b/src/routers/activity.py
index 34441401..91479bef 100644
--- a/src/routers/activity.py
+++ b/src/routers/activity.py
@@ -1,6 +1,6 @@
from fastapi import APIRouter, Depends, Request
from src.dependencies.auth import get_current_user
-from src.services.activity import Activity, add_lecture_to_activity, close_activity, create_activity, get_user_activities, get_user_activities_orgslug
+from src.services.activity import Activity, add_activity_to_activity, close_activity, create_activity, get_user_activities, get_user_activities_orgslug
router = APIRouter()
@@ -31,12 +31,12 @@ async def api_get_activity_by_orgslug(request: Request, org_slug: str, user=Depe
return await get_user_activities_orgslug(request, user, org_slug=org_slug)
-@router.post("/{org_id}/add_lecture/{course_id}/{lecture_id}")
-async def api_add_lecture_to_activity(request: Request, org_id: str, course_id: str, lecture_id: str, user=Depends(get_current_user)):
+@router.post("/{org_id}/add_activity/{course_id}/{activity_id}")
+async def api_add_activity_to_activity(request: Request, org_id: str, course_id: str, activity_id: str, user=Depends(get_current_user)):
"""
- Add lecture to activity
+ Add activity to activity
"""
- return await add_lecture_to_activity(request, user, org_id, course_id, lecture_id)
+ return await add_activity_to_activity(request, user, org_id, course_id, activity_id)
@router.patch("/{org_id}/close_activity/{activity_id}")
diff --git a/src/routers/blocks.py b/src/routers/blocks.py
index 96317012..6cf26d63 100644
--- a/src/routers/blocks.py
+++ b/src/routers/blocks.py
@@ -14,11 +14,11 @@ router = APIRouter()
####################
@router.post("/image")
-async def api_create_image_file_block(request: Request, file_object: UploadFile, lecture_id: str = Form(), current_user: PublicUser = Depends(get_current_user)):
+async def api_create_image_file_block(request: Request, file_object: UploadFile, activity_id: str = Form(), current_user: PublicUser = Depends(get_current_user)):
"""
Create new image file
"""
- return await create_image_block(request, file_object, lecture_id)
+ return await create_image_block(request, file_object, activity_id)
@router.get("/image")
@@ -33,11 +33,11 @@ async def api_get_image_file_block(request: Request, file_id: str, current_user:
####################
@router.post("/video")
-async def api_create_video_file_block(request: Request, file_object: UploadFile, lecture_id: str = Form(), current_user: PublicUser = Depends(get_current_user)):
+async def api_create_video_file_block(request: Request, file_object: UploadFile, activity_id: str = Form(), current_user: PublicUser = Depends(get_current_user)):
"""
Create new video file
"""
- return await create_video_block(request, file_object, lecture_id)
+ return await create_video_block(request, file_object, activity_id)
@router.get("/video")
@@ -52,11 +52,11 @@ async def api_get_video_file_block(request: Request, file_id: str, current_user:
####################
@router.post("/pdf")
-async def api_create_pdf_file_block(request: Request, file_object: UploadFile, lecture_id: str = Form(), current_user: PublicUser = Depends(get_current_user)):
+async def api_create_pdf_file_block(request: Request, file_object: UploadFile, activity_id: str = Form(), current_user: PublicUser = Depends(get_current_user)):
"""
Create new pdf file
"""
- return await create_pdf_block(request, file_object, lecture_id)
+ return await create_pdf_block(request, file_object, activity_id)
@router.get("/pdf")
@@ -71,12 +71,12 @@ async def api_get_pdf_file_block(request: Request, file_id: str, current_user: P
# Quiz Block
####################
-@router.post("/quiz/{lecture_id}")
-async def api_create_quiz_block(request: Request, quiz_block: quizBlock, lecture_id: str, current_user: PublicUser = Depends(get_current_user)):
+@router.post("/quiz/{activity_id}")
+async def api_create_quiz_block(request: Request, quiz_block: quizBlock, activity_id: str, current_user: PublicUser = Depends(get_current_user)):
"""
Create new document file
"""
- return await create_quiz_block(request, quiz_block, lecture_id, current_user)
+ return await create_quiz_block(request, quiz_block, activity_id, current_user)
@router.get("/quiz/options")
diff --git a/src/routers/courses/activities.py b/src/routers/courses/activities.py
new file mode 100644
index 00000000..f77e1225
--- /dev/null
+++ b/src/routers/courses/activities.py
@@ -0,0 +1,56 @@
+from fastapi import APIRouter, Depends, UploadFile, Form, Request
+from src.services.courses.activities.activities import *
+from src.dependencies.auth import get_current_user
+from src.services.courses.activities.video import create_video_activity
+
+router = APIRouter()
+
+
+@router.post("/")
+async def api_create_activity(request: Request, activity_object: Activity, org_id: str, coursechapter_id: str, current_user: PublicUser = Depends(get_current_user)):
+ """
+ Create new activity
+ """
+ return await create_activity(request, activity_object, org_id, coursechapter_id, current_user)
+
+
+@router.get("/{activity_id}")
+async def api_get_activity(request: Request, activity_id: str, current_user: PublicUser = Depends(get_current_user)):
+ """
+ Get single activity by activity_id
+ """
+ return await get_activity(request, activity_id, current_user=current_user)
+
+
+@router.get("/coursechapter/{coursechapter_id}")
+async def api_get_activities(request: Request, coursechapter_id: str, current_user: PublicUser = Depends(get_current_user)):
+ """
+ Get CourseChapter activities
+ """
+ return await get_activities(request, coursechapter_id, current_user)
+
+
+@router.put("/{activity_id}")
+async def api_update_activity(request: Request, activity_object: Activity, activity_id: str, current_user: PublicUser = Depends(get_current_user)):
+ """
+ Update activity by activity_id
+ """
+ return await update_activity(request, activity_object, activity_id, current_user)
+
+
+@router.delete("/{activity_id}")
+async def api_delete_activity(request: Request, activity_id: str, org_id: str, current_user: PublicUser = Depends(get_current_user)):
+ """
+ Delete activity by activity_id
+ """
+ return await delete_activity(request, activity_id, current_user)
+
+# Video play
+
+
+@router.post("/video")
+async def api_create_video_activity(request: Request, org_id: str, name: str = Form(), coursechapter_id: str = Form(), current_user: PublicUser = Depends(get_current_user), video_file: UploadFile | None = None):
+ """
+ Create new activity
+ """
+ return await create_video_activity(request, name, coursechapter_id, current_user, video_file)
diff --git a/src/routers/courses/courses.py b/src/routers/courses/courses.py
index f15b015d..f440d8e5 100644
--- a/src/routers/courses/courses.py
+++ b/src/routers/courses/courses.py
@@ -37,7 +37,7 @@ async def api_get_course(request: Request, course_id: str, current_user: Public
@router.get("/meta/{course_id}")
async def api_get_course_meta(request: Request, course_id: str, current_user: PublicUser = Depends(get_current_user)):
"""
- Get single Course Metadata (chapters, lectures) by course_id
+ Get single Course Metadata (chapters, activities) by course_id
"""
return await get_course_meta(request, course_id, current_user=current_user)
diff --git a/src/routers/courses/lectures.py b/src/routers/courses/lectures.py
deleted file mode 100644
index aed582de..00000000
--- a/src/routers/courses/lectures.py
+++ /dev/null
@@ -1,56 +0,0 @@
-from fastapi import APIRouter, Depends, UploadFile, Form, Request
-from src.services.courses.lectures.lectures import *
-from src.dependencies.auth import get_current_user
-from src.services.courses.lectures.video import create_video_lecture
-
-router = APIRouter()
-
-
-@router.post("/")
-async def api_create_lecture(request: Request, lecture_object: Lecture, org_id: str, coursechapter_id: str, current_user: PublicUser = Depends(get_current_user)):
- """
- Create new lecture
- """
- return await create_lecture(request, lecture_object, org_id, coursechapter_id, current_user)
-
-
-@router.get("/{lecture_id}")
-async def api_get_lecture(request: Request, lecture_id: str, current_user: PublicUser = Depends(get_current_user)):
- """
- Get single lecture by lecture_id
- """
- return await get_lecture(request, lecture_id, current_user=current_user)
-
-
-@router.get("/coursechapter/{coursechapter_id}")
-async def api_get_lectures(request: Request, coursechapter_id: str, current_user: PublicUser = Depends(get_current_user)):
- """
- Get CourseChapter lectures
- """
- return await get_lectures(request, coursechapter_id, current_user)
-
-
-@router.put("/{lecture_id}")
-async def api_update_lecture(request: Request, lecture_object: Lecture, lecture_id: str, current_user: PublicUser = Depends(get_current_user)):
- """
- Update lecture by lecture_id
- """
- return await update_lecture(request, lecture_object, lecture_id, current_user)
-
-
-@router.delete("/{lecture_id}")
-async def api_delete_lecture(request: Request, lecture_id: str, org_id: str, current_user: PublicUser = Depends(get_current_user)):
- """
- Delete lecture by lecture_id
- """
- return await delete_lecture(request, lecture_id, current_user)
-
-# Video play
-
-
-@router.post("/video")
-async def api_create_video_lecture(request: Request, org_id: str, name: str = Form(), coursechapter_id: str = Form(), current_user: PublicUser = Depends(get_current_user), video_file: UploadFile | None = None):
- """
- Create new lecture
- """
- return await create_video_lecture(request, name, coursechapter_id, current_user, video_file)
diff --git a/src/services/activity.py b/src/services/activity.py
index 88d85d17..f5894e19 100644
--- a/src/services/activity.py
+++ b/src/services/activity.py
@@ -16,8 +16,8 @@ class Activity(BaseModel):
course_id: str
status: Optional[Literal['ongoing', 'done', 'closed']] = 'ongoing'
masked: Optional[bool] = False
- lectures_marked_complete: Optional[List[str]] = []
- lectures_data: Optional[List[dict]] = []
+ activities_marked_complete: Optional[List[str]] = []
+ activities_data: Optional[List[dict]] = []
class ActivityInDB(Activity):
@@ -74,12 +74,12 @@ async def get_user_activities(request: Request, user: PublicUser, org_id: str):
status_code=status.HTTP_409_CONFLICT, detail="No activities found")
for activity in await user_activities.to_list(length=100):
- # get number of lectures in the course
+ # get number of activities in the course
coursechapters = await get_coursechapters_meta(request, activity['course_id'], user)
- # calculate progression using the number of lectures marked complete and the total number of lectures
+ # calculate progression using the number of activities marked complete and the total number of activities
progression = round(
- len(activity['lectures_marked_complete']) / len(coursechapters['lectures']) * 100, 2)
+ len(activity['activities_marked_complete']) / len(coursechapters['activities']) * 100, 2)
course = await courses.find_one({"course_id": activity['course_id']}, {'_id': 0})
@@ -104,12 +104,12 @@ async def get_user_activities_orgslug(request: Request, user: PublicUser, org_sl
status_code=status.HTTP_409_CONFLICT, detail="No activities found")
for activity in await user_activities.to_list(length=100):
- # get number of lectures in the course
+ # get number of activities in the course
coursechapters = await get_coursechapters_meta(request, activity['course_id'], user)
- # calculate progression using the number of lectures marked complete and the total number of lectures
+ # calculate progression using the number of activities marked complete and the total number of activities
progression = round(
- len(activity['lectures_marked_complete']) / len(coursechapters['lectures']) * 100, 2)
+ len(activity['activities_marked_complete']) / len(coursechapters['activities']) * 100, 2)
course = await courses.find_one({"course_id": activity['course_id']}, {'_id': 0})
@@ -120,18 +120,18 @@ async def get_user_activities_orgslug(request: Request, user: PublicUser, org_sl
return activities_metadata
-async def add_lecture_to_activity(request: Request, user: PublicUser, org_id: str, course_id: str, lecture_id: str):
+async def add_activity_to_activity(request: Request, user: PublicUser, org_id: str, course_id: str, activity_id: str):
activities = request.app.db["activities"]
course_id = f"course_{course_id}"
- lecture_id = f"lecture_{lecture_id}"
+ activity_id = f"activity_{activity_id}"
activity = await activities.find_one(
{"course_id": course_id,
"user_id": user.user_id
}, {'_id': 0})
- if lecture_id not in activity['lectures_marked_complete']:
- activity['lectures_marked_complete'].append(str(lecture_id))
+ if activity_id not in activity['activities_marked_complete']:
+ activity['activities_marked_complete'].append(str(activity_id))
await activities.update_one(
{"activity_id": activity['activity_id']}, {"$set": activity})
return activity
@@ -142,7 +142,7 @@ async def add_lecture_to_activity(request: Request, user: PublicUser, org_id: st
else:
raise HTTPException(
- status_code=status.HTTP_409_CONFLICT, detail="Lecture already marked complete")
+ status_code=status.HTTP_409_CONFLICT, detail="Activity already marked complete")
async def close_activity(request: Request, user: PublicUser, activity_id: str, org_id: str,):
diff --git a/src/services/blocks/block_types/imageBlock/images.py b/src/services/blocks/block_types/imageBlock/images.py
index b07a4771..8be9575a 100644
--- a/src/services/blocks/block_types/imageBlock/images.py
+++ b/src/services/blocks/block_types/imageBlock/images.py
@@ -9,23 +9,23 @@ from src.services.blocks.utils.upload_files import upload_file_and_return_file_o
from src.services.users.users import PublicUser
-async def create_image_block(request: Request, image_file: UploadFile, lecture_id: str):
+async def create_image_block(request: Request, image_file: UploadFile, activity_id: str):
blocks = request.app.db["blocks"]
- lecture = request.app.db["lectures"]
+ activity = request.app.db["activities"]
block_type = "imageBlock"
- # get org_id from lecture
- lecture = await lecture.find_one({"lecture_id": lecture_id}, {"_id": 0, "org_id": 1})
- org_id = lecture["org_id"]
+ # get org_id from activity
+ activity = await activity.find_one({"activity_id": activity_id}, {"_id": 0, "org_id": 1})
+ org_id = activity["org_id"]
# get block id
block_id = str(f"block_{uuid4()}")
- block_data = await upload_file_and_return_file_object(request, image_file, lecture_id, block_id, ["jpg", "jpeg", "png", "gif"], block_type)
+ block_data = await upload_file_and_return_file_object(request, image_file, activity_id, block_id, ["jpg", "jpeg", "png", "gif"], block_type)
# create block
- block = Block(block_id=block_id, lecture_id=lecture_id,
+ block = Block(block_id=block_id, activity_id=activity_id,
block_type=block_type, block_data=block_data, org_id=org_id)
# insert block
diff --git a/src/services/blocks/block_types/pdfBlock/pdfBlock.py b/src/services/blocks/block_types/pdfBlock/pdfBlock.py
index 738edd89..6039aeeb 100644
--- a/src/services/blocks/block_types/pdfBlock/pdfBlock.py
+++ b/src/services/blocks/block_types/pdfBlock/pdfBlock.py
@@ -9,23 +9,23 @@ from src.services.blocks.utils.upload_files import upload_file_and_return_file_o
from src.services.users.users import PublicUser
-async def create_pdf_block(request: Request, pdf_file: UploadFile, lecture_id: str):
+async def create_pdf_block(request: Request, pdf_file: UploadFile, activity_id: str):
blocks = request.app.db["blocks"]
- lecture = request.app.db["lectures"]
+ activity = request.app.db["activities"]
block_type = "pdfBlock"
- # get org_id from lecture
- lecture = await lecture.find_one({"lecture_id": lecture_id}, {"_id": 0, "org_id": 1})
- org_id = lecture["org_id"]
+ # get org_id from activity
+ activity = await activity.find_one({"activity_id": activity_id}, {"_id": 0, "org_id": 1})
+ org_id = activity["org_id"]
# get block id
block_id = str(f"block_{uuid4()}")
- block_data = await upload_file_and_return_file_object(request, pdf_file, lecture_id, block_id, ["pdf"], block_type)
+ block_data = await upload_file_and_return_file_object(request, pdf_file, activity_id, block_id, ["pdf"], block_type)
# create block
- block = Block(block_id=block_id, lecture_id=lecture_id,
+ block = Block(block_id=block_id, activity_id=activity_id,
block_type=block_type, block_data=block_data, org_id=org_id)
# insert block
diff --git a/src/services/blocks/block_types/quizBlock/quizBlock.py b/src/services/blocks/block_types/quizBlock/quizBlock.py
index 5576b12c..2ff389a6 100644
--- a/src/services/blocks/block_types/quizBlock/quizBlock.py
+++ b/src/services/blocks/block_types/quizBlock/quizBlock.py
@@ -28,18 +28,18 @@ class quizBlock(BaseModel):
answers: List[answer]
-async def create_quiz_block(request: Request, quizBlock: quizBlock, lecture_id: str, user: PublicUser):
+async def create_quiz_block(request: Request, quizBlock: quizBlock, activity_id: str, user: PublicUser):
blocks = request.app.db["blocks"]
- lectures = request.app.db["lectures"]
+ activities = request.app.db["activities"]
- # Get org_id from lecture
- lecture = await lectures.find_one({"lecture_id": lecture_id}, {"_id": 0, "org_id": 1})
- org_id = lecture["org_id"]
+ # Get org_id from activity
+ activity = await activities.find_one({"activity_id": activity_id}, {"_id": 0, "org_id": 1})
+ org_id = activity["org_id"]
block_id = str(f"block_{uuid4()}")
# create block
- block = Block(block_id=block_id, lecture_id=lecture_id,
+ block = Block(block_id=block_id, activity_id=activity_id,
block_type="quizBlock", block_data=quizBlock, org_id=org_id)
# insert block
diff --git a/src/services/blocks/block_types/videoBlock/videoBlock.py b/src/services/blocks/block_types/videoBlock/videoBlock.py
index bb71902f..6596c00a 100644
--- a/src/services/blocks/block_types/videoBlock/videoBlock.py
+++ b/src/services/blocks/block_types/videoBlock/videoBlock.py
@@ -9,23 +9,23 @@ from src.services.blocks.utils.upload_files import upload_file_and_return_file_o
from src.services.users.users import PublicUser
-async def create_video_block(request: Request, video_file: UploadFile, lecture_id: str):
+async def create_video_block(request: Request, video_file: UploadFile, activity_id: str):
blocks = request.app.db["blocks"]
- lecture = request.app.db["lectures"]
+ activity = request.app.db["activities"]
block_type = "videoBlock"
- # get org_id from lecture
- lecture = await lecture.find_one({"lecture_id": lecture_id}, {"_id": 0, "org_id": 1})
- org_id = lecture["org_id"]
+ # get org_id from activity
+ activity = await activity.find_one({"activity_id": activity_id}, {"_id": 0, "org_id": 1})
+ org_id = activity["org_id"]
# get block id
block_id = str(f"block_{uuid4()}")
- block_data = await upload_file_and_return_file_object(request, video_file, lecture_id, block_id, ["mp4", "webm", "ogg"], block_type)
+ block_data = await upload_file_and_return_file_object(request, video_file, activity_id, block_id, ["mp4", "webm", "ogg"], block_type)
# create block
- block = Block(block_id=block_id, lecture_id=lecture_id,
+ block = Block(block_id=block_id, activity_id=activity_id,
block_type=block_type, block_data=block_data, org_id=org_id)
# insert block
diff --git a/src/services/blocks/schemas/blocks.py b/src/services/blocks/schemas/blocks.py
index 8fea3827..0c2c9113 100644
--- a/src/services/blocks/schemas/blocks.py
+++ b/src/services/blocks/schemas/blocks.py
@@ -7,7 +7,7 @@ from pydantic import BaseModel
class Block(BaseModel):
block_id: str
- lecture_id: str
+ activity_id: str
org_id: str
block_type: Literal["quizBlock", "videoBlock", "pdfBlock", "imageBlock"]
block_data: Any
diff --git a/src/services/blocks/schemas/files.py b/src/services/blocks/schemas/files.py
index 397d2535..c66edf34 100644
--- a/src/services/blocks/schemas/files.py
+++ b/src/services/blocks/schemas/files.py
@@ -7,4 +7,4 @@ class BlockFile(BaseModel):
file_name: str
file_size: int
file_type: str
- lecture_id: str
\ No newline at end of file
+ activity_id: str
\ No newline at end of file
diff --git a/src/services/blocks/utils/upload_files.py b/src/services/blocks/utils/upload_files.py
index c57e76ff..ce74bc5c 100644
--- a/src/services/blocks/utils/upload_files.py
+++ b/src/services/blocks/utils/upload_files.py
@@ -6,7 +6,7 @@ from src.services.blocks.schemas.files import BlockFile
from src.services.users.schemas.users import PublicUser
-async def upload_file_and_return_file_object(request: Request, file: UploadFile, lecture_id: str, block_id: str, list_of_allowed_file_formats: list, type_of_block: str):
+async def upload_file_and_return_file_object(request: Request, file: UploadFile, activity_id: str, block_id: str, list_of_allowed_file_formats: list, type_of_block: str):
# get file id
file_id = str(uuid.uuid4())
@@ -37,16 +37,16 @@ async def upload_file_and_return_file_object(request: Request, file: UploadFile,
file_name=file_name,
file_size=file_size,
file_type=file_type,
- lecture_id=lecture_id
+ activity_id=activity_id
)
- # create folder for lecture
- if not os.path.exists(f"content/uploads/files/lectures/{lecture_id}/blocks/{type_of_block}/{block_id}"):
- # create folder for lecture
- os.makedirs(f"content/uploads/files/lectures/{lecture_id}/blocks/{type_of_block}/{block_id}")
+ # create folder for activity
+ if not os.path.exists(f"content/uploads/files/activities/{activity_id}/blocks/{type_of_block}/{block_id}"):
+ # create folder for activity
+ os.makedirs(f"content/uploads/files/activities/{activity_id}/blocks/{type_of_block}/{block_id}")
# upload file to server
- with open(f"content/uploads/files/lectures/{lecture_id}/blocks/{type_of_block}/{block_id}/{file_id}.{file_format}", 'wb') as f:
+ with open(f"content/uploads/files/activities/{activity_id}/blocks/{type_of_block}/{block_id}/{file_id}.{file_format}", 'wb') as f:
f.write(file_binary)
f.close()
diff --git a/src/services/courses/activities/activities.py b/src/services/courses/activities/activities.py
new file mode 100644
index 00000000..b3205925
--- /dev/null
+++ b/src/services/courses/activities/activities.py
@@ -0,0 +1,145 @@
+from pydantic import BaseModel
+from src.services.security import verify_user_rights_with_roles
+from src.services.users.schemas.users import PublicUser, User
+from fastapi import FastAPI, HTTPException, status, Request, Response, BackgroundTasks, UploadFile, File
+from uuid import uuid4
+from datetime import datetime
+
+#### Classes ####################################################
+
+
+class Activity(BaseModel):
+ name: str
+ type: str
+ content: object
+
+
+class ActivityInDB(Activity):
+ activity_id: str
+ coursechapter_id: str
+ org_id: str
+ creationDate: str
+ updateDate: str
+
+#### Classes ####################################################
+
+
+####################################################
+# CRUD
+####################################################
+
+
+async def create_activity(request: Request, activity_object: Activity, org_id: str, coursechapter_id: str, current_user: PublicUser):
+ activities = request.app.db["activities"]
+ coursechapters = request.app.db["coursechapters"]
+
+ # generate activity_id
+ activity_id = str(f"activity_{uuid4()}")
+
+ hasRoleRights = await verify_user_rights_with_roles(request, "create", current_user.user_id, activity_id, org_id)
+
+ if not hasRoleRights:
+ raise HTTPException(
+ status_code=status.HTTP_409_CONFLICT, detail="Roles : Insufficient rights to perform this action")
+
+ # create activity
+ activity = ActivityInDB(**activity_object.dict(), creationDate=str(
+ datetime.now()), coursechapter_id=coursechapter_id, updateDate=str(datetime.now()), activity_id=activity_id, org_id=org_id)
+ await activities.insert_one(activity.dict())
+
+ # update chapter
+ await coursechapters.update_one({"coursechapter_id": coursechapter_id}, {
+ "$addToSet": {"activities": activity_id}})
+
+ return activity
+
+
+async def get_activity(request: Request, activity_id: str, current_user: PublicUser):
+ activities = request.app.db["activities"]
+
+ activity = await activities.find_one({"activity_id": activity_id})
+
+ # verify course rights
+ hasRoleRights = await verify_user_rights_with_roles(request, "read", current_user.user_id, activity_id, element_org_id=activity["org_id"])
+
+ if not hasRoleRights:
+ raise HTTPException(
+ status_code=status.HTTP_409_CONFLICT, detail="Roles : Insufficient rights to perform this action")
+
+ if not activity:
+ raise HTTPException(
+ status_code=status.HTTP_409_CONFLICT, detail="Course does not exist")
+
+ activity = ActivityInDB(**activity)
+ return activity
+
+
+async def update_activity(request: Request, activity_object: Activity, activity_id: str, current_user: PublicUser):
+
+ activities = request.app.db["activities"]
+
+ activity = await activities.find_one({"activity_id": activity_id})
+ # verify course rights
+ await verify_user_rights_with_roles(request, "update", current_user.user_id, activity_id, element_org_id=activity["org_id"])
+
+ if activity:
+ creationDate = activity["creationDate"]
+
+ # get today's date
+ datetime_object = datetime.now()
+
+ updated_course = ActivityInDB(
+ activity_id=activity_id, coursechapter_id=activity["coursechapter_id"], creationDate=creationDate, updateDate=str(datetime_object), org_id=activity["org_id"], **activity_object.dict())
+
+ await activities.update_one({"activity_id": activity_id}, {
+ "$set": updated_course.dict()})
+
+ return ActivityInDB(**updated_course.dict())
+
+ else:
+ raise HTTPException(
+ status_code=status.HTTP_409_CONFLICT, detail="activity does not exist")
+
+
+async def delete_activity(request: Request, activity_id: str, current_user: PublicUser):
+
+ activities = request.app.db["activities"]
+
+ activity = await activities.find_one({"activity_id": activity_id})
+
+ # verify course rights
+ await verify_user_rights_with_roles(request, "delete", current_user.user_id, activity_id, element_org_id=activity["org_id"])
+
+ if not activity:
+ raise HTTPException(
+ status_code=status.HTTP_409_CONFLICT, detail="activity does not exist")
+
+ isDeleted = await activities.delete_one({"activity_id": activity_id})
+
+ if isDeleted:
+ return {"detail": "activity deleted"}
+ else:
+ raise HTTPException(
+ status_code=status.HTTP_503_SERVICE_UNAVAILABLE, detail="Unavailable database")
+
+####################################################
+# Misc
+####################################################
+
+
+async def get_activities(request: Request, coursechapter_id: str, current_user: PublicUser):
+ activities = request.app.db["activities"]
+
+ # TODO : TERRIBLE SECURITY ISSUE HERE, NEED TO FIX ASAP
+ # TODO : TERRIBLE SECURITY ISSUE HERE, NEED TO FIX ASAP
+ # TODO : TERRIBLE SECURITY ISSUE HERE, NEED TO FIX ASAP
+
+ activities = activities.find({"coursechapter_id": coursechapter_id})
+
+ if not activities:
+ raise HTTPException(
+ status_code=status.HTTP_409_CONFLICT, detail="Course does not exist")
+
+ activities = [ActivityInDB(**activity) for activity in await activities.to_list(length=100)]
+
+ return activities
diff --git a/src/services/courses/lectures/uploads/videos.py b/src/services/courses/activities/uploads/videos.py
similarity index 62%
rename from src/services/courses/lectures/uploads/videos.py
rename to src/services/courses/activities/uploads/videos.py
index 8d503100..70012d98 100644
--- a/src/services/courses/lectures/uploads/videos.py
+++ b/src/services/courses/activities/uploads/videos.py
@@ -1,14 +1,14 @@
import os
-async def upload_video(video_file, lecture_id):
+async def upload_video(video_file, activity_id):
contents = video_file.file.read()
video_format = video_file.filename.split(".")[-1]
# create folder
- os.mkdir(f"content/uploads/video/{lecture_id}")
+ os.mkdir(f"content/uploads/video/{activity_id}")
try:
- with open(f"content/uploads/video/{lecture_id}/video.{video_format}", 'wb') as f:
+ with open(f"content/uploads/video/{activity_id}/video.{video_format}", 'wb') as f:
f.write(contents)
f.close()
diff --git a/src/services/courses/lectures/video.py b/src/services/courses/activities/video.py
similarity index 61%
rename from src/services/courses/lectures/video.py
rename to src/services/courses/activities/video.py
index 66726291..d921585f 100644
--- a/src/services/courses/lectures/video.py
+++ b/src/services/courses/activities/video.py
@@ -1,19 +1,19 @@
from pydantic import BaseModel
from src.services.security import verify_user_rights_with_roles
-from src.services.courses.lectures.uploads.videos import upload_video
+from src.services.courses.activities.uploads.videos import upload_video
from src.services.users.users import PublicUser
-from src.services.courses.lectures.lectures import LectureInDB
+from src.services.courses.activities.activities import ActivityInDB
from fastapi import HTTPException, status, UploadFile, Request
from uuid import uuid4
from datetime import datetime
-async def create_video_lecture(request: Request,name: str, coursechapter_id: str, current_user: PublicUser, video_file: UploadFile | None = None):
- lectures = request.app.db["lectures"]
+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"]
- # generate lecture_id
- lecture_id = str(f"lecture_{uuid4()}")
+ # generate activity_id
+ activity_id = str(f"activity_{uuid4()}")
# check if video_file is not None
if not video_file:
@@ -21,39 +21,39 @@ async def create_video_lecture(request: Request,name: str, coursechapter_id: st
status_code=status.HTTP_409_CONFLICT, detail="Video : No video file provided")
video_format = video_file.filename.split(".")[-1]
- lecture_object = LectureInDB(
- lecture_id=lecture_id,
+ activity_object = ActivityInDB(
+ activity_id=activity_id,
coursechapter_id=coursechapter_id,
name=name,
type="video",
content={
"video": {
"filename": "video."+video_format,
- "lecture_id": lecture_id,
+ "activity_id": activity_id,
}
},
creationDate=str(datetime.now()),
updateDate=str(datetime.now()),
)
- hasRoleRights = await verify_user_rights_with_roles(request,"create", current_user.user_id, lecture_id)
+ hasRoleRights = await verify_user_rights_with_roles(request,"create", current_user.user_id, activity_id)
if not hasRoleRights:
raise HTTPException(
status_code=status.HTTP_409_CONFLICT, detail="Roles : Insufficient rights to perform this action")
- # create lecture
- lecture = LectureInDB(**lecture_object.dict())
- await lectures.insert_one(lecture.dict())
+ # create activity
+ activity = ActivityInDB(**activity_object.dict())
+ await activities.insert_one(activity.dict())
# upload video
if video_file:
# get videofile format
- await upload_video(video_file, lecture_id)
+ await upload_video(video_file, activity_id)
# todo : choose whether to update the chapter or not
# update chapter
await coursechapters.update_one({"coursechapter_id": coursechapter_id}, {
- "$addToSet": {"lectures": lecture_id}})
+ "$addToSet": {"activities": activity_id}})
- return lecture
+ return activity
diff --git a/src/services/courses/chapters.py b/src/services/courses/chapters.py
index 3841dbab..460a0d97 100644
--- a/src/services/courses/chapters.py
+++ b/src/services/courses/chapters.py
@@ -4,7 +4,7 @@ from typing import List
from uuid import uuid4
from pydantic import BaseModel
from src.services.courses.courses import Course, CourseInDB
-from src.services.courses.lectures.lectures import Lecture, LectureInDB
+from src.services.courses.activities.activities import Activity, ActivityInDB
from src.services.security import verify_user_rights_with_roles
from src.services.users.users import PublicUser
from fastapi import HTTPException, status, Request, Response, BackgroundTasks, UploadFile, File
@@ -13,7 +13,7 @@ from fastapi import HTTPException, status, Request, Response, BackgroundTasks, U
class CourseChapter(BaseModel):
name: str
description: str
- lectures: list
+ activities: list
class CourseChapterInDB(CourseChapter):
@@ -27,7 +27,7 @@ class CourseChapterInDB(CourseChapter):
class CourseChapterMetaData(BaseModel):
chapterOrder: List[str]
chapters: dict
- lectures: object
+ activities: object
#### Classes ####################################################
@@ -158,7 +158,7 @@ async def get_coursechapters(request: Request,course_id: str, page: int = 1, lim
async def get_coursechapters_meta(request: Request, course_id: str, current_user: PublicUser):
coursechapters = request.app.db["coursechapters"]
courses = request.app.db["courses"]
- lectures = request.app.db["lectures"]
+ activities = request.app.db["activities"]
coursechapters = coursechapters.find(
{"course_id": course_id}).sort("name", 1)
@@ -166,35 +166,35 @@ async def get_coursechapters_meta(request: Request, course_id: str, current_user
course = await courses.find_one({"course_id": course_id})
course = Course(**course) # type: ignore
- # lectures
- coursechapter_lectureIds_global = []
+ # activities
+ coursechapter_activityIds_global = []
# chapters
chapters = {}
for coursechapter in await coursechapters.to_list(length=100):
coursechapter = CourseChapterInDB(**coursechapter)
- coursechapter_lectureIds = []
+ coursechapter_activityIds = []
- for lecture in coursechapter.lectures:
- coursechapter_lectureIds.append(lecture)
- coursechapter_lectureIds_global.append(lecture)
+ for activity in coursechapter.activities:
+ coursechapter_activityIds.append(activity)
+ coursechapter_activityIds_global.append(activity)
chapters[coursechapter.coursechapter_id] = {
- "id": coursechapter.coursechapter_id, "name": coursechapter.name, "lectureIds": coursechapter_lectureIds
+ "id": coursechapter.coursechapter_id, "name": coursechapter.name, "activityIds": coursechapter_activityIds
}
- # lectures
- lectures_list = {}
- for lecture in await lectures.find({"lecture_id": {"$in": coursechapter_lectureIds_global}}).to_list(length=100):
- lecture = LectureInDB(**lecture)
- lectures_list[lecture.lecture_id] = {
- "id": lecture.lecture_id, "name": lecture.name, "type": lecture.type, "content": lecture.content
+ # activities
+ activities_list = {}
+ for activity in await activities.find({"activity_id": {"$in": coursechapter_activityIds_global}}).to_list(length=100):
+ activity = ActivityInDB(**activity)
+ activities_list[activity.activity_id] = {
+ "id": activity.activity_id, "name": activity.name, "type": activity.type, "content": activity.content
}
final = {
"chapters": chapters,
"chapterOrder": course.chapters,
- "lectures": lectures_list
+ "activities": activities_list
}
return final
@@ -211,7 +211,7 @@ async def update_coursechapters_meta(request: Request,course_id: str, coursechap
if coursechapters_metadata.chapters is not None:
for coursechapter_id, chapter_metadata in coursechapters_metadata.chapters.items():
filter_query = {"coursechapter_id": coursechapter_id}
- update_query = {"$set": {"lectures": chapter_metadata["lectureIds"]}}
+ update_query = {"$set": {"activities": chapter_metadata["activityIds"]}}
result = await coursechapters.update_one(filter_query, update_query)
if result.matched_count == 0:
# handle error when no documents are matched by the filter query
diff --git a/src/services/courses/courses.py b/src/services/courses/courses.py
index 98b7343c..a2560cd4 100644
--- a/src/services/courses/courses.py
+++ b/src/services/courses/courses.py
@@ -2,7 +2,7 @@ import json
from typing import List
from uuid import uuid4
from pydantic import BaseModel
-from src.services.courses.lectures.lectures import LectureInDB
+from src.services.courses.activities.activities import ActivityInDB
from src.services.courses.thumbnails import upload_thumbnail
from src.services.users.users import PublicUser
from src.services.security import *
@@ -35,7 +35,7 @@ class CourseInDB(Course):
class CourseChapter(BaseModel):
name: str
description: str
- lectures: list
+ activities: list
class CourseChapterInDB(CourseChapter):
@@ -75,7 +75,7 @@ async def get_course_meta(request: Request, course_id: str, current_user: Public
activities = request.app.db["activities"]
course = await courses.find_one({"course_id": course_id})
- lectures = request.app.db["lectures"]
+ activities = request.app.db["activities"]
# verify course rights
await verify_rights(request, course_id, current_user, "read")
@@ -87,35 +87,35 @@ async def get_course_meta(request: Request, course_id: str, current_user: Public
coursechapters = coursechapters.find(
{"course_id": course_id}).sort("name", 1)
- # lectures
- coursechapter_lectureIds_global = []
+ # activities
+ coursechapter_activityIds_global = []
# chapters
chapters = {}
for coursechapter in await coursechapters.to_list(length=100):
coursechapter = CourseChapterInDB(**coursechapter)
- coursechapter_lectureIds = []
+ coursechapter_activityIds = []
- for lecture in coursechapter.lectures:
- coursechapter_lectureIds.append(lecture)
- coursechapter_lectureIds_global.append(lecture)
+ for activity in coursechapter.activities:
+ coursechapter_activityIds.append(activity)
+ coursechapter_activityIds_global.append(activity)
chapters[coursechapter.coursechapter_id] = {
- "id": coursechapter.coursechapter_id, "name": coursechapter.name, "lectureIds": coursechapter_lectureIds
+ "id": coursechapter.coursechapter_id, "name": coursechapter.name, "activityIds": coursechapter_activityIds
}
- # lectures
- lectures_list = {}
- for lecture in await lectures.find({"lecture_id": {"$in": coursechapter_lectureIds_global}}).to_list(length=100):
- lecture = LectureInDB(**lecture)
- lectures_list[lecture.lecture_id] = {
- "id": lecture.lecture_id, "name": lecture.name, "type": lecture.type, "content": lecture.content
+ # activities
+ activities_list = {}
+ for activity in await activities.find({"activity_id": {"$in": coursechapter_activityIds_global}}).to_list(length=100):
+ activity = ActivityInDB(**activity)
+ activities_list[activity.activity_id] = {
+ "id": activity.activity_id, "name": activity.name, "type": activity.type, "content": activity.content
}
- chapters_list_with_lectures = []
+ chapters_list_with_activities = []
for chapter in chapters:
- chapters_list_with_lectures.append(
- {"id": chapters[chapter]["id"], "name": chapters[chapter]["name"], "lectures": [lectures_list[lecture] for lecture in chapters[chapter]["lectureIds"]]})
+ chapters_list_with_activities.append(
+ {"id": chapters[chapter]["id"], "name": chapters[chapter]["name"], "activities": [activities_list[activity] for activity in chapters[chapter]["activityIds"]]})
course = Course(**course)
# Get activity by user
@@ -128,7 +128,7 @@ async def get_course_meta(request: Request, course_id: str, current_user: Public
return {
"course": course,
- "chapters": chapters_list_with_lectures,
+ "chapters": chapters_list_with_activities,
"activity": activity
}
diff --git a/src/services/courses/lectures/lectures.py b/src/services/courses/lectures/lectures.py
deleted file mode 100644
index 4ac492f1..00000000
--- a/src/services/courses/lectures/lectures.py
+++ /dev/null
@@ -1,145 +0,0 @@
-from pydantic import BaseModel
-from src.services.security import verify_user_rights_with_roles
-from src.services.users.schemas.users import PublicUser, User
-from fastapi import FastAPI, HTTPException, status, Request, Response, BackgroundTasks, UploadFile, File
-from uuid import uuid4
-from datetime import datetime
-
-#### Classes ####################################################
-
-
-class Lecture(BaseModel):
- name: str
- type: str
- content: object
-
-
-class LectureInDB(Lecture):
- lecture_id: str
- coursechapter_id: str
- org_id: str
- creationDate: str
- updateDate: str
-
-#### Classes ####################################################
-
-
-####################################################
-# CRUD
-####################################################
-
-
-async def create_lecture(request: Request, lecture_object: Lecture, org_id: str, coursechapter_id: str, current_user: PublicUser):
- lectures = request.app.db["lectures"]
- coursechapters = request.app.db["coursechapters"]
-
- # generate lecture_id
- lecture_id = str(f"lecture_{uuid4()}")
-
- hasRoleRights = await verify_user_rights_with_roles(request, "create", current_user.user_id, lecture_id, org_id)
-
- if not hasRoleRights:
- raise HTTPException(
- status_code=status.HTTP_409_CONFLICT, detail="Roles : Insufficient rights to perform this action")
-
- # create lecture
- lecture = LectureInDB(**lecture_object.dict(), creationDate=str(
- datetime.now()), coursechapter_id=coursechapter_id, updateDate=str(datetime.now()), lecture_id=lecture_id, org_id=org_id)
- await lectures.insert_one(lecture.dict())
-
- # update chapter
- await coursechapters.update_one({"coursechapter_id": coursechapter_id}, {
- "$addToSet": {"lectures": lecture_id}})
-
- return lecture
-
-
-async def get_lecture(request: Request, lecture_id: str, current_user: PublicUser):
- lectures = request.app.db["lectures"]
-
- lecture = await lectures.find_one({"lecture_id": lecture_id})
-
- # verify course rights
- hasRoleRights = await verify_user_rights_with_roles(request, "read", current_user.user_id, lecture_id, element_org_id=lecture["org_id"])
-
- if not hasRoleRights:
- raise HTTPException(
- status_code=status.HTTP_409_CONFLICT, detail="Roles : Insufficient rights to perform this action")
-
- if not lecture:
- raise HTTPException(
- status_code=status.HTTP_409_CONFLICT, detail="Course does not exist")
-
- lecture = LectureInDB(**lecture)
- return lecture
-
-
-async def update_lecture(request: Request, lecture_object: Lecture, lecture_id: str, current_user: PublicUser):
-
- lectures = request.app.db["lectures"]
-
- lecture = await lectures.find_one({"lecture_id": lecture_id})
- # verify course rights
- await verify_user_rights_with_roles(request, "update", current_user.user_id, lecture_id, element_org_id=lecture["org_id"])
-
- if lecture:
- creationDate = lecture["creationDate"]
-
- # get today's date
- datetime_object = datetime.now()
-
- updated_course = LectureInDB(
- lecture_id=lecture_id, coursechapter_id=lecture["coursechapter_id"], creationDate=creationDate, updateDate=str(datetime_object), org_id=lecture["org_id"], **lecture_object.dict())
-
- await lectures.update_one({"lecture_id": lecture_id}, {
- "$set": updated_course.dict()})
-
- return LectureInDB(**updated_course.dict())
-
- else:
- raise HTTPException(
- status_code=status.HTTP_409_CONFLICT, detail="lecture does not exist")
-
-
-async def delete_lecture(request: Request, lecture_id: str, current_user: PublicUser):
-
- lectures = request.app.db["lectures"]
-
- lecture = await lectures.find_one({"lecture_id": lecture_id})
-
- # verify course rights
- await verify_user_rights_with_roles(request, "delete", current_user.user_id, lecture_id, element_org_id=lecture["org_id"])
-
- if not lecture:
- raise HTTPException(
- status_code=status.HTTP_409_CONFLICT, detail="lecture does not exist")
-
- isDeleted = await lectures.delete_one({"lecture_id": lecture_id})
-
- if isDeleted:
- return {"detail": "lecture deleted"}
- else:
- raise HTTPException(
- status_code=status.HTTP_503_SERVICE_UNAVAILABLE, detail="Unavailable database")
-
-####################################################
-# Misc
-####################################################
-
-
-async def get_lectures(request: Request, coursechapter_id: str, current_user: PublicUser):
- lectures = request.app.db["lectures"]
-
- # TODO : TERRIBLE SECURITY ISSUE HERE, NEED TO FIX ASAP
- # TODO : TERRIBLE SECURITY ISSUE HERE, NEED TO FIX ASAP
- # TODO : TERRIBLE SECURITY ISSUE HERE, NEED TO FIX ASAP
-
- lectures = lectures.find({"coursechapter_id": coursechapter_id})
-
- if not lectures:
- raise HTTPException(
- status_code=status.HTTP_409_CONFLICT, detail="Course does not exist")
-
- lectures = [LectureInDB(**lecture) for lecture in await lectures.to_list(length=100)]
-
- return lectures
diff --git a/src/services/mocks/initial.py b/src/services/mocks/initial.py
index 6785f344..623ee645 100644
--- a/src/services/mocks/initial.py
+++ b/src/services/mocks/initial.py
@@ -5,7 +5,7 @@
# from uuid import uuid4
# from fastapi import File, UploadFile, Request
# from src.services.courses.chapters import CourseChapter, create_coursechapter
-# from src.services.courses.lectures.lectures import Lecture, create_lecture
+# from src.services.courses.activities.activities import Activity, create_activity
# from src.services.courses.thumbnails import upload_thumbnail
# from src.services.users.users import PublicUser, User, UserInDB, UserWithPassword
@@ -107,7 +107,7 @@
# collections=["*"],
# organizations=["*"],
# coursechapters=["*"],
-# lectures=["*"],
+# activities=["*"],
# ))],
# linked_users=[admin_user.user_id],
# )
@@ -171,16 +171,16 @@
# coursechapter = CourseChapter(
# name=fake_multilang.unique.sentence(),
# description=fake_multilang.unique.text(),
-# lectures=[],
+# activities=[],
# )
# coursechapter = await create_coursechapter(request,coursechapter, course_id, current_user)
# pprint(coursechapter)
# if coursechapter:
-# # create lectures
+# # create activities
# for i in range(0, 5):
-# lecture = Lecture(
+# activity = Activity(
# name=fake_multilang.unique.sentence(),
# type="dynamic",
# content={},
# )
-# lecture = await create_lecture(request,lecture, coursechapter['coursechapter_id'], current_user)
+# activity = await create_activity(request,activity, coursechapter['coursechapter_id'], current_user)
diff --git a/src/services/roles/schemas/roles.py b/src/services/roles/schemas/roles.py
index cf3f5f74..929b8c95 100644
--- a/src/services/roles/schemas/roles.py
+++ b/src/services/roles/schemas/roles.py
@@ -21,7 +21,7 @@ class Elements(BaseModel):
collections: Permission
organizations: Permission
coursechapters: Permission
- lectures: Permission
+ activities: Permission
def __getitem__(self, item):
return getattr(self, item)
diff --git a/src/services/security.py b/src/services/security.py
index 8ebe3b99..5613873c 100644
--- a/src/services/security.py
+++ b/src/services/security.py
@@ -90,8 +90,8 @@ async def check_element_type(element_id):
return "coursechapters"
elif element_id.startswith("collection_"):
return "collections"
- elif element_id.startswith("lecture_"):
- return "lectures"
+ elif element_id.startswith("activity_"):
+ return "activities"
else:
raise HTTPException(
status_code=status.HTTP_409_CONFLICT, detail="Issue verifying element nature")