import { api, apiFetchBlob } from '../../api/client'; import type { Page } from '../../api/types'; import type { ExportFormat, QualityCause, QualityCell, QualityCellDocumentOut, QualityFilters, QualityMatrixOut, QualityMonthlySeriesOut, } from '../../types/qualityMetrics'; const BASE = '/quality-metrics'; export function getMatrix(filters: QualityFilters): Promise { return api.get(`${BASE}/matrix`, filters); } export function getSeries(filters: QualityFilters, cause: QualityCause): Promise { return api.get(`${BASE}/series`, { ...filters, cause }); } export function getCellDocuments( filters: QualityFilters, cell: QualityCell, paging: { limit: number; offset: number }, ): Promise> { return api.get>(`${BASE}/cells/${cell}/documents`, { ...filters, ...paging }); } /** Выгрузка фактов за период; скачивание идёт через fetch, потому что нужен заголовок Authorization. */ export function exportFacts(filters: QualityFilters, format: ExportFormat): Promise<{ blob: Blob; filename: string | null }> { return apiFetchBlob(`${BASE}/export${queryString({ ...filters, format })}`); } /** Строка запроса для выгрузки (пустые поля пропускаются) — вынесено отдельно ради теста. */ export function queryString(params: object): string { const search = new URLSearchParams(); for (const [key, value] of Object.entries(params)) { if (value === undefined || value === null || value === '') continue; search.append(key, String(value)); } const qs = search.toString(); return qs ? `?${qs}` : ''; }