Feat: add put and delete path to api
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
import sqlite3
|
||||
|
||||
from fastapi import FastAPI, status
|
||||
from fastapi.responses import JSONResponse
|
||||
from fastapi.responses import JSONResponse, Response
|
||||
|
||||
from backend.adapters.sqlite import create_db
|
||||
from backend.api.model import StudentModel, TribeModel
|
||||
@@ -37,21 +37,50 @@ app = FastAPI()
|
||||
|
||||
@app.post("/tribes", status_code=status.HTTP_201_CREATED, response_model=TribeModel)
|
||||
async def post_tribe(item: TribeModel):
|
||||
tribe = Tribe(**item.dict())
|
||||
|
||||
try:
|
||||
services.add_tribe(
|
||||
tribe = services.add_tribe(
|
||||
name=item.name, level=item.level, tribe_repo=tribe_repo, conn=conn
|
||||
)
|
||||
except TribeExists:
|
||||
return JSONResponse(
|
||||
status_code=status.HTTP_409_CONFLICT,
|
||||
content=f"The tribe {tribe.name} already exists",
|
||||
content=f"The tribe {item.name} already exists",
|
||||
)
|
||||
|
||||
return tribe.to_dict()
|
||||
|
||||
|
||||
@app.put("/tribes/{name}", status_code=status.HTTP_200_OK, response_model=TribeModel)
|
||||
async def put_tribe(name: str, item: TribeModel):
|
||||
try:
|
||||
tribe = services.update_tribe(
|
||||
name=item.name, level=item.level, tribe_repo=tribe_repo, conn=conn
|
||||
)
|
||||
except TribeDoesNotExist:
|
||||
return JSONResponse(
|
||||
status_code=status.HTTP_409_CONFLICT,
|
||||
content=f"The tribe {name} does not exists",
|
||||
)
|
||||
|
||||
return tribe.to_dict()
|
||||
|
||||
|
||||
@app.delete("/tribes/{name}")
|
||||
async def delete_tribe(name: str):
|
||||
try:
|
||||
services.delete_tribe(name=name, tribe_repo=tribe_repo, conn=conn)
|
||||
except TribeDoesNotExist:
|
||||
return JSONResponse(
|
||||
status_code=status.HTTP_409_CONFLICT,
|
||||
content=f"The tribe {name} does not exists",
|
||||
)
|
||||
|
||||
return Response(
|
||||
status_code=status.HTTP_204_NO_CONTENT,
|
||||
)
|
||||
|
||||
|
||||
@app.get("/tribes", response_model=list[TribeModel])
|
||||
async def list_tribes():
|
||||
tribes = tribe_repo.list()
|
||||
|
||||
@@ -72,11 +72,11 @@ class TribeSQLiteRepository(AbstractRepository):
|
||||
rows = cursor.fetchall()
|
||||
return [Tribe(*r) for r in rows]
|
||||
|
||||
def delete(self, tribe: Tribe) -> None:
|
||||
def delete(self, name: str) -> None:
|
||||
tribes = self.list()
|
||||
if tribe.name not in map(lambda x: x.name, tribes):
|
||||
if name not in map(lambda x: x.name, tribes):
|
||||
raise TribeRepositoryError(
|
||||
f"The tribe {tribe.name} doesn't exists. Can't delete it."
|
||||
f"The tribe {name} doesn't exists. Can't delete it."
|
||||
)
|
||||
|
||||
self.conn.execute(
|
||||
@@ -84,6 +84,6 @@ class TribeSQLiteRepository(AbstractRepository):
|
||||
DELETE FROM tribes WHERE name=:name
|
||||
""",
|
||||
{
|
||||
"name": tribe.name,
|
||||
"name": name,
|
||||
},
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user