Files
gerald/internal/interfaces/rest/handlers/feedback.go
aspasskiy 0649f91341
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/promote/production Build is passing
add sessionUUID and feedbackUUID to feedback card
2024-04-22 21:56:05 +03:00

90 lines
2.6 KiB
Go

package handlers
import (
"gerald/internal/interfaces/rest/models"
"gerald/internal/interfaces/rest/restapi/operations/feedback"
dmodels "gerald/internal/models"
"gerald/internal/services"
"github.com/go-openapi/runtime/middleware"
"github.com/go-openapi/strfmt"
)
type FeedbackHandler struct {
feedback *services.FeedbackService
}
func NewFeedbackHandler(
feedback *services.FeedbackService,
) *FeedbackHandler {
return &FeedbackHandler{feedback: feedback}
}
func (h *FeedbackHandler) CreateFeedback(params feedback.CreateFeedbackParams) middleware.Responder {
err := h.feedback.Create(params.SessionUUID, params.Body)
if err != nil {
return feedback.NewCreateFeedbackForbidden()
}
return feedback.NewCreateFeedbackOK()
}
func (h *FeedbackHandler) GetFeedbacks(params feedback.GetFeedbacksParams) middleware.Responder {
feedbacks, err := h.feedback.GetBySessionID(params.SessionUUID)
if err != nil {
return feedback.NewGetFeedbacksForbidden()
}
return feedback.NewGetFeedbacksOK().WithPayload(feedbacksToAPI(feedbacks))
}
func (h *FeedbackHandler) GetFeedback(params feedback.GetFeedbacksForProjectParams) middleware.Responder {
feedbacks, err := h.feedback.GetByProjectID(params.ProjectID)
if err != nil {
return feedback.NewGetFeedbacksForProjectForbidden()
}
return feedback.NewGetFeedbacksForProjectOK().WithPayload(feedbacksToAPI(feedbacks))
}
func (h *FeedbackHandler) UpvoteFeedback(params feedback.UpvoteFeedbackParams) middleware.Responder {
err := h.feedback.Upvote(params.SessionUUID, params.FeedbackUUID)
if err != nil {
return feedback.NewUpvoteFeedbackForbidden()
}
return feedback.NewUpvoteFeedbackOK()
}
func (h *FeedbackHandler) GetFeedbacksForProject(params feedback.GetFeedbacksForProjectParams) middleware.Responder {
feedbacks, err := h.feedback.GetByProjectID(params.ProjectID)
if err != nil {
return feedback.NewGetFeedbacksForProjectForbidden()
}
return feedback.NewGetFeedbacksForProjectOK().WithPayload(feedbacksToAPI(feedbacks))
}
func feedbacksToAPI(feedbacks []*dmodels.Feedback) []*models.Feedback {
apiFeedbacks := make([]*models.Feedback, 0, len(feedbacks))
for _, f := range feedbacks {
apiFeedbacks = append(apiFeedbacks, feedbackToAPI(f))
}
return apiFeedbacks
}
func feedbackToAPI(feedback *dmodels.Feedback) *models.Feedback {
return &models.Feedback{
FeedbackUUID: feedback.UUID,
SessionUUID: feedback.SessionUUID,
ProjectID: feedback.ProjectID,
Text: feedback.Text,
Type: string(feedback.Type),
UserID: feedback.UserID,
CreatedAt: strfmt.DateTime(feedback.CreatedAt),
}
}