mirror of
https://github.com/rzmk/learnhouse.git
synced 2025-12-19 04:19:25 +00:00
chore: refactor block files
This commit is contained in:
parent
642e55ce2e
commit
0b2e407bf3
9 changed files with 30 additions and 87 deletions
|
|
@ -7,14 +7,14 @@ export async function uploadNewPDFFile(file: any, lecture_id: string) {
|
||||||
formData.append("file_object", file);
|
formData.append("file_object", file);
|
||||||
formData.append("lecture_id", lecture_id);
|
formData.append("lecture_id", lecture_id);
|
||||||
|
|
||||||
return fetch(`${getAPIUrl()}files/document`, RequestBodyForm("POST", formData))
|
return fetch(`${getAPIUrl()}blocks/document`, RequestBodyForm("POST", formData))
|
||||||
.then((result) => result.json())
|
.then((result) => result.json())
|
||||||
.catch((error) => console.log("error", error));
|
.catch((error) => console.log("error", error));
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getPDFFile(file_id: string) {
|
export async function getPDFFile(file_id: string) {
|
||||||
// todo : add course id to url
|
// todo : add course id to url
|
||||||
return fetch(`${getAPIUrl()}files/document?file_id=${file_id}`, RequestBody("GET", null))
|
return fetch(`${getAPIUrl()}blocks/document?file_id=${file_id}`, RequestBody("GET", null))
|
||||||
.then((result) => result.json())
|
.then((result) => result.json())
|
||||||
.catch((error) => console.log("error", error));
|
.catch((error) => console.log("error", error));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,14 +7,14 @@ export async function uploadNewImageFile(file: any, lecture_id: string) {
|
||||||
formData.append("file_object", file);
|
formData.append("file_object", file);
|
||||||
formData.append("lecture_id", lecture_id);
|
formData.append("lecture_id", lecture_id);
|
||||||
|
|
||||||
return fetch(`${getAPIUrl()}files/picture`, RequestBodyForm("POST", formData))
|
return fetch(`${getAPIUrl()}blocks/image`, RequestBodyForm("POST", formData))
|
||||||
.then((result) => result.json())
|
.then((result) => result.json())
|
||||||
.catch((error) => console.log("error", error));
|
.catch((error) => console.log("error", error));
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getImageFile(file_id: string) {
|
export async function getImageFile(file_id: string) {
|
||||||
// todo : add course id to url
|
// todo : add course id to url
|
||||||
return fetch(`${getAPIUrl()}files/picture?file_id=${file_id}`, RequestBody("GET", null))
|
return fetch(`${getAPIUrl()}blocks/image?file_id=${file_id}`, RequestBody("GET", null))
|
||||||
.then((result) => result.json())
|
.then((result) => result.json())
|
||||||
.catch((error) => console.log("error", error));
|
.catch((error) => console.log("error", error));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,13 +7,13 @@ export async function uploadNewVideoFile(file: any, lecture_id: string) {
|
||||||
formData.append("file_object", file);
|
formData.append("file_object", file);
|
||||||
formData.append("lecture_id", lecture_id);
|
formData.append("lecture_id", lecture_id);
|
||||||
|
|
||||||
return fetch(`${getAPIUrl()}files/video`, RequestBodyForm("POST", formData))
|
return fetch(`${getAPIUrl()}blocks/video`, RequestBodyForm("POST", formData))
|
||||||
.then((result) => result.json())
|
.then((result) => result.json())
|
||||||
.catch((error) => console.log("error", error));
|
.catch((error) => console.log("error", error));
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getVideoFile(file_id: string) {
|
export async function getVideoFile(file_id: string) {
|
||||||
return fetch(`${getAPIUrl()}files/video?file_id=${file_id}`, RequestBody("GET", null))
|
return fetch(`${getAPIUrl()}blocks/video?file_id=${file_id}`, RequestBody("GET", null))
|
||||||
.then((result) => result.json())
|
.then((result) => result.json())
|
||||||
.catch((error) => console.log("error", error));
|
.catch((error) => console.log("error", error));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
from fastapi import APIRouter
|
from fastapi import APIRouter
|
||||||
from src.routers import activity, blocks, users, auth, houses, orgs, roles, files
|
from src.routers import activity, blocks, users, auth, houses, orgs, roles
|
||||||
from src.routers.courses import chapters, collections, courses,lectures
|
from src.routers.courses import chapters, collections, courses,lectures
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -12,7 +12,6 @@ global_router.include_router(auth.router, prefix="/auth", tags=["auth"])
|
||||||
global_router.include_router(houses.router, prefix="/houses", tags=["houses"])
|
global_router.include_router(houses.router, prefix="/houses", tags=["houses"])
|
||||||
global_router.include_router(orgs.router, prefix="/orgs", tags=["orgs"])
|
global_router.include_router(orgs.router, prefix="/orgs", tags=["orgs"])
|
||||||
global_router.include_router(roles.router, prefix="/roles", tags=["roles"])
|
global_router.include_router(roles.router, prefix="/roles", tags=["roles"])
|
||||||
global_router.include_router(files.router, prefix="/files", tags=["files"])
|
|
||||||
global_router.include_router(blocks.router, prefix="/blocks", tags=["blocks"])
|
global_router.include_router(blocks.router, prefix="/blocks", tags=["blocks"])
|
||||||
global_router.include_router(courses.router, prefix="/courses", tags=["courses"])
|
global_router.include_router(courses.router, prefix="/courses", tags=["courses"])
|
||||||
global_router.include_router(chapters.router, prefix="/chapters", tags=["chapters"])
|
global_router.include_router(chapters.router, prefix="/chapters", tags=["chapters"])
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
from fastapi import APIRouter, Depends, UploadFile, Form, Request
|
from fastapi import APIRouter, Depends, UploadFile, Form, Request
|
||||||
from src.dependencies.auth import get_current_user
|
from src.dependencies.auth import get_current_user
|
||||||
from fastapi import HTTPException, status, UploadFile
|
from fastapi import HTTPException, status, UploadFile
|
||||||
from src.services.blocks.files.pictures import create_picture_file, get_picture_file
|
from src.services.blocks.imageBlock.images import create_image_file, get_image_file
|
||||||
from src.services.blocks.files.videos import create_video_file, get_video_file
|
from src.services.blocks.videoBlock.videos import create_video_file, get_video_file
|
||||||
from src.services.blocks.pdfBlock.documents import create_document_file, get_document_file
|
from src.services.blocks.pdfBlock.documents import create_document_file, get_document_file
|
||||||
from src.services.blocks.quizBlock.quizBlock import create_quiz_block, get_quiz_block_answers, get_quiz_block_options, quizBlock
|
from src.services.blocks.quizBlock.quizBlock import create_quiz_block, get_quiz_block_answers, get_quiz_block_options, quizBlock
|
||||||
from src.services.users import PublicUser
|
from src.services.users import PublicUser
|
||||||
|
|
@ -10,12 +10,12 @@ from src.services.users import PublicUser
|
||||||
router = APIRouter()
|
router = APIRouter()
|
||||||
|
|
||||||
|
|
||||||
@router.post("/picture")
|
@router.post("/image")
|
||||||
async def api_create_picture_file_block(request: Request, file_object: UploadFile, lecture_id: str = Form(), current_user: PublicUser = Depends(get_current_user)):
|
async def api_create_image_file_block(request: Request, file_object: UploadFile, lecture_id: str = Form(), current_user: PublicUser = Depends(get_current_user)):
|
||||||
"""
|
"""
|
||||||
Create new picture file
|
Create new image file
|
||||||
"""
|
"""
|
||||||
return await create_picture_file(request, file_object, lecture_id)
|
return await create_image_file(request, file_object, lecture_id)
|
||||||
|
|
||||||
|
|
||||||
@router.post("/video")
|
@router.post("/video")
|
||||||
|
|
@ -26,12 +26,12 @@ async def api_create_video_file_block(request: Request, file_object: UploadFile,
|
||||||
return await create_video_file(request, file_object, lecture_id)
|
return await create_video_file(request, file_object, lecture_id)
|
||||||
|
|
||||||
|
|
||||||
@router.get("/picture")
|
@router.get("/image")
|
||||||
async def api_get_picture_file_block(request: Request, file_id: str, current_user: PublicUser = Depends(get_current_user)):
|
async def api_get_image_file_block(request: Request, file_id: str, current_user: PublicUser = Depends(get_current_user)):
|
||||||
"""
|
"""
|
||||||
Get picture file
|
Get image file
|
||||||
"""
|
"""
|
||||||
return await get_picture_file(request, file_id, current_user)
|
return await get_image_file(request, file_id, current_user)
|
||||||
|
|
||||||
|
|
||||||
@router.get("/video")
|
@router.get("/video")
|
||||||
|
|
|
||||||
|
|
@ -1,56 +0,0 @@
|
||||||
from fastapi import APIRouter, Depends, UploadFile, Form, Request
|
|
||||||
from src.dependencies.auth import get_current_user
|
|
||||||
from fastapi import HTTPException, status, UploadFile
|
|
||||||
from src.services.blocks.files.pictures import create_picture_file, get_picture_file
|
|
||||||
from src.services.blocks.files.videos import create_video_file, get_video_file
|
|
||||||
from src.services.blocks.pdfBlock.documents import create_document_file, get_document_file
|
|
||||||
from src.services.users import PublicUser
|
|
||||||
|
|
||||||
router = APIRouter()
|
|
||||||
|
|
||||||
|
|
||||||
@router.post("/picture")
|
|
||||||
async def api_create_picture_file(request: Request, file_object: UploadFile, lecture_id: str = Form(), current_user: PublicUser = Depends(get_current_user)):
|
|
||||||
"""
|
|
||||||
Create new picture file
|
|
||||||
"""
|
|
||||||
return await create_picture_file(request, file_object, lecture_id)
|
|
||||||
|
|
||||||
|
|
||||||
@router.post("/video")
|
|
||||||
async def api_create_video_file(request: Request, file_object: UploadFile, lecture_id: str = Form(), current_user: PublicUser = Depends(get_current_user)):
|
|
||||||
"""
|
|
||||||
Create new video file
|
|
||||||
"""
|
|
||||||
return await create_video_file(request, file_object, lecture_id)
|
|
||||||
|
|
||||||
|
|
||||||
@router.get("/picture")
|
|
||||||
async def api_get_picture_file(request: Request, file_id: str, current_user: PublicUser = Depends(get_current_user)):
|
|
||||||
"""
|
|
||||||
Get picture file
|
|
||||||
"""
|
|
||||||
return await get_picture_file(request, file_id, current_user)
|
|
||||||
|
|
||||||
|
|
||||||
@router.get("/video")
|
|
||||||
async def api_get_video_file(request: Request, file_id: str, current_user: PublicUser = Depends(get_current_user)):
|
|
||||||
"""
|
|
||||||
Get video file
|
|
||||||
"""
|
|
||||||
return await get_video_file(request, file_id, current_user)
|
|
||||||
|
|
||||||
@router.get("/document")
|
|
||||||
async def api_get_document_file(request: Request, file_id: str, current_user: PublicUser = Depends(get_current_user)):
|
|
||||||
"""
|
|
||||||
Get document file
|
|
||||||
"""
|
|
||||||
return await get_document_file(request, file_id, current_user)
|
|
||||||
|
|
||||||
|
|
||||||
@router.post("/document")
|
|
||||||
async def api_create_document_file(request: Request, file_object: UploadFile, lecture_id: str = Form(), current_user: PublicUser = Depends(get_current_user)):
|
|
||||||
"""
|
|
||||||
Create new document file
|
|
||||||
"""
|
|
||||||
return await create_document_file(request, file_object, lecture_id)
|
|
||||||
|
|
@ -16,31 +16,31 @@ class PhotoFile(BaseModel):
|
||||||
lecture_id: str
|
lecture_id: str
|
||||||
|
|
||||||
|
|
||||||
async def create_picture_file(request: Request,picture_file: UploadFile, lecture_id: str):
|
async def create_image_file(request: Request,image_file: UploadFile, lecture_id: str):
|
||||||
photos = request.app.db["files"]
|
photos = request.app.db["files"]
|
||||||
|
|
||||||
# generate file_id
|
# generate file_id
|
||||||
file_id = str(f"file_{uuid4()}")
|
file_id = str(f"file_{uuid4()}")
|
||||||
|
|
||||||
# get file format
|
# get file format
|
||||||
file_format = picture_file.filename.split(".")[-1]
|
file_format = image_file.filename.split(".")[-1]
|
||||||
|
|
||||||
# validate file format
|
# validate file format
|
||||||
if file_format not in ["jpg", "jpeg", "png", "gif"]:
|
if file_format not in ["jpg", "jpeg", "png", "gif"]:
|
||||||
raise HTTPException(
|
raise HTTPException(
|
||||||
status_code=status.HTTP_409_CONFLICT, detail="Picture file format not supported")
|
status_code=status.HTTP_409_CONFLICT, detail="Image file format not supported")
|
||||||
|
|
||||||
# create file
|
# create file
|
||||||
file = await picture_file.read()
|
file = await image_file.read()
|
||||||
|
|
||||||
# get file size
|
# get file size
|
||||||
file_size = len(file)
|
file_size = len(file)
|
||||||
|
|
||||||
# get file type
|
# get file type
|
||||||
file_type = picture_file.content_type
|
file_type = image_file.content_type
|
||||||
|
|
||||||
# get file name
|
# get file name
|
||||||
file_name = picture_file.filename
|
file_name = image_file.filename
|
||||||
|
|
||||||
# create file object
|
# create file object
|
||||||
uploadable_file = PhotoFile(
|
uploadable_file = PhotoFile(
|
||||||
|
|
@ -53,11 +53,11 @@ async def create_picture_file(request: Request,picture_file: UploadFile, lecture
|
||||||
)
|
)
|
||||||
|
|
||||||
# create folder for lecture
|
# create folder for lecture
|
||||||
if not os.path.exists(f"content/uploads/files/pictures/{lecture_id}"):
|
if not os.path.exists(f"content/uploads/files/images/{lecture_id}"):
|
||||||
os.mkdir(f"content/uploads/files/pictures/{lecture_id}")
|
os.mkdir(f"content/uploads/files/images/{lecture_id}")
|
||||||
|
|
||||||
# upload file to server
|
# upload file to server
|
||||||
with open(f"content/uploads/files/pictures/{lecture_id}/{file_id}.{file_format}", 'wb') as f:
|
with open(f"content/uploads/files/images/{lecture_id}/{file_id}.{file_format}", 'wb') as f:
|
||||||
f.write(file)
|
f.write(file)
|
||||||
f.close()
|
f.close()
|
||||||
|
|
||||||
|
|
@ -71,7 +71,7 @@ async def create_picture_file(request: Request,picture_file: UploadFile, lecture
|
||||||
return uploadable_file
|
return uploadable_file
|
||||||
|
|
||||||
|
|
||||||
async def get_picture_object(request: Request,file_id: str):
|
async def get_image_object(request: Request,file_id: str):
|
||||||
photos = request.app.db["files"]
|
photos = request.app.db["files"]
|
||||||
|
|
||||||
photo_file = photos.find_one({"file_id": file_id})
|
photo_file = photos.find_one({"file_id": file_id})
|
||||||
|
|
@ -85,7 +85,7 @@ async def get_picture_object(request: Request,file_id: str):
|
||||||
status_code=status.HTTP_409_CONFLICT, detail="Photo file does not exist")
|
status_code=status.HTTP_409_CONFLICT, detail="Photo file does not exist")
|
||||||
|
|
||||||
|
|
||||||
async def get_picture_file(request: Request,file_id: str, current_user: PublicUser):
|
async def get_image_file(request: Request,file_id: str, current_user: PublicUser):
|
||||||
photos = request.app.db["files"]
|
photos = request.app.db["files"]
|
||||||
|
|
||||||
photo_file = photos.find_one({"file_id": file_id})
|
photo_file = photos.find_one({"file_id": file_id})
|
||||||
|
|
@ -104,7 +104,7 @@ async def get_picture_file(request: Request,file_id: str, current_user: PublicUs
|
||||||
file_format = photo_file.file_format
|
file_format = photo_file.file_format
|
||||||
lecture_id = photo_file.lecture_id
|
lecture_id = photo_file.lecture_id
|
||||||
file = open(
|
file = open(
|
||||||
f"content/uploads/files/pictures/{lecture_id}/{file_id}.{file_format}", 'rb')
|
f"content/uploads/files/images/{lecture_id}/{file_id}.{file_format}", 'rb')
|
||||||
return StreamingResponse(file, media_type=photo_file.file_type)
|
return StreamingResponse(file, media_type=photo_file.file_type)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
|
|
@ -95,7 +95,7 @@ async def get_document_file(request: Request, file_id: str, current_user: Public
|
||||||
if document_file:
|
if document_file:
|
||||||
|
|
||||||
# check media type
|
# check media type
|
||||||
if document_file.format not in ["jpg", "jpeg", "png", "gif"]:
|
if document_file.format not in ["pdf"]:
|
||||||
raise HTTPException(
|
raise HTTPException(
|
||||||
status_code=status.HTTP_409_CONFLICT, detail="Document file format not supported")
|
status_code=status.HTTP_409_CONFLICT, detail="Document file format not supported")
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue