Socket
Socket
Sign inDemoInstall

@cashfarm/store

Package Overview
Dependencies
19
Maintainers
3
Versions
13
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    @cashfarm/store

Library for easily defining and using your Read Model (as in DDD Read Model)


Version published
Weekly downloads
3
increased by50%
Maintainers
3
Install size
12.0 MB
Created
Weekly downloads
 

Readme

Source

CashFarm Store

Goal

To have a simple to use 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

Keywords

FAQs

Last updated on 06 Jan 2018

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc