возврат api conditions

This commit is contained in:
2025-07-31 11:27:46 +03:00
parent 5d1cbffc24
commit 95e89b27bf

View File

@@ -13,11 +13,14 @@ import {
UpdateDailyConditionOutput, UpdateDailyConditionOutput,
} from './types' } from './types'
// Базовый URL для API (может быть настроен через переменные окружения)
const BASE_URL = import.meta.env.VITE_API_BASE_URL || '/api'
// API для лабораторий // API для лабораторий
export const laboratoriesApi = { export const laboratoriesApi = {
// Получить все лаборатории // Получить все лаборатории
getAll: async (): Promise<Laboratory[]> => { getAll: async (): Promise<Laboratory[]> => {
const response = await fetch(`api/laboratories/`) const response = await fetch(`${BASE_URL}/laboratories/`)
if (!response.ok) { if (!response.ok) {
throw new Error('Ошибка загрузки лабораторий') throw new Error('Ошибка загрузки лабораторий')
} }
@@ -27,7 +30,7 @@ export const laboratoriesApi = {
// Получить лабораторию по ID // Получить лабораторию по ID
getById: async (id: string): Promise<Laboratory | null> => { getById: async (id: string): Promise<Laboratory | null> => {
const response = await fetch(`api/laboratories/${id}`) const response = await fetch(`${BASE_URL}/laboratories/${id}`)
if (!response.ok) { if (!response.ok) {
if (response.status === 404) { if (response.status === 404) {
return null return null
@@ -57,8 +60,8 @@ export const dailyConditionsApi = {
} }
const url = searchParams.toString() const url = searchParams.toString()
? `api/daily-conditions/?${searchParams}` ? `${BASE_URL}/daily-conditions/?${searchParams}`
: `api/daily-conditions/` : `${BASE_URL}/daily-conditions/`
const response = await fetch(url) const response = await fetch(url)
if (!response.ok) { if (!response.ok) {
@@ -70,7 +73,7 @@ export const dailyConditionsApi = {
// Получить конкретное условие по ID // Получить конкретное условие по ID
getById: async (id: string): Promise<DailyCondition | null> => { getById: async (id: string): Promise<DailyCondition | null> => {
const response = await fetch(`api/daily-conditions/${id}`) const response = await fetch(`${BASE_URL}/daily-conditions/${id}`)
if (!response.ok) { if (!response.ok) {
if (response.status === 404) { if (response.status === 404) {
return null return null
@@ -83,7 +86,7 @@ export const dailyConditionsApi = {
// Создать новые условия // Создать новые условия
create: async (input: CreateDailyConditionInput): Promise<string> => { create: async (input: CreateDailyConditionInput): Promise<string> => {
const response = await fetch(`api/daily-conditions/`, { const response = await fetch(`${BASE_URL}/daily-conditions/`, {
method: 'POST', method: 'POST',
headers: { headers: {
'Content-Type': 'application/json', 'Content-Type': 'application/json',
@@ -105,7 +108,7 @@ export const dailyConditionsApi = {
id: string, id: string,
input: UpdateDailyConditionInput input: UpdateDailyConditionInput
): Promise<string> => { ): Promise<string> => {
const response = await fetch(`api/daily-conditions/${id}`, { const response = await fetch(`${BASE_URL}/daily-conditions/${id}`, {
method: 'PATCH', method: 'PATCH',
headers: { headers: {
'Content-Type': 'application/json', 'Content-Type': 'application/json',
@@ -121,7 +124,7 @@ export const dailyConditionsApi = {
// Удалить условия // Удалить условия
delete: async (id: string): Promise<void> => { delete: async (id: string): Promise<void> => {
const response = await fetch(`api/daily-conditions/${id}`, { const response = await fetch(`${BASE_URL}/daily-conditions/${id}`, {
method: 'DELETE', method: 'DELETE',
}) })
if (!response.ok) { if (!response.ok) {
@@ -200,3 +203,56 @@ export const elementApi = {
return savedCondition 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)
},
}