予約投稿の一覧表示、削除をできるようにした

dbに投稿内容を保存するようにした

Signed-off-by: mattyatea <mattyacocacora0@gmail.com>
This commit is contained in:
mattyatea 2023-11-09 16:09:51 +09:00
parent 14b48f87d8
commit 540f531b6d
No known key found for this signature in database
GPG key ID: 068E54E2C33BEF9A
15 changed files with 238 additions and 25 deletions

View file

@ -197,9 +197,6 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
@Inject(DI.usersRepository)
private usersRepository: UsersRepository,
@Inject(DI.db)
private db: DataSource,
@Inject(DI.notesRepository)
private notesRepository: NotesRepository,
@ -388,6 +385,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
id: noteId,
note: note,
userId: me.id,
expiresAt: new Date(ps.schedule.expiresAt),
});
const delay = new Date(ps.schedule.expiresAt).getTime() - Date.now();

View file

@ -0,0 +1,49 @@
/*
* SPDX-FileCopyrightText: syuilo and other misskey contributors
* SPDX-License-Identifier: AGPL-3.0-only
*/
import ms from 'ms';
import { Inject, Injectable } from '@nestjs/common';
import type { NoteScheduleRepository } from '@/models/_.js';
import { Endpoint } from '@/server/api/endpoint-base.js';
import { DI } from '@/di-symbols.js';
export const meta = {
tags: ['notes'],
requireCredential: true,
limit: {
duration: ms('1hour'),
max: 300,
},
errors: {
noSuchNote: {
message: 'No such note.',
code: 'NO_SUCH_NOTE',
id: '490be23f-8c1f-4796-819f-94cb4f9d1630',
},
},
} as const;
export const paramDef = {
type: 'object',
properties: {
noteId: { type: 'string', format: 'misskey:id' },
},
required: ['noteId'],
} as const;
@Injectable()
export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-disable-line import/no-default-export
constructor(
@Inject(DI.noteScheduleRepository)
private noteScheduleRepository: NoteScheduleRepository,
) {
super(meta, paramDef, async (ps, me) => {
await this.noteScheduleRepository.delete({ id: ps.noteId });
});
}
}

View file

@ -0,0 +1,61 @@
/*
* SPDX-FileCopyrightText: syuilo and other misskey contributors
* SPDX-License-Identifier: AGPL-3.0-only
*/
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 { NoteScheduleRepository } from '@/models/_.js';
import { UserEntityService } from '@/core/entities/UserEntityService.js';
export const meta = {
tags: ['notes'],
requireCredential: true,
res: {
type: 'array',
optional: false, nullable: false,
items: {
type: 'object',
optional: false, nullable: false,
ref: 'Note',
},
},
limit: {
duration: ms('1hour'),
max: 300,
},
errors: {
},
} as const;
export const paramDef = {
type: 'object',
properties: {
},
required: [],
} as const;
@Injectable()
export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-disable-line import/no-default-export
constructor(
@Inject(DI.noteScheduleRepository)
private noteScheduleRepository: NoteScheduleRepository,
private userEntityService: UserEntityService,
) {
super(meta, paramDef, async (ps, me) => {
const scheduleNotes = await this.noteScheduleRepository.findBy({ userId: me.id });
const user = await this.userEntityService.pack(me, me);
scheduleNotes.forEach((item: any) => {
item.note.user = user;
item.note.createdAt = new Date(item.expiresAt);
item.note.isSchedule = true;
item.note.id = item.id;
});
return scheduleNotes;
});
}
}