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

6.8 KiB
Raw Blame History

API для элемента "Условия поверки"

Базовый URL

/api/v1/verification-conditions

Эндпоинты

1. Лаборатории

GET /laboratories

Получить список всех лабораторий

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

Создать новую лабораторию

Request:
{
  "name": "Новая лаборатория",
  "code": "NEW_LAB",
  "description": "Описание",
  "address": "Адрес"
}

PUT /laboratories/:id

Обновить лабораторию

DELETE /laboratories/:id

Удалить лабораторию

2. Типы условий

GET /condition-types

Получить все доступные типы условий

Response 200:
[
  {
    "id": 1,
    "name": "Температура",
    "unit": "°C",
    "dataType": "number",
    "description": "Температура окружающей среды"
  }
]

POST /condition-types

Создать новый тип условия

Request:
{
  "name": "Новое условие",
  "unit": "единица",
  "dataType": "number",
  "description": "Описание"
}

3. Настройка условий для лабораторий

GET /laboratories/:labId/condition-types

Получить настроенные типы условий для лаборатории

POST /laboratories/:labId/condition-types

Добавить тип условия к лаборатории

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
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

Создать/обновить условия для дня

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)
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

Сохранить условия из элемента формы

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

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 - Внутренняя ошибка сервера