From: charleswrayjr Date: Fri, 12 Sep 2025 03:21:46 +0000 (-0500) Subject: Adding phone_number routes and controllers. X-Git-Url: https://git.phasecustomsoft.com/?a=commitdiff_plain;h=bc6bc52a4cbec5cda36b0f7bb6cdbb11a73ec302;p=phs-api.git Adding phone_number routes and controllers. --- diff --git a/src/controllers/phone_number.controller.js b/src/controllers/phone_number.controller.js new file mode 100644 index 0000000..3acbb7e --- /dev/null +++ b/src/controllers/phone_number.controller.js @@ -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} + */ + 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} + */ + 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} + */ + 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} + */ + 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} + */ + 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} + */ + 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 index 0000000..f22f77f --- /dev/null +++ b/src/controllers/user_phone_numbers.controller.js @@ -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} + */ + 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} + */ + 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} + */ + 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} + */ + 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 index 0000000..015937e --- /dev/null +++ b/src/routes/phone_number.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 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 index 0000000..ae7122f --- /dev/null +++ b/src/routes/user_phone_numbers.routes.js @@ -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