# API для элемента "Условия поверки" ## Базовый URL ``` /api/v1/verification-conditions ``` ## Эндпоинты ### 1. Лаборатории #### GET /laboratories Получить список всех лабораторий ```json Response 200: [ { "id": 1, "name": "Лаборатория температуры", "code": "TEMP_LAB", "description": "Лаборатория поверки температурных приборов", "address": "ул. Примерная, 1", "conditionTypes": [ { "id": 1, "name": "Температура", "unit": "°C", "isRequired": true, "defaultValue": "20", "minValue": 15, "maxValue": 30 } ] } ] ``` #### GET /laboratories/:id Получить лабораторию по ID с настройками условий #### POST /laboratories Создать новую лабораторию ```json Request: { "name": "Новая лаборатория", "code": "NEW_LAB", "description": "Описание", "address": "Адрес" } ``` #### PUT /laboratories/:id Обновить лабораторию #### DELETE /laboratories/:id Удалить лабораторию ### 2. Типы условий #### GET /condition-types Получить все доступные типы условий ```json Response 200: [ { "id": 1, "name": "Температура", "unit": "°C", "dataType": "number", "description": "Температура окружающей среды" } ] ``` #### POST /condition-types Создать новый тип условия ```json Request: { "name": "Новое условие", "unit": "единица", "dataType": "number", "description": "Описание" } ``` ### 3. Настройка условий для лабораторий #### GET /laboratories/:labId/condition-types Получить настроенные типы условий для лаборатории #### POST /laboratories/:labId/condition-types Добавить тип условия к лаборатории ```json Request: { "conditionTypeId": 1, "isRequired": true, "defaultValue": "20", "minValue": 15, "maxValue": 30 } ``` #### PUT /laboratories/:labId/condition-types/:typeId Обновить настройки типа условия для лаборатории #### DELETE /laboratories/:labId/condition-types/:typeId Удалить тип условия из лаборатории ### 4. Условия по дням (основная функциональность) #### GET /daily-conditions Получить условия по дням с фильтрацией ``` Query параметры: - laboratoryId: ID лаборатории - dateFrom: дата начала (YYYY-MM-DD) - dateTo: дата окончания (YYYY-MM-DD) - date: конкретная дата (YYYY-MM-DD) Примеры: GET /daily-conditions?laboratoryId=1&dateFrom=2024-01-01&dateTo=2024-01-31 GET /daily-conditions?laboratoryId=1&date=2024-01-15 ``` ```json Response 200: [ { "id": 1, "laboratoryId": 1, "date": "2024-01-15", "conditions": { "temperature": 23.5, "humidity": 45.2, "atmosphericPressure": 101.3 }, "createdAt": "2024-01-15T10:30:00Z", "updatedAt": "2024-01-15T10:30:00Z", "createdBy": "user@example.com" } ] ``` #### GET /daily-conditions/:id Получить условия для конкретного дня по ID #### POST /daily-conditions Создать/обновить условия для дня ```json Request: { "laboratoryId": 1, "date": "2024-01-15", "conditions": { "temperature": 23.5, "humidity": 45.2, "atmosphericPressure": 101.3 } } ``` #### PUT /daily-conditions/:id Обновить условия для дня #### DELETE /daily-conditions/:id Удалить запись условий ### 5. Специальные эндпоинты для элемента #### GET /daily-conditions/for-element Получить условия для использования в элементе формы ``` Query параметры: - laboratoryId: ID лаборатории (обязательный) - date: дата (обязательный, YYYY-MM-DD) ``` ```json Response 200: { "laboratoryId": 1, "laboratoryName": "Лаборатория температуры", "date": "2024-01-15", "conditions": [ { "typeId": 1, "typeName": "Температура", "unit": "°C", "value": 23.5, "isRequired": true, "minValue": 15, "maxValue": 30 }, { "typeId": 2, "typeName": "Влажность", "unit": "%", "value": 45.2, "isRequired": true, "minValue": 30, "maxValue": 80 } ], "hasUnsavedChanges": false } ``` #### POST /daily-conditions/save-for-element Сохранить условия из элемента формы ```json Request: { "laboratoryId": 1, "date": "2024-01-15", "conditions": { "temperature": 23.5, "humidity": 45.2, "atmosphericPressure": 101.3 } } Response 200: { "id": 1, "success": true, "message": "Условия сохранены" } ``` ## Типы данных TypeScript ```typescript interface Laboratory { id: number name: string code: string description?: string address?: string conditionTypes?: LaboratoryConditionType[] createdAt: string updatedAt: string } interface ConditionType { id: number name: string unit?: string dataType: 'number' | 'string' | 'boolean' description?: string createdAt: string } interface LaboratoryConditionType { id: number laboratoryId: number conditionTypeId: number conditionType?: ConditionType isRequired: boolean defaultValue?: string minValue?: number maxValue?: number createdAt: string } interface DailyConditions { id: number laboratoryId: number laboratory?: Laboratory date: string // YYYY-MM-DD conditions: Record // JSON объект createdAt: string updatedAt: string createdBy?: string } interface ConditionValue { typeId: number typeName: string unit?: string value: any isRequired: boolean minValue?: number maxValue?: number } interface ElementConditionsData { laboratoryId: number laboratoryName: string date: string conditions: ConditionValue[] hasUnsavedChanges: boolean } ``` ## Коды ошибок - `400` - Неверные параметры запроса - `404` - Лаборатория/условия не найдены - `409` - Конфликт (условия для этой даты уже существуют) - `422` - Ошибка валидации (значения не в допустимом диапазоне) - `500` - Внутренняя ошибка сервера