From ff5bb2ed3d916e0812f3d62438612e9df56b3145 Mon Sep 17 00:00:00 2001 From: naskya Date: Sun, 2 Jun 2024 07:28:37 +0900 Subject: [PATCH] fix (backend): don't use `findOneBy` to check existence --- .../backend/src/server/api/common/signup.ts | 16 +++++++++------- .../server/api/endpoints/reply-mute/create.ts | 4 ++-- .../server/api/endpoints/reply-mute/delete.ts | 6 +++--- .../backend/src/services/create-system-user.ts | 17 ++++++++++------- 4 files changed, 24 insertions(+), 19 deletions(-) diff --git a/packages/backend/src/server/api/common/signup.ts b/packages/backend/src/server/api/common/signup.ts index 52ef938929..05e92bcbea 100644 --- a/packages/backend/src/server/api/common/signup.ts +++ b/packages/backend/src/server/api/common/signup.ts @@ -82,15 +82,17 @@ export async function signup(opts: { let account!: User; + const exists = await Users.existsBy({ + usernameLower: username.toLowerCase(), + host: IsNull(), + }); + + if (exists) { + throw new Error("the username is already used"); + } + // Start transaction await db.transaction(async (transactionalEntityManager) => { - const exist = await transactionalEntityManager.findOneBy(User, { - usernameLower: username.toLowerCase(), - host: IsNull(), - }); - - if (exist) throw new Error(" the username is already used"); - const now = new Date(); account = await transactionalEntityManager.save( diff --git a/packages/backend/src/server/api/endpoints/reply-mute/create.ts b/packages/backend/src/server/api/endpoints/reply-mute/create.ts index e92b846afa..2d9f260b28 100644 --- a/packages/backend/src/server/api/endpoints/reply-mute/create.ts +++ b/packages/backend/src/server/api/endpoints/reply-mute/create.ts @@ -47,12 +47,12 @@ export default define(meta, paramDef, async (ps, user) => { }); // Check if already muting - const exist = await ReplyMutings.findOneBy({ + const exists = await ReplyMutings.existsBy({ muterId: muter.id, muteeId: mutee.id, }); - if (exist != null) { + if (exists) { throw new ApiError(meta.errors.alreadyMuting); } diff --git a/packages/backend/src/server/api/endpoints/reply-mute/delete.ts b/packages/backend/src/server/api/endpoints/reply-mute/delete.ts index f659a17bfc..152d3fca60 100644 --- a/packages/backend/src/server/api/endpoints/reply-mute/delete.ts +++ b/packages/backend/src/server/api/endpoints/reply-mute/delete.ts @@ -45,18 +45,18 @@ export default define(meta, paramDef, async (ps, user) => { }); // Check not muting - const exist = await ReplyMutings.findOneBy({ + const record = await ReplyMutings.findOneBy({ muterId: muter.id, muteeId: mutee.id, }); - if (exist == null) { + if (record == null) { throw new ApiError(meta.errors.notMuting); } // Delete mute await ReplyMutings.delete({ - id: exist.id, + id: record.id, }); // publishUserEvent(user.id, "unmute", mutee); diff --git a/packages/backend/src/services/create-system-user.ts b/packages/backend/src/services/create-system-user.ts index 6c9e828900..0aabf7cc83 100644 --- a/packages/backend/src/services/create-system-user.ts +++ b/packages/backend/src/services/create-system-user.ts @@ -2,6 +2,7 @@ import { v4 as uuid } from "uuid"; import { genRsaKeyPair } from "@/misc/gen-key-pair.js"; import { User } from "@/models/entities/user.js"; import { UserProfile } from "@/models/entities/user-profile.js"; +import { Users } from "@/models/index.js"; import { IsNull } from "typeorm"; import { generateUserToken, genIdAt, hashPassword } from "backend-rs"; import { UserKeypair } from "@/models/entities/user-keypair.js"; @@ -21,17 +22,19 @@ export async function createSystemUser(username: string) { let account!: User; + const exists = await Users.existsBy({ + usernameLower: username.toLowerCase(), + host: IsNull(), + }); + + if (exists) { + throw new Error("the user already exists"); + } + const now = new Date(); // Start transaction await db.transaction(async (transactionalEntityManager) => { - const exist = await transactionalEntityManager.findOneBy(User, { - usernameLower: username.toLowerCase(), - host: IsNull(), - }); - - if (exist) throw new Error("the user is already exists"); - account = await transactionalEntityManager .insert(User, { id: genIdAt(now),