mirror of
https://github.com/rzmk/learnhouse.git
synced 2025-12-18 20:09:25 +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 fastapi import APIRouter, Depends, File, UploadFile
|
||||||
from src.services.auth import get_current_user
|
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
|
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)
|
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}")
|
@router.get("/{course_id}")
|
||||||
async def api_get_course(course_id: str, org_id : str, current_user: PublicUser = Depends(get_current_user)):
|
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
|
description: str
|
||||||
photo: str
|
photo: str
|
||||||
learnings: List[str]
|
learnings: List[str]
|
||||||
cover_photo: str
|
thumbnail : str
|
||||||
public: bool
|
public: bool
|
||||||
chapters: List[str]
|
chapters: List[str]
|
||||||
org_id: str
|
org_id: str
|
||||||
|
|
@ -105,6 +105,47 @@ async def create_course(course_object: Course, org_id : str , current_user: Publ
|
||||||
|
|
||||||
return course.dict()
|
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):
|
async def update_course(course_object: Course, course_id: str, current_user: PublicUser):
|
||||||
await check_database()
|
await check_database()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue