feat: init quiz blocks and blocks folder

This commit is contained in:
swve 2023-02-19 23:27:56 +01:00
parent 40e48bab36
commit 642e55ce2e
8 changed files with 158 additions and 7 deletions

View file

@ -1,5 +1,5 @@
from fastapi import APIRouter
from src.routers import activity, users, auth, houses, orgs, roles, files
from src.routers import activity, blocks, users, auth, houses, orgs, roles, files
from src.routers.courses import chapters, collections, courses,lectures
@ -13,6 +13,7 @@ global_router.include_router(houses.router, prefix="/houses", tags=["houses"])
global_router.include_router(orgs.router, prefix="/orgs", tags=["orgs"])
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(courses.router, prefix="/courses", tags=["courses"])
global_router.include_router(chapters.router, prefix="/chapters", tags=["chapters"])
global_router.include_router(lectures.router, prefix="/lectures", tags=["lectures"])

81
src/routers/blocks.py Normal file
View file

@ -0,0 +1,81 @@
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.blocks.quizBlock.quizBlock import create_quiz_block, get_quiz_block_answers, get_quiz_block_options, quizBlock
from src.services.users import PublicUser
router = APIRouter()
@router.post("/picture")
async def api_create_picture_file_block(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_block(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_block(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_block(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_block(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_block(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)
@router.post("/quiz")
async def api_create_quiz_block(request: Request, quiz_block: quizBlock, lecture_id: str, current_user: PublicUser = Depends(get_current_user)):
"""
Create new document file
"""
return await create_quiz_block(request, quiz_block, lecture_id, current_user)
@router.get("/quiz/options")
async def api_get_quiz_options(request: Request, block_id: str, current_user: PublicUser = Depends(get_current_user)):
"""
Get quiz options
"""
return await get_quiz_block_options(request, block_id, current_user)
@router.get("/quiz/answers")
async def api_get_quiz_answers(request: Request, block_id: str, current_user: PublicUser = Depends(get_current_user)):
"""
Get quiz answers
"""
return await get_quiz_block_answers(request, block_id, current_user)

View file

@ -1,10 +1,9 @@
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.files.documents import create_document_file, get_document_file
from src.services.files.pictures import create_picture_file, get_picture_file
from src.services.files.videos import create_video_file, get_video_file
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()
@ -41,7 +40,6 @@ async def api_get_video_file(request: Request, file_id: str, current_user: Publi
"""
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)):
"""
@ -55,4 +53,4 @@ async def api_create_document_file(request: Request, file_object: UploadFile, le
"""
Create new document file
"""
return await create_document_file(request, file_object, lecture_id)
return await create_document_file(request, file_object, lecture_id)

View file

@ -0,0 +1,12 @@
from typing import Any, List, Literal
from uuid import uuid4
from fastapi import Request
from pydantic import BaseModel
class Block(BaseModel):
block_id: str
lecture_id: str
block_type: Literal["quizBlock", "videoBlock", "pdfBlock"]
block_data: Any

View file

@ -0,0 +1,59 @@
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.users import PublicUser
class option(BaseModel):
option_id: str
option_type: Literal["text", "image"]
option_data: str
class answer(BaseModel):
question_id: str
option_id: str
class question(BaseModel):
question_id: str
options: List[option]
class quizBlock(BaseModel):
questions: List[question]
answers: List[answer]
async def create_quiz_block(request: Request, quizBlock: quizBlock, lecture_id: str, user: PublicUser):
blocks = request.app.db["blocks"]
block_id = str(f"block_{uuid4()}")
# create block
block = Block(block_id=block_id, lecture_id=lecture_id,
block_type="quizBlock", block_data=quizBlock)
# insert block
blocks.insert_one(block.dict())
return block
async def get_quiz_block_options(request: Request, block_id: str, user: PublicUser):
blocks = request.app.db["blocks"]
# find block but get only the options
block = blocks.find_one({"block_id": block_id, }, {
"_id": 0, "block_data.answers": 0})
return block
async def get_quiz_block_answers(request: Request, block_id: str, user: PublicUser):
blocks = request.app.db["blocks"]
# find block but get only the answers
block = blocks.find_one({"block_id": block_id, }, {
"_id": 0, "block_data.questions": 0})
return block