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{ ProjectID: feedback.ProjectID, Text: feedback.Text, Type: string(feedback.Type), UserID: feedback.UserID, CreatedAt: strfmt.DateTime(feedback.CreatedAt), } }