From 8bcde5518a836f8d54576b47c3c50943420fbd8b Mon Sep 17 00:00:00 2001 From: Rafi Arrafif Date: Thu, 17 Jul 2025 00:05:35 +0700 Subject: [PATCH] :technologist: create zod error instance in helper --- src/helpers/error/handler/index.ts | 5 ++++ .../createUserViaRegister.controller.ts | 4 ++-- src/modules/user/schemas/createUser.schema.ts | 17 -------------- .../schemas/createUserViaRegister.schema.ts | 23 +++++++++++++++++++ 4 files changed, 30 insertions(+), 19 deletions(-) delete mode 100644 src/modules/user/schemas/createUser.schema.ts create mode 100644 src/modules/user/schemas/createUserViaRegister.schema.ts diff --git a/src/helpers/error/handler/index.ts b/src/helpers/error/handler/index.ts index 6011572..8ef66e2 100644 --- a/src/helpers/error/handler/index.ts +++ b/src/helpers/error/handler/index.ts @@ -3,6 +3,7 @@ import { Prisma } from "@prisma/client"; import { returnErrorResponse } from "../../callback/httpResponse"; import { AppError } from "../instances/app"; import { PrismaErrorCodeList } from "../../../utils/databases/prisma/error/codeList"; +import z from "zod"; export const mainErrorHandler = (set: Context["set"], error: unknown) => { if (error instanceof AppError) { @@ -51,5 +52,9 @@ export const mainErrorHandler = (set: Context["set"], error: unknown) => { ); } + if (error instanceof z.ZodError) { + return returnErrorResponse(set, 422, error.issues[0].message, error.issues); + } + return returnErrorResponse(set, 500, "Internal server error", error); }; diff --git a/src/modules/user/controller/createUserViaRegister.controller.ts b/src/modules/user/controller/createUserViaRegister.controller.ts index aaa8235..d67f822 100644 --- a/src/modules/user/controller/createUserViaRegister.controller.ts +++ b/src/modules/user/controller/createUserViaRegister.controller.ts @@ -1,12 +1,12 @@ import { Context } from "elysia"; -import { createUserSchema } from "../schemas/createUser.schema"; +import { createUserViaRegisterSchema } from "../schemas/createUserViaRegister.schema"; import { mainErrorHandler } from "../../../helpers/error/handler"; import { createUserViaRegisterService } from "../services/createUserViaRegister.service"; import { returnWriteResponse } from "../../../helpers/callback/httpResponse"; export const createUserViaRegisterController = async (ctx: Context) => { try { - const validate = createUserSchema.parse(ctx.body); + const validate = createUserViaRegisterSchema.parse(ctx.body); const createUser = await createUserViaRegisterService(validate); return returnWriteResponse( diff --git a/src/modules/user/schemas/createUser.schema.ts b/src/modules/user/schemas/createUser.schema.ts deleted file mode 100644 index 0728643..0000000 --- a/src/modules/user/schemas/createUser.schema.ts +++ /dev/null @@ -1,17 +0,0 @@ -import z from "zod"; - -export const createUserSchema = z.object({ - name: z.string(), - username: z - .string() - .min(4) //Total all username character must over 4 character - .regex(/^[a-zA-Z0-9_-]+$/), //Prohibiting the use of spaces and symbols other than - and _ - email: z.email(), - password: z - .string() - .min(8) //Total all password chaacter must over 8 character - .regex(/[A-Z]/) //Min has 1 uppercase letter - .regex(/[a-z]/) //Min has 1 lowercase letter - .regex(/[0-9]/) //Min has 1 number - .regex(/[^A-Za-z0-9"]/), //Min has 1 symbol character -}); diff --git a/src/modules/user/schemas/createUserViaRegister.schema.ts b/src/modules/user/schemas/createUserViaRegister.schema.ts new file mode 100644 index 0000000..f5beb57 --- /dev/null +++ b/src/modules/user/schemas/createUserViaRegister.schema.ts @@ -0,0 +1,23 @@ +import z from "zod"; + +export const createUserViaRegisterSchema = z.object({ + name: z.string(), + username: z + .string() + .min(4, "username: must be 4 characters or longer.") //Total all username character must over 4 character + .regex( + /^[a-zA-Z0-9_-]+$/, + "username: symbols other than - and _ are not allowed" + ), //Prohibiting the use of spaces and symbols other than - and _ + email: z.email(), + password: z + .string() + .min(8, "password: must be 8 characters or longer.") //Total all password chaacter must over 8 character + .regex(/[A-Z]/, "password: have at least 1 uppercase letter") //Have at least 1 uppercase letter + .regex(/[a-z]/, "password: have at least 1 lowercase letter") //Have at least 1 lowercase letter + .regex(/[0-9]/, "password: have at least 1 number") //Have at least 1 number + .regex( + /[^A-Za-z0-9"]/, + "password: has at least 1 symbol except quotation marks" + ), //Have at least 1 symbol character +});