mirror of
https://github.com/rzmk/learnhouse.git
synced 2025-12-19 04:19:25 +00:00
feat: improve mongodb implementation
This commit is contained in:
parent
668d03e172
commit
21df8d6de6
26 changed files with 288 additions and 414 deletions
|
|
@ -5,7 +5,6 @@ from pydantic import BaseModel
|
|||
from src.services.courses.lectures.lectures import LectureInDB
|
||||
from src.services.courses.thumbnails import upload_thumbnail
|
||||
from src.services.users import PublicUser
|
||||
from src.services.database import check_database, learnhouseDB
|
||||
from src.services.security import *
|
||||
from fastapi import HTTPException, status, UploadFile
|
||||
from datetime import datetime
|
||||
|
|
@ -54,14 +53,13 @@ class CourseChapterInDB(CourseChapter):
|
|||
# CRUD
|
||||
####################################################
|
||||
|
||||
async def get_course(course_id: str, current_user: PublicUser):
|
||||
await check_database()
|
||||
courses = learnhouseDB["courses"]
|
||||
async def get_course(request: Request,course_id: str, current_user: PublicUser):
|
||||
courses = request.app.db["courses"]
|
||||
|
||||
course = courses.find_one({"course_id": course_id})
|
||||
|
||||
# verify course rights
|
||||
await verify_rights(course_id, current_user, "read")
|
||||
await verify_rights(request,course_id, current_user, "read")
|
||||
|
||||
if not course:
|
||||
raise HTTPException(
|
||||
|
|
@ -71,15 +69,14 @@ async def get_course(course_id: str, current_user: PublicUser):
|
|||
return course
|
||||
|
||||
|
||||
async def get_course_meta(course_id: str, current_user: PublicUser):
|
||||
await check_database()
|
||||
courses = learnhouseDB["courses"]
|
||||
coursechapters = learnhouseDB["coursechapters"]
|
||||
async def get_course_meta(request: Request,course_id: str, current_user: PublicUser):
|
||||
courses = request.app.db["courses"]
|
||||
coursechapters = request.app.db["coursechapters"]
|
||||
course = courses.find_one({"course_id": course_id})
|
||||
lectures = learnhouseDB["lectures"]
|
||||
lectures = request.app.db["lectures"]
|
||||
|
||||
# verify course rights
|
||||
await verify_rights(course_id, current_user, "read")
|
||||
await verify_rights(request,course_id, current_user, "read")
|
||||
|
||||
if not course:
|
||||
raise HTTPException(
|
||||
|
|
@ -124,16 +121,15 @@ async def get_course_meta(course_id: str, current_user: PublicUser):
|
|||
}
|
||||
|
||||
|
||||
async def create_course(course_object: Course, org_id: str, current_user: PublicUser, thumbnail_file: UploadFile | None = None):
|
||||
await check_database()
|
||||
courses = learnhouseDB["courses"]
|
||||
async def create_course(request: Request,course_object: Course, org_id: str, current_user: PublicUser, thumbnail_file: UploadFile | None = None):
|
||||
courses = request.app.db["courses"]
|
||||
|
||||
# generate course_id with uuid4
|
||||
course_id = str(f"course_{uuid4()}")
|
||||
|
||||
# TODO(fix) : the implementation here is clearly not the best one (this entire function)
|
||||
course_object.org_id = org_id
|
||||
hasRoleRights = await verify_user_rights_with_roles("create", current_user.user_id, course_id)
|
||||
hasRoleRights = await verify_user_rights_with_roles(request, "create", current_user.user_id, course_id)
|
||||
|
||||
if not hasRoleRights:
|
||||
raise HTTPException(
|
||||
|
|
@ -156,13 +152,12 @@ async def create_course(course_object: Course, org_id: str, current_user: Public
|
|||
return course.dict()
|
||||
|
||||
|
||||
async def update_course_thumbnail(course_id: str, current_user: PublicUser, thumbnail_file: UploadFile | None = None):
|
||||
await check_database()
|
||||
async def update_course_thumbnail(request: Request,course_id: str, current_user: PublicUser, thumbnail_file: UploadFile | None = None):
|
||||
|
||||
# verify course rights
|
||||
await verify_rights(course_id, current_user, "update")
|
||||
await verify_rights(request, course_id, current_user, "update")
|
||||
|
||||
courses = learnhouseDB["courses"]
|
||||
courses = request.app.db["courses"]
|
||||
|
||||
course = courses.find_one({"course_id": course_id})
|
||||
# TODO(fix) : the implementation here is clearly not the best one
|
||||
|
|
@ -187,13 +182,12 @@ async def update_course_thumbnail(course_id: str, current_user: PublicUser, thum
|
|||
status_code=status.HTTP_409_CONFLICT, detail="Course does not exist")
|
||||
|
||||
|
||||
async def update_course(course_object: Course, course_id: str, current_user: PublicUser):
|
||||
await check_database()
|
||||
async def update_course(request: Request,course_object: Course, course_id: str, current_user: PublicUser):
|
||||
|
||||
# verify course rights
|
||||
await verify_rights(course_id, current_user, "update")
|
||||
await verify_rights(request, course_id, current_user, "update")
|
||||
|
||||
courses = learnhouseDB["courses"]
|
||||
courses = request.app.db["courses"]
|
||||
|
||||
course = courses.find_one({"course_id": course_id})
|
||||
|
||||
|
|
@ -217,13 +211,12 @@ async def update_course(course_object: Course, course_id: str, current_user: Pub
|
|||
status_code=status.HTTP_409_CONFLICT, detail="Course does not exist")
|
||||
|
||||
|
||||
async def delete_course(course_id: str, current_user: PublicUser):
|
||||
await check_database()
|
||||
async def delete_course(request: Request,course_id: str, current_user: PublicUser):
|
||||
|
||||
# verify course rights
|
||||
await verify_rights(course_id, current_user, "delete")
|
||||
await verify_rights(request, course_id, current_user, "delete")
|
||||
|
||||
courses = learnhouseDB["courses"]
|
||||
courses = request.app.db["courses"]
|
||||
|
||||
course = courses.find_one({"course_id": course_id})
|
||||
|
||||
|
|
@ -244,9 +237,8 @@ async def delete_course(course_id: str, current_user: PublicUser):
|
|||
####################################################
|
||||
|
||||
|
||||
async def get_courses(page: int = 1, limit: int = 10, org_id: str | None = None):
|
||||
await check_database()
|
||||
courses = learnhouseDB["courses"]
|
||||
async def get_courses(request: Request,page: int = 1, limit: int = 10, org_id: str | None = None):
|
||||
courses = request.app.db["courses"]
|
||||
# TODO : Get only courses that user is admin/has roles of
|
||||
# get all courses from database
|
||||
all_courses = courses.find({"org_id": org_id}).sort(
|
||||
|
|
@ -258,9 +250,8 @@ async def get_courses(page: int = 1, limit: int = 10, org_id: str | None = None)
|
|||
#### Security ####################################################
|
||||
|
||||
|
||||
async def verify_rights(course_id: str, current_user: PublicUser, action: str):
|
||||
await check_database()
|
||||
courses = learnhouseDB["courses"]
|
||||
async def verify_rights(request: Request,course_id: str, current_user: PublicUser, action: str):
|
||||
courses = request.app.db["courses"]
|
||||
|
||||
course = courses.find_one({"course_id": course_id})
|
||||
|
||||
|
|
@ -268,7 +259,7 @@ async def verify_rights(course_id: str, current_user: PublicUser, action: str):
|
|||
raise HTTPException(
|
||||
status_code=status.HTTP_409_CONFLICT, detail=f"Course/CourseChapter does not exist")
|
||||
|
||||
hasRoleRights = await verify_user_rights_with_roles(action, current_user.user_id, course_id)
|
||||
hasRoleRights = await verify_user_rights_with_roles(request, action, current_user.user_id, course_id)
|
||||
isAuthor = current_user.user_id in course["authors"]
|
||||
|
||||
if not hasRoleRights and not isAuthor:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue