From 394a692acc9cf3b821e582beac40c08e877a1893 Mon Sep 17 00:00:00 2001 From: kakkokari-gtyih <67428053+kakkokari-gtyih@users.noreply.github.com> Date: Fri, 17 Jan 2025 11:27:36 +0900 Subject: [PATCH] =?UTF-8?q?API=E3=81=AE=E3=82=A8=E3=83=A9=E3=83=BCID?= =?UTF-8?q?=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/backend/src/core/NoteDraftService.ts | 10 ++++------ .../src/server/api/endpoints/notes/drafts/create.ts | 12 ++++++++++++ .../src/server/api/endpoints/notes/drafts/delete.ts | 4 ++-- .../src/server/api/endpoints/notes/drafts/update.ts | 4 ++-- 4 files changed, 20 insertions(+), 10 deletions(-) diff --git a/packages/backend/src/core/NoteDraftService.ts b/packages/backend/src/core/NoteDraftService.ts index a1abcedae4..500bbd0223 100644 --- a/packages/backend/src/core/NoteDraftService.ts +++ b/packages/backend/src/core/NoteDraftService.ts @@ -12,6 +12,7 @@ import { RoleService } from '@/core/RoleService.js'; import { IdService } from '@/core/IdService.js'; import type { MiLocalUser, MiUser } from '@/models/User.js'; import { IPoll } from '@/models/Poll.js'; +import { IdentifiableError } from '@/misc/identifiable-error.js'; export type NoteDraftOptions = { reply?: MiNote | null; @@ -30,9 +31,6 @@ export type NoteDraftOptions = { @Injectable() export class NoteDraftService { - public static NoSuchNoteDraftError = class extends Error {}; - public static TooManyNoteDraftsError = class extends Error {}; - constructor( @Inject(DI.noteDraftsRepository) private noteDraftsRepository: NoteDraftsRepository, @@ -67,7 +65,7 @@ export class NoteDraftService { userId: me.id, }); if (currentCount >= (await this.roleService.getUserPolicies(me.id)).noteDraftLimit) { - throw new NoteDraftService.TooManyNoteDraftsError(); + throw new IdentifiableError('c9a2c1d8-d153-40be-9cac-9fc2eb56b581', 'Too many drafts'); } const draft = await this.noteDraftsRepository.insertOne({ @@ -110,7 +108,7 @@ export class NoteDraftService { }); if (draft == null) { - throw new NoteDraftService.NoSuchNoteDraftError(); + throw new IdentifiableError('03a9514d-ff73-4c48-a55a-0282c8311ec6', 'No such note draft'); } await this.noteDraftsRepository.update(draft.id, { @@ -140,7 +138,7 @@ export class NoteDraftService { }); if (draft == null) { - throw new NoteDraftService.NoSuchNoteDraftError(); + throw new IdentifiableError('03a9514d-ff73-4c48-a55a-0282c8311ec6', 'No such note draft'); } await this.noteDraftsRepository.delete(draft.id); diff --git a/packages/backend/src/server/api/endpoints/notes/drafts/create.ts b/packages/backend/src/server/api/endpoints/notes/drafts/create.ts index cc469c9672..b8a6827c0a 100644 --- a/packages/backend/src/server/api/endpoints/notes/drafts/create.ts +++ b/packages/backend/src/server/api/endpoints/notes/drafts/create.ts @@ -16,6 +16,7 @@ import { ApiError } from '@/server/api/error.js'; import { isQuote, isRenote } from '@/misc/is-renote.js'; import { NoteEntityService } from '@/core/entities/NoteEntityService.js'; import { NoteDraftEntityService } from '@/core/entities/NoteDraftEntityService.js'; +import { IdentifiableError } from '@/misc/identifiable-error.js'; export const meta = { tags: ['notes', 'drafts'], @@ -122,6 +123,12 @@ export const meta = { code: 'CONTAINS_TOO_MANY_MENTIONS', id: '4de0363a-3046-481b-9b0f-feff3e211025', }, + + tooManyDrafts: { + message: 'You cannot create drafts any more.', + code: 'TOO_MANY_DRAFTS', + id: '9ee33bbe-fde3-4c71-9b51-e50492c6b9c8', + }, }, limit: { @@ -340,6 +347,11 @@ export default class extends Endpoint { // eslint- visibility: ps.visibility, visibleUsers, channel, + }).catch((err) => { + if (err instanceof IdentifiableError && err.id === 'c9a2c1d8-d153-40be-9cac-9fc2eb56b581') { + throw new ApiError(meta.errors.tooManyDrafts); + } + throw err; }); const createdDraft = await this.noteDraftEntityService.pack(draft, me); diff --git a/packages/backend/src/server/api/endpoints/notes/drafts/delete.ts b/packages/backend/src/server/api/endpoints/notes/drafts/delete.ts index 14bc2ee781..6c41145c18 100644 --- a/packages/backend/src/server/api/endpoints/notes/drafts/delete.ts +++ b/packages/backend/src/server/api/endpoints/notes/drafts/delete.ts @@ -21,13 +21,13 @@ export const meta = { noSuchNoteDraft: { message: 'No such note draft.', code: 'NO_SUCH_NOTE_DRAFT', - id: '', + id: '49cd6b9d-848e-41ee-b0b9-adaca711a6b1', }, accessDenied: { message: 'Access denied.', code: 'ACCESS_DENIED', - id: '', + id: '56f35758-7dd5-468b-8439-5d6fb8ec9b8e', }, }, } as const; diff --git a/packages/backend/src/server/api/endpoints/notes/drafts/update.ts b/packages/backend/src/server/api/endpoints/notes/drafts/update.ts index fc2d9c0a8b..e5cc5909e5 100644 --- a/packages/backend/src/server/api/endpoints/notes/drafts/update.ts +++ b/packages/backend/src/server/api/endpoints/notes/drafts/update.ts @@ -127,13 +127,13 @@ export const meta = { noSuchNoteDraft: { message: 'No such note draft.', code: 'NO_SUCH_NOTE_DRAFT', - id: '', + id: '49cd6b9d-848e-41ee-b0b9-adaca711a6b1', }, accessDenied: { message: 'Access denied.', code: 'ACCESS_DENIED', - id: '', + id: '56f35758-7dd5-468b-8439-5d6fb8ec9b8e', }, },