333 lines
6.8 KiB
Markdown
333 lines
6.8 KiB
Markdown
# 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<string, any> // 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` - Внутренняя ошибка сервера
|