mirror of
https://github.com/rzmk/learnhouse.git
synced 2025-12-18 11:59:26 +00:00
feat: add course thumbnail update & upload api
This commit is contained in:
parent
977008f0ae
commit
3581b4409f
2 changed files with 50 additions and 2 deletions
|
|
@ -1,7 +1,7 @@
|
|||
from fastapi import APIRouter, Depends, File, UploadFile
|
||||
from src.services.auth import get_current_user
|
||||
|
||||
from src.services.courses import Course, CourseChapter, create_course, create_coursechapter, delete_coursechapter, get_course, get_coursechapter, get_coursechapters, get_courses, update_course, delete_course, update_coursechapter
|
||||
from src.services.courses import Course, CourseChapter, create_course, create_coursechapter, delete_coursechapter, get_course, get_coursechapter, get_coursechapters, get_courses, update_course, delete_course, update_course_thumbnail, update_coursechapter
|
||||
from src.services.users import PublicUser, User
|
||||
|
||||
|
||||
|
|
@ -15,6 +15,13 @@ async def api_create_course(course_object: Course, org_id :str , current_user:
|
|||
"""
|
||||
return await create_course(course_object, org_id , current_user)
|
||||
|
||||
@router.put("/thumbnail/{course_id}")
|
||||
async def api_create_course_thumbnail(course_id : str, thumbnail: UploadFile | None = None, current_user: PublicUser = Depends(get_current_user)):
|
||||
"""
|
||||
Create new Course Thumbnail
|
||||
"""
|
||||
return await update_course_thumbnail(course_id, current_user, thumbnail)
|
||||
|
||||
|
||||
@router.get("/{course_id}")
|
||||
async def api_get_course(course_id: str, org_id : str, current_user: PublicUser = Depends(get_current_user)):
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ class Course(BaseModel):
|
|||
description: str
|
||||
photo: str
|
||||
learnings: List[str]
|
||||
cover_photo: str
|
||||
thumbnail : str
|
||||
public: bool
|
||||
chapters: List[str]
|
||||
org_id: str
|
||||
|
|
@ -105,6 +105,47 @@ async def create_course(course_object: Course, org_id : str , current_user: Publ
|
|||
|
||||
return course.dict()
|
||||
|
||||
async def update_course_thumbnail(course_id: str , current_user: PublicUser, thumbnail_file: UploadFile | None = None):
|
||||
await check_database()
|
||||
|
||||
# verify course rights
|
||||
await verify_rights(course_id, current_user, "update")
|
||||
|
||||
courses = learnhouseDB["courses"]
|
||||
|
||||
course = courses.find_one({"course_id": course_id})
|
||||
# TODO(fix) : the implementation here is clearly not the best one
|
||||
if course:
|
||||
creationDate = course["creationDate"]
|
||||
authors = course["authors"]
|
||||
if thumbnail_file:
|
||||
contents = thumbnail_file.file.read()
|
||||
name_in_disk = f"{course_id}_thumbnail_{uuid4()}.{thumbnail_file.filename.split('.')[-1]}"
|
||||
course = Course(**course).copy(update={"thumbnail": name_in_disk})
|
||||
try:
|
||||
with open(f"content/uploads/img/{name_in_disk}", 'wb') as f:
|
||||
f.write(contents)
|
||||
f.close()
|
||||
|
||||
except Exception as e:
|
||||
print(e)
|
||||
return {"message": "There was an error uploading the file"}
|
||||
finally:
|
||||
thumbnail_file.file.close()
|
||||
|
||||
|
||||
updated_course = CourseInDB(course_id=course_id, creationDate=creationDate, authors=authors, updateDate=str(datetime.now()) , **course.dict())
|
||||
|
||||
courses.update_one({"course_id": course_id}, {
|
||||
"$set": updated_course.dict()})
|
||||
|
||||
return CourseInDB(**updated_course.dict())
|
||||
|
||||
|
||||
else:
|
||||
raise HTTPException(
|
||||
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()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue