From: charleswrayjr Date: Fri, 12 Sep 2025 03:21:20 +0000 (-0500) Subject: Adding address routes and controllers. X-Git-Url: https://git.phasecustomsoft.com/static/gitweb.js?a=commitdiff_plain;h=420e4ab49895674a2c7db194f689affb38f40a2c;p=phs-api.git Adding address routes and controllers. --- diff --git a/src/controllers/address.controller.js b/src/controllers/address.controller.js new file mode 100644 index 0000000..d18f623 --- /dev/null +++ b/src/controllers/address.controller.js @@ -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} + */ + 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} + */ + 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} + */ + 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} + */ + 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} + */ + 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} + */ + 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 index 0000000..ccceeb2 --- /dev/null +++ b/src/controllers/user_addresses.controller.js @@ -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} + */ + 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} + */ + 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} + */ + 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} + */ + 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 index 0000000..50b96fe --- /dev/null +++ b/src/routes/address.routes.js @@ -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 index 0000000..bdbf4af --- /dev/null +++ b/src/routes/user_addresses.routes.js @@ -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