From: charleswrayjr Date: Fri, 12 Sep 2025 02:05:52 +0000 (-0500) Subject: Cleaning up the user_phone_numbers.model.js file. X-Git-Url: https://git.phasecustomsoft.com/?a=commitdiff_plain;h=bb76d96402947c0d6a59e242b853a0d8b88ab7e6;p=phs-api.git Cleaning up the user_phone_numbers.model.js file. --- diff --git a/src/models/user_phone_number.model.js b/src/models/user_phone_number.model.js deleted file mode 100644 index f10189c..0000000 --- a/src/models/user_phone_number.model.js +++ /dev/null @@ -1,121 +0,0 @@ -/** - * @file User phone numbers model for phase.user_phone_numbers table - */ - -const { Model, FailedToCreateError, ValidationError } = require( './model' ); - -/** - * @typedef {Object} UserPhoneNumber - * @property {number} user_id - User ID (foreign key) - * @property {number} phone_number_id - Phone number ID (foreign key) - */ - -/** - * User phone number model class - * @extends Model - */ -class UserPhoneNumber extends Model { - /** - * Create a UserPhoneNumber instance - * @param {Partial} [props] - User phone number properties - */ - constructor( props ) { - super( props ); - this.table = 'phase.user_phone_numbers'; - this.prepend = 'upn'; - this.default_columns = ['user_id', 'phone_number_id']; - this.update_exclude_columns = ['user_id', 'phone_number_id']; - this.base_query = ` - SELECT upn.user_id, upn.phone_number_id - FROM phase.user_phone_numbers upn - `; - this.base_list_query = this.base_query; - this.default_order_by = 'ORDER BY upn.user_id ASC'; - this.instance = _props => new UserPhoneNumber( _props ); - }; - - /** - * Add a user-phone number relation - * @param {number|string} user_id - User ID - * @param {number|string} phone_number_id - Phone number ID - * @returns {Promise} Created relation instance - * @throws {ValidationError} If IDs are invalid - * @throws {FailedToCreateError} If creation fails - */ - static async add_relation( user_id, phone_number_id ) { - const user_id_int = parseInt( user_id, 10 ); - const phone_number_id_int = parseInt( phone_number_id, 10 ); - if (isNaN( user_id_int ) || isNaN( phone_number_id_int )) { - throw new ValidationError( 'user_id and phone_number_id must be valid integers' ); - } - const query_str = ` - INSERT INTO phase.user_phone_numbers (user_id, phone_number_id) - VALUES ($1, $2) - RETURNING *; - `; - const values = [user_id_int, phone_number_id_int]; - const result = await phsdb.query( query_str, values, { plain:true } ); - if (!result) throw new FailedToCreateError( 'Failed to add user-phone number relation' ); - return new UserPhoneNumber( result ); - }; - - /** - * Remove a user-phone number relation - * @param {number|string} phone_number_id - Phone number ID - * @param {number|string|undefined} [user_id = undefined] - User ID - * @returns {Promise} Deleted relation instance or null - * @throws {ValidationError} If IDs are invalid - */ - static async remove_relation( phone_number_id, user_id = undefined ) { - const user_id_int = parseInt( user_id, 10 ); - const phone_number_id_int = parseInt( phone_number_id, 10 ); - if (isNaN( phone_number_id_int )) { - throw new ValidationError( 'phone_number_id must be valid integers' ); - } - let query_str = ` - DELETE - FROM phase.user_phone_numbers - WHERE phone_number_id = $1 ${ user_id_int ? 'AND user_id = $2' : '' } - RETURNING *; - `; - const values = [phone_number_id_int]; - if (!isNaN( user_id_int )) values.push( user_id_int ); - const result = await phsdb.query( query_str, values, { plain:!isNaN( user_id_int ) } ); - return result ? new UserPhoneNumber( result ) : null; - }; - - /** - * Find user-phone number relation by IDs - * @param {number|string} user_id - User ID - * @param {number|string} phone_number_id - Phone number ID - * @param {string[]} [excludes] - Fields to exclude from result - * @returns {Promise} Relation instance or null - */ - static async find_by_ids( user_id, phone_number_id, excludes = [] ) { - return await new UserPhoneNumber().find_one( - { user_id, phone_number_id }, - excludes - ); - }; - - /** - * Find user-phone number relations by user ID - * @param {number|string} user_id - User ID - * @param {string[]} [excludes] - Fields to exclude from result - * @param {{name: string, direction?: 'asc'|'desc'}||null} [order_by] - Order by configuration - * @param {number} [limit=100] - Maximum number of records - * @param {number} [offset=0] - Number of records to skip - * @returns {Promise} Array of relations - */ - static async find_by_user_id( user_id, excludes = [], order_by = null, limit = 100, offset = 0 ) { - return await new UserPhoneNumber().find_many( - { user_id }, - excludes, - order_by, - limit, - offset - ); - }; -} - -module.exports = UserPhoneNumber; \ No newline at end of file diff --git a/src/models/user_phone_numbers.model.js b/src/models/user_phone_numbers.model.js new file mode 100644 index 0000000..f10189c --- /dev/null +++ b/src/models/user_phone_numbers.model.js @@ -0,0 +1,121 @@ +/** + * @file User phone numbers model for phase.user_phone_numbers table + */ + +const { Model, FailedToCreateError, ValidationError } = require( './model' ); + +/** + * @typedef {Object} UserPhoneNumber + * @property {number} user_id - User ID (foreign key) + * @property {number} phone_number_id - Phone number ID (foreign key) + */ + +/** + * User phone number model class + * @extends Model + */ +class UserPhoneNumber extends Model { + /** + * Create a UserPhoneNumber instance + * @param {Partial} [props] - User phone number properties + */ + constructor( props ) { + super( props ); + this.table = 'phase.user_phone_numbers'; + this.prepend = 'upn'; + this.default_columns = ['user_id', 'phone_number_id']; + this.update_exclude_columns = ['user_id', 'phone_number_id']; + this.base_query = ` + SELECT upn.user_id, upn.phone_number_id + FROM phase.user_phone_numbers upn + `; + this.base_list_query = this.base_query; + this.default_order_by = 'ORDER BY upn.user_id ASC'; + this.instance = _props => new UserPhoneNumber( _props ); + }; + + /** + * Add a user-phone number relation + * @param {number|string} user_id - User ID + * @param {number|string} phone_number_id - Phone number ID + * @returns {Promise} Created relation instance + * @throws {ValidationError} If IDs are invalid + * @throws {FailedToCreateError} If creation fails + */ + static async add_relation( user_id, phone_number_id ) { + const user_id_int = parseInt( user_id, 10 ); + const phone_number_id_int = parseInt( phone_number_id, 10 ); + if (isNaN( user_id_int ) || isNaN( phone_number_id_int )) { + throw new ValidationError( 'user_id and phone_number_id must be valid integers' ); + } + const query_str = ` + INSERT INTO phase.user_phone_numbers (user_id, phone_number_id) + VALUES ($1, $2) + RETURNING *; + `; + const values = [user_id_int, phone_number_id_int]; + const result = await phsdb.query( query_str, values, { plain:true } ); + if (!result) throw new FailedToCreateError( 'Failed to add user-phone number relation' ); + return new UserPhoneNumber( result ); + }; + + /** + * Remove a user-phone number relation + * @param {number|string} phone_number_id - Phone number ID + * @param {number|string|undefined} [user_id = undefined] - User ID + * @returns {Promise} Deleted relation instance or null + * @throws {ValidationError} If IDs are invalid + */ + static async remove_relation( phone_number_id, user_id = undefined ) { + const user_id_int = parseInt( user_id, 10 ); + const phone_number_id_int = parseInt( phone_number_id, 10 ); + if (isNaN( phone_number_id_int )) { + throw new ValidationError( 'phone_number_id must be valid integers' ); + } + let query_str = ` + DELETE + FROM phase.user_phone_numbers + WHERE phone_number_id = $1 ${ user_id_int ? 'AND user_id = $2' : '' } + RETURNING *; + `; + const values = [phone_number_id_int]; + if (!isNaN( user_id_int )) values.push( user_id_int ); + const result = await phsdb.query( query_str, values, { plain:!isNaN( user_id_int ) } ); + return result ? new UserPhoneNumber( result ) : null; + }; + + /** + * Find user-phone number relation by IDs + * @param {number|string} user_id - User ID + * @param {number|string} phone_number_id - Phone number ID + * @param {string[]} [excludes] - Fields to exclude from result + * @returns {Promise} Relation instance or null + */ + static async find_by_ids( user_id, phone_number_id, excludes = [] ) { + return await new UserPhoneNumber().find_one( + { user_id, phone_number_id }, + excludes + ); + }; + + /** + * Find user-phone number relations by user ID + * @param {number|string} user_id - User ID + * @param {string[]} [excludes] - Fields to exclude from result + * @param {{name: string, direction?: 'asc'|'desc'}||null} [order_by] - Order by configuration + * @param {number} [limit=100] - Maximum number of records + * @param {number} [offset=0] - Number of records to skip + * @returns {Promise} Array of relations + */ + static async find_by_user_id( user_id, excludes = [], order_by = null, limit = 100, offset = 0 ) { + return await new UserPhoneNumber().find_many( + { user_id }, + excludes, + order_by, + limit, + offset + ); + }; +} + +module.exports = UserPhoneNumber; \ No newline at end of file