From 7ca481960c679fc13a952a605e0848c49f8743c2 Mon Sep 17 00:00:00 2001 From: swve Date: Thu, 23 Mar 2023 21:32:47 +0100 Subject: [PATCH 1/5] feat: init utils & schemas for block --- src/services/blocks/__init__.py | 0 src/services/blocks/quizBlock/quizBlock.py | 2 +- src/services/blocks/{ => schemas}/blocks.py | 0 src/services/blocks/schemas/files.py | 10 +++++ src/services/blocks/utils/upload_files.py | 46 +++++++++++++++++++++ 5 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 src/services/blocks/__init__.py rename src/services/blocks/{ => schemas}/blocks.py (100%) create mode 100644 src/services/blocks/schemas/files.py create mode 100644 src/services/blocks/utils/upload_files.py diff --git a/src/services/blocks/__init__.py b/src/services/blocks/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/services/blocks/quizBlock/quizBlock.py b/src/services/blocks/quizBlock/quizBlock.py index 1d5e43fa..966d04d0 100644 --- a/src/services/blocks/quizBlock/quizBlock.py +++ b/src/services/blocks/quizBlock/quizBlock.py @@ -2,7 +2,7 @@ from typing import List, Literal from uuid import uuid4 from fastapi import Request from pydantic import BaseModel -from src.services.blocks.blocks import Block +from src.services.blocks.schemas.blocks import Block from src.services.users.users import PublicUser diff --git a/src/services/blocks/blocks.py b/src/services/blocks/schemas/blocks.py similarity index 100% rename from src/services/blocks/blocks.py rename to src/services/blocks/schemas/blocks.py diff --git a/src/services/blocks/schemas/files.py b/src/services/blocks/schemas/files.py new file mode 100644 index 00000000..397d2535 --- /dev/null +++ b/src/services/blocks/schemas/files.py @@ -0,0 +1,10 @@ +from pydantic import BaseModel + + +class BlockFile(BaseModel): + file_id: str + file_format: str + file_name: str + file_size: int + file_type: str + lecture_id: str \ No newline at end of file diff --git a/src/services/blocks/utils/upload_files.py b/src/services/blocks/utils/upload_files.py new file mode 100644 index 00000000..d5ffb296 --- /dev/null +++ b/src/services/blocks/utils/upload_files.py @@ -0,0 +1,46 @@ +import os +import uuid +from fastapi import Request, UploadFile +from src.services.blocks.schemas.files import BlockFile + +from src.services.users.schemas.users import PublicUser + + +async def upload_file_and_return_file_object(request: Request, file: UploadFile, current_user: PublicUser, lecture_id: str, block_id: str): + # get file id + file_id = str(uuid.uuid4()) + + # get file format + file_format = file.filename.split(".")[-1] + + # get file size + file_size = len(await file.read()) + + # get file type + file_type = file.content_type + + # get file name + file_name = file.filename + + # create file object + uploadable_file = BlockFile( + file_id=file_id, + file_format=file_format, + file_name=file_name, + file_size=file_size, + file_type=file_type, + lecture_id=lecture_id + ) + + # create folder for lecture + if not os.path.exists(f"content/uploads/files/lectures/{lecture_id}/blocks/{block_id}"): + os.mkdir(f"content/uploads/files/lectures/{lecture_id}/blocks/{block_id}") + + # upload file to server + with open(f"content/uploads/files/lectures/{lecture_id}/blocks/{block_id}/{file_id}.{file_format}", 'wb') as f: + f.write(await file.read()) + f.close() + + # TODO: do some error handling here + + return uploadable_file \ No newline at end of file From 371515772259de7e46c86df4e958152c82232c4b Mon Sep 17 00:00:00 2001 From: swve Date: Thu, 23 Mar 2023 22:03:05 +0100 Subject: [PATCH 2/5] feat: refactor imageBlock --- .../Editor/Extensions/Video/VideoBlock.ts | 2 +- .../Extensions/Video/VideoBlockComponent.tsx | 14 +-- src/routers/blocks.py | 14 ++- .../{ => block_types}/imageBlock/images.py | 0 .../{ => block_types}/pdfBlock/documents.py | 0 .../{ => block_types}/quizBlock/quizBlock.py | 8 +- .../block_types/videoBlock/videoBlock.py | 46 +++++++ src/services/blocks/schemas/blocks.py | 1 + src/services/blocks/utils/upload_files.py | 25 ++-- src/services/blocks/videoBlock/videos.py | 115 ------------------ 10 files changed, 87 insertions(+), 138 deletions(-) rename src/services/blocks/{ => block_types}/imageBlock/images.py (100%) rename src/services/blocks/{ => block_types}/pdfBlock/documents.py (100%) rename src/services/blocks/{ => block_types}/quizBlock/quizBlock.py (84%) create mode 100644 src/services/blocks/block_types/videoBlock/videoBlock.py delete mode 100644 src/services/blocks/videoBlock/videos.py diff --git a/front/components/Editor/Extensions/Video/VideoBlock.ts b/front/components/Editor/Extensions/Video/VideoBlock.ts index 1f7d727f..c38495ac 100644 --- a/front/components/Editor/Extensions/Video/VideoBlock.ts +++ b/front/components/Editor/Extensions/Video/VideoBlock.ts @@ -10,7 +10,7 @@ export default Node.create({ addAttributes() { return { - fileObject: { + blockObject: { default: null, }, }; diff --git a/front/components/Editor/Extensions/Video/VideoBlockComponent.tsx b/front/components/Editor/Extensions/Video/VideoBlockComponent.tsx index eb82929f..35d124c0 100644 --- a/front/components/Editor/Extensions/Video/VideoBlockComponent.tsx +++ b/front/components/Editor/Extensions/Video/VideoBlockComponent.tsx @@ -8,7 +8,7 @@ import { uploadNewVideoFile } from "../../../../services/files/video"; function VideoBlockComponents(props: any) { const [video, setVideo] = React.useState(null); const [isLoading, setIsLoading] = React.useState(false); - const [fileObject, setfileObject] = React.useState(props.node.attrs.fileObject); + const [blockObject, setblockObject] = React.useState(props.node.attrs.fileObject); const handleVideoChange = (event: React.ChangeEvent) => { setVideo(event.target.files[0]); @@ -19,15 +19,15 @@ function VideoBlockComponents(props: any) { setIsLoading(true); let object = await uploadNewVideoFile(video, props.extension.options.lecture.lecture_id); setIsLoading(false); - setfileObject(object); + setblockObject(object); props.updateAttributes({ - fileObject: object, + blockObject: object, }); }; return ( - {!fileObject && ( + {!blockObject && (