]> PHS Git Server - phs-api.git/commitdiff
Adding auth, media, and messaging.
authorcharleswrayjr <charleswrayjr@gmail.com>
Sat, 13 Sep 2025 07:11:44 +0000 (02:11 -0500)
committercharleswrayjr <charleswrayjr@gmail.com>
Sat, 13 Sep 2025 07:11:44 +0000 (02:11 -0500)
src/controllers/user.controller.js [new file with mode: 0644]
src/routes/user.routes.js

diff --git a/src/controllers/user.controller.js b/src/controllers/user.controller.js
new file mode 100644 (file)
index 0000000..4eef016
--- /dev/null
@@ -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<void>}
+   */
+  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<void>}
+   */
+  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<void>}
+   */
+  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<void>}
+   */
+  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<void>}
+   */
+  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<void>}
+   */
+  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<void>}
+   */
+  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<void>}
+   */
+  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<void>}
+   */
+  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
index 914e9ae5acbc64a7032ef02459ed5707c6191dc3..5dffd7d41cf179c17675d62b0378b803a6ec5a93 100644 (file)
@@ -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);