🐛 Fix update current answer bug

This commit is contained in:
LittleSheep 2025-02-14 22:37:28 +08:00
parent a2633e6494
commit ffb05154f9

View File

@ -1,10 +1,12 @@
package services package services
import ( import (
"errors"
"fmt" "fmt"
"git.solsynth.dev/hypernet/interactive/pkg/internal/database" "git.solsynth.dev/hypernet/interactive/pkg/internal/database"
"git.solsynth.dev/hypernet/interactive/pkg/internal/models" "git.solsynth.dev/hypernet/interactive/pkg/internal/models"
"gorm.io/gorm"
) )
func NewPoll(poll models.Poll) (models.Poll, error) { func NewPoll(poll models.Poll) (models.Poll, error) {
@ -24,16 +26,21 @@ func UpdatePoll(poll models.Poll) (models.Poll, error) {
func AddPollAnswer(poll models.Poll, answer models.PollAnswer) (models.PollAnswer, error) { func AddPollAnswer(poll models.Poll, answer models.PollAnswer) (models.PollAnswer, error) {
answer.PollID = poll.ID answer.PollID = poll.ID
var count int64 var currentAnswer models.PollAnswer
if err := database.C.Model(&models.PollAnswer{}). if err := database.C.Model(&models.PollAnswer{}).
Where("poll_id = ? AND account_id = ?", poll.ID, answer.AccountID). Where("poll_id = ? AND account_id = ?", poll.ID, answer.AccountID).
Count(&count).Error; err != nil { First(&currentAnswer).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 { if err := database.C.Model(&currentAnswer).
Where("id = ?", currentAnswer.ID).
Updates(&models.PollAnswer{Answer: answer.Answer}).Error; err != nil {
return answer, fmt.Errorf("failed to update your answer") return answer, fmt.Errorf("failed to update your answer")
} }
return answer, nil return answer, nil
} else if !errors.Is(err, gorm.ErrRecordNotFound) {
return answer, err
} }
if err := database.C.Create(&answer).Error; err != nil { if err := database.C.Create(&answer).Error; err != nil {
return answer, err return answer, err
} }