79 lines
2.4 KiB
Python
79 lines
2.4 KiB
Python
|
|
from typing import List
|
||
|
|
|
||
|
|
from fastapi import APIRouter, Body, Depends, status
|
||
|
|
|
||
|
|
from app.api.dependencies.auth import get_current_active_user
|
||
|
|
from app.api.dependencies.factory import Factory
|
||
|
|
from app.core.data_types import UUID7Field
|
||
|
|
from app.core.params import CommonParams
|
||
|
|
from app.schemas.base import PaginatedResponse
|
||
|
|
from app.schemas.feedback_schema import (
|
||
|
|
FeedbackCreateSchema,
|
||
|
|
FeedbackSchema,
|
||
|
|
FeedbackUpdateSchema,
|
||
|
|
)
|
||
|
|
from app.services import FeedbackService
|
||
|
|
|
||
|
|
router = APIRouter()
|
||
|
|
|
||
|
|
|
||
|
|
@router.get("/feedback", response_model=PaginatedResponse[FeedbackSchema])
|
||
|
|
async def get_feedbacks(
|
||
|
|
params: CommonParams = Depends(),
|
||
|
|
service: FeedbackService = Depends(Factory().get_feedback_service),
|
||
|
|
user=Depends(get_current_active_user)
|
||
|
|
):
|
||
|
|
filter = params.filter
|
||
|
|
sort = params.sort
|
||
|
|
search = params.search
|
||
|
|
group_by = params.group_by
|
||
|
|
limit = params.limit
|
||
|
|
offset = params.offset
|
||
|
|
feedbacks, total = await service.find_all(filter, sort, search, group_by, limit, offset)
|
||
|
|
|
||
|
|
return PaginatedResponse(
|
||
|
|
items=[FeedbackSchema.model_validate(feedback) for feedback in feedbacks],
|
||
|
|
total=total,
|
||
|
|
limit=limit,
|
||
|
|
offset=offset,
|
||
|
|
has_more=total > (offset + limit),
|
||
|
|
)
|
||
|
|
|
||
|
|
|
||
|
|
@router.get("/feedback/{id}", response_model=FeedbackSchema)
|
||
|
|
async def get_feedback(
|
||
|
|
id: int,
|
||
|
|
service: FeedbackService = Depends(Factory().get_feedback_service),
|
||
|
|
user=Depends(get_current_active_user)
|
||
|
|
):
|
||
|
|
feedback = await service.find_by_id(id)
|
||
|
|
return feedback
|
||
|
|
|
||
|
|
|
||
|
|
@router.post("/feedback", response_model=FeedbackSchema, status_code=status.HTTP_201_CREATED)
|
||
|
|
async def create_feedback(
|
||
|
|
data: FeedbackCreateSchema, service: FeedbackService = Depends(Factory().get_feedback_service)
|
||
|
|
):
|
||
|
|
feedback = await service.create(data.dict())
|
||
|
|
return feedback
|
||
|
|
|
||
|
|
|
||
|
|
@router.patch("/feedback/{id}", response_model=FeedbackSchema)
|
||
|
|
async def update_feedback(
|
||
|
|
id: int,
|
||
|
|
data: FeedbackUpdateSchema,
|
||
|
|
service: FeedbackService = Depends(Factory().get_feedback_service),
|
||
|
|
user=Depends(get_current_active_user)
|
||
|
|
):
|
||
|
|
feedback = await service.update(id, data.dict(exclude_unset=True))
|
||
|
|
return feedback
|
||
|
|
|
||
|
|
|
||
|
|
@router.delete("/feedback/{id}", status_code=status.HTTP_204_NO_CONTENT)
|
||
|
|
async def delete_feedback(
|
||
|
|
id: int,
|
||
|
|
service: FeedbackService = Depends(Factory().get_feedback_service),
|
||
|
|
user=Depends(get_current_active_user)
|
||
|
|
):
|
||
|
|
await service.delete(id)
|