1.0.1 • Published 9 months ago

@product-live/data-factory-nest v1.0.1

Weekly downloads
-
License
ISC
Repository
-
Last release
9 months ago

Intro

This NestJS module is an abstraction layer for running custom tasks on data-factory. This uses our SDK for interracting with our Public API.

Usage

Simple example of the modules usage to process a custom task. There is also an example in "./example" that is used by tests.

npm install --save @product-live/data-factory-nest

Import the module "DataFactoryModule" inside your main app module. You'll need to pass it a module or multiple modules that export the tasks you want to run.

import {Module} from '@nestjs/common';
import {PowerTask, WorkerModule} from './worker';
import {DataFactoryModule} from '@product-live/data-factory-nest';

@Module({
    imports: [
        WorkerModule,
        DataFactoryModule.forRootAsync({
            imports: [WorkerModule],
            tasks: [PowerTask] // list of tasks to handle should be exported by module inside "imports"
        })
    ],
    providers: []
})
export class AppModule {}

The "WorkerModule" should have all the task you want to process. Most situations it'll only be one task.

import {Module} from '@nestjs/common';
import {PowerTask} from './power.task';

@Module({
    providers: [PowerTask],
    exports: [PowerTask]
})
export class WorkerModule {}

The task should look something like this. Validation can be added to the input and output.

import {Injectable, Logger} from '@nestjs/common';
import {IsNumber} from 'class-validator';
import {TaskRunner, DataFactoryTaskResult} from '@product-live/data-factory-nest';

class PowerTaskInput {

    @IsNumber()
    power: number;

}

class PowerTaskOutput {

    result: number;

}

@Injectable()
export class PowerTask implements TaskRunner<PowerTaskInput, PowerTaskOutput> {

    private readonly logger = new Logger(PowerTask.name);
    readonly taskDefinitionId = '40977547f2646d13414a171a';
    readonly taskInput = PowerTaskInput;

    async run(input: PowerTaskInput, workdirector: string): Promise<DataFactoryTaskResult<PowerTaskOutput>> {
        this.logger.log({msg: 'started Power task', input: input});
        return new DataFactoryTaskResult<PowerTaskOutput>()
            .setResult({
                result: Math.pow(2, input.power)
            });
    }

}