From 47fae30abadd7e1cdd6afbc1440761b5a4119c13 Mon Sep 17 00:00:00 2001 From: tamaina Date: Sun, 4 Jun 2023 17:27:52 +0000 Subject: [PATCH] wip --- .../core/entities/BlockingEntityService.ts | 5 +- .../server/api/endpoints/blocking/delete.ts | 58 ++------------- .../src/server/api/endpoints/blocking/list.ts | 33 +-------- packages/misskey-js/src/endpoints.ts | 70 +++++++++++++++++++ 4 files changed, 82 insertions(+), 84 deletions(-) diff --git a/packages/backend/src/core/entities/BlockingEntityService.ts b/packages/backend/src/core/entities/BlockingEntityService.ts index 77e8cae189..25d31ad451 100644 --- a/packages/backend/src/core/entities/BlockingEntityService.ts +++ b/packages/backend/src/core/entities/BlockingEntityService.ts @@ -7,6 +7,7 @@ import type { Blocking } from '@/models/entities/Blocking.js'; import type { User } from '@/models/entities/User.js'; import { bindThis } from '@/decorators.js'; import { UserEntityService } from './UserEntityService.js'; +import { Serialized } from 'schema-type'; @Injectable() export class BlockingEntityService { @@ -22,7 +23,7 @@ export class BlockingEntityService { public async pack( src: Blocking['id'] | Blocking, me?: { id: User['id'] } | null | undefined, - ): Promise> { + ): Promise>> { const blocking = typeof src === 'object' ? src : await this.blockingsRepository.findOneByOrFail({ id: src }); return await awaitAll({ @@ -39,7 +40,7 @@ export class BlockingEntityService { public packMany( blockings: any[], me: { id: User['id'] }, - ) { + ): Promise>[]> { return Promise.all(blockings.map(x => this.pack(x, me))); } } diff --git a/packages/backend/src/server/api/endpoints/blocking/delete.ts b/packages/backend/src/server/api/endpoints/blocking/delete.ts index 46dd26a45a..4a7de73e8a 100644 --- a/packages/backend/src/server/api/endpoints/blocking/delete.ts +++ b/packages/backend/src/server/api/endpoints/blocking/delete.ts @@ -8,56 +8,10 @@ import { DI } from '@/di-symbols.js'; import { ApiError } from '../../error.js'; import { GetterService } from '@/server/api/GetterService.js'; -export const meta = { - tags: ['account'], - - limit: { - duration: ms('1hour'), - max: 100, - }, - - requireCredential: true, - - kind: 'write:blocks', - - errors: { - noSuchUser: { - message: 'No such user.', - code: 'NO_SUCH_USER', - id: '8621d8bf-c358-4303-a066-5ea78610eb3f', - }, - - blockeeIsYourself: { - message: 'Blockee is yourself.', - code: 'BLOCKEE_IS_YOURSELF', - id: '06f6fac6-524b-473c-a354-e97a40ae6eac', - }, - - notBlocking: { - message: 'You are not blocking that user.', - code: 'NOT_BLOCKING', - id: '291b2efa-60c6-45c0-9f6a-045c8f9b02cd', - }, - }, - - res: { - type: 'object', - optional: false, nullable: false, - ref: 'UserDetailedNotMe', - }, -} as const; - -export const paramDef = { - type: 'object', - properties: { - userId: { type: 'string', format: 'misskey:id' }, - }, - required: ['userId'], -} as const; - // eslint-disable-next-line import/no-default-export @Injectable() -export default class extends Endpoint { +export default class extends Endpoint<'blocking/delete'> { + name = 'blocking/delete' as const; constructor( @Inject(DI.usersRepository) private usersRepository: UsersRepository, @@ -69,17 +23,17 @@ export default class extends Endpoint { private getterService: GetterService, private userBlockingService: UserBlockingService, ) { - super(meta, paramDef, async (ps, me) => { + super(async (ps, me) => { const blocker = await this.usersRepository.findOneByOrFail({ id: me.id }); // Check if the blockee is yourself if (me.id === ps.userId) { - throw new ApiError(meta.errors.blockeeIsYourself); + throw new ApiError(this.meta.errors.blockeeIsYourself); } // Get blockee const blockee = await this.getterService.getUser(ps.userId).catch(err => { - if (err.id === '15348ddd-432d-49c2-8a5a-8069753becff') throw new ApiError(meta.errors.noSuchUser); + if (err.id === '15348ddd-432d-49c2-8a5a-8069753becff') throw new ApiError(this.meta.errors.noSuchUser); throw err; }); @@ -90,7 +44,7 @@ export default class extends Endpoint { }); if (exist == null) { - throw new ApiError(meta.errors.notBlocking); + throw new ApiError(this.meta.errors.notBlocking); } // Delete blocking diff --git a/packages/backend/src/server/api/endpoints/blocking/list.ts b/packages/backend/src/server/api/endpoints/blocking/list.ts index 969aae06f9..1e3faf9c1e 100644 --- a/packages/backend/src/server/api/endpoints/blocking/list.ts +++ b/packages/backend/src/server/api/endpoints/blocking/list.ts @@ -5,37 +5,10 @@ import { QueryService } from '@/core/QueryService.js'; import { BlockingEntityService } from '@/core/entities/BlockingEntityService.js'; import { DI } from '@/di-symbols.js'; -export const meta = { - tags: ['account'], - - requireCredential: true, - - kind: 'read:blocks', - - res: { - type: 'array', - optional: false, nullable: false, - items: { - type: 'object', - optional: false, nullable: false, - ref: 'Blocking', - }, - }, -} as const; - -export const paramDef = { - type: 'object', - properties: { - limit: { type: 'integer', minimum: 1, maximum: 100, default: 30 }, - sinceId: { type: 'string', format: 'misskey:id' }, - untilId: { type: 'string', format: 'misskey:id' }, - }, - required: [], -} as const; - // eslint-disable-next-line import/no-default-export @Injectable() -export default class extends Endpoint { +export default class extends Endpoint<'blocking/list'> { + name = 'blocking/list' as const; constructor( @Inject(DI.blockingsRepository) private blockingsRepository: BlockingsRepository, @@ -43,7 +16,7 @@ export default class extends Endpoint { private blockingEntityService: BlockingEntityService, private queryService: QueryService, ) { - super(meta, paramDef, async (ps, me) => { + super(async (ps, me) => { const query = this.queryService.makePaginationQuery(this.blockingsRepository.createQueryBuilder('blocking'), ps.sinceId, ps.untilId) .andWhere('blocking.blockerId = :meId', { meId: me.id }); diff --git a/packages/misskey-js/src/endpoints.ts b/packages/misskey-js/src/endpoints.ts index 96e3714925..fb291a9a37 100644 --- a/packages/misskey-js/src/endpoints.ts +++ b/packages/misskey-js/src/endpoints.ts @@ -2522,6 +2522,76 @@ export const endpoints = { }, }], }, + 'blocking/delete': { + tags: ['account'], + + limit: { + duration: ms('1hour'), + max: 100, + }, + + requireCredential: true, + + kind: 'write:blocks', + + errors: { + noSuchUser: { + message: 'No such user.', + code: 'NO_SUCH_USER', + id: '8621d8bf-c358-4303-a066-5ea78610eb3f', + }, + + blockeeIsYourself: { + message: 'Blockee is yourself.', + code: 'BLOCKEE_IS_YOURSELF', + id: '06f6fac6-524b-473c-a354-e97a40ae6eac', + }, + + notBlocking: { + message: 'You are not blocking that user.', + code: 'NOT_BLOCKING', + id: '291b2efa-60c6-45c0-9f6a-045c8f9b02cd', + }, + }, + + defines: [{ + req: { + type: 'object', + properties: { + userId: { type: 'string', format: 'misskey:id' }, + }, + required: ['userId'], + }, + res: { + $ref: 'https://misskey-hub.net/api/schemas/UserDetailedNotMe', + }, + }], + }, + 'blocking/list': { + tags: ['account'], + + requireCredential: true, + + kind: 'read:blocks', + + defines: [{ + req: { + type: 'object', + properties: { + limit: { type: 'integer', minimum: 1, maximum: 100, default: 30 }, + sinceId: { type: 'string', format: 'misskey:id' }, + untilId: { type: 'string', format: 'misskey:id' }, + }, + required: [], + }, + res: { + type: 'array', + items: { + $ref: 'https://misskey-hub.net/api/schemas/Blocking', + }, + }, + }], + }, //#endregion } as const satisfies { [x: string]: IEndpointMeta; };