From b98c2c01c657cd64ad471c40487daba5e4a09c73 Mon Sep 17 00:00:00 2001 From: Rafi Arrafif Date: Tue, 15 Jul 2025 23:50:40 +0700 Subject: [PATCH] :poop: (user) i dont know what im commited --- prisma/schema.prisma | 4 +- .../controller/findUserByEmail.controller.ts | 9 +++- .../findUserByEmailOrUsername.repository.ts | 42 +++++++------------ .../user/services/findUserByEmail.service.ts | 13 ++++++ .../findUserByEmailOrUsername.service.ts | 14 +++---- src/modules/user/user.types.ts | 10 +++++ 6 files changed, 56 insertions(+), 36 deletions(-) create mode 100644 src/modules/user/services/findUserByEmail.service.ts diff --git a/prisma/schema.prisma b/prisma/schema.prisma index bfdbf50..66245ac 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -201,7 +201,7 @@ model User { gender UserGender? phoneCC Int? phoneNumber Int? - roles UserRoleAssignment[] + assignedRoles UserRoleAssignment[] bioProfile String? @db.Text avatar String? @db.Text commentBackground String? @db.Text @@ -284,7 +284,7 @@ model UserRole { createdAt DateTime @default(now()) updatedAt DateTime @default(now()) @updatedAt - users UserRoleAssignment[] + assignedUser UserRoleAssignment[] @@map("user_roles") } diff --git a/src/modules/user/controller/findUserByEmail.controller.ts b/src/modules/user/controller/findUserByEmail.controller.ts index 6d46583..6159ec3 100644 --- a/src/modules/user/controller/findUserByEmail.controller.ts +++ b/src/modules/user/controller/findUserByEmail.controller.ts @@ -1,5 +1,12 @@ import { Context } from "elysia"; +import { findUserByEmailService } from "../services/findUserByEmail.service"; +import { mainErrorHandler } from "../../../helpers/error/handler"; export const findUserByEmailController = async (ctx: Context) => { - return `Your email ${ctx.params.email}`; + try { + const findUserByEmail = await findUserByEmailService(ctx.params.email); + return findUserByEmail; + } catch (error) { + return mainErrorHandler(ctx.set, error); + } }; diff --git a/src/modules/user/repositories/findUserByEmailOrUsername.repository.ts b/src/modules/user/repositories/findUserByEmailOrUsername.repository.ts index 806761e..ba7cb31 100644 --- a/src/modules/user/repositories/findUserByEmailOrUsername.repository.ts +++ b/src/modules/user/repositories/findUserByEmailOrUsername.repository.ts @@ -1,37 +1,27 @@ -import { FindUserByEmailOrUsernameOptions } from "../services/findUserByEmailOrUsername.service"; import { userModel } from "../user.model"; +import { FindUserByEmailOrUsernameOptions } from "../user.types"; -export const findUserByEmailOrUsernameRepo = async ( +export const findUserByEmailOrUsernameRepository = async ( identifier: string, options: FindUserByEmailOrUsernameOptions ) => { - const userData = - (await userModel.findUnique({ - where: { email: identifier }, - include: { - roles: { - omit: { - createdBy: !options.verbose, - createdAt: !options.verbose, - updatedAt: !options.verbose, - deletedAt: !options.verbose, + const userData = await userModel.findUnique({ + where: { email: identifier }, + include: { + assignedRoles: { + select: { + role: { + omit: { + createdBy: true, + updatedAt: true, + createdAt: true, + deletedAt: true, + }, }, }, }, - })) || - (await userModel.findUnique({ - where: { username: identifier }, - include: { - roles: { - omit: { - createdBy: !options.verbose, - createdAt: !options.verbose, - updatedAt: !options.verbose, - deletedAt: !options.verbose, - }, - }, - }, - })); + }, + }); if (!userData) return false; return userData; diff --git a/src/modules/user/services/findUserByEmail.service.ts b/src/modules/user/services/findUserByEmail.service.ts new file mode 100644 index 0000000..de5f456 --- /dev/null +++ b/src/modules/user/services/findUserByEmail.service.ts @@ -0,0 +1,13 @@ +import { ErrorForwarder } from "../../../helpers/error/instances/forwarder"; +import { findUserByEmailOrUsernameRepository } from "../repositories/findUserByEmailOrUsername.repository"; + +export const findUserByEmailService = async (email: string) => { + try { + const findUserByEmail = findUserByEmailOrUsernameRepository(email, { + queryTarget: "email", + }); + return findUserByEmail; + } catch (error) { + ErrorForwarder(error); + } +}; diff --git a/src/modules/user/services/findUserByEmailOrUsername.service.ts b/src/modules/user/services/findUserByEmailOrUsername.service.ts index f4a1b11..c22da58 100644 --- a/src/modules/user/services/findUserByEmailOrUsername.service.ts +++ b/src/modules/user/services/findUserByEmailOrUsername.service.ts @@ -1,17 +1,17 @@ import { AppError } from "../../../helpers/error/instances/app"; import { ErrorForwarder } from "../../../helpers/error/instances/forwarder"; -import { findUserByEmailOrUsernameRepo } from "../repositories/findUserByEmailOrUsername.repository"; - -export interface FindUserByEmailOrUsernameOptions { - verbose?: boolean; // If true, returns the user with all details including sensitive information -} +import { findUserByEmailOrUsernameRepository } from "../repositories/findUserByEmailOrUsername.repository"; +import { FindUserByEmailOrUsernameOptions } from "../user.types"; export const findUserByEmailOrUsernameService = async ( identifier: string, - options: FindUserByEmailOrUsernameOptions = {} + options: FindUserByEmailOrUsernameOptions ) => { try { - const userData = await findUserByEmailOrUsernameRepo(identifier, options); + const userData = await findUserByEmailOrUsernameRepository( + identifier, + options + ); if (!userData) throw new AppError(404, "User not found"); return userData; diff --git a/src/modules/user/user.types.ts b/src/modules/user/user.types.ts index e69de29..c4d1e26 100644 --- a/src/modules/user/user.types.ts +++ b/src/modules/user/user.types.ts @@ -0,0 +1,10 @@ +export interface FindUserByEmailOrUsernameOptions { + queryTarget: "email" | "username" | "both"; + verbosity?: FindUserByEmailOrUsernameVerbosity; // If true, returns the user with all details including sensitive information +} +enum FindUserByEmailOrUsernameVerbosity { + "exists", + "basic", + "extended", + "full", +}