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;
}
}
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago