All files / src/PgBoss stakePoolBatchDelistHandler.ts

82.75% Statements 24/29
40% Branches 2/5
100% Functions 5/5
84.61% Lines 22/26

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 4337x 37x 37x   37x   37x 1x   1x   37x 1x   1x 1x   1x 1x 1x   1x       1x   1x 1x 1x 1x 3x             1x        
import { CustomError } from 'ts-custom-error';
import { MissingProgramOption } from '../Program/errors/MissingProgramOption';
import { POOL_DELIST_SCHEDULE, PoolDelistedEntity } from '@cardano-sdk/projection-typeorm';
import { WorkerHandlerFactory } from './types';
import { createSmashStakePoolDelistedService } from '../StakePool/HttpStakePoolMetadata/SmashStakePoolDelistedService';
 
const createService = (smashUrl: string | undefined) => {
  Iif (!smashUrl) throw new MissingProgramOption(POOL_DELIST_SCHEDULE, 'smash-url');
 
  return createSmashStakePoolDelistedService(smashUrl);
};
export const stakePoolBatchDelistHandlerFactory: WorkerHandlerFactory = (options) => {
  const { logger, smashUrl, dataSource } = options;
 
  const service = createService(smashUrl);
  const repo = dataSource.getRepository(PoolDelistedEntity);
 
  return async (_data: unknown) => {
    logger.info(`Getting list of delisted stake pools from ${smashUrl}`);
    const delists = await service.getDelistedStakePoolIds();
 
    Iif (delists instanceof CustomError) {
      logger.error(`Failed to get the list of delisted stake pools from ${smashUrl}`);
      throw delists;
    } else {
      logger.info(`Got the list of delisted stake pools from ${smashUrl}, size:${delists.length}`);
 
      if (delists.length > 0) {
        await dataSource.manager.transaction(async (transaction) => {
          logger.info('Updating delisted stake pools data');
          await transaction.clear(PoolDelistedEntity);
          await transaction.save(delists.map((stakePoolId) => repo.create({ stakePoolId })));
        });
      } else E{
        logger.info('Clearing delisted stake pools data');
        await repo.clear();
      }
 
      logger.info('Delisted stake pools data is updated');
    }
  };
};