All files / src/Batch ShoptetParseJsonLines.ts

28% Statements 7/25
0% Branches 0/6
25% Functions 1/4
28% Lines 7/25

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 6112x 12x   12x 12x     12x   12x     12x                                                                                                
import ABatchNode from '@orchesty/nodejs-sdk/dist/lib/Batch/ABatchNode';
import { HttpMethods } from '@orchesty/nodejs-sdk/dist/lib/Transport/HttpMethods';
import BatchProcessDto from '@orchesty/nodejs-sdk/dist/lib/Utils/BatchProcessDto';
import ResultCode from '@orchesty/nodejs-sdk/dist/lib/Utils/ResultCode';
import Zlib from 'zlib';
import { IOutput } from '../Connector/ShoptetJobFinishedWebhook';
 
export const NAME = 'shoptet-parse-json-lines';
 
export default class ShoptetParseJsonLines extends ABatchNode {
 
    public getName(): string {
        return NAME;
    }
 
    public async processAction(dto: BatchProcessDto<IOutput>): Promise<BatchProcessDto> {
        const { resultUrl, status, jobId } = dto.getJsonData();
 
        if (status !== 'completed') {
            dto.setStopProcess(ResultCode.STOP_AND_FAILED, `Job [jobId=${jobId}] from shoptet is not completed.`);
            return dto;
        }
 
        const applicationInstall = await this.getApplicationInstallFromProcess(dto);
        const requestDto = await this.getApplication().getRequestDto(
            dto,
            applicationInstall,
            HttpMethods.GET,
            resultUrl,
        );
 
        const response = await this.getSender().send(
            requestDto,
            { success: 200, stopAndFail: 422 },
        );
        const data = Zlib.gunzipSync(response.getBuffer()).toString().split('\n');
 
        do {
            const slicedData = data.splice(0, 50);
 
            const batchItem: unknown[] = [];
            slicedData.forEach((jsonLine) => {
                if (jsonLine) {
                    batchItem.push(JSON.parse(jsonLine));
                }
            });
 
            if (batchItem.length > 0) {
                this.addItem(dto, batchItem, dto.getUser());
            }
        } while (data.length > 0);
 
        return dto;
    }
 
    protected addItem(dto: BatchProcessDto, batchItem: unknown[], user: string | undefined): void {
        dto.addItem(batchItem, user);
    }
 
}