arm-core/web/src/services/api/qualityMetrics.ts
Andrey Epifancev 717dec69cf feat(#190): экран «Качество первички» (web)
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-11-07 02:49:24 +04:00

46 lines
1.8 KiB
TypeScript

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<QualityMatrixOut> {
return api.get<QualityMatrixOut>(`${BASE}/matrix`, filters);
}
export function getSeries(filters: QualityFilters, cause: QualityCause): Promise<QualityMonthlySeriesOut> {
return api.get<QualityMonthlySeriesOut>(`${BASE}/series`, { ...filters, cause });
}
export function getCellDocuments(
filters: QualityFilters,
cell: QualityCell,
paging: { limit: number; offset: number },
): Promise<Page<QualityCellDocumentOut>> {
return api.get<Page<QualityCellDocumentOut>>(`${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}` : '';
}