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)