feat: add course thumbnail update & upload api

This commit is contained in:
swve 2022-10-14 21:52:28 +02:00
parent 977008f0ae
commit 3581b4409f
2 changed files with 50 additions and 2 deletions

View file

@ -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)):

View file

@ -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()