From: charleswrayjr Date: Sat, 13 Sep 2025 07:11:44 +0000 (-0500) Subject: Adding auth, media, and messaging. X-Git-Url: https://git.phasecustomsoft.com/?a=commitdiff_plain;h=00fa2dea74d755bcd5a507778ddbbc5dfb3d8f4f;p=phs-api.git Adding auth, media, and messaging. --- diff --git a/src/controllers/user.controller.js b/src/controllers/user.controller.js new file mode 100644 index 0000000..4eef016 --- /dev/null +++ b/src/controllers/user.controller.js @@ -0,0 +1,190 @@ +/** + * @file User controller for handling user-related API requests + */ + +const db = require('../models'); +const createError = require('http-errors'); +const logger = global.logger; + +/** + * User controller + * @type {Object} + */ +module.exports = { + /** + * Create a new user + * @param {Object} req - Express request object + * @param {Object} res - Express response object + * @param {Function} next - Express next middleware function + * @returns {Promise} + */ + async create(req, res, next) { + try { + const user_data = req.body; + const user = await db.user.create(user_data); + res.status(200).send(user.to_safe_json()); + } catch (error) { + logger.error(`Create user error: ${error.message}`); + next(createError(error.status || 400, error.message)); + } + }, + + /** + * Find one user by ID + * @param {Object} req - Express request object + * @param {Object} res - Express response object + * @param {Function} next - Express next middleware function + * @returns {Promise} + */ + async show(req, res, next) { + try { + const { id } = req.params; + const user = await db.user.find_one({ id: parseInt(id) }); + if (!user) return next(createError(404, 'User not found')); + res.status(200).send(user.to_safe_json()); + } catch (error) { + logger.error(`Show user error: ${error.message}`); + next(createError(error.status || 500, error.message)); + } + }, + + /** + * Find many users + * @param {Object} req - Express request object + * @param {Object} res - Express response object + * @param {Function} next - Express next middleware function + * @returns {Promise} + */ + async index(req, res, next) { + try { + const { limit = 100, offset = 0, ...where } = req.query; + const users = await db.user.find_many(where, [], null, parseInt(limit), parseInt(offset)); + if (!users.length) return next(createError(404, 'No users found')); + res.status(200).send(users.map(u => u.to_safe_json())); + } catch (error) { + logger.error(`Index users error: ${error.message}`); + next(createError(error.status || 500, error.message)); + } + }, + + /** + * Find user by email + * @param {Object} req - Express request object + * @param {Object} res - Express response object + * @param {Function} next - Express next middleware function + * @returns {Promise} + */ + async find_by_email(req, res, next) { + try { + const { email } = req.params; + const user = await db.user.find_by_email(email); + if (!user) return next(createError(404, 'User not found')); + res.status(200).send(user.to_safe_json()); + } catch (error) { + logger.error(`Find user by email error: ${error.message}`); + next(createError(error.status || 500, error.message)); + } + }, + + /** + * Find user by nickname + * @param {Object} req - Express request object + * @param {Object} res - Express response object + * @param {Function} next - Express next middleware function + * @returns {Promise} + */ + async find_by_nickname(req, res, next) { + try { + const { nickname } = req.params; + const user = await db.user.find_by_nickname(nickname); + if (!user) return next(createError(404, 'User not found')); + res.status(200).send(user.to_safe_json()); + } catch (error) { + logger.error(`Find user by nickname error: ${error.message}`); + next(createError(error.status || 500, error.message)); + } + }, + + /** + * Update a user + * @param {Object} req - Express request object + * @param {Object} res - Express response object + * @param {Function} next - Express next middleware function + * @returns {Promise} + */ + async update(req, res, next) { + try { + const { id } = req.params; + const user_data = req.body; + const user = await db.user.instance().find_one({ id: parseInt(id) }); + if (!user) return next(createError(404, 'User not found')); + const updated_user = await user.update(user_data); + res.status(200).send(updated_user.to_safe_json()); + } catch (error) { + logger.error(`Update user error: ${error.message}`); + next(createError(error.status || 400, error.message)); + } + }, + + /** + * Deactivate a user + * @param {Object} req - Express request object + * @param {Object} res - Express response object + * @param {Function} next - Express next middleware function + * @returns {Promise} + */ + async deactivate(req, res, next) { + try { + const { id } = req.params; + const { deactivated_by_id } = req.body; + const user = await db.user.instance().find_one({ id: parseInt(id) }); + if (!user) return next(createError(404, 'User not found')); + const deactivated_user = await user.deactivate(deactivated_by_id); + res.status(200).send(deactivated_user.to_safe_json()); + } catch (error) { + logger.error(`Deactivate user error: ${error.message}`); + next(createError(error.status || 400, error.message)); + } + }, + + /** + * Reactivate a user + * @param {Object} req - Express request object + * @param {Object} res - Express response object + * @param {Function} next - Express next middleware function + * @returns {Promise} + */ + async reactivate(req, res, next) { + try { + const { id } = req.params; + const user = await db.user.instance().find_one({ id: parseInt(id) }); + if (!user) return next(createError(404, 'User not found')); + const reactivated_user = await user.reactivate(); + res.status(200).send(reactivated_user.to_safe_json()); + } catch (error) { + logger.error(`Reactivate user error: ${error.message}`); + next(createError(error.status || 400, error.message)); + } + }, + + /** + * Soft delete a user + * @param {Object} req - Express request object + * @param {Object} res - Express response object + * @param {Function} next - Express next middleware function + * @returns {Promise} + */ + async soft_delete(req, res, next) { + try { + const { id } = req.params; + const { deleted_by_id } = req.body; + const user = await db.user.instance().find_one({ id: parseInt(id) }); + if (!user) return next(createError(404, 'User not found')); + const deleted_user = await user.soft_delete(deleted_by_id); + res.status(200).send(deleted_user.to_safe_json()); + } catch (error) { + logger.error(`Soft delete user error: ${error.message}`); + next(createError(error.status || 400, error.message)); + } + } +}; \ No newline at end of file diff --git a/src/routes/user.routes.js b/src/routes/user.routes.js index 914e9ae..5dffd7d 100644 --- a/src/routes/user.routes.js +++ b/src/routes/user.routes.js @@ -1,7 +1,7 @@ const express = require('express'); const router = express.Router(); const { validate_auth } = require('../middleware/routeHelpers'); -const users_controller = require('../controllers/users.controller'); +const users_controller = require('../controllers/user.controller'); module.exports = (passport) => { router.post('/create', validate_auth(passport), users_controller.create);