Assessor_2.0/src/features/project-import/datahub-open-readiness.ts

27 lines
1.2 KiB
TypeScript

import type { UnifiedResultFacetResult, UnifiedResultQuery } from '../../domain/unified-result';
import type { ScanImportGroup } from './datahub-import-groups';
export interface TimeslotOpenReadiness {
canOpen: boolean;
hasPolicyResults: boolean;
}
export async function loadTimeslotOpenReadiness(
readFacets: (query: UnifiedResultQuery) => Promise<UnifiedResultFacetResult>,
projectId: string,
groups: ScanImportGroup[]
): Promise<Record<string, TimeslotOpenReadiness>> {
return Object.fromEntries(await Promise.all(groups.map(async group => {
if (!group.assessmentIds.length) return [group.id, { canOpen: false, hasPolicyResults: false }];
try {
const result = await readFacets({ audience: 'internal-analysis', projectId, assessmentIds: group.assessmentIds,
sourceKind: ['scanner-finding', 'policy-observation'] });
const hasPolicyResults = result.facets.find(facet => facet.id === 'sourceKind')?.values
.some(value => value.value === 'policy-observation' && value.count > 0) ?? false;
return [group.id, { canOpen: result.total > 0, hasPolicyResults }];
} catch {
return [group.id, { canOpen: false, hasPolicyResults: false }];
}
})));
}