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

diff --git a/src/controllers/address.controller.js b/src/controllers/address.controller.js
new file mode 100644 (file)
index 0000000..d18f623
--- /dev/null
@@ -0,0 +1,128 @@
+/**
+ * @file Address controller for handling address-related API requests
+ */
+
+const db = require( '../models' );
+const createError = require( 'http-errors' );
+
+/**
+ * Address controller
+ * @type {Object}
+ */
+module.exports = {
+  /**
+   * Create a new address
+   * @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 address_data = req.body;
+      const address = await db.address.create( address_data );
+      res.json( address );
+    } catch (error) {
+      logger.error( `Create address error: ${ error.message }` );
+      next( createError( error.status || 400, error.message ) );
+    }
+  },
+
+  /**
+   * Find address by zip code
+   * @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_zip_code( req, res, next ) {
+    try {
+      const { zip_code } = req.params;
+      const address = await db.address.find_by_zip_code( zip_code );
+      if (!address) return next( createError( 404, 'Address not found' ) );
+      res.json( address );
+    } catch (error) {
+      logger.error( `Find address by zip code error: ${ error.message }` );
+      next( createError( error.status || 500, error.message ) );
+    }
+  },
+
+  /**
+   * Find one address 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 address = await db.address.find_one( { id:parseInt( id ) } );
+      if (!address) return next( createError( 404, 'Address not found' ) );
+      res.json( address );
+    } catch (error) {
+      logger.error( `Find address error: ${ error.message }` );
+      next( createError( error.status || 500, error.message ) );
+    }
+  },
+
+  /**
+   * Find many addresses
+   * @param {Object} req - Express request object
+   * @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 addresses = await db.address.find_many( where, [], null, parseInt( limit ), parseInt( offset ) );
+      res.json( addresses );
+    } catch (error) {
+      logger.error( `Find many addresses error: ${ error.message }` );
+      next( createError( error.status || 500, error.message ) );
+    }
+  },
+
+  /**
+   * Update an address
+   * @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 address_data = req.body;
+      const address = await db.address.instance().find_one( { id:parseInt( id ) } );
+      if (!address) return next( createError( 404, 'Address not found' ) );
+      const updated_address = await address.update( address_data );
+      res.json( updated_address );
+    } catch (error) {
+      logger.error( `Update address error: ${ error.message }` );
+      next( createError( error.status || 400, error.message ) );
+    }
+  },
+
+  /**
+   * Soft delete an address
+   * @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 address = await db.address.instance().find_one( { id:parseInt( id ) } );
+      if (!address) return next( createError( 404, 'Address not found' ) );
+      const deleted_address = await address.soft_delete( deleted_by_id );
+      res.json( deleted_address );
+    } catch (error) {
+      logger.error( `Soft delete address error: ${ error.message }` );
+      next( createError( error.status || 400, error.message ) );
+    }
+  }
+};
\ No newline at end of file
diff --git a/src/controllers/user_addresses.controller.js b/src/controllers/user_addresses.controller.js
new file mode 100644 (file)
index 0000000..ccceeb2
--- /dev/null
@@ -0,0 +1,87 @@
+/**
+ * @file User addresses controller for handling user-address-related API requests
+ */
+
+const db = require( '../models' );
+const createError = require( 'http-errors' );
+
+/**
+ * User addresses controller
+ * @type {Object}
+ */
+module.exports = {
+  /**
+   * Add a user-address 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, address_id } = req.body;
+      const relation = await db.user_addresses.add_relation( user_id, address_id );
+      res.json( relation );
+    } catch (error) {
+      logger.error( `Add user-address relation error: ${ error.message }` );
+      next( createError( error.status || 400, error.message ) );
+    }
+  },
+
+  /**
+   * Remove a user-address 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 { address_id, user_id } = req.body;
+      const relation = await db.user_addresses.remove_relation( address_id, user_id );
+      if (!relation) return next( createError( 404, 'Relation not found' ) );
+      res.json( relation );
+    } catch (error) {
+      logger.error( `Remove user-address relation error: ${ error.message }` );
+      next( createError( error.status || 400, error.message ) );
+    }
+  },
+
+  /**
+   * Find user-address 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, address_id } = req.params;
+      const relation = await db.user_addresses.find_by_ids( parseInt( user_id ), parseInt( address_id ) );
+      if (!relation) return next( createError( 404, 'Relation not found' ) );
+      res.json( relation );
+    } catch (error) {
+      logger.error( `Find user-address by IDs error: ${ error.message }` );
+      next( createError( error.status || 500, error.message ) );
+    }
+  },
+
+  /**
+   * Find user-address 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_addresses.find_by_user_id( parseInt( user_id ), [], null, parseInt( limit ), parseInt( offset ) );
+      res.json( relations );
+    } catch (error) {
+      logger.error( `Find user-addresses by user ID error: ${ error.message }` );
+      next( createError( error.status || 500, error.message ) );
+    }
+  }
+};
\ No newline at end of file
diff --git a/src/routes/address.routes.js b/src/routes/address.routes.js
new file mode 100644 (file)
index 0000000..50b96fe
--- /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 address_controller = require('../controllers/address.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), address_controller.create);
+  router.get('/zip/:zip_code', validate_auth(passport), address_controller.find_by_zip_code);
+  router.get('/:id', validate_auth(passport), address_controller.find_one);
+  router.get('/', validate_auth(passport), address_controller.find_many);
+  router.put('/:id', validate_auth(passport), address_controller.update);
+  router.put('/:id/soft_delete', validate_auth(passport), address_controller.soft_delete);
+  return router;
+};
\ No newline at end of file
diff --git a/src/routes/user_addresses.routes.js b/src/routes/user_addresses.routes.js
new file mode 100644 (file)
index 0000000..bdbf4af
--- /dev/null
@@ -0,0 +1,21 @@
+/**
+ * @file User addresses routes configuration
+ */
+
+const express = require( 'express' );
+const router = express.Router();
+const { validate_auth } = require( '../middleware/routeHelpers' );
+const user_addresses_controller = require( '../controllers/user_addresses.controller' );
+
+/**
+ * Configure user addresses routes
+ * @param {Object} passport - Passport instance for authentication
+ * @returns {Object} Express router with user addresses routes
+ */
+module.exports = ( passport ) => {
+  router.post( '/add', validate_auth( passport ), user_addresses_controller.add_relation );
+  router.delete( '/remove', validate_auth( passport ), user_addresses_controller.remove_relation );
+  router.get( '/ids/:user_id/:address_id', validate_auth( passport ), user_addresses_controller.find_by_ids );
+  router.get( '/user/:user_id', validate_auth( passport ), user_addresses_controller.find_by_user_id );
+  return router;
+};
\ No newline at end of file