[backend/core] Improve handling of voter counts in PollService (ISH-377)

This commit is contained in:
Laura Hausmann 2024-06-20 20:00:53 +02:00
parent 36296cd28c
commit 7f14c3df81
No known key found for this signature in database
GPG key ID: D044E84C5BE01605

View file

@ -25,8 +25,14 @@ public class PollService(
} }
if (updateVotersCount) if (updateVotersCount)
await db.Database {
.ExecuteSqlAsync($"""UPDATE "poll" SET "votersCount" = GREATEST("votersCount", (SELECT COUNT(*) FROM (SELECT DISTINCT "userId" FROM "poll_vote" WHERE "noteId" = {poll.NoteId}) AS sq)::integer) WHERE "noteId" = {poll.NoteId};"""); if (poll.Multiple)
await db.Database
.ExecuteSqlAsync($"""UPDATE "poll" SET "votersCount" = GREATEST("votersCount", (SELECT MAX("total") FROM UNNEST("votes") AS "total")::integer, (SELECT COUNT(*) FROM (SELECT DISTINCT "userId" FROM "poll_vote" WHERE "noteId" = "poll"."noteId") AS sq)::integer) WHERE "noteId" = {poll.NoteId};""");
else
await db.Database
.ExecuteSqlAsync($"""UPDATE "poll" SET "votersCount" = GREATEST("votersCount", (SELECT SUM("total") FROM UNNEST("votes") AS "total")::integer, (SELECT COUNT(*) FROM (SELECT DISTINCT "userId" FROM "poll_vote" WHERE "noteId" = "poll"."noteId") AS sq)::integer) WHERE "noteId" = {poll.NoteId};""");
}
var vote = activityRenderer.RenderVote(pollVote, poll, note); var vote = activityRenderer.RenderVote(pollVote, poll, note);
var actor = userRenderer.RenderLite(pollVote.User); var actor = userRenderer.RenderLite(pollVote.User);