♻️ refactoring find user service

This commit is contained in:
Rafi Arrafif
2025-07-18 22:09:46 +07:00
parent 16b1674356
commit b5c4fc56a0
2 changed files with 14 additions and 14 deletions

View File

@ -1,23 +1,23 @@
import { User } from "@prisma/client";
import { findUserByEmailRepository } from "../../repositories/read/findUserByEmail.repository"; import { findUserByEmailRepository } from "../../repositories/read/findUserByEmail.repository";
import { getUserDataService } from "../../user.types"; import { getUserDataService } from "../../user.types";
import { AppError } from "../../../../helpers/error/instances/app"; import { AppError } from "../../../../helpers/error/instances/app";
import { findUserByIdRepository } from "../../repositories/read/findUserById.repository"; import { findUserByIdRepository } from "../../repositories/read/findUserById.repository";
import { findUserByUsernameRepository } from "../../repositories/read/findUserByUsername.repository"; import { findUserByUsernameRepository } from "../../repositories/read/findUserByUsername.repository";
import { ErrorForwarder } from "../../../../helpers/error/instances/forwarder";
export const findUserService = async (payload: getUserDataService) => { export const findUserService = async (payload: getUserDataService) => {
let userData: User | null = null; try {
if (payload.queryTarget === "email") { const repositoryMap = {
userData = await findUserByEmailRepository(payload.identifier); id: findUserByIdRepository,
} email: findUserByEmailRepository,
if (payload.queryTarget === "id") { username: findUserByUsernameRepository,
userData = await findUserByIdRepository(payload.identifier); } as const;
}
if (payload.queryTarget === "username") {
userData = await findUserByUsernameRepository(payload.identifier);
}
if (userData === null) throw new AppError(404, "User not found"); const repoFn = repositoryMap[payload.queryTarget];
if (!repoFn) throw new AppError(502, "Repository handler not found");
return userData; return await repoFn(payload.identifier);
} catch (error) {
ErrorForwarder(error);
}
}; };

View File

@ -1,6 +1,6 @@
export interface getUserDataService { export interface getUserDataService {
identifier: string; identifier: string;
queryTarget: "id" | "email" | "username" | "email_username"; queryTarget: "id" | "email" | "username";
options: getUserDataOptions; options: getUserDataOptions;
} }
export interface getUserDataOptions { export interface getUserDataOptions {