@sebaseg/saga-builder-nestjs
TypeScript icon, indicating that this package has built-in type declarations

1.0.2 • Public • Published

Saga Orchestrator pattern for NestJS Library

Nest.js Library to apply orchestrator saga pattern with steps and compensations

Instructions

Install

npm i @sebaseg/saga-builder-nestjs

Use library

Import the SagaBuilderNestjsModule in your module service or app where you need to implement the pattern.

Before inject SagaBuilderNestjsService in the constructor:

constructor(private sagaBuilderSrvc: SagaBuilderNestjsService){}

Example usage:

import { Injectable } from '@nestjs/common';
import { SagaStep, SagaCompensation } from 'src/saga/interfaces';
import { SagaBuilderNestjsService } from '@sebaseg/saga-builder-nestjs/saga-builder-nestjs.service';

export interface Iuser {
name: string;
}

@Injectable()
export class ConsumeSagaService {
constructor(private sagaBuilderSrvc: SagaBuilderNestjsService) {}

responseFunc1: Iuser;

async startSaga(data: any) {
try {

      const steps = [
        {
          step: this.func1(),
          compensation: this.compensationForFunc1(),
        },
        {
          step: this.func2(),
          compensation: this.compensationForFunc2(),
        },
        {
          step: this.func3(),
        },
      ];

      await this.sagaService.run(data, steps);
    } catch (error) {
      console.error('[startSaga] error: ', error);
      throw error;
    }

}

// Your functions

func1(): SagaStep {
console.log('func1 configured');
return {
action: async (data: any) => {
console.log('Executing func1', data);
// Logic here...
const dataFunc1 = { name: 'john doe' };
this.responseFunc1 = dataFunc1;
},
};
}

compensationForFunc1(): SagaCompensation {
console.log('compensation for func1 configured');
return {
compensation: async (data: any) => {
console.log('Executing compensation for step 1', data);
// Logic compensation here
},
};
}

func2(): SagaStep {
console.log('func2 configured');
return {
action: async (data: any) => {
console.log('Executing func2', data);
console.log('data de func1: ', this.responseFunc1);
// Your logic here...
//throw new Error('error ejecutando error func2');
},
};
}

compensationForFunc2(): SagaCompensation {
console.log('compensation for func2 configured');
return {
compensation: async (data: any) => {
console.log('Executing compensation for func2, data);
// Your compensation logic here...
},
};
}

func3(): SagaStep {
console.log('func3 configured');
return {
action: async (data: any) => {
console.log('Executing func3', data);
// Your logic here...
},
};
}
}

Package Sidebar

Install

npm i @sebaseg/saga-builder-nestjs

Weekly Downloads

0

Version

1.0.2

License

MIT

Unpacked Size

117 kB

Total Files

25

Last publish

Collaborators

  • sebaseg