Files
protoc-frontend/verification-conditions-api.md

333 lines
6.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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` - Внутренняя ошибка сервера