UNPKG

myex-cli

Version:

Opinionated Express.js framework with CLI tools

204 lines (185 loc) 5.51 kB
import { logger } from '../utils/logger.js'; import { userService } from '../services/user.service.js'; export const userController = { /** * Get all users (admin only) * @param {import('express').Request} req - Express request object * @param {import('express').Response} res - Express response object */ getAllUsers: async (req, res) => { try { const users = await userService.findAllUsers(); res.status(200).json({ status: 'success', data: { users: users.map(user => ({ id: user._id, email: user.email, name: user.name, role: user.role, createdAt: user.createdAt, })), }, }); } catch (error) { logger.error(`Get all users error: ${error.message}`); res.status(500).json({ status: 'error', message: 'Failed to retrieve users', }); } }, /** * Get current user profile * @param {import('express').Request} req - Express request object * @param {import('express').Response} res - Express response object */ getCurrentUser: async (req, res) => { try { const userId = req.user.id; const user = await userService.findUserById(userId); if (!user) { return res.status(404).json({ status: 'error', message: 'User not found', }); } res.status(200).json({ status: 'success', data: { user: { id: user._id, email: user.email, name: user.name, role: user.role, createdAt: user.createdAt, }, }, }); } catch (error) { logger.error(`Get current user error: ${error.message}`); res.status(500).json({ status: 'error', message: 'Failed to retrieve user profile', }); } }, /** * Get a user by ID * @param {import('express').Request} req - Express request object * @param {import('express').Response} res - Express response object */ getUserById: async (req, res) => { try { const { id } = req.params; // Check if the user is trying to access their own profile or is an admin if (req.user.id !== id && req.user.role !== 'admin') { return res.status(403).json({ status: 'error', message: 'Access denied: You can only view your own profile', }); } const user = await userService.findUserById(id); if (!user) { return res.status(404).json({ status: 'error', message: 'User not found', }); } res.status(200).json({ status: 'success', data: { user: { id: user._id, email: user.email, name: user.name, role: user.role, createdAt: user.createdAt, }, }, }); } catch (error) { logger.error(`Get user by ID error: ${error.message}`); res.status(500).json({ status: 'error', message: 'Failed to retrieve user', }); } }, /** * Update a user * @param {import('express').Request} req - Express request object * @param {import('express').Response} res - Express response object */ updateUser: async (req, res) => { try { const { id } = req.params; const { name, email } = req.body; // Check if the user is trying to update their own profile or is an admin if (req.user.id !== id && req.user.role !== 'admin') { return res.status(403).json({ status: 'error', message: 'Access denied: You can only update your own profile', }); } // Check if user exists const user = await userService.findUserById(id); if (!user) { return res.status(404).json({ status: 'error', message: 'User not found', }); } // Update user const updatedUser = await userService.updateUser(id, { name, email }); res.status(200).json({ status: 'success', message: 'User updated successfully', data: { user: { id: updatedUser._id, email: updatedUser.email, name: updatedUser.name, role: updatedUser.role, }, }, }); } catch (error) { logger.error(`Update user error: ${error.message}`); res.status(500).json({ status: 'error', message: 'Failed to update user', }); } }, /** * Delete a user (admin only) * @param {import('express').Request} req - Express request object * @param {import('express').Response} res - Express response object */ deleteUser: async (req, res) => { try { const { id } = req.params; // Check if user exists const user = await userService.findUserById(id); if (!user) { return res.status(404).json({ status: 'error', message: 'User not found', }); } // Delete user await userService.deleteUser(id); res.status(200).json({ status: 'success', message: 'User deleted successfully', }); } catch (error) { logger.error(`Delete user error: ${error.message}`); res.status(500).json({ status: 'error', message: 'Failed to delete user', }); } }, };