diff --git a/src/entity/element/model/implementations/VerificationConditionsElement/api.ts b/src/entity/element/model/implementations/VerificationConditionsElement/api.ts index f199e23..04cc328 100644 --- a/src/entity/element/model/implementations/VerificationConditionsElement/api.ts +++ b/src/entity/element/model/implementations/VerificationConditionsElement/api.ts @@ -13,11 +13,14 @@ import { UpdateDailyConditionOutput, } from './types' +// Базовый URL для API (может быть настроен через переменные окружения) +const BASE_URL = import.meta.env.VITE_API_BASE_URL || '/api' + // API для лабораторий export const laboratoriesApi = { // Получить все лаборатории getAll: async (): Promise => { - const response = await fetch(`api/laboratories/`) + const response = await fetch(`${BASE_URL}/laboratories/`) if (!response.ok) { throw new Error('Ошибка загрузки лабораторий') } @@ -27,7 +30,7 @@ export const laboratoriesApi = { // Получить лабораторию по ID getById: async (id: string): Promise => { - const response = await fetch(`api/laboratories/${id}`) + const response = await fetch(`${BASE_URL}/laboratories/${id}`) if (!response.ok) { if (response.status === 404) { return null @@ -57,8 +60,8 @@ export const dailyConditionsApi = { } const url = searchParams.toString() - ? `api/daily-conditions/?${searchParams}` - : `api/daily-conditions/` + ? `${BASE_URL}/daily-conditions/?${searchParams}` + : `${BASE_URL}/daily-conditions/` const response = await fetch(url) if (!response.ok) { @@ -70,7 +73,7 @@ export const dailyConditionsApi = { // Получить конкретное условие по ID getById: async (id: string): Promise => { - const response = await fetch(`api/daily-conditions/${id}`) + const response = await fetch(`${BASE_URL}/daily-conditions/${id}`) if (!response.ok) { if (response.status === 404) { return null @@ -83,7 +86,7 @@ export const dailyConditionsApi = { // Создать новые условия create: async (input: CreateDailyConditionInput): Promise => { - const response = await fetch(`api/daily-conditions/`, { + const response = await fetch(`${BASE_URL}/daily-conditions/`, { method: 'POST', headers: { 'Content-Type': 'application/json', @@ -105,7 +108,7 @@ export const dailyConditionsApi = { id: string, input: UpdateDailyConditionInput ): Promise => { - const response = await fetch(`api/daily-conditions/${id}`, { + const response = await fetch(`${BASE_URL}/daily-conditions/${id}`, { method: 'PATCH', headers: { 'Content-Type': 'application/json', @@ -121,7 +124,7 @@ export const dailyConditionsApi = { // Удалить условия delete: async (id: string): Promise => { - const response = await fetch(`api/daily-conditions/${id}`, { + const response = await fetch(`${BASE_URL}/daily-conditions/${id}`, { method: 'DELETE', }) if (!response.ok) { @@ -200,3 +203,56 @@ export const elementApi = { return savedCondition }, } + +// Вспомогательные функции +export const verificationConditionsUtils = { + // Валидация значения условия + validateConditionValue: ( + value: any, + dataType: string = 'string', + minValue?: number, + maxValue?: number + ): { isValid: boolean; error?: string } => { + if (dataType === 'number') { + const numValue = parseFloat(value) + if (isNaN(numValue)) { + return { isValid: false, error: 'Должно быть числом' } + } + if (minValue !== undefined && numValue < minValue) { + return { isValid: false, error: `Минимальное значение: ${minValue}` } + } + if (maxValue !== undefined && numValue > maxValue) { + return { isValid: false, error: `Максимальное значение: ${maxValue}` } + } + } + return { isValid: true } + }, + + // Форматирование значения с единицей измерения + formatValueWithUnit: (value: any, unit?: string): string => { + if (value === undefined || value === null || value === '') { + return '-' + } + return unit ? `${value} ${unit}` : value.toString() + }, + + // Получение ключа условия для хранения в conditions JSON (обычно используется ID типа условия) + getConditionKey: (conditionTypeId: string): string => { + return conditionTypeId + }, + + // Генерация ключа на основе названия условия (для обратной совместимости) + generateConditionKey: (conditionTypeName: string): string => { + return conditionTypeName + .toLowerCase() + .replace(/\s+/g, '_') + .replace(/[^\w]/g, '') + }, + + // Проверка, является ли строка валидным UUID + isValidUUID: (str: string): boolean => { + const uuidRegex = + /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i + return uuidRegex.test(str) + }, +}