To have a simple to library for managing the Read Models. The kind we use when we want to store projections of events used in CQRS/ES arquitectures.
The goal of this library is to facilitate simple queries against a relational database. It was designed from start with denormalized tables in mind.
The Store class represents a set of objects that can be stored and queried. It's NOT your entity repository (as in a DDD).
Table child classes is how you map a DB table. To create a store you'll have to extend the Table class, define the database table name, fields and primary key.
A class which reads the table definition and allows you to construct queries against it.
export class Pet {
public id: number;
public breed: string;
public birthday: Date;
public gender: string;
public species: string;
}
@TableName('pets')
export class PetsTable extends Table {
@PK()
id = new NumberField('id');
species = new StringField('species');
breed = new StringField('breed');
birthday = new DateField('birthday');
gender = new StringField('gender');
}
@DtoClass(Pet)
@TableClass(PetsTable)
export class PetStore extends MysqlStore<PetsTable, Pet> {
constructor() {
super({} as IPool);
}
public allCats(): Promise<Array<Pet>> {
return this.find(query =>
query.where(p => p.species.equals('cat'))
);
}
public oneYearPetsAndAllDogs(): Promise<Array<Pet>> {
return this.find(q => q
.select(f => [f.birthday, f.gender])
.where(f => f.species.equals('cat'))
.groupBy([this[Sym.TABLE]['species'], f => f.gender])
.orderBy(f => f.breed, OrderDirection.Asc)
.orderBy(f => f.birthday, OrderDirection.Desc)
.limit(10)
);
}
}
const query = new Query(new PetsTable())
.whereAll(
f => f.gender.equals('male'),
f => f.birthday.before(new Date(2016, 1, 1, 2, 0, 0))
)
.where(f => f.id, [2, 4, 6, 8])
.whereAny(
f => f.species.equals('cat'),
f => f.species.equals('dog')
);
npm i -g yarn
)yarn setup:dev
(or npm run setup:dev
)Profit!
To continuously compile and run tests simply run yarn test:watch
A function which receives a Criteria<TTable>
, modifies it and then returns it.
A function which receives a TTable
and returns a Field
A function which receives a Query<TTable>
, modifies it and then returns it.
Either an IQuery<TTable>
or a QueryBuilder<TTable>
.
QueryBuilder<TTable>
is a function which receives a query, modifies it and then returns it.
Primary Key (PK) class Decorator
Defines the name of the table in the database for this mapping class.
Primary Key (PK) class Decorator
Defines the name of the table in the database for this mapping class.
DtoClass class Decorator (for Store classes)
Defines the class to be used as the DTO for the store.
TableClass class Decorator (for Store classes)
Defines the class that maps the db table used by this store.
The table class
TableName class Decorator
Defines the name of the table in the database for this mapping class.
an object
the name of the object's class
Returns the name of an object's type.
If the input is undefined, returns 'Undefined'. If the input is null, returns 'Null'. If the input is a boolean, returns 'Boolean'. If the input is a number, returns 'Number'. If the input is a string, returns 'String'. If the input is a named function or a class constructor, returns 'Function'. If the input is an anonymous function, returns 'AnonymousFunction'. If the input is an arrow function, returns 'ArrowFunction'. If the input is a class instance, returns 'Object'.
an object
the name of the object's class
Prepares value (when needed) to be passed to mysql's format
Generated using TypeDoc
A function which receives a
Table
and returns an ICondition.