summaryrefslogtreecommitdiff
path: root/packages/backend/src/server/api/endpoints
diff options
context:
space:
mode:
authordakkar <dakkar@thenautilus.net>2025-02-26 12:57:20 +0000
committerdakkar <dakkar@thenautilus.net>2025-02-26 12:57:20 +0000
commit9bf1d4c5ace28873797ba4520a4cc7e5a25db7e4 (patch)
tree95e38ad1cf3d0e988595950fc4998fa9ff75077d /packages/backend/src/server/api/endpoints
parentmerge: maybe better db/meili container images to start with - fixes #942 (!919) (diff)
downloadsharkey-9bf1d4c5ace28873797ba4520a4cc7e5a25db7e4.tar.gz
sharkey-9bf1d4c5ace28873797ba4520a4cc7e5a25db7e4.tar.bz2
sharkey-9bf1d4c5ace28873797ba4520a4cc7e5a25db7e4.zip
probably fix editing scheduled notes - fixes #934
the result of `notes/schedule/list` needs to be shaped like an array of `Packed<'Note'>`, but it wasn't now it's much closer, and I can edit scheduled quotes and replies
Diffstat (limited to 'packages/backend/src/server/api/endpoints')
-rw-r--r--packages/backend/src/server/api/endpoints/notes/schedule/list.ts31
1 files changed, 29 insertions, 2 deletions
diff --git a/packages/backend/src/server/api/endpoints/notes/schedule/list.ts b/packages/backend/src/server/api/endpoints/notes/schedule/list.ts
index 4895733d4e..4dd3d7a81a 100644
--- a/packages/backend/src/server/api/endpoints/notes/schedule/list.ts
+++ b/packages/backend/src/server/api/endpoints/notes/schedule/list.ts
@@ -7,12 +7,14 @@ import ms from 'ms';
import { Inject, Injectable } from '@nestjs/common';
import { Endpoint } from '@/server/api/endpoint-base.js';
import { DI } from '@/di-symbols.js';
-import type { MiNote, MiNoteSchedule, NoteScheduleRepository } from '@/models/_.js';
+import type { MiNote, MiUser, MiNoteSchedule, NoteScheduleRepository, NotesRepository } from '@/models/_.js';
import { UserEntityService } from '@/core/entities/UserEntityService.js';
+import { NoteEntityService } from '@/core/entities/NoteEntityService.js';
import { DriveFileEntityService } from '@/core/entities/DriveFileEntityService.js';
import { QueryService } from '@/core/QueryService.js';
import { Packed } from '@/misc/json-schema.js';
import { noteVisibilities } from '@/types.js';
+import { bindThis } from '@/decorators.js';
export const meta = {
tags: ['notes'],
@@ -81,7 +83,11 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
@Inject(DI.noteScheduleRepository)
private noteScheduleRepository: NoteScheduleRepository,
+ @Inject(DI.notesRepository)
+ private notesRepository: NotesRepository,
+
private userEntityService: UserEntityService,
+ private noteEntityService: NoteEntityService,
private driveFileEntityService: DriveFileEntityService,
private queryService: QueryService,
) {
@@ -106,6 +112,9 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
userId: string;
scheduledAt: string;
}[] = await Promise.all(scheduleNotes.map(async (item: MiNoteSchedule) => {
+ const renote = await this.fetchNote(item.note.renote, me);
+ const reply = await this.fetchNote(item.note.reply, me);
+
return {
...item,
scheduledAt: item.scheduledAt.toISOString(),
@@ -115,12 +124,15 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
user: user,
visibility: item.note.visibility ?? 'public',
reactionAcceptance: item.note.reactionAcceptance ?? null,
- visibleUsers: item.note.visibleUsers ? await userEntityService.packMany(item.note.visibleUsers.map(u => u.id), me) : [],
+ visibleUsers: item.note.visibleUsers ? await this.userEntityService.packMany(item.note.visibleUsers.map(u => u.id), me) : [],
fileIds: item.note.files ? item.note.files : [],
files: await this.driveFileEntityService.packManyByIds(item.note.files),
createdAt: item.scheduledAt.toISOString(),
isSchedule: true,
id: item.id,
+ renote, reply,
+ renoteId: item.note.renote,
+ replyId: item.note.reply,
},
};
}));
@@ -128,4 +140,19 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
return scheduleNotesPack;
});
}
+
+ @bindThis
+ private async fetchNote(
+ id: MiNote['id'] | null | undefined,
+ me: MiUser,
+ ): Promise<Packed<'Note'> | null> {
+ if (id) {
+ const note = await this.notesRepository.findOneBy({ id });
+ if (note) {
+ note.reactionAndUserPairCache ??= [];
+ return this.noteEntityService.pack(note, me);
+ }
+ }
+ return null;
+ }
}