ObjectionJS Repository
ObjectionJS Repository is repository pattern implementation on top of KnexJS and ObjectionJS
Content
Installation
$ npm i objectionjs-repository
Usage
// Define Interface
export interface IUser {
id: number;
age: number;
name: string;
}
// Define Model
export default class User extends Model {
static get tableName() {
return TABLES.USER;
}
}
// Define Repository
import { BaseRepository } from 'objectionjs-repository';
export class UserRepository extends BaseRepository<IUser> {
constructor(knexInstance: Knex) {
super(User, knexInstance);
}
}
then you can use defined repository
const userRepo = new UserRepository(knexInstance);
const user = await userRepo.getOne({ age: 25 })
API
getOne(conditions, [options])
conditions is object contains any column in this table. options is IFindingOptions. return selected row or undefined
getAll(conditions, [options])
conditions is object contains any column in this table. options is IFindingOptions. return selected rows or empty array.
create(data, [options])
data to be inserted. options is ICreationOptions.
createMany(data, [options])
array to be inserted. options is ICreationOptions.
update(conditions, data, [options])
conditions is object contains any column in this table. data to be updated. options is IUpdatingOptions.
delete(conditions, [options])
conditions is object contains any column in this table. options is IDeletionOptions.
Options
IFindingOptions
IFindingOptions {
// select specific columns
select?: string[];
// database Transaction
trx?: Knex.Transaction;
// lock selected rows or not
forUpdate?: boolean;
// select where column not in array
whereNotIn?: {
field: string;
values: any;
}[];
// select where column in array
whereIn?: {
field: string;
values: any;
}[];
// select where columns is null
whereNull?: string[];
// select where columns is not null
whereNotNull?: string[];
}
ICreationOptions
ICreationOptions {
// database Transaction
trx?: Knex.Transaction;
}
IUpdatingOptions
IUpdatingOptions {
// database Transaction
trx?: Knex.Transaction;
// select where column not in array
whereNotIn?: {
field: string;
values: any;
}[];
// select where column in array
whereIn?: {
field: string;
values: any;
}[];
// select where columns is null
whereNull?: string[];
// select where columns is not null
whereNotNull?: string[];
}
IDeletionOptions
IDeletionOptions {
// database Transaction
trx?: Knex.Transaction;
// select where column not in array
whereNotIn?: {
field: string;
values: any;
}[];
// select where column in array
whereIn?: {
field: string;
values: any;
}[];
// select where columns is null
whereNull?: string[];
// select where columns is not null
whereNotNull?: string[];
}
Tests
To run the test suite, first install the dependencies and rename .env.sample to .env and set connection url for postgres database in .env then run npm test
:
$ npm install
$ npm test
Support
Feel free to open issues on github.