]> PHS Git Server - phs-api.git/commitdiff
Adding phone_number routes and controllers.
authorcharleswrayjr <charleswrayjr@gmail.com>
Fri, 12 Sep 2025 03:21:46 +0000 (22:21 -0500)
committercharleswrayjr <charleswrayjr@gmail.com>
Fri, 12 Sep 2025 03:21:46 +0000 (22:21 -0500)
src/controllers/phone_number.controller.js [new file with mode: 0644]
src/controllers/user_phone_numbers.controller.js [new file with mode: 0644]
src/routes/phone_number.routes.js [new file with mode: 0644]
src/routes/user_phone_numbers.routes.js [new file with mode: 0644]

diff --git a/src/controllers/phone_number.controller.js b/src/controllers/phone_number.controller.js
new file mode 100644 (file)
index 0000000..3acbb7e
--- /dev/null
@@ -0,0 +1,129 @@
+/**
+ * @file Phone number controller for handling phone-number-related API requests
+ */
+
+const db = require('../models');
+const createError = require('http-errors');
+
+/**
+ * Phone number controller
+ * @type {Object}
+ */
+module.exports = {
+  /**
+   * Create a new phone number
+   * @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 phone_data = req.body;
+      const phone = await db.phone_number.create(phone_data);
+      res.json(phone);
+    } catch (error) {
+      logger.error(`Create phone number error: ${error.message}`);
+      next(createError(error.status || 400, error.message));
+    }
+  },
+
+  /**
+   * Find phone number by number
+   * @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_number(req, res, next) {
+    try {
+      const { number } = req.params;
+      const phone = await db.phone_number.find_by_number(number);
+      if (!phone) return next(createError(404, 'Phone number not found'));
+      res.json(phone);
+    } catch (error) {
+      logger.error(`Find phone number error: ${error.message}`);
+      next(createError(error.status || 500, error.message));
+    }
+  },
+
+  /**
+   * Find one phone number 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 find_one(req, res, next) {
+    try {
+      const { id } = req.params;
+      const phone = await db.phone_number.find_one({ id: parseInt(id) });
+      if (!phone) return next(createError(404, 'Phone number not found'));
+      res.json(phone);
+    } catch (error) {
+      logger.error(`Find phone number error: ${error.message}`);
+      next(createError(error.status || 500, error.message));
+    }
+  },
+
+  /**
+   * Find many phone numbers
+   * @param {Object} req - Express request object
+   * @param {Object} [req.query] - Order by configuration
+   * @param {Object} res - Express response object
+   * @param {Function} next - Express next middleware function
+   * @returns {Promise<void>}
+   */
+  async find_many(req, res, next) {
+    try {
+      const { limit = '100', offset = '0', ...where } = req.query;
+      const phones = await db.phone_number.find_many(where, [], null, parseInt(limit), parseInt(offset));
+      res.json(phones);
+    } catch (error) {
+      logger.error(`Find many phone numbers error: ${error.message}`);
+      next(createError(error.status || 500, error.message));
+    }
+  },
+
+  /**
+   * Update a phone number
+   * @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 phone_data = req.body;
+      const phone = await db.phone_number.instance().find_one({ id: parseInt(id) });
+      if (!phone) return next(createError(404, 'Phone number not found'));
+      const updated_phone = await phone.update(phone_data);
+      res.json(updated_phone);
+    } catch (error) {
+      logger.error(`Update phone number error: ${error.message}`);
+      next(createError(error.status || 400, error.message));
+    }
+  },
+
+  /**
+   * Soft delete a phone number
+   * @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 phone = await db.phone_number.instance().find_one({ id: parseInt(id) });
+      if (!phone) return next(createError(404, 'Phone number not found'));
+      const deleted_phone = await phone.soft_delete(deleted_by_id);
+      res.json(deleted_phone);
+    } catch (error) {
+      logger.error(`Soft delete phone number error: ${error.message}`);
+      next(createError(error.status || 400, error.message));
+    }
+  }
+};
\ No newline at end of file
diff --git a/src/controllers/user_phone_numbers.controller.js b/src/controllers/user_phone_numbers.controller.js
new file mode 100644 (file)
index 0000000..f22f77f
--- /dev/null
@@ -0,0 +1,87 @@
+/**
+ * @file User phone numbers controller for handling user phone-number-related API requests
+ */
+
+const db = require( '../models' );
+const createError = require( 'http-errors' );
+
+/**
+ * User phone numbers controller
+ * @type {Object}
+ */
+module.exports = {
+  /**
+   * Add a user-phone number relation
+   * @param {Object} req - Express request object
+   * @param {Object} res - Express response object
+   * @param {Function} next - Express next middleware function
+   * @returns {Promise<void>}
+   */
+  async add_relation( req, res, next ) {
+    try {
+      const { user_id, phone_number_id } = req.body;
+      const relation = await db.user_phone_numbers.add_relation( user_id, phone_number_id );
+      res.status(201).json( relation );
+    } catch (error) {
+      logger.error( `Add user-phone number relation error: ${ error.message }` );
+      next( createError( error.status || 400, error.message ) );
+    }
+  },
+
+  /**
+   * Remove a user-phone number relation
+   * @param {Object} req - Express request object
+   * @param {Object} res - Express response object
+   * @param {Function} next - Express next middleware function
+   * @returns {Promise<void>}
+   */
+  async remove_relation( req, res, next ) {
+    try {
+      const { phone_number_id, user_id } = req.body;
+      const relation = await db.user_phone_numbers.remove_relation( phone_number_id, user_id );
+      if (!relation) return next( createError( 404, 'Relation not found' ) );
+      res.json( relation );
+    } catch (error) {
+      logger.error( `Remove user-phone number relation error: ${ error.message }` );
+      next( createError( error.status || 400, error.message ) );
+    }
+  },
+
+  /**
+   * Find user-phone number relation by IDs
+   * @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_ids( req, res, next ) {
+    try {
+      const { user_id, phone_number_id } = req.params;
+      const relation = await db.user_phone_numbers.find_by_ids( parseInt( user_id ), parseInt( phone_number_id ) );
+      if (!relation) return next( createError( 404, 'Relation not found' ) );
+      res.json( relation );
+    } catch (error) {
+      logger.error( `Find user-phone number by IDs error: ${ error.message }` );
+      next( createError( error.status || 500, error.message ) );
+    }
+  },
+
+  /**
+   * Find user-phone number relations by user ID
+   * @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_user_id( req, res, next ) {
+    try {
+      const { user_id } = req.params;
+      const { limit = '100', offset = '0' } = req.query;
+      const relations = await db.user_phone_numbers.find_by_user_id( parseInt( user_id ), [], null, parseInt( limit ), parseInt( offset ) );
+      res.json( relations );
+    } catch (error) {
+      logger.error( `Find user-phone numbers by user ID error: ${ error.message }` );
+      next( createError( error.status || 500, error.message ) );
+    }
+  }
+};
\ No newline at end of file
diff --git a/src/routes/phone_number.routes.js b/src/routes/phone_number.routes.js
new file mode 100644 (file)
index 0000000..015937e
--- /dev/null
@@ -0,0 +1,23 @@
+/**
+ * @file Address routes configuration
+ */
+
+const express = require('express');
+const router = express.Router();
+const { validate_auth } = require('../middleware/routeHelpers');
+const phone_number_controller = require('../controllers/phone_number.controller');
+
+/**
+ * Configure address routes
+ * @param {Object} passport - Passport instance for authentication
+ * @returns {Object} Express router with address routes
+ */
+module.exports = (passport) => {
+  router.post('/create', validate_auth(passport), phone_number_controller.create);
+  router.get('/zip/:number', validate_auth(passport), phone_number_controller.find_by_number);
+  router.get('/:id', validate_auth(passport), phone_number_controller.find_one);
+  router.get('/', validate_auth(passport), phone_number_controller.find_many);
+  router.put('/:id', validate_auth(passport), phone_number_controller.update);
+  router.put('/:id/soft_delete', validate_auth(passport), phone_number_controller.soft_delete);
+  return router;
+};
\ No newline at end of file
diff --git a/src/routes/user_phone_numbers.routes.js b/src/routes/user_phone_numbers.routes.js
new file mode 100644 (file)
index 0000000..ae7122f
--- /dev/null
@@ -0,0 +1,21 @@
+/**
+ * @file User phone numbers routes configuration
+ */
+
+const express = require('express');
+const router = express.Router();
+const { validate_auth } = require('../middleware/routeHelpers');
+const user_phone_numbers_controller = require('../controllers/user_phone_numbers.controller');
+
+/**
+ * Configure user phone numbers routes
+ * @param {Object} passport - Passport instance for authentication
+ * @returns {Object} Express router with user phone numbers routes
+ */
+module.exports = (passport) => {
+  router.post('/add', validate_auth(passport), user_phone_numbers_controller.add_relation);
+  router.delete('/remove', validate_auth(passport), user_phone_numbers_controller.remove_relation);
+  router.get('/ids/:user_id/:phone_number_id', validate_auth(passport), user_phone_numbers_controller.find_by_ids);
+  router.get('/user/:user_id', validate_auth(passport), user_phone_numbers_controller.find_by_user_id);
+  return router;
+};
\ No newline at end of file