From b55d26387b6a56c90c9dc96a90d9fffaef98bab4 Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Sun, 12 Feb 2023 10:36:43 +0900
Subject: [PATCH] improve error handling

---
 packages/backend/src/core/UserListService.ts    |  4 +++-
 .../server/api/endpoints/users/lists/push.ts    | 17 +++++++++++++++--
 2 files changed, 18 insertions(+), 3 deletions(-)

diff --git a/packages/backend/src/core/UserListService.ts b/packages/backend/src/core/UserListService.ts
index c174394999..bc726a1feb 100644
--- a/packages/backend/src/core/UserListService.ts
+++ b/packages/backend/src/core/UserListService.ts
@@ -14,6 +14,8 @@ import { RoleService } from '@/core/RoleService.js';
 
 @Injectable()
 export class UserListService {
+	public static TooManyUsersError = class extends Error {};
+
 	constructor(
 		@Inject(DI.usersRepository)
 		private usersRepository: UsersRepository,
@@ -36,7 +38,7 @@ export class UserListService {
 			userListId: list.id,
 		});
 		if (currentCount > (await this.roleService.getUserPolicies(me.id)).userEachUserListsLimit) {
-			throw new Error('Too many users');
+			throw new UserListService.TooManyUsersError();
 		}
 
 		await this.userListJoiningsRepository.insert({
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 3a079ee1ab..1c1fdc23f1 100644
--- a/packages/backend/src/server/api/endpoints/users/lists/push.ts
+++ b/packages/backend/src/server/api/endpoints/users/lists/push.ts
@@ -45,6 +45,12 @@ export const meta = {
 			code: 'YOU_HAVE_BEEN_BLOCKED',
 			id: '990232c5-3f9d-4d83-9f3f-ef27b6332a4b',
 		},
+
+		tooManyUsers: {
+			message: 'You can not push users any more.',
+			code: 'TOO_MANY_USERS',
+			id: '2dd9752e-a338-413d-8eec-41814430989b',
+		},
 	},
 } as const;
 
@@ -110,8 +116,15 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
 				throw new ApiError(meta.errors.alreadyAdded);
 			}
 
-			// Push the user
-			await this.userListService.push(user, userList, me);
+			try {
+				await this.userListService.push(user, userList, me);
+			} catch (err) {
+				if (err instanceof UserListService.TooManyUsersError) {
+					throw new ApiError(meta.errors.tooManyUsers);
+				}
+
+				throw err;
+			}
 		});
 	}
 }