myex-cli
Version:
Opinionated Express.js framework with CLI tools
81 lines (74 loc) • 2.13 kB
JavaScript
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;
}
},
};