Add create_file endpoint

This commit is contained in:
2021-11-13 20:17:56 +03:00
parent 908834bd90
commit 9273fc80e9
2 changed files with 20 additions and 7 deletions

View File

@@ -1,6 +1,12 @@
from datetime import datetime from datetime import datetime
from pydantic import BaseModel from pydantic import BaseModel, constr
class CreateUploadedFile(BaseModel):
backend: constr(max_length=16) # type: ignore
data: dict
upload_time: datetime
class UploadedFile(BaseModel): class UploadedFile(BaseModel):

View File

@@ -3,24 +3,24 @@ from starlette import status
from fastapi import APIRouter, HTTPException from fastapi import APIRouter, HTTPException
from app.models import UploadedFile as UploadedFileDB from app.models import UploadedFile as UploadedFileDB
from app.serializers import UploadedFile from app.serializers import UploadedFile, CreateUploadedFile
from app.services.file_uploader import FileUploader from app.services.file_uploader import FileUploader
from app.depends import check_token from app.depends import check_token
router = APIRouter( router = APIRouter(
prefix="/api/v1", prefix="/api/v1/files",
dependencies=[Depends(check_token)], dependencies=[Depends(check_token)],
tags=["files"] tags=["files"]
) )
@router.get("/files", response_model=list[UploadedFile]) @router.get("/", response_model=list[UploadedFile])
async def get_files(): async def get_files():
return await UploadedFileDB.objects.all() return await UploadedFileDB.objects.all()
@router.get("/files/{file_id}", response_model=UploadedFile, responses={ @router.get("/{file_id}", response_model=UploadedFile, responses={
404: {}, 404: {},
}) })
async def get_file(file_id: int): async def get_file(file_id: int):
@@ -32,12 +32,19 @@ async def get_file(file_id: int):
return uploaded_file return uploaded_file
@router.post("/files", response_model=UploadedFile) @router.post("/", response_model=UploadedFile)
async def create_file(data: CreateUploadedFile):
return await UploadedFileDB.objects.create(
**data.dict()
)
@router.post("/upload/", response_model=UploadedFile)
async def upload_file(file: UploadFile = File({})): async def upload_file(file: UploadFile = File({})):
return await FileUploader.upload(file) return await FileUploader.upload(file)
@router.delete("/files/{file_id}", response_model=UploadedFile, responses={ @router.delete("/{file_id}", response_model=UploadedFile, responses={
400: {} 400: {}
}) })
async def delete_file(file_id: int): async def delete_file(file_id: int):