--- /dev/null
+/**
+ * @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
--- /dev/null
+/**
+ * @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
--- /dev/null
+/**
+ * @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
--- /dev/null
+/**
+ * @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