diff --git a/src/modules/userRole/controller/UserRoleAssignment.controller.ts b/src/modules/userRole/controller/UserRoleAssignment.controller.ts index b1ce329..3d68a79 100644 --- a/src/modules/userRole/controller/UserRoleAssignment.controller.ts +++ b/src/modules/userRole/controller/UserRoleAssignment.controller.ts @@ -1,16 +1,39 @@ import { Context } from "elysia"; -import { UserRoleAssignmentSchema } from "../schemas/UserRoleAssignment.schema"; -import { returnErrorResponse } from "../../../helpers/callback/httpResponse"; +import { userRoleAssignmentSchema } from "../schemas/userRoleAssignment.schema"; +import { mainErrorHandler } from "../../../helpers/error/handler"; +import { userRoleAssignmentService } from "../services/userRoleAssignment.service"; +import { + returnErrorResponse, + returnWriteResponse, +} from "../../../helpers/callback/httpResponse"; -export const UserRoleAssignmentController = async (ctx: Context) => { - const validation = UserRoleAssignmentSchema.safeParse(ctx.body); - // if (!validation.success) - // return returnErrorResponse( - // ctx.set, - // 400, - // "Validation error", - // validation.error - // ); +export const userRoleAssignmentController = async (ctx: Context) => { + // Validate form input using zod schema + const validation = userRoleAssignmentSchema.safeParse(ctx.body); + if (!validation.success) + return returnErrorResponse( + ctx.set, + 400, + "Validation error", + validation.error + ); - return ctx.body; + try { + // Store the userId and roleId from the validated data + const payload = { + userId: validation.data.userId, + roleId: validation.data.roleId, + }; + + // Call the service to assign the user role + const AssignUserRole = await userRoleAssignmentService(payload); + return returnWriteResponse( + ctx.set, + 201, + "User role assignment successfully", + AssignUserRole + ); + } catch (error) { + return mainErrorHandler(ctx.set, error); + } }; diff --git a/src/modules/userRole/index.ts b/src/modules/userRole/index.ts index 10bc856..5da84e5 100644 --- a/src/modules/userRole/index.ts +++ b/src/modules/userRole/index.ts @@ -1,11 +1,11 @@ import Elysia from "elysia"; import { createUserRoleController } from "./controller/createUserRole.controller"; import { unautenticatedMiddleware } from "../../middleware/auth/unauthenticated.middleware"; -import { UserRoleAssignmentController } from "./controller/UserRoleAssignment.controller"; +import { userRoleAssignmentController } from "./controller/userRoleAssignment.controller"; export const userRoleModule = new Elysia({ prefix: "/roles" }) .get("/", () => "Hello User Role Module", { beforeHandle: unautenticatedMiddleware, }) .post("/", createUserRoleController) - .post("/assign", UserRoleAssignmentController); // need fix and it just for development only! + .post("/assign", userRoleAssignmentController); // need fix and it just for development only! diff --git a/src/modules/userRole/repositories/userRoleAssignment.repository.ts b/src/modules/userRole/repositories/userRoleAssignment.repository.ts new file mode 100644 index 0000000..6f3203d --- /dev/null +++ b/src/modules/userRole/repositories/userRoleAssignment.repository.ts @@ -0,0 +1,22 @@ +import { userModel } from "../../user/user.model"; +import { UserRoleAssignment } from "../userRole.types"; + +export const userRoleAssignmentRepository = async ({ + userId, + roleId, +}: UserRoleAssignment) => { + const userAssigned = await userModel.update({ + where: { + id: userId, + }, + data: { + roles: { + connect: { + id: roleId, + }, + }, + }, + }); + + return userAssigned; +}; diff --git a/src/modules/userRole/schemas/UserRoleAssignment.schema.ts b/src/modules/userRole/schemas/UserRoleAssignment.schema.ts index d2996ef..5f4e782 100644 --- a/src/modules/userRole/schemas/UserRoleAssignment.schema.ts +++ b/src/modules/userRole/schemas/UserRoleAssignment.schema.ts @@ -1,6 +1,6 @@ import z from "zod"; -export const UserRoleAssignmentSchema = z.object({ +export const userRoleAssignmentSchema = z.object({ userId: z.string(), roleId: z.string(), }); diff --git a/src/modules/userRole/services/userRoleAssignment.service.ts b/src/modules/userRole/services/userRoleAssignment.service.ts new file mode 100644 index 0000000..d165611 --- /dev/null +++ b/src/modules/userRole/services/userRoleAssignment.service.ts @@ -0,0 +1,18 @@ +import { ErrorForwarder } from "../../../helpers/error/instances/forwarder"; +import { userRoleAssignmentRepository } from "../repositories/userRoleAssignment.repository"; +import { UserRoleAssignment } from "../userRole.types"; + +export const userRoleAssignmentService = async ({ + userId, + roleId, +}: UserRoleAssignment) => { + try { + const assignRoleToUser = await userRoleAssignmentRepository({ + userId, + roleId, + }); + return assignRoleToUser; + } catch (error) { + ErrorForwarder(error); + } +}; diff --git a/src/modules/userRole/userRole.types.ts b/src/modules/userRole/userRole.types.ts index e69de29..ef10ce3 100644 --- a/src/modules/userRole/userRole.types.ts +++ b/src/modules/userRole/userRole.types.ts @@ -0,0 +1,4 @@ +export interface UserRoleAssignment { + userId: string; + roleId: string; +}