diff --git a/web-v2/src/lib/findingCatalogMerge.ts b/web-v2/src/lib/findingCatalogMerge.ts new file mode 100644 index 0000000..28997b1 --- /dev/null +++ b/web-v2/src/lib/findingCatalogMerge.ts @@ -0,0 +1,62 @@ +import { apiRequest } from './api'; + +export interface FindingCatalogMergeItem { + id: string; + categoryId: string; + categoryCode: string; + categoryName: string; + code: string; + sourceNumber: number; + title: string; + legalBasis: string | null; + glossary: string | null; + importNote: string | null; + suggestedSeverity: number | null; + revision: number; + isActive: boolean; +} + +export interface FindingCatalogMergeAlias { + id: string; + code: string; + title: string; + reason: string; + mergedAt: string; + depth: number; +} + +export interface FindingCatalogMergeStatus { + requested: FindingCatalogMergeItem; + isMerged: boolean; + canonical: FindingCatalogMergeItem; + aliases: FindingCatalogMergeAlias[]; +} + +export interface FindingCatalogMergeResult { + merge: { + id: string; + sourceItemId: string; + canonicalItemId: string; + reason: string; + mergedAt: string; + mergedBy: string; + requestId: string; + }; + source: FindingCatalogMergeItem; + canonical: FindingCatalogMergeItem; + historyPolicy: 'EMITTED_FINDINGS_PRESERVED'; +} + +export function getFindingCatalogMergeStatus(itemId: string) { + return apiRequest(`/finding-catalog/items/${itemId}/merge-status`); +} + +export function mergeFindingCatalogItem( + sourceItemId: string, + input: { canonicalItemId: string; reason: string }, +) { + return apiRequest(`/finding-catalog/items/${sourceItemId}/merge`, { + method: 'POST', + body: JSON.stringify(input), + }); +}