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.
Maintainers
Readme
PgormModel
ORM essentials for code written using default pg driver
Features
- Ports easily with existing default pg-driver code
- Built in basic
CRUDmethods - Creates models and relevant tables
- Plain SQL schema for model columns
- User input validation right in the model
- Record validation hooks for
create,updateanddeleteoperations - 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-modelsAPI Reference
Classes
Constants
Functions
PgormModel
Kind: global class
Summary: Installation: npm install pg-models
Version: v1.0.7
- PgormModel
- new PgormModel(modalName, options)
- instance
- .tableName
- .define(columns, options)
- .findAll(options) ⇒
- .findAllWhere(whereClause, paramsArray) ⇒
- .findOne(column, value) ⇒
- .findById(id) ⇒
- .updateById(id, values) ⇒
- .create(values) ⇒
- .deleteById(id) ⇒
- .beforeCreate(fn)
- .beforeUpdate(fn)
- .beforeDestroy(fn)
- .addQueryMethod(methodName, fn)
- .addForeignKey(fkName, parentTableName)
- static
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 |
