40 lines
1.2 KiB
Python
40 lines
1.2 KiB
Python
"""Feedback API routes for VoIdea."""
|
|
|
|
from typing import Annotated, Optional
|
|
|
|
from fastapi import APIRouter, Depends, Request, status
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
|
from app.core.dependencies import get_current_user, get_db, get_optional_user
|
|
from app.core.limiter import limiter
|
|
from app.models.user import User
|
|
from app.schemas.feedback import FeedbackCreate, FeedbackResponse
|
|
from app.services.feedback_service import FeedbackService
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
@router.post("", response_model=FeedbackResponse, status_code=status.HTTP_201_CREATED)
|
|
@limiter.limit("5/minute")
|
|
async def create_feedback(
|
|
request: Request,
|
|
body: FeedbackCreate,
|
|
db: AsyncSession = Depends(get_db),
|
|
user: Optional[User] = Depends(get_optional_user),
|
|
):
|
|
service = FeedbackService(db)
|
|
fb = await service.create(
|
|
user_id=user.id if user else None,
|
|
text=body.text,
|
|
page_url=body.page_url,
|
|
)
|
|
return FeedbackResponse(
|
|
id=str(fb.id),
|
|
user_id=str(fb.user_id) if fb.user_id else None,
|
|
text=fb.text,
|
|
page_url=fb.page_url,
|
|
status=fb.status,
|
|
created_at=fb.created_at,
|
|
updated_at=fb.updated_at,
|
|
)
|