mirror of
https://github.com/rzmk/learnhouse.git
synced 2025-12-19 04:19:25 +00:00
feat: add elements
This commit is contained in:
parent
938cfcb4b3
commit
6f2cc5bdc6
23 changed files with 241 additions and 104 deletions
|
|
@ -4,20 +4,18 @@ from typing import List
|
|||
from uuid import uuid4
|
||||
from pydantic import BaseModel
|
||||
from src.services.courses.courses import Course, CourseInDB
|
||||
from src.services.courses.elements import Element, ElementInDB
|
||||
from src.services.database import create_config_collection, check_database, create_database, learnhouseDB, learnhouseDB
|
||||
from src.services.security import verify_user_rights_with_roles
|
||||
from src.services.users import PublicUser
|
||||
from fastapi import FastAPI, HTTPException, status, Request, Response, BackgroundTasks, UploadFile, File
|
||||
|
||||
|
||||
class CourseElement(BaseModel):
|
||||
element_id: str
|
||||
|
||||
|
||||
class CourseChapter(BaseModel):
|
||||
name: str
|
||||
description: str
|
||||
elements: List[CourseElement]
|
||||
elements: list
|
||||
|
||||
|
||||
class CourseChapterInDB(CourseChapter):
|
||||
|
|
@ -164,13 +162,19 @@ async def get_coursechapters_meta(course_id: str, current_user: PublicUser):
|
|||
await check_database()
|
||||
coursechapters = learnhouseDB["coursechapters"]
|
||||
courses = learnhouseDB["courses"]
|
||||
elements = learnhouseDB["elements"]
|
||||
|
||||
coursechapters = coursechapters.find(
|
||||
{"course_id": course_id}).sort("name", 1)
|
||||
|
||||
|
||||
|
||||
course = courses.find_one({"course_id": course_id})
|
||||
course = Course(**course) # type: ignore
|
||||
|
||||
# elements
|
||||
coursechapter_elementIds_global = []
|
||||
|
||||
# chapters
|
||||
chapters = {}
|
||||
for coursechapter in coursechapters:
|
||||
|
|
@ -178,15 +182,27 @@ async def get_coursechapters_meta(course_id: str, current_user: PublicUser):
|
|||
coursechapter_elementIds = []
|
||||
|
||||
for element in coursechapter.elements:
|
||||
coursechapter_elementIds.append(element.element_id)
|
||||
coursechapter_elementIds.append(element)
|
||||
coursechapter_elementIds_global.append(element)
|
||||
|
||||
chapters[coursechapter.coursechapter_id] = {
|
||||
"id": coursechapter.coursechapter_id, "name": coursechapter.name, "elementIds": coursechapter_elementIds
|
||||
}
|
||||
|
||||
# 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
|
||||
}
|
||||
|
||||
|
||||
|
||||
final = {
|
||||
"chapters": chapters,
|
||||
"chapterOrder": course.chapters
|
||||
"chapterOrder": course.chapters,
|
||||
"elements" : elements_list
|
||||
}
|
||||
|
||||
return final
|
||||
|
|
|
|||
|
|
@ -8,11 +8,11 @@ from datetime import datetime
|
|||
|
||||
#### Classes ####################################################
|
||||
|
||||
|
||||
class Element(BaseModel):
|
||||
name: str
|
||||
element_type: str
|
||||
content: str
|
||||
|
||||
type: str
|
||||
content: object
|
||||
|
||||
|
||||
class ElementInDB(Element):
|
||||
|
|
@ -29,9 +29,10 @@ class ElementInDB(Element):
|
|||
####################################################
|
||||
|
||||
|
||||
async def create_element(element_object: Element, coursechapter_id : str , current_user: PublicUser):
|
||||
async def create_element(element_object: Element, coursechapter_id: str, current_user: PublicUser):
|
||||
await check_database()
|
||||
elements = learnhouseDB["elements"]
|
||||
coursechapters = learnhouseDB["coursechapters"]
|
||||
|
||||
# generate element_id
|
||||
element_id = str(f"element_{uuid4()}")
|
||||
|
|
@ -47,6 +48,10 @@ async def create_element(element_object: Element, coursechapter_id : str , curre
|
|||
datetime.now()), coursechapter_id=coursechapter_id, updateDate=str(datetime.now()), element_id=element_id)
|
||||
elements.insert_one(element.dict())
|
||||
|
||||
# update chapter
|
||||
coursechapters.update_one({"coursechapter_id": coursechapter_id}, {
|
||||
"$addToSet": {"elements": element_id}})
|
||||
|
||||
return element
|
||||
|
||||
|
||||
|
|
@ -88,7 +93,7 @@ async def update_element(element_object: Element, element_id: str, current_user:
|
|||
datetime_object = datetime.now()
|
||||
|
||||
updated_course = ElementInDB(
|
||||
element_id=element_id,coursechapter_id=element["coursechapter_id"] ,creationDate=creationDate, updateDate=str(datetime_object), **element_object.dict())
|
||||
element_id=element_id, coursechapter_id=element["coursechapter_id"], creationDate=creationDate, updateDate=str(datetime_object), **element_object.dict())
|
||||
|
||||
elements.update_one({"element_id": element_id}, {
|
||||
"$set": updated_course.dict()})
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ class Elements(BaseModel):
|
|||
collections: List[str]
|
||||
organizations: List[str]
|
||||
coursechapters: List[str]
|
||||
elements : List[str]
|
||||
|
||||
|
||||
class Role(BaseModel):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue