All files / src/repositories/scan additional-information.repository.ts

53.33% Statements 8/15
100% Branches 0/0
0% Functions 0/4
46.15% Lines 6/13

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 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 811x 1x   1x         1x 1x   1x                                                                                                                                          
import {inject} from '@loopback/core';
import {LogChainDataSource} from '@logchain/datasources';
 
import {
  AdditionalInformation,
  AdditionalInformationRelations,
} from '@logchain/models/scan/additional-information.model';
 
import {BaseCrudRepository} from '../base-crud.repository.base';
import {TimelineStep} from '@logchain/types';
 
export class AdditionalInformationRepository extends BaseCrudRepository<
  AdditionalInformation,
  typeof AdditionalInformation.prototype.id,
  AdditionalInformationRelations
> {
  constructor(
    @inject('datasources.logchain')
    dataSource: LogChainDataSource,
  ) {
    super(AdditionalInformation, dataSource);
  }
 
  async findByPMOIds(pmoIds: number[]) {
    const result = await this.execute(
      `
      SELECT *
      FROM additional_information
      WHERE pmo_id = ANY($1)
      ORDER BY created_at DESC
      `,
      [pmoIds],
    );
 
    return result;
  }
 
  async findByPMOIdsAndStatus(pmoIds: number[], status: number) {
    const result = await this.execute(
      `
    SELECT *
    FROM additional_information
    WHERE pmo_id = ANY($1)
      AND status = $2
    ORDER BY created_at DESC
    `,
      [pmoIds, status],
    );
 
    return result;
  }
 
  async findLatestPerPmo(pmoIds: number[], status: number, stepCode: string | null) {
    const result = await this.execute(
      `
    SELECT DISTINCT ON (ai.pmo_id) ai.*
    FROM additional_information ai
    LEFT JOIN (
      SELECT pmo_id, MAX(event_time) AS latest_event_time
      FROM timeline_event
      WHERE pmo_id = ANY($1)
        AND (
          ($3::text IS NULL OR step_code = $3)
          OR step_code = $4
        )
      GROUP BY pmo_id
    ) te ON te.pmo_id = ai.pmo_id
    WHERE ai.pmo_id = ANY($1)
      AND ai.status = $2
      AND (
        te.latest_event_time IS NULL
        OR ai.updated_at > te.latest_event_time
      )
    ORDER BY ai.pmo_id, ai.updated_at DESC
    `,
      [pmoIds, status, stepCode, TimelineStep.REJECT],
    );
    return result;
  }
}