lishy
v0.1.33
Published
A MongoDB transaction monitoring system with entity historisation
Downloads
17
Readme
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;
}
}