From: charleswrayjr Date: Fri, 12 Sep 2025 03:43:13 +0000 (-0500) Subject: Cleaning up the unified model file. X-Git-Url: https://git.phasecustomsoft.com/static/gitweb.js?a=commitdiff_plain;h=7e4e858717164a65a0a6aeffdf361b5614eb437b;p=phs-api.git Cleaning up the unified model file. --- diff --git a/src/models/index.js b/src/models/index.js index 9687d2c..39cd411 100644 --- a/src/models/index.js +++ b/src/models/index.js @@ -5,66 +5,68 @@ */ const model_cache = new Map(); +const { NotFoundError, FailedToCreateError, ValidationError } = require( './model' ); /** * Get a model class from cache or require it * @param {string} name - Model name * @returns {Function} Model class */ -const get_model = (name) => { - if (!model_cache.has(name)) { - model_cache.set(name, require(`./${name}.model`)); +const get_model = ( name ) => { + if (!model_cache.has( name )) { + model_cache.set( name, require( `./${ name }.model` ) ); } - return model_cache.get(name); + return model_cache.get( name ); }; /** * @returns {Function} User model class */ -const get_user_model = () => get_model('user'); +const get_user_model = () => get_model( 'user' ); /** * @returns {Function} Phone number model class */ -const get_phone_number_model = () => get_model('phone_number'); +const get_phone_number_model = () => get_model( 'phone_number' ); /** * @returns {Function} User phone numbers model class */ -const get_user_phone_numbers_model = () => get_model('user_phone_numbers'); +const get_user_phone_numbers_model = () => get_model( 'user_phone_numbers' ); /** * @returns {Function} Address model class */ -const get_address_model = () => get_model('address'); +const get_address_model = () => get_model( 'address' ); /** * @returns {Function} User addresses model class */ -const get_user_addresses_model = () => get_model('user_addresses'); +const get_user_addresses_model = () => get_model( 'user_addresses' ); /** * @returns {Function} Authentication model class */ -const get_authentication_model = () => get_model('authentication'); +const get_authentication_model = () => get_model( 'authentication' ); /** * Unified database interface * @type {Object} */ const db = { - user: { + user:{ /** * Create a new user * @param {Object} user_data - User data * @returns {Promise} Created user instance * @throws {ValidationError} If required fields are missing + * @throws {FailedToCreateError} If creation fails */ - async create(user_data) { + async create( user_data ) { try { - return await get_user_model().create(user_data); + return await get_user_model().create( user_data ); } catch (error) { - logger.error(`Failed to create user: ${error.message}`); + logger.error( `Failed to create user: ${ error.message }` ); throw error; } }, @@ -74,11 +76,11 @@ const db = { * @param {string[]} [excludes] - Fields to exclude * @returns {Promise} User instance or null */ - async find_by_email(email, excludes) { + async find_by_email( email, excludes ) { try { - return await get_user_model().find_by_email(email, excludes); + return await get_user_model().find_by_email( email, excludes ); } catch (error) { - logger.error(`Failed to find user by email: ${error.message}`); + logger.error( `Failed to find user by email: ${ error.message }` ); throw error; } }, @@ -88,11 +90,11 @@ const db = { * @param {string[]} [excludes] - Fields to exclude * @returns {Promise} User instance or null */ - async find_by_nickname(nickname, excludes) { + async find_by_nickname( nickname, excludes ) { try { - return await get_user_model().find_by_nickname(nickname, excludes); + return await get_user_model().find_by_nickname( nickname, excludes ); } catch (error) { - logger.error(`Failed to find user by nickname: ${error.message}`); + logger.error( `Failed to find user by nickname: ${ error.message }` ); throw error; } }, @@ -104,11 +106,11 @@ const db = { * @param {number} [offset] - Number of records to skip * @returns {Promise} Array of active users */ - async find_active(excludes, order_by, limit, offset) { + async find_active( excludes, order_by, limit, offset ) { try { - return await get_user_model().find_active(excludes, order_by, limit, offset); + return await get_user_model().find_active( excludes, order_by, limit, offset ); } catch (error) { - logger.error(`Failed to find active users: ${error.message}`); + logger.error( `Failed to find active users: ${ error.message }` ); throw error; } }, @@ -120,11 +122,11 @@ const db = { * @param {number} [offset] - Number of records to skip * @returns {Promise} Array of deleted users */ - async find_deleted(excludes, order_by, limit, offset) { + async find_deleted( excludes, order_by, limit, offset ) { try { - return await get_user_model().find_deleted(excludes, order_by, limit, offset); + return await get_user_model().find_deleted( excludes, order_by, limit, offset ); } catch (error) { - logger.error(`Failed to find deleted users: ${error.message}`); + logger.error( `Failed to find deleted users: ${ error.message }` ); throw error; } }, @@ -134,11 +136,11 @@ const db = { * @param {string[]} [excludes] - Fields to exclude * @returns {Promise} User instance or null */ - async find_one(where, excludes) { + async find_one( where, excludes ) { try { - return await new (get_user_model())().find_one(where, excludes); + return await new (get_user_model())().find_one( where, excludes ); } catch (error) { - logger.error(`Failed to find one user: ${error.message}`); + logger.error( `Failed to find one user: ${ error.message }` ); throw error; } }, @@ -151,11 +153,11 @@ const db = { * @param {number} [offset] - Number of records to skip * @returns {Promise} Array of users */ - async find_many(where, excludes, order_by, limit, offset) { + async find_many( where, excludes, order_by, limit, offset ) { try { - return await new (get_user_model())().find_many(where, excludes, order_by, limit, offset); + return await new (get_user_model())().find_many( where, excludes, order_by, limit, offset ); } catch (error) { - logger.error(`Failed to find many users: ${error.message}`); + logger.error( `Failed to find many users: ${ error.message }` ); throw error; } }, @@ -164,14 +166,15 @@ const db = { * @param {number|string} id - User ID * @param {number|string} deactivated_by_id - ID of user performing deactivation * @returns {Promise} Updated user instance + * @throws {NotFoundError} If user not found */ - async deactivate(id, deactivated_by_id) { + async deactivate( id, deactivated_by_id ) { try { - const user = await new (get_user_model())().find_one({ id }, []); - if (!user) throw new Error('User not found'); - return await user.deactivate(deactivated_by_id); + const user = await new (get_user_model())().find_one( { id }, [] ); + if (!user) throw new NotFoundError( 'User not found' ); + return await user.deactivate( deactivated_by_id ); } catch (error) { - logger.error(`Failed to deactivate user: ${error.message}`); + logger.error( `Failed to deactivate user: ${ error.message }` ); throw error; } }, @@ -179,14 +182,15 @@ const db = { * Reactivate user * @param {number|string} id - User ID * @returns {Promise} Updated user instance + * @throws {NotFoundError} If user not found */ - async reactivate(id) { + async reactivate( id ) { try { - const user = await new (get_user_model())().find_one({ id }, []); - if (!user) throw new Error('User not found'); + const user = await new (get_user_model())().find_one( { id }, [] ); + if (!user) throw new NotFoundError( 'User not found' ); return await user.reactivate(); } catch (error) { - logger.error(`Failed to reactivate user: ${error.message}`); + logger.error( `Failed to reactivate user: ${ error.message }` ); throw error; } }, @@ -195,14 +199,15 @@ const db = { * @param {number|string} id - User ID * @param {number|string} deleted_by_id - ID of user performing deletion * @returns {Promise} Updated user instance + * @throws {NotFoundError} If user not found */ - async soft_delete(id, deleted_by_id) { + async soft_delete( id, deleted_by_id ) { try { - const user = await new (get_user_model())().find_one({ id }, []); - if (!user) throw new Error('User not found'); - return await user.soft_delete(deleted_by_id); + const user = await new (get_user_model())().find_one( { id }, [] ); + if (!user) throw new NotFoundError( 'User not found' ); + return await user.soft_delete( deleted_by_id ); } catch (error) { - logger.error(`Failed to soft delete user: ${error.message}`); + logger.error( `Failed to soft delete user: ${ error.message }` ); throw error; } }, @@ -210,20 +215,21 @@ const db = { * Create a new User instance * @returns {User} User instance */ - instance: () => new (get_user_model())() + instance:() => new (get_user_model())() }, - phone_number: { + phone_number:{ /** * Create a new phone number * @param {Object} phone_data - Phone number data * @returns {Promise} Created phone number instance * @throws {ValidationError} If required fields are missing + * @throws {FailedToCreateError} If creation fails */ - async create(phone_data) { + async create( phone_data ) { try { - return await get_phone_number_model().create(phone_data); + return await get_phone_number_model().create( phone_data ); } catch (error) { - logger.error(`Failed to create phone number: ${error.message}`); + logger.error( `Failed to create phone number: ${ error.message }` ); throw error; } }, @@ -233,11 +239,11 @@ const db = { * @param {string[]} [excludes] - Fields to exclude * @returns {Promise} Phone number instance or null */ - async find_by_number(number, excludes) { + async find_by_number( number, excludes ) { try { - return await get_phone_number_model().find_by_number(number, excludes); + return await get_phone_number_model().find_by_number( number, excludes ); } catch (error) { - logger.error(`Failed to find phone number: ${error.message}`); + logger.error( `Failed to find phone number: ${ error.message }` ); throw error; } }, @@ -247,11 +253,11 @@ const db = { * @param {string[]} [excludes] - Fields to exclude * @returns {Promise} Phone number instance or null */ - async find_one(where, excludes) { + async find_one( where, excludes ) { try { - return await new (get_phone_number_model())().find_one(where, excludes); + return await new (get_phone_number_model())().find_one( where, excludes ); } catch (error) { - logger.error(`Failed to find one phone number: ${error.message}`); + logger.error( `Failed to find one phone number: ${ error.message }` ); throw error; } }, @@ -264,11 +270,11 @@ const db = { * @param {number} [offset] - Number of records to skip * @returns {Promise} Array of phone numbers */ - async find_many(where, excludes, order_by, limit, offset) { + async find_many( where, excludes, order_by, limit, offset ) { try { - return await new (get_phone_number_model())().find_many(where, excludes, order_by, limit, offset); + return await new (get_phone_number_model())().find_many( where, excludes, order_by, limit, offset ); } catch (error) { - logger.error(`Failed to find many phone numbers: ${error.message}`); + logger.error( `Failed to find many phone numbers: ${ error.message }` ); throw error; } }, @@ -276,36 +282,37 @@ const db = { * Create a new PhoneNumber instance * @returns {PhoneNumber} PhoneNumber instance */ - instance: () => new (get_phone_number_model())() + instance:() => new (get_phone_number_model())() }, - user_phone_numbers: { + user_phone_numbers:{ /** * 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 */ - async add_relation(user_id, phone_number_id) { + async add_relation( user_id, phone_number_id ) { try { - return await get_user_phone_numbers_model().add_relation(user_id, phone_number_id); + return await get_user_phone_numbers_model().add_relation( user_id, phone_number_id ); } catch (error) { - logger.error(`Failed to add user-phone number relation: ${error.message}`); + logger.error( `Failed to add user-phone number relation: ${ error.message }` ); throw error; } }, /** * Remove a user-phone number relation - * @param {number|string} user_id - User ID * @param {number|string} phone_number_id - Phone number ID + * @param {number|string|undefined} [user_id] - User ID * @returns {Promise} Deleted relation instance or null * @throws {ValidationError} If IDs are invalid */ - async remove_relation(user_id, phone_number_id) { + async remove_relation( phone_number_id, user_id ) { try { - return await get_user_phone_numbers_model().remove_relation(user_id, phone_number_id); + return await get_user_phone_numbers_model().remove_relation( phone_number_id, user_id ); } catch (error) { - logger.error(`Failed to remove user-phone number relation: ${error.message}`); + logger.error( `Failed to remove user-phone number relation: ${ error.message }` ); throw error; } }, @@ -316,11 +323,11 @@ const db = { * @param {string[]} [excludes] - Fields to exclude * @returns {Promise} Relation instance or null */ - async find_by_ids(user_id, phone_number_id, excludes) { + async find_by_ids( user_id, phone_number_id, excludes ) { try { - return await get_user_phone_numbers_model().find_by_ids(user_id, phone_number_id, excludes); + return await get_user_phone_numbers_model().find_by_ids( user_id, phone_number_id, excludes ); } catch (error) { - logger.error(`Failed to find user-phone number by IDs: ${error.message}`); + logger.error( `Failed to find user-phone number by IDs: ${ error.message }` ); throw error; } }, @@ -333,11 +340,11 @@ const db = { * @param {number} [offset] - Number of records to skip * @returns {Promise} Array of relations */ - async find_by_user_id(user_id, excludes, order_by, limit, offset) { + async find_by_user_id( user_id, excludes, order_by, limit, offset ) { try { - return await get_user_phone_numbers_model().find_by_user_id(user_id, excludes, order_by, limit, offset); + return await get_user_phone_numbers_model().find_by_user_id( user_id, excludes, order_by, limit, offset ); } catch (error) { - logger.error(`Failed to find user-phone numbers by user ID: ${error.message}`); + logger.error( `Failed to find user-phone numbers by user ID: ${ error.message }` ); throw error; } }, @@ -345,20 +352,21 @@ const db = { * Create a new UserPhoneNumber instance * @returns {UserPhoneNumber} UserPhoneNumber instance */ - instance: () => new (get_user_phone_numbers_model())() + instance:() => new (get_user_phone_numbers_model())() }, - address: { + address:{ /** * Create a new address * @param {Object} address_data - Address data * @returns {Promise
} Created address instance * @throws {ValidationError} If required fields are missing + * @throws {FailedToCreateError} If creation fails */ - async create(address_data) { + async create( address_data ) { try { - return await get_address_model().create(address_data); + return await get_address_model().create( address_data ); } catch (error) { - logger.error(`Failed to create address: ${error.message}`); + logger.error( `Failed to create address: ${ error.message }` ); throw error; } }, @@ -368,11 +376,11 @@ const db = { * @param {string[]} [excludes] - Fields to exclude * @returns {Promise} Address instance or null */ - async find_by_zip_code(zip_code, excludes) { + async find_by_zip_code( zip_code, excludes ) { try { - return await get_address_model().find_by_zip_code(zip_code, excludes); + return await get_address_model().find_by_zip_code( zip_code, excludes ); } catch (error) { - logger.error(`Failed to find address by zip code: ${error.message}`); + logger.error( `Failed to find address by zip code: ${ error.message }` ); throw error; } }, @@ -382,11 +390,11 @@ const db = { * @param {string[]} [excludes] - Fields to exclude * @returns {Promise} Address instance or null */ - async find_one(where, excludes) { + async find_one( where, excludes ) { try { - return await new (get_address_model())().find_one(where, excludes); + return await new (get_address_model())().find_one( where, excludes ); } catch (error) { - logger.error(`Failed to find one address: ${error.message}`); + logger.error( `Failed to find one address: ${ error.message }` ); throw error; } }, @@ -399,11 +407,11 @@ const db = { * @param {number} [offset] - Number of records to skip * @returns {Promise} Array of addresses */ - async find_many(where, excludes, order_by, limit, offset) { + async find_many( where, excludes, order_by, limit, offset ) { try { - return await new (get_address_model())().find_many(where, excludes, order_by, limit, offset); + return await new (get_address_model())().find_many( where, excludes, order_by, limit, offset ); } catch (error) { - logger.error(`Failed to find many addresses: ${error.message}`); + logger.error( `Failed to find many addresses: ${ error.message }` ); throw error; } }, @@ -411,36 +419,37 @@ const db = { * Create a new Address instance * @returns {Address} Address instance */ - instance: () => new (get_address_model())() + instance:() => new (get_address_model())() }, - user_addresses: { + user_addresses:{ /** * Add a user-address relation * @param {number|string} user_id - User ID * @param {number|string} address_id - Address ID * @returns {Promise} Created relation instance * @throws {ValidationError} If IDs are invalid + * @throws {FailedToCreateError} If creation fails */ - async add_relation(user_id, address_id) { + async add_relation( user_id, address_id ) { try { - return await get_user_addresses_model().add_relation(user_id, address_id); + return await get_user_addresses_model().add_relation( user_id, address_id ); } catch (error) { - logger.error(`Failed to add user-address relation: ${error.message}`); + logger.error( `Failed to add user-address relation: ${ error.message }` ); throw error; } }, /** * Remove a user-address relation - * @param {number|string} user_id - User ID * @param {number|string} address_id - Address ID + * @param {number|string|undefined} [user_id] - User ID * @returns {Promise} Deleted relation instance or null * @throws {ValidationError} If IDs are invalid */ - async remove_relation(user_id, address_id) { + async remove_relation( address_id, user_id ) { try { - return await get_user_addresses_model().remove_relation(user_id, address_id); + return await get_user_addresses_model().remove_relation( address_id, user_id ); } catch (error) { - logger.error(`Failed to remove user-address relation: ${error.message}`); + logger.error( `Failed to remove user-address relation: ${ error.message }` ); throw error; } }, @@ -451,11 +460,11 @@ const db = { * @param {string[]} [excludes] - Fields to exclude * @returns {Promise} Relation instance or null */ - async find_by_ids(user_id, address_id, excludes) { + async find_by_ids( user_id, address_id, excludes ) { try { - return await get_user_addresses_model().find_by_ids(user_id, address_id, excludes); + return await get_user_addresses_model().find_by_ids( user_id, address_id, excludes ); } catch (error) { - logger.error(`Failed to find user-address by IDs: ${error.message}`); + logger.error( `Failed to find user-address by IDs: ${ error.message }` ); throw error; } }, @@ -468,11 +477,11 @@ const db = { * @param {number} [offset] - Number of records to skip * @returns {Promise} Array of relations */ - async find_by_user_id(user_id, excludes, order_by, limit, offset) { + async find_by_user_id( user_id, excludes, order_by, limit, offset ) { try { - return await get_user_addresses_model().find_by_user_id(user_id, excludes, order_by, limit, offset); + return await get_user_addresses_model().find_by_user_id( user_id, excludes, order_by, limit, offset ); } catch (error) { - logger.error(`Failed to find user-addresses by user ID: ${error.message}`); + logger.error( `Failed to find user-addresses by user ID: ${ error.message }` ); throw error; } }, @@ -480,20 +489,21 @@ const db = { * Create a new UserAddress instance * @returns {UserAddress} UserAddress instance */ - instance: () => new (get_user_addresses_model())() + instance:() => new (get_user_addresses_model())() }, - authentication: { + authentication:{ /** * Create a new authentication record * @param {Object} auth_data - Authentication data * @returns {Promise} Created authentication instance * @throws {ValidationError} If required fields are missing + * @throws {FailedToCreateError} If creation fails */ - async create(auth_data) { + async create( auth_data ) { try { - return await get_authentication_model().create(auth_data); + return await get_authentication_model().create( auth_data ); } catch (error) { - logger.error(`Failed to create authentication record: ${error.message}`); + logger.error( `Failed to create authentication record: ${ error.message }` ); throw error; } }, @@ -503,11 +513,11 @@ const db = { * @param {string[]} [excludes] - Fields to exclude * @returns {Promise} Authentication instance or null */ - async find_by_user_id(user_id, excludes) { + async find_by_user_id( user_id, excludes ) { try { - return await get_authentication_model().find_by_user_id(user_id, excludes); + return await get_authentication_model().find_by_user_id( user_id, excludes ); } catch (error) { - logger.error(`Failed to find authentication by user ID: ${error.message}`); + logger.error( `Failed to find authentication by user ID: ${ error.message }` ); throw error; } }, @@ -517,11 +527,11 @@ const db = { * @param {string[]} [excludes] - Fields to exclude * @returns {Promise} Authentication instance or null */ - async find_by_reset_token(token, excludes) { + async find_by_reset_token( token, excludes ) { try { - return await get_authentication_model().find_by_reset_token(token, excludes); + return await get_authentication_model().find_by_reset_token( token, excludes ); } catch (error) { - logger.error(`Failed to find authentication by reset token: ${error.message}`); + logger.error( `Failed to find authentication by reset token: ${ error.message }` ); throw error; } }, @@ -531,11 +541,11 @@ const db = { * @param {string[]} [excludes] - Fields to exclude * @returns {Promise} Authentication instance or null */ - async find_one(where, excludes) { + async find_one( where, excludes ) { try { - return await new (get_authentication_model())().find_one(where, excludes); + return await new (get_authentication_model())().find_one( where, excludes ); } catch (error) { - logger.error(`Failed to find one authentication record: ${error.message}`); + logger.error( `Failed to find one authentication record: ${ error.message }` ); throw error; } }, @@ -548,11 +558,11 @@ const db = { * @param {number} [offset] - Number of records to skip * @returns {Promise} Array of authentication records */ - async find_many(where, excludes, order_by, limit, offset) { + async find_many( where, excludes, order_by, limit, offset ) { try { - return await new (get_authentication_model())().find_many(where, excludes, order_by, limit, offset); + return await new (get_authentication_model())().find_many( where, excludes, order_by, limit, offset ); } catch (error) { - logger.error(`Failed to find many authentication records: ${error.message}`); + logger.error( `Failed to find many authentication records: ${ error.message }` ); throw error; } }, @@ -560,14 +570,15 @@ const db = { * Lock authentication account * @param {number|string} id - Authentication ID * @returns {Promise} Updated authentication instance + * @throws {NotFoundError} If authentication record not found */ - async lock_account(id) { + async lock_account( id ) { try { - const auth = await new (get_authentication_model())().find_one({ id }, []); - if (!auth) throw new Error('Authentication record not found'); + const auth = await new (get_authentication_model())().find_one( { id }, [] ); + if (!auth) throw new NotFoundError( 'Authentication record not found' ); return await auth.lock_account(); } catch (error) { - logger.error(`Failed to lock account: ${error.message}`); + logger.error( `Failed to lock account: ${ error.message }` ); throw error; } }, @@ -575,14 +586,15 @@ const db = { * Unlock authentication account * @param {number|string} id - Authentication ID * @returns {Promise} Updated authentication instance + * @throws {NotFoundError} If authentication record not found */ - async unlock_account(id) { + async unlock_account( id ) { try { - const auth = await new (get_authentication_model())().find_one({ id }, []); - if (!auth) throw new Error('Authentication record not found'); + const auth = await new (get_authentication_model())().find_one( { id }, [] ); + if (!auth) throw new NotFoundError( 'Authentication record not found' ); return await auth.unlock_account(); } catch (error) { - logger.error(`Failed to unlock account: ${error.message}`); + logger.error( `Failed to unlock account: ${ error.message }` ); throw error; } }, @@ -591,14 +603,15 @@ const db = { * @param {number|string} id - Authentication ID * @param {number|string} deleted_by_id - ID of user performing deletion * @returns {Promise} Updated authentication instance + * @throws {NotFoundError} If authentication record not found */ - async soft_delete(id, deleted_by_id) { + async soft_delete( id, deleted_by_id ) { try { - const auth = await new (get_authentication_model())().find_one({ id }, []); - if (!auth) throw new Error('Authentication record not found'); - return await auth.soft_delete(deleted_by_id); + const auth = await new (get_authentication_model())().find_one( { id }, [] ); + if (!auth) throw new NotFoundError( 'Authentication record not found' ); + return await auth.soft_delete( deleted_by_id ); } catch (error) { - logger.error(`Failed to soft delete authentication: ${error.message}`); + logger.error( `Failed to soft delete authentication: ${ error.message }` ); throw error; } }, @@ -606,7 +619,7 @@ const db = { * Create a new Authentication instance * @returns {Authentication} Authentication instance */ - instance: () => new (get_authentication_model())() + instance:() => new (get_authentication_model())() } };