node-enterprise-starter
Version:
<h1 align="center">Node Enterprise Starter</h1>
170 lines (156 loc) • 4.57 kB
text/typescript
import { Request, Response } from "express";
import httpStatus from "http-status";
import sendResponse from "../../utils/sendResponse";
import { UserService } from "./user.service";
/**
* Controller handling user-related HTTP requests
*/
export class UserController {
/**
* Retrieves all users from the database
*
* @param {Request} req - Express request object
* @param {Response} res - Express response object
*/
static async getAllUsers(req: Request, res: Response) {
try {
const users = await UserService.getAllUsers();
sendResponse<typeof users>(res, {
statusCode: httpStatus.OK,
success: true,
message: "Users retrieved successfully",
data: users,
});
} catch (error) {
sendResponse(res, {
statusCode: httpStatus.INTERNAL_SERVER_ERROR,
success: false,
message: "Failed to retrieve users",
data: null,
});
}
}
/**
* Retrieves the current authenticated user's profile
*
* @param {Request} req - Express request object with user property from auth middleware
* @param {Response} res - Express response object
*/
static async getMe(req: Request, res: Response) {
try {
const user = await UserService.getMeForDB(req.user.id);
sendResponse<typeof user>(res, {
statusCode: httpStatus.OK,
success: true,
message: "User profile retrieved successfully",
data: user,
});
} catch (error) {
sendResponse(res, {
statusCode: httpStatus.INTERNAL_SERVER_ERROR,
success: false,
message: "Failed to retrieve user profile",
data: null,
});
}
}
/**
* Retrieves a specific user by their ID
*
* @param {Request} req - Express request object with id parameter
* @param {Response} res - Express response object
*/
static async getUserById(req: Request, res: Response) {
try {
const { id } = req.params;
const user = await UserService.getUserById(id);
if (!user) {
return sendResponse(res, {
statusCode: httpStatus.NOT_FOUND,
success: false,
message: "User not found",
data: null,
});
}
sendResponse<typeof user>(res, {
statusCode: httpStatus.OK,
success: true,
message: "User retrieved successfully",
data: user,
});
} catch (error) {
sendResponse(res, {
statusCode: httpStatus.INTERNAL_SERVER_ERROR,
success: false,
message: "Failed to retrieve user",
data: null,
});
}
}
/**
* Updates a user's information by their ID
*
* @param {Request} req - Express request object with id parameter and request body
* @param {Response} res - Express response object
*/
static async updateUserById(req: Request, res: Response) {
try {
const { id } = req.params;
const updatedUser = await UserService.updateUserById(id, req.body);
if (!updatedUser) {
return sendResponse(res, {
statusCode: httpStatus.NOT_FOUND,
success: false,
message: "User not found or could not be updated",
data: null,
});
}
sendResponse<typeof updatedUser>(res, {
statusCode: httpStatus.OK,
success: true,
message: "User updated successfully",
data: updatedUser,
});
} catch (error) {
sendResponse(res, {
statusCode: httpStatus.INTERNAL_SERVER_ERROR,
success: false,
message: "Failed to update user",
data: null,
});
}
}
/**
* Deletes a user by their ID
*
* @param {Request} req - Express request object with id parameter
* @param {Response} res - Express response object
*/
static async deleteUserById(req: Request, res: Response) {
try {
const { id } = req.params;
const result = await UserService.deleteUserById(id);
if (!result) {
return sendResponse(res, {
statusCode: httpStatus.NOT_FOUND,
success: false,
message: "User not found or could not be deleted",
data: null,
});
}
sendResponse(res, {
statusCode: httpStatus.OK,
success: true,
message: "User deleted successfully",
data: null,
});
} catch (error) {
sendResponse(res, {
statusCode: httpStatus.INTERNAL_SERVER_ERROR,
success: false,
message: "Failed to delete user",
data: null,
});
}
}
}