cube-ms
Version:
Production-ready microservice framework with health monitoring, validation, error handling, and Docker Swarm support
157 lines (138 loc) • 3.68 kB
JavaScript
import { UserService } from '../services/user.service.js';
export class UserController {
constructor(service) {
this.service = service;
this.userService = new UserService(service);
}
/**
* Get all users
*/
async getUsers(req, res, logger) {
try {
logger.info('Fetching all users');
const result = await this.userService.findMany(req.query);
res.json({
success: true,
data: result.data,
pagination: result.pagination,
timestamp: new Date().toISOString()
});
} catch (error) {
logger.error('Error fetching users', error);
res.status(500).json({
success: false,
message: 'Failed to fetch users',
error: error.message
});
}
}
/**
* Get user by ID
*/
async getUserById(req, res, logger) {
try {
const { id } = req.params;
logger.info('Fetching user by ID', { userId: id });
const user = await this.userService.findById(id);
if (!user) {
return res.status(404).json({
success: false,
message: 'User not found'
});
}
res.json({
success: true,
data: user,
timestamp: new Date().toISOString()
});
} catch (error) {
logger.error('Error fetching user', error);
res.status(500).json({
success: false,
message: 'Failed to fetch user',
error: error.message
});
}
}
/**
* Create new user
*/
async createUser(req, res, logger) {
try {
const userData = req.body;
logger.info('Creating new user', { email: userData.email });
const user = await this.userService.create(userData);
res.status(201).json({
success: true,
data: user,
message: 'User created successfully',
timestamp: new Date().toISOString()
});
} catch (error) {
logger.error('Error creating user', error);
res.status(400).json({
success: false,
message: 'Failed to create user',
error: error.message
});
}
}
/**
* Update user
*/
async updateUser(req, res, logger) {
try {
const { id } = req.params;
const updateData = req.body;
logger.info('Updating user', { userId: id });
const user = await this.userService.update(id, updateData);
if (!user) {
return res.status(404).json({
success: false,
message: 'User not found'
});
}
res.json({
success: true,
data: user,
message: 'User updated successfully',
timestamp: new Date().toISOString()
});
} catch (error) {
logger.error('Error updating user', error);
res.status(400).json({
success: false,
message: 'Failed to update user',
error: error.message
});
}
}
/**
* Delete user
*/
async deleteUser(req, res, logger) {
try {
const { id } = req.params;
logger.info('Deleting user', { userId: id });
const deleted = await this.userService.delete(id);
if (!deleted) {
return res.status(404).json({
success: false,
message: 'User not found'
});
}
res.json({
success: true,
message: 'User deleted successfully',
timestamp: new Date().toISOString()
});
} catch (error) {
logger.error('Error deleting user', error);
res.status(500).json({
success: false,
message: 'Failed to delete user',
error: error.message
});
}
}
}