feat: add courses index page + backend update

This commit is contained in:
swve 2022-10-01 10:16:35 +02:00
parent 86fdd89b23
commit 4b623ae1b8
14 changed files with 218 additions and 50 deletions

View file

@ -16,9 +16,11 @@ class Course(BaseModel):
mini_description: str
description: str
photo: str
learnings: List[str]
cover_photo: str
public: bool
chapters: List[str]
org_id: str
class CourseInDB(Course):
@ -59,11 +61,11 @@ class CourseChapterInDB(CourseChapter):
# Courses
async def get_course(course_id: str, current_user: User):
async def get_course(course_id: str, org_id :str , current_user: User):
await check_database()
courses = learnhouseDB["courses"]
course = courses.find_one({"course_id": course_id})
course = courses.find_one({"course_id": course_id , "org_id" : org_id})
# verify course rights
await verify_rights(course_id, current_user, "read")
@ -76,12 +78,14 @@ async def get_course(course_id: str, current_user: User):
return course
async def create_course(course_object: Course, current_user: User):
async def create_course(course_object: Course, org_id : str , current_user: User):
await check_database()
courses = learnhouseDB["courses"]
# generate course_id with uuid4
course_id = str(f"course_{uuid4()}")
course_object.org_id = org_id
hasRoleRights = await verify_user_rights_with_roles("create", current_user.user_id, course_id)
@ -153,12 +157,12 @@ async def delete_course(course_id: str, current_user: User):
status_code=status.HTTP_503_SERVICE_UNAVAILABLE, detail="Unavailable database")
async def get_courses(page: int = 1, limit: int = 10):
async def get_courses(page: int = 1, limit: int = 10 , org_id : str = None):
await check_database()
courses = learnhouseDB["courses"]
# TODO : Get only courses that user is admin/has roles of
# get all courses from database
all_courses = courses.find().sort("name", 1).skip(10 * (page - 1)).limit(limit)
all_courses = courses.find({"org_id": org_id}).sort("name", 1).skip(10 * (page - 1)).limit(limit)
return [json.loads(json.dumps(course, default=str)) for course in all_courses]

View file

@ -22,6 +22,13 @@ class OrganizationInDB(Organization):
org_id: str
owners: List[str]
admins: List[str]
class PublicOrganization(Organization):
name: str
description: str
email: str
slug: str
org_id: str
#### Classes ####################################################
@ -37,7 +44,20 @@ async def get_organization(org_id: str):
raise HTTPException(
status_code=status.HTTP_409_CONFLICT, detail="Organization does not exist")
org = Organization(**org)
org = PublicOrganization(**org)
return org
async def get_organization_by_slug(org_slug: str):
await check_database()
orgs = learnhouseDB["organizations"]
org = orgs.find_one({"slug": org_slug})
if not org:
raise HTTPException(
status_code=status.HTTP_409_CONFLICT, detail="Organization does not exist")
org = PublicOrganization(**org)
return org

View file

@ -20,7 +20,7 @@ class Permission(BaseModel):
class Elements(BaseModel):
course: List[str]
courses: List[str]
users: List[str]
houses: List[str]
collections: List[str]

View file

@ -73,7 +73,7 @@ async def check_element_type(element_id):
elif element_id.startswith("org_"):
return "organizations"
elif element_id.startswith("coursechapter_"):
return "courses"
return "coursechapters"
elif element_id.startswith("collection_"):
return "collections"
else: