[bugfix] update fedi api to support multiple separate votes in same multiple choice poll (#3809)

This commit is contained in:
kim
2025-02-20 10:13:07 +00:00
committed by GitHub
parent 2f5629143d
commit a03a35a5d6
6 changed files with 142 additions and 44 deletions

View File

@@ -380,8 +380,8 @@ func (p *pollDB) PutPollVote(ctx context.Context, vote *gtsmodel.PollVote) error
return err
}
// Increment poll votes for choices.
poll.IncrementVotes(vote.Choices)
// Increment vote choices and voters count.
poll.IncrementVotes(vote.Choices, true)
// Finally, update the poll entry.
_, err := tx.NewUpdate().
@@ -394,6 +394,17 @@ func (p *pollDB) PutPollVote(ctx context.Context, vote *gtsmodel.PollVote) error
})
}
func (p *pollDB) UpdatePollVote(ctx context.Context, vote *gtsmodel.PollVote, cols ...string) error {
return p.state.Caches.DB.PollVote.Store(vote, func() error {
_, err := p.db.NewUpdate().
Model(vote).
Column(cols...).
Where("? = ?", bun.Ident("id"), vote.ID).
Exec(ctx)
return err
})
}
func (p *pollDB) DeletePollVoteBy(ctx context.Context, pollID string, accountID string) error {
// Gather necessary fields from
// deleted for cache invaliation.
@@ -487,8 +498,8 @@ func updatePollCounts(ctx context.Context, tx bun.Tx, deleted *gtsmodel.PollVote
return err
}
// Decrement votes for these choices.
poll.DecrementVotes(deleted.Choices)
// Decrement vote choices and voters count.
poll.DecrementVotes(deleted.Choices, true)
// Finally, update the poll entry.
if _, err := tx.NewUpdate().

View File

@@ -58,6 +58,9 @@ type Poll interface {
// PutPollVote puts the given PollVote in the database.
PutPollVote(ctx context.Context, vote *gtsmodel.PollVote) error
// UpdatePollVote updates the given poll vote in the database, using only given columns (else, all).
UpdatePollVote(ctx context.Context, vote *gtsmodel.PollVote, cols ...string) error
// DeletePollVoteBy deletes the PollVote in Poll with ID, by account ID, from the database.
DeletePollVoteBy(ctx context.Context, pollID string, accountID string) error