90 lines
2.6 KiB
Go
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),
|
|
}
|
|
}
|