mirror of
https://github.com/superseriousbusiness/gotosocial
synced 2025-06-05 21:59:39 +02:00
[bugfix] update fedi api to support multiple separate votes in same multiple choice poll (#3809)
This commit is contained in:
@@ -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().
|
||||
|
@@ -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
|
||||
|
||||
|
Reference in New Issue
Block a user