npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

pg-models

v1.0.7

Published

ORM to use with your existing pg driver code. Write new code using ORM essentials and make it work with existing code without modifying it.

Downloads

7

Readme

PgormModel

ORM essentials for code written using default pg driver

Features

  • Ports easily with existing default pg-driver code
  • Built in basic CRUD methods
  • Creates models and relevant tables
  • Plain SQL schema for model columns
  • User input validation right in the model
  • Record validation hooks for create, update and delete operations
  • Enhance model functionaliy by adding custom query methods to it
  • Customize individual model behavior or of all instances
  • Linking to existing tables by adding foreight keys

Installation

PgormModel requires Node.js v14+ to run.

npm install --save pg-models

API Reference

Classes

Constants

Functions

PgormModel

Kind: global class
Summary: Installation: npm install pg-models
Version: v1.0.7

new PgormModel(modalName, options)

Creates new modal and relevant table

| Param | Type | Description | | --- | --- | --- | | modalName | string | The name of the modal and table | | options | modalOptions | Modal customization options |

Example

const PgormModel = require('pg-models');

const Users = new PgormModel('users');

pgormModel.tableName

gets or sets the table name (with prefix)

Kind: instance property of PgormModel

pgormModel.define(columns, options)

Creates new table for the model with given configurations. Alters the table if already exists according to the given configurations.

Kind: instance method of PgormModel

| Param | Type | Description | | --- | --- | --- | | columns | columnsObj | Table columns with configurations | | options | object | Options to modify the behaviour of PgormModel |

Example

Users.define({
  fullname: {
    schema: 'fullname TEXT NOT NULL',
    validations: [
      function (input, colName) {
        if (typeof input !== "string") throw new Error(colName + ' must be a string')
      },
      function (input, colName) {
        if (input.length < 5) throw new Error(colName + ' can not be less than 5 char')
      },
    ]
  },
  age: {
    schema: 'age INT',
    validations: [
      function (input) {
        if (typeof input !== "number") throw new Error('age must be a number')
      }
    ]
  },
  about: {
    schema: 'about TEXT'
  },
});

pgormModel.findAll(options) ⇒

Gets all the results in the model

Kind: instance method of PgormModel
Returns: Array of results or an empty array

| Param | Type | Description | | --- | --- | --- | | options | Object | Options to configure the query |

Example

const users = await Users.findAll();

pgormModel.findAllWhere(whereClause, paramsArray) ⇒

Gets all the results in the model, matching whereClause

Kind: instance method of PgormModel
Returns: Array of results or an emtpy array

| Param | Type | Description | | --- | --- | --- | | whereClause | String | SQL query starting with 'WHERE' | | paramsArray | Array | Array of values for the query placeholders |

Example

const users = await Users.findAllWhere('WHERE age>=$1', [20]);

pgormModel.findOne(column, value) ⇒

Gets the one matching result

Kind: instance method of PgormModel
Returns: Object or null

| Param | Type | Description | | --- | --- | --- | | column | String | Name of the column to search | | value | String | Value for the column to match |

Example

const user = await Users.findOne('fullname', 'Ali Hassan');

pgormModel.findById(id) ⇒

Gets the result from the model against the given id. Return null if no result found.

Kind: instance method of PgormModel
Returns: Object or null

| Param | Type | Description | | --- | --- | --- | | id | Number | Id of the result |

Example

const user = await Users.findById(12);

pgormModel.updateById(id, values) ⇒

Updates the record by given id

Kind: instance method of PgormModel
Returns: Updated record or null

| Param | Type | Description | | --- | --- | --- | | id | Number | Id of the record to be updated | | values | Object | New values for the record |

Example

const updatedUser = await Users.updateById(12,{fullname: 'Ali Hussain', age: 23});

if(updatedUsers){
   // user updated do something with updatedUser...
} else {
   // user not found with that id...
}

pgormModel.create(values) ⇒

Creates new record

Kind: instance method of PgormModel
Returns: Created record or null

| Param | Type | Description | | --- | --- | --- | | values | Object | Values for the new record |

Example

const user = await Users.create({fullname: 'Huzaifa Tayyab', age: 23});

pgormModel.deleteById(id) ⇒

Deletes the record by given id

Kind: instance method of PgormModel
Returns: boolean

| Param | Type | Description | | --- | --- | --- | | id | Number | Id of the record to be deleted |

Example

const isUserDeleted = await Users.deleteById(12);

if(isUserDeleted){
   // deleted
} else {
   // user not found with that id
}

pgormModel.beforeCreate(fn)

Registers a validator hook, which is called before every 'create' operation on this model. Validator function must throw error on validation failure.

Kind: instance method of PgormModel

| Param | Type | Description | | --- | --- | --- | | fn | function | A function to run before PgormModel.create(..) operation |

Example

Users.beforeCreate(async (client, values)=>{
  // await client.query(..)
  // throws error on validation failure
})

pgormModel.beforeUpdate(fn)

Registers a validator hook, which is called before every 'update' operation on this model. Validator function must throw error on validation failure.

Kind: instance method of PgormModel

| Param | Type | Description | | --- | --- | --- | | fn | function | A function to run before PgormModel.update(..) operation |

Example

Users.beforeUpdate(async (client, recordId)=>{
  // await client.query(..)
  // throws error on validation failure
})

pgormModel.beforeDestroy(fn)

Registers a validator hook, which is called before every 'delete' operation on this model. Validator function must throw error on validation failure.

Kind: instance method of PgormModel

| Param | Type | Description | | --- | --- | --- | | fn | function | A function to run before PgormModel.destory(..) operation |

Example

Users.beforeDestroy(async (client, recordId)=>{
  // await client.query(..)
  // throws error on validation failure
})

pgormModel.addQueryMethod(methodName, fn)

Creates new function on the model, that can be accessed by the model instance. i.e MyModel.customQueries.myCustomQueryMethod(..)

Kind: instance method of PgormModel

| Param | Type | Description | | --- | --- | --- | | methodName | String | The name for the function | | fn | function | A callback which returns a query function to attach to the model, |

Example

Users.addQueryMethod('getByQualification', (client)=>{
  // here you define and return your query function
  return async (qual_id) => {
    // const { rows: usersByQual } = await client.query(..)
    // return usersByQual
  }
});

// in users controller
await Users.customQueries.getByQualification(1)

pgormModel.addForeignKey(fkName, parentTableName)

Creates a foreign key. fkName must be present in the model Throws error if the foreign key already exists or column is not defined in the model.

Kind: instance method of PgormModel

| Param | Type | Description | | --- | --- | --- | | fkName | String | Name of the foreign key | | parentTableName | String | The name of the parent table to which key is being linked |

Example

const Books = new PgormModel('books', {
  title: {
     schema: 'title VARCHAR(255)',
  },
  user_id: {
     schema: 'user_id INT',
  },
});

// create a foreign key on user_id column
Books.addForeignKey('user_id', Users.tableName);

PgormModel.useConnection(dbConnection)

Kind: static method of PgormModel

| Param | Type | Description | | --- | --- | --- | | dbConnection | PG_Client | The pg client object returned by pg.connect() |

Example

PgormModel.useConnection(pgClient);

PgormModel.setOptions(options)

Sets options for PgormModel class that will apply to all instances of this class. Use this method if you want to customize all models once.

Kind: static method of PgormModel

| Param | Type | Description | | --- | --- | --- | | options | globalOptions | Configuration options. |

globalOptions

Kind: global constant
Properties

| Name | Type | Description | | --- | --- | --- | | tablePrefix | string | Prefix for table name | | tableSchema | string | Schema for table | | pkName | string | Name of primary key of table | | timestamps | boolean | object | Whether to add timestamps or not, provide object to override default values | | paranoid | boolean | Whether to soft delete or not | | alter | boolean | Whether to alter table (on config change) or not | | errorLogs | boolean | Whether to log errors or not |

Example

// timestamps property can be boolean or object
timestamps: true
// or
timestamps: {
   createdAt: 'created_at',
   updatedAt: 'updated_at',
   deletedAt: 'deleted_at',
}

modalOptions

All globalOptions plus option to change table name

Kind: global constant
Properties

| Name | Type | Description | | --- | --- | --- | | string | tableName | Name of table for current model |

columnsObj

define columns according to following object structure

Kind: global constant
Properties

| Name | Type | Description | | --- | --- | --- | | columnName | object | Name of the column | | schema | string | Schema of the column | | validations | Array | Array of validation functions |

Example

const columnsObj = {
 columnName: {
   schema: 'columnName TEXT NOT NULL',
   validations: [validatorFn],
 },
 // ...other columns
};

validatorFn(val, col, values)

Validation function for user input validation

Kind: global function

| Param | Type | Description | | --- | --- | --- | | val | any | Value entered for current column | | col | string | Name of current column | | values | object | All user entered values |