better poll editing - fixes #668

* editing _just the poll_ is now recognised as an actual change to the
  note
* the "poll ended" notification job is now replaced (with potentially
  the new expiry time)
This commit is contained in:
dakkar 2024-11-27 11:57:19 +00:00
parent 1ec5e846c5
commit 1f53eb2ed1
2 changed files with 6 additions and 3 deletions

View file

@ -629,6 +629,7 @@ export class NoteCreateService implements OnApplicationShutdown {
this.queueService.endedPollNotificationQueue.add(note.id, {
noteId: note.id,
}, {
jobId: `pollEnd:${note.id}`,
delay,
removeOnComplete: true,
});

View file

@ -471,8 +471,9 @@ export class NoteEditService implements OnApplicationShutdown {
const poll = await this.pollsRepository.findOneBy({ noteId: oldnote.id });
const oldPoll = poll ? { choices: poll.choices, multiple: poll.multiple, expiresAt: poll.expiresAt } : null;
const pollChanged = data.poll != null && JSON.stringify(data.poll) !== JSON.stringify(oldPoll);
if (Object.keys(update).length > 0 || filesChanged) {
if (Object.keys(update).length > 0 || filesChanged || pollChanged) {
const exists = await this.noteEditRepository.findOneBy({ noteId: oldnote.id });
await this.noteEditRepository.insert({
@ -544,7 +545,7 @@ export class NoteEditService implements OnApplicationShutdown {
}));
}
if (data.poll != null && JSON.stringify(data.poll) !== JSON.stringify(oldPoll)) {
if (pollChanged) {
// Start transaction
await this.db.transaction(async transactionalEntityManager => {
await transactionalEntityManager.update(MiNote, oldnote.id, note);
@ -605,10 +606,11 @@ export class NoteEditService implements OnApplicationShutdown {
if (data.poll && data.poll.expiresAt) {
const delay = data.poll.expiresAt.getTime() - Date.now();
this.queueService.endedPollNotificationQueue.remove(note.id);
this.queueService.endedPollNotificationQueue.remove(`pollEnd:${note.id}`);
this.queueService.endedPollNotificationQueue.add(note.id, {
noteId: note.id,
}, {
jobId: `pollEnd:${note.id}`,
delay,
removeOnComplete: true,
});