27 lines
1.2 KiB
TypeScript
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 }];
|
|
}
|
|
})));
|
|
}
|