From a2633e64943a86bc4767f1da023ccc551bdae46c Mon Sep 17 00:00:00 2001 From: LittleSheep Date: Thu, 13 Feb 2025 22:19:37 +0800 Subject: [PATCH] :necktie: Update answer if the poll answered --- pkg/internal/http/api/poll_answers_api.go | 16 ++++++++++++++++ pkg/internal/http/api/polls_api.go | 16 ---------------- pkg/internal/services/polls.go | 10 ++++++++-- 3 files changed, 24 insertions(+), 18 deletions(-) diff --git a/pkg/internal/http/api/poll_answers_api.go b/pkg/internal/http/api/poll_answers_api.go index 748fd54..f3cb0db 100644 --- a/pkg/internal/http/api/poll_answers_api.go +++ b/pkg/internal/http/api/poll_answers_api.go @@ -12,6 +12,22 @@ import ( "github.com/gofiber/fiber/v2" ) +func getMyPollAnswer(c *fiber.Ctx) error { + if err := sec.EnsureAuthenticated(c); err != nil { + return err + } + user := c.Locals("user").(authm.Account) + + pollId, _ := c.ParamsInt("pollId") + + var answer models.PollAnswer + if err := database.C.Where("poll_id = ? AND account_id = ?", pollId, user.ID).First(&answer).Error; err != nil { + return fiber.NewError(fiber.StatusNotFound, err.Error()) + } + + return c.JSON(answer) +} + func answerPoll(c *fiber.Ctx) error { pollId, _ := c.ParamsInt("pollId") diff --git a/pkg/internal/http/api/polls_api.go b/pkg/internal/http/api/polls_api.go index 25bfa96..667e63b 100644 --- a/pkg/internal/http/api/polls_api.go +++ b/pkg/internal/http/api/polls_api.go @@ -12,22 +12,6 @@ import ( "github.com/gofiber/fiber/v2" ) -func getMyPollAnswer(c *fiber.Ctx) error { - if err := sec.EnsureAuthenticated(c); err != nil { - return err - } - user := c.Locals("user").(authm.Account) - - pollId, _ := c.ParamsInt("pollId") - - var answer models.PollAnswer - if err := database.C.Where("poll_id = ? AND account_id = ?", pollId, user.ID).First(&answer).Error; err != nil { - return fiber.NewError(fiber.StatusNotFound, err.Error()) - } - - return c.JSON(answer) -} - func getPoll(c *fiber.Ctx) error { pollId, _ := c.ParamsInt("pollId") diff --git a/pkg/internal/services/polls.go b/pkg/internal/services/polls.go index d5adea1..b283655 100644 --- a/pkg/internal/services/polls.go +++ b/pkg/internal/services/polls.go @@ -25,8 +25,14 @@ func AddPollAnswer(poll models.Poll, answer models.PollAnswer) (models.PollAnswe answer.PollID = poll.ID var count int64 - if err := database.C.Model(&models.PollAnswer{}).Where("poll_id = ? AND account_id = ?", poll.ID, answer.AccountID).Count(&count).Error; err != nil { - return answer, fmt.Errorf("you already answered the poll") + if err := database.C.Model(&models.PollAnswer{}). + Where("poll_id = ? AND account_id = ?", poll.ID, answer.AccountID). + Count(&count).Error; err != nil { + if err := database.C.Model(&models.PollAnswer{}).Where("poll_id = ? AND account_id = ?", poll.ID, answer.AccountID).Update("answer", answer.Answer).Error; err != nil { + return answer, fmt.Errorf("failed to update your answer") + } + + return answer, nil } if err := database.C.Create(&answer).Error; err != nil { return answer, err