mirror of
https://github.com/superseriousbusiness/gotosocial.git
synced 2025-10-29 02:12:25 -05:00
[bugfix] update fedi api to support multiple separate votes in same multiple choice poll (#3809)
This commit is contained in:
parent
2f5629143d
commit
a03a35a5d6
6 changed files with 142 additions and 44 deletions
|
|
@ -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
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue