diff --git a/src/controllers/user.ts b/src/controllers/user.ts index 71e67ac..40b7d24 100644 --- a/src/controllers/user.ts +++ b/src/controllers/user.ts @@ -29,6 +29,17 @@ export const deleteUser = asyncHandler(async (req: Request, res: Response) => { if (!existingUser) { return errorResponse(res, 'User not found', 404) } - const users = await userService.deleteUserById(userId) + await userService.deleteUserById(userId) + successResponse(res, null) +}) + +export const updateUser = asyncHandler(async (req: Request, res: Response) => { + const { userId } = req.params + + const existingUser = await userService.getUserById(userId) + if (!existingUser) { + return errorResponse(res, 'User not found', 404) + } + const users = await userService.updateUser(userId, req.body) successResponse(res, users) }) diff --git a/src/routes/v1/user.ts b/src/routes/v1/user.ts index fb894d1..c3ad90a 100644 --- a/src/routes/v1/user.ts +++ b/src/routes/v1/user.ts @@ -29,6 +29,12 @@ router validate(userValidation.getUserSchema), userController.getUser, ) + .patch( + verifyJwt, + verifyRoles('manageUsers'), + validate(userValidation.updateUserSchema), + userController.updateUser, + ) .delete( verifyJwt, verifyRoles('manageUsers'), diff --git a/src/services/user.ts b/src/services/user.ts index 0993a08..c03627e 100644 --- a/src/services/user.ts +++ b/src/services/user.ts @@ -99,4 +99,24 @@ export const deleteUserById = async (id: string) => { logger.error(`Failed to delete user by id: ${JSON.stringify(err)}`) throw new Error('Failed to delete user by id') } -} \ No newline at end of file +} + +export const updateUser = async ( + id: string, + user: Omit, +) => { + try { + const updatedUser = await prisma.user.update({ + where: { + id, + }, + data: { + ...user, + }, + }) + return updatedUser + } catch (err: unknown) { + logger.error(`Failed to update user by id: ${JSON.stringify(err)}`) + throw new Error('Failed to update user by id') + } +} diff --git a/src/validations/user.ts b/src/validations/user.ts index 22e6bee..91742ed 100644 --- a/src/validations/user.ts +++ b/src/validations/user.ts @@ -26,4 +26,11 @@ export const getUserSchema = z.object({ }), }) -export const deleteUserSchema = getUserSchema \ No newline at end of file +export const deleteUserSchema = getUserSchema + +export const updateUserSchema = z.object({ + params: z.object({ + userId: z.string().uuid(), + }), + body: createUserSchema.shape.body.partial(), +})