lishy
TypeScript icon, indicating that this package has built-in type declarations

0.1.33 • Public • Published

Lishy

An Express / Kafka / MongoDB framework for transactional processing of logic with full historisation of actions and data.

What is it?

Lish is a framework to organise your business logic into Typescript service classes. When an action is triggered, lish calls the code and records what has been changed.

Lish has adapters for HTTP / Express and for the Apache Kafke messaging system. Upon request, lish performs data validation and handles all exceptions that may occur during the

Features

  • Typescript class system for business logic and persistent data
  • Data Validation (via JSON schema and the class-validator framework)
  • Transactional handling of the MongoDB documents with rollback on errors
  • Historisation of all documents, enabling change tracking
  • Backdated excution of logic in a time-machine (as data looked like at a particular time in the past)
  • Fail-safe adapter to Express, making sure errors are correctly reported to the client
  • ... many more

Quick start

Create your input and output message classes

This is the supposed input data, required for a service:

export class MyInputData {
   @LishProperty(String, true)
   requiredId: string;
   
   @LishProperty(Number)
   optionalValue: number;
}

And here the MongoDB document that will be produced:

@LishEntity()
export class MyInputData extends LishEntity {
   @LishProperty(Number) @Max(1000)
   amount: number;
}
@LishService({ 
export class MyTrigger<MyInputData, Boolean> extends LishService {
 
   async run(lishLishCtx<MyInputData>)Promise<Boolean> {
      // our data is provided as 'msg'; it is validated and type-safe 
      const value = lish.msg.optionalValue || 10;
      const id = lish.msg.requiredId;
      
      // get or create a document identified by our id and change it 
      const item = lish.DB(MyInputData).findOrCreateById(id);
      item.amount += value;
      
      // return - 'item' will automatically be updated in Mongo
      return true;
   }
 
}

Readme

Keywords

none

Package Sidebar

Install

npm i lishy

Weekly Downloads

9

Version

0.1.33

License

MIT

Unpacked Size

329 kB

Total Files

87

Last publish

Collaborators

  • dadim
  • thetaris-heim