satupeta-main/app/api/v1/routes/feedback_route.py

79 lines
2.4 KiB
Python
Raw Normal View History

2026-01-27 02:11:58 +00:00
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)