@cashfarm/store
Options
All
  • Public
  • Public/Protected
  • All
Menu

CashFarm Store

Goal

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.

API

Store

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

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.

Criteria

A class which reads the table definition and allows you to construct queries against it.

Example


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')
      );

Development

  1. Install yarn if you didn't yet (npm i -g yarn)
  2. Clone the repository
  3. From the root of the project run yarn setup:dev (or npm run setup:dev)

Profit!

To continuously compile and run tests simply run yarn test:watch

Index

Type aliases

ConditionBuilder

ConditionBuilder: function

A function which receives a Table and returns an ICondition.

Type declaration

ConditionOrMapper

ConditionOrMapper: ICondition | ConditionBuilder<TTable>

CriteriaBuilder

CriteriaBuilder: function

A function which receives a Criteria<TTable>, modifies it and then returns it.

Type declaration

CriteriaOrBuilder

CriteriaOrBuilder: Criteria<TTable> | CriteriaBuilder<TTable>

FieldOrSelector

FieldOrSelector: Field | FieldSelector<TTable>

FieldSelector

FieldSelector: function

A function which receives a TTable and returns a Field

Type declaration

    • (mapper: TTable): Field
    • Parameters

      • mapper: TTable

      Returns Field

QueryBuilder

QueryBuilder: function

A function which receives a Query<TTable>, modifies it and then returns it.

Type declaration

QueryOrBuilder

QueryOrBuilder: IQuery<TTable> | QueryBuilder<TTable>

Either an IQuery<TTable> or a QueryBuilder<TTable>. QueryBuilder<TTable> is a function which receives a query, modifies it and then returns it.

Variables

DTO

DTO: symbol = Symbol.for('cashfarm.store.dto')

FIELDS

FIELDS: symbol = Symbol.for('cashfarm.store.table.fields')

MAPPER

MAPPER: symbol = Symbol.for('cashfarm.store.dto.mapper')

MySQL

MySQL: "/projects/cashfarm/packages/store/src/dialects/mysql/index" = mysql

PK

  • PK(): function
  • PK(property: string | Array<string>): function
  • Primary Key (PK) class Decorator

    Defines the name of the table in the database for this mapping class.

    Returns function

      • (target: Table, propertyKey: string): void
      • Parameters

        • target: Table
        • propertyKey: string

        Returns void

  • Primary Key (PK) class Decorator

    Defines the name of the table in the database for this mapping class.

    Parameters

    • property: string | Array<string>

    Returns function

      • <T>(tableClass: T): T
      • Type parameters

        • T: typeof Table & (new () => Table)

        Parameters

        • tableClass: T

        Returns T

Symbols

Symbols: "/projects/cashfarm/packages/store/src/symbols" = symbols

TABLE

TABLE: symbol = Symbol.for('cashfarm.store.table')

TABLE_NAME

TABLE_NAME: symbol = Symbol.for('cashfarm.store.table.name')

_fieldMap

_fieldMap: symbol = Symbol('field_map')

debug

debug: IDebugger = Debug('store')

Functions

DtoClass

  • DtoClass(dtoClass: object): (Anonymous function)
  • DtoClass class Decorator (for Store classes)

    Defines the class to be used as the DTO for the store.

    Parameters

    • dtoClass: object
      • constructor: function
        • new __type(): object

    Returns (Anonymous function)

TableClass

  • TableClass(tableClass: Table): (Anonymous function)
  • TableClass class Decorator (for Store classes)

    Defines the class that maps the db table used by this store.

    Parameters

    • tableClass: Table

      The table class

    Returns (Anonymous function)

TableName

  • TableName(tableName: string): (Anonymous function)
  • TableName class Decorator

    Defines the name of the table in the database for this mapping class.

    Parameters

    • tableName: string

    Returns (Anonymous function)

getObjectClass

  • getObjectClass(object: Object): string
  • throws

    {TypeError} if {@code object} is not an Object

    see

    getTypeName

    Parameters

    • object: Object

      an object

    Returns string

    the name of the object's class

getTypeName

  • getTypeName(object: any): any
  • 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'.

    see

    https://stackoverflow.com/a/332429/14731

    see

    getFunctionName

    see

    getObjectClass

    Parameters

    • object: any

      an object

    Returns any

    the name of the object's class

is

  • is<T>(o: any, type: any): boolean
  • Type parameters

    • T

    Parameters

    • o: any
    • type: any

    Returns boolean

placeholders

  • placeholders(amount: number, str?: string): string

prepareValue

  • prepareValue(value: string | number | boolean | Date): string | number | boolean
  • Prepares value (when needed) to be passed to mysql's format

    export

    Parameters

    • value: string | number | boolean | Date

    Returns string | number | boolean

Object literals

OP

OP: object

BETWEEN

BETWEEN: string = "BETWEEN"

EQUALS

EQUALS: string = "="

GREATER

GREATER: string = ">"

GREATER_OR_EQUAL

GREATER_OR_EQUAL: string = ">="

IN

IN: string = "IN"

IS

IS: string = "IS"

LIKE

LIKE: string = "LIKE"

LOWER

LOWER: string = "<"

LOWER_OR_EQUAL

LOWER_OR_EQUAL: string = "<="

NOT_BETWEEN

NOT_BETWEEN: string = "NOT BETWEEN"

NOT_EQUAL

NOT_EQUAL: string = "!="

NOT_IN

NOT_IN: string = "NOT IN"

Legend

  • Module
  • Object literal
  • Variable
  • Function
  • Function with type parameter
  • Index signature
  • Type alias
  • Enumeration
  • Enumeration member
  • Property
  • Method
  • Interface
  • Interface with type parameter
  • Constructor
  • Property
  • Method
  • Index signature
  • Class
  • Class with type parameter
  • Constructor
  • Property
  • Method
  • Accessor
  • Index signature
  • Inherited constructor
  • Inherited property
  • Inherited method
  • Inherited accessor
  • Protected property
  • Protected method
  • Protected accessor
  • Private property
  • Private method
  • Private accessor
  • Static property
  • Static method

Generated using TypeDoc