diff options
| author | syuilo <Syuilotan@yahoo.co.jp> | 2023-01-14 17:38:16 +0900 |
|---|---|---|
| committer | syuilo <Syuilotan@yahoo.co.jp> | 2023-01-14 17:38:16 +0900 |
| commit | 76c049522e2fb506915f9fad0cd763236245f45c (patch) | |
| tree | 32a19e1239698d01a3571508e8fcd87c78597398 /packages/backend/src | |
| parent | refactor(client): use css modules (diff) | |
| download | misskey-76c049522e2fb506915f9fad0cd763236245f45c.tar.gz misskey-76c049522e2fb506915f9fad0cd763236245f45c.tar.bz2 misskey-76c049522e2fb506915f9fad0cd763236245f45c.zip | |
enhance: ユーザーリストおよびユーザーリスト内のユーザーの作成可能数を設定可能に
Diffstat (limited to 'packages/backend/src')
5 files changed, 37 insertions, 4 deletions
diff --git a/packages/backend/src/core/RoleService.ts b/packages/backend/src/core/RoleService.ts index 39413e2a55..0ddcb44ca1 100644 --- a/packages/backend/src/core/RoleService.ts +++ b/packages/backend/src/core/RoleService.ts @@ -25,6 +25,8 @@ export type RoleOptions = { webhookLimit: number; clipLimit: number; noteEachClipsLimit: number; + userListLimit: number; + userEachUserListsLimit: number; }; export const DEFAULT_ROLE: RoleOptions = { @@ -39,6 +41,8 @@ export const DEFAULT_ROLE: RoleOptions = { webhookLimit: 3, clipLimit: 10, noteEachClipsLimit: 200, + userListLimit: 10, + userEachUserListsLimit: 50, }; @Injectable() @@ -212,6 +216,8 @@ export class RoleService implements OnApplicationShutdown { webhookLimit: Math.max(...getOptionValues('webhookLimit')), clipLimit: Math.max(...getOptionValues('clipLimit')), noteEachClipsLimit: Math.max(...getOptionValues('noteEachClipsLimit')), + userListLimit: Math.max(...getOptionValues('userListLimit')), + userEachUserListsLimit: Math.max(...getOptionValues('userEachUserListsLimit')), }; } diff --git a/packages/backend/src/core/UserListService.ts b/packages/backend/src/core/UserListService.ts index 054387ff8e..18c9787fa8 100644 --- a/packages/backend/src/core/UserListService.ts +++ b/packages/backend/src/core/UserListService.ts @@ -10,6 +10,7 @@ import { DI } from '@/di-symbols.js'; import { UserEntityService } from '@/core/entities/UserEntityService.js'; import { ProxyAccountService } from '@/core/ProxyAccountService.js'; import { bindThis } from '@/decorators.js'; +import { RoleService } from '@/core/RoleService.js'; @Injectable() export class UserListService { @@ -23,13 +24,21 @@ export class UserListService { private userEntityService: UserEntityService, private idService: IdService, private userFollowingService: UserFollowingService, + private roleService: RoleService, private globalEventServie: GlobalEventService, private proxyAccountService: ProxyAccountService, ) { } @bindThis - public async push(target: User, list: UserList) { + public async push(target: User, list: UserList, me: User) { + const currentCount = await this.userListJoiningsRepository.countBy({ + userListId: list.id, + }); + if (currentCount > (await this.roleService.getUserRoleOptions(me.id)).userEachUserListsLimit) { + throw new Error('Too many users'); + } + await this.userListJoiningsRepository.insert({ id: this.idService.genId(), createdAt: new Date(), diff --git a/packages/backend/src/queue/processors/ImportUserListsProcessorService.ts b/packages/backend/src/queue/processors/ImportUserListsProcessorService.ts index 1bec77b837..a9672250c8 100644 --- a/packages/backend/src/queue/processors/ImportUserListsProcessorService.ts +++ b/packages/backend/src/queue/processors/ImportUserListsProcessorService.ts @@ -10,10 +10,10 @@ import { DownloadService } from '@/core/DownloadService.js'; import { UserListService } from '@/core/UserListService.js'; import { IdService } from '@/core/IdService.js'; import { UtilityService } from '@/core/UtilityService.js'; +import { bindThis } from '@/decorators.js'; import { QueueLoggerService } from '../QueueLoggerService.js'; import type Bull from 'bull'; import type { DbUserImportJobData } from '../types.js'; -import { bindThis } from '@/decorators.js'; @Injectable() export class ImportUserListsProcessorService { @@ -102,7 +102,7 @@ export class ImportUserListsProcessorService { if (await this.userListJoiningsRepository.findOneBy({ userListId: list!.id, userId: target.id }) != null) continue; - this.userListService.push(target, list!); + this.userListService.push(target, list!, user); } catch (e) { this.logger.warn(`Error in line:${linenum} ${e}`); } diff --git a/packages/backend/src/server/api/endpoints/users/lists/create.ts b/packages/backend/src/server/api/endpoints/users/lists/create.ts index 99f0751ea8..810c9909b2 100644 --- a/packages/backend/src/server/api/endpoints/users/lists/create.ts +++ b/packages/backend/src/server/api/endpoints/users/lists/create.ts @@ -5,6 +5,8 @@ import type { UserList } from '@/models/entities/UserList.js'; import { Endpoint } from '@/server/api/endpoint-base.js'; import { UserListEntityService } from '@/core/entities/UserListEntityService.js'; import { DI } from '@/di-symbols.js'; +import { ApiError } from '@/server/api/error'; +import { RoleService } from '@/core/RoleService.js'; export const meta = { tags: ['lists'], @@ -20,6 +22,14 @@ export const meta = { optional: false, nullable: false, ref: 'UserList', }, + + errors: { + tooManyUserLists: { + message: 'You cannot create user list any more.', + code: 'TOO_MANY_USERLISTS', + id: '0cf21a28-7715-4f39-a20d-777bfdb8d138', + }, + }, } as const; export const paramDef = { @@ -39,8 +49,16 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { private userListEntityService: UserListEntityService, private idService: IdService, + private roleService: RoleService, ) { super(meta, paramDef, async (ps, me) => { + const currentCount = await this.userListsRepository.countBy({ + userId: me.id, + }); + if (currentCount > (await this.roleService.getUserRoleOptions(me.id)).userListLimit) { + throw new ApiError(meta.errors.tooManyUserLists); + } + const userList = await this.userListsRepository.insert({ id: this.idService.genId(), createdAt: new Date(), diff --git a/packages/backend/src/server/api/endpoints/users/lists/push.ts b/packages/backend/src/server/api/endpoints/users/lists/push.ts index 96be7e11e8..3a079ee1ab 100644 --- a/packages/backend/src/server/api/endpoints/users/lists/push.ts +++ b/packages/backend/src/server/api/endpoints/users/lists/push.ts @@ -111,7 +111,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { } // Push the user - await this.userListService.push(user, userList); + await this.userListService.push(user, userList, me); }); } } |