+++ /dev/null
-/**
- * @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<UserPhoneNumber>} [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<UserPhoneNumber>} 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<UserPhoneNumber|null>} 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<UserPhoneNumber|null>} 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<UserPhoneNumber[]>} 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
--- /dev/null
+/**
+ * @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<UserPhoneNumber>} [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<UserPhoneNumber>} 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<UserPhoneNumber|null>} 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<UserPhoneNumber|null>} 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<UserPhoneNumber[]>} 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