UNPKG

myex-cli

Version:

Opinionated Express.js framework with CLI tools

81 lines (74 loc) 2.13 kB
import { User } from '../models/user.model.js'; import { logger } from '../utils/logger.js'; export const userService = { /** * Find all users * @returns {Promise<Array>} Array of users */ findAllUsers: async () => { try { return await User.find().select('-password'); } catch (error) { logger.error(`Error finding all users: ${error.message}`); throw error; } }, /** * Find a user by ID * @param {string} id - User ID * @returns {Promise<Object|null>} User object or null */ findUserById: async (id) => { try { return await User.findById(id).select('-password'); } catch (error) { logger.error(`Error finding user by ID: ${error.message}`); throw error; } }, /** * Update a user * @param {string} id - User ID * @param {Object} updateData - Data to update * @returns {Promise<Object|null>} Updated user or null */ updateUser: async (id, updateData) => { try { const allowedUpdates = ['name', 'email']; const updates = {}; // Filter allowed updates for (const key in updateData) { if (allowedUpdates.includes(key) && updateData[key] !== undefined) { updates[key] = updateData[key]; } } // If no valid updates, return user without updating if (Object.keys(updates).length === 0) { return await User.findById(id).select('-password'); } // Update user with allowed fields return await User.findByIdAndUpdate( id, { $set: updates }, { new: true, runValidators: true } ).select('-password'); } catch (error) { logger.error(`Error updating user: ${error.message}`); throw error; } }, /** * Delete a user * @param {string} id - User ID * @returns {Promise<boolean>} True if user was deleted */ deleteUser: async (id) => { try { const result = await User.findByIdAndDelete(id); return !!result; } catch (error) { logger.error(`Error deleting user: ${error.message}`); throw error; } }, };