]> PHS Git Server - phs-api.git/commitdiff
Cleaning up the address.model.js file.
authorcharleswrayjr <charleswrayjr@gmail.com>
Fri, 12 Sep 2025 02:11:12 +0000 (21:11 -0500)
committercharleswrayjr <charleswrayjr@gmail.com>
Fri, 12 Sep 2025 02:11:12 +0000 (21:11 -0500)
src/models/address.model.js

index 76ea9181497178b7c3f58166913ee90966fd25a2..0ea8662ebc7807aaeb555d25f5be1632cee2d341 100644 (file)
@@ -2,7 +2,7 @@
  * @file Address model for phase.addresses table
  */
 
-const { Model, ValidationError } = require('./model');
+const { Model, NotFoundError, ValidationError, FailedToCreateError } = require( './model' );
 
 /**
  * @typedef {Object} Address
@@ -28,8 +28,8 @@ class Address extends Model {
    * Create an Address instance
    * @param {Partial<Address>} [props] - Address properties
    */
-  constructor(props) {
-    super(props);
+  constructor( props ) {
+    super( props );
     this.table = 'phase.addresses';
     this.prepend = 'a';
     this.default_columns = [
@@ -38,19 +38,34 @@ class Address extends Model {
     ];
     this.update_exclude_columns = ['id', 'created_at', 'is_deleted', 'deleted_at', 'deleted_by_id'];
     this.base_query = `
-        SELECT a.id, a.street_1, a.street_2, a.city, a.state, a.zip_code,
-               a.created_by_id, a.created_at, a.is_deleted, a.deleted_by_id, a.deleted_at
+        SELECT a.id,
+               a.street_1,
+               a.street_2,
+               a.city,
+               a.state,
+               a.zip_code,
+               a.created_by_id,
+               a.created_at,
+               a.is_deleted,
+               a.deleted_by_id,
+               a.deleted_at
         FROM phase.addresses a
         WHERE a.is_deleted = false
     `;
     this.base_list_query = `
-      SELECT a.id, a.street_1, a.street_2, a.city, a.state, a.zip_code,
-             a.created_by_id, a.created_at
-      FROM phase.addresses a
-      WHERE a.is_deleted = false
+        SELECT a.id,
+               a.street_1,
+               a.street_2,
+               a.city,
+               a.state,
+               a.zip_code,
+               a.created_by_id,
+               a.created_at
+        FROM phase.addresses a
+        WHERE a.is_deleted = false
     `;
     this.default_order_by = 'ORDER BY a.zip_code ASC';
-    this.instance = _props => new Address(_props);
+    this.instance = _props => new Address( _props );
   }
 
   /**
@@ -58,20 +73,22 @@ class Address extends Model {
    * @param {Omit<Address, 'id'|'created_at'|'is_deleted'|'deleted_by_id'|'deleted_at'>} address_data - Address data
    * @returns {Promise<Address>} Created address instance
    * @throws {ValidationError} If required fields are missing
+   * @throws {FailedToCreateError} If creation fails
    */
-  static async create(address_data) {
+  static async create( address_data ) {
     const { street_1, street_2 = null, city, state, zip_code, created_by_id = null } = address_data;
     if (!street_1 || !city || !state || !zip_code) {
-      throw new ValidationError('Missing required fields: street_1, city, state, zip_code');
+      throw new ValidationError( 'Missing required fields: street_1, city, state, zip_code' );
     }
     const query_str = `
-      INSERT INTO phase.addresses (street_1, street_2, city, state, zip_code, created_by_id)
-      VALUES ($1, $2, $3, $4, $5, $6) RETURNING *;
+        INSERT INTO phase.addresses (street_1, street_2, city, state, zip_code, created_by_id)
+        VALUES ($1, $2, $3, $4, $5, $6)
+        RETURNING *;
     `;
     const values = [street_1, street_2, city, state, zip_code, created_by_id];
-    const result = await phsdb.query(query_str, values, { plain: true });
-    if (!result) throw new ValidationError('Failed to create address');
-    return new Address(result);
+    const result = await phsdb.query( query_str, values, { plain:true } );
+    if (!result) throw new FailedToCreateError( 'Failed to create address' );
+    return new Address( result );
   }
 
   /**
@@ -79,9 +96,9 @@ class Address extends Model {
    * @param user_id
    * @returns {Promise<{user_id: number, address_id: number}>}
    */
-  static async add_user(user_id) {
+  static async add_user( user_id ) {
     const done = await require( 'user_address.model' ).add_relation( user_id, this.id );
-    if (!done) throw new ValidationError('Failed to add phone number');
+    if (!done) throw new ValidationError( 'Failed to add phone number' );
     return done;
   };
 
@@ -91,37 +108,28 @@ class Address extends Model {
    * @param {string[]} [excludes] - Fields to exclude from result
    * @returns {Promise<Address|null>[]} Address instance or null
    */
-  static async find_by_zip_code(zip_code, excludes = []) {
+  static async find_by_zip_code( zip_code, excludes = [] ) {
     return await new Address().find_many( { zip_code }, excludes );
-  }
+  };
 
   /**
    * Soft delete address
    * @param {number|string} deleted_by_id - ID of user performing deletion
    * @returns {Promise<Address>} Updated address instance
    * @throws {ValidationError} If deleted_by_id is invalid
+   * @throws {NotFoundError} If record not found
    */
-  async soft_delete(deleted_by_id) {
-    const deleted_by_id_int = parseInt(deleted_by_id, 10);
-    if (isNaN(deleted_by_id_int)) {
-      throw new ValidationError('deleted_by_id must be a valid integer');
+  async soft_delete( deleted_by_id ) {
+    const deleted_by_id_int = parseInt( deleted_by_id, 10 );
+    if (isNaN( deleted_by_id_int )) {
+      throw new ValidationError( 'deleted_by_id must be a valid integer' );
     }
-    return await this.update({
-      is_deleted: true,
-      deleted_at: new Date().toISOString(),
-      deleted_by_id: deleted_by_id_int
-    });
-  }
-
-  /**
-   * Get the user who created this address
-   * @returns {Promise<User|null>} Creator user instance or null
-   */
-  async get_created_by() {
-    if (!this.created_by_id) return null;
-    const User = require('./user.model');
-    return await new User().find_one({ id: this.created_by_id }, []);
-  }
+    return await this.update( {
+      is_deleted:true,
+      deleted_at:new Date().toISOString(),
+      deleted_by_id:deleted_by_id_int
+    } );
+  };
 }
 
 module.exports = Address;
\ No newline at end of file