mirror of
https://github.com/grey-cat-1908/formaptix-server.git
synced 2024-09-22 19:52:00 +03:00
more routes
This commit is contained in:
parent
c0f79726ec
commit
d891d9de86
3 changed files with 68 additions and 5 deletions
|
@ -1,8 +1,8 @@
|
|||
from enum import Enum
|
||||
from uuid import UUID
|
||||
from typing import TypeAlias
|
||||
from typing import TypeAlias, Annotated
|
||||
|
||||
from pydantic import field_validator, field_serializer
|
||||
from pydantic import field_validator, field_serializer, Field
|
||||
|
||||
from models import BaseModel, form
|
||||
|
||||
|
@ -79,7 +79,7 @@ class AnswerData(BaseModel):
|
|||
|
||||
class Answer(BaseModel):
|
||||
id: int
|
||||
form: form.Form
|
||||
form: Annotated[form.Form, Field(exclude=True)]
|
||||
data: AnswerData
|
||||
|
||||
@field_validator("data")
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
from fastapi import APIRouter, HTTPException
|
||||
from sqlalchemy import select
|
||||
from sqlalchemy import select, and_
|
||||
from pydantic import ValidationError
|
||||
|
||||
import database
|
||||
from models import AnswerData, Answer
|
||||
from .utils import User
|
||||
|
||||
router = APIRouter(prefix="/answer")
|
||||
|
||||
|
@ -26,3 +27,42 @@ async def create_answer(form_id: int, answer_data: AnswerData):
|
|||
raise HTTPException(400, e.errors()[0].get("msg"))
|
||||
|
||||
return answer_model
|
||||
|
||||
|
||||
@router.get("/get")
|
||||
async def get_answers(user: User, form_id: int):
|
||||
async with database.sessions.begin() as session:
|
||||
return {
|
||||
"answers": [
|
||||
Answer.model_validate(item)
|
||||
for item in await session.scalars(
|
||||
select(database.Answer)
|
||||
.where(
|
||||
and_(
|
||||
database.Answer.form_id == form_id,
|
||||
database.Form.owner_id == user.id,
|
||||
)
|
||||
)
|
||||
.join(database.Answer.form)
|
||||
)
|
||||
]
|
||||
}
|
||||
|
||||
|
||||
@router.delete("/delete")
|
||||
async def delete_answer(user: User, id: int):
|
||||
async with database.sessions.begin() as session:
|
||||
stmt = (
|
||||
select(database.Answer)
|
||||
.where(database.Answer.id == id)
|
||||
.join(database.Answer.form)
|
||||
)
|
||||
db_request = await session.execute(stmt)
|
||||
answer = db_request.scalar_one_or_none()
|
||||
|
||||
if answer is None:
|
||||
raise HTTPException(404, "Answer not found")
|
||||
if answer.form.owner_id != user.id:
|
||||
raise HTTPException(403, "Forbidden")
|
||||
|
||||
await session.delete(answer)
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
from fastapi import APIRouter, HTTPException
|
||||
from sqlalchemy import select
|
||||
from sqlalchemy import select, delete
|
||||
|
||||
import database
|
||||
from models import FormData, Form
|
||||
|
@ -22,6 +22,29 @@ async def create_form(user: User, form_data: FormData) -> Form:
|
|||
return Form.model_validate(form)
|
||||
|
||||
|
||||
@router.put("/edit")
|
||||
async def edit_form(user: User, id: int, form_data: FormData) -> Form:
|
||||
async with database.sessions.begin() as session:
|
||||
stmt = select(database.Form).where(database.Form.id == id)
|
||||
db_request = await session.execute(stmt)
|
||||
form = db_request.scalar_one_or_none()
|
||||
|
||||
if form is None:
|
||||
raise HTTPException(404, "Form not found")
|
||||
if form.owner_id != user.id:
|
||||
raise HTTPException(403, "Forbidden")
|
||||
|
||||
form.name = form_data.name
|
||||
form.data = form_data.model_dump()
|
||||
|
||||
await session.flush()
|
||||
|
||||
stmt = delete(database.Answer).where(database.Answer.form_id == id)
|
||||
await session.execute(stmt)
|
||||
|
||||
return Form.model_validate(form)
|
||||
|
||||
|
||||
@router.delete("/delete")
|
||||
async def delete_form(user: User, id: int):
|
||||
async with database.sessions.begin() as session:
|
||||
|
|
Loading…
Reference in a new issue