lishy v0.1.33
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(lish: LishCtx<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;
   }
}6 years ago
6 years ago
6 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago