openapi: 3.0.3
info:
  title: REST API для управления сервисами и пользователями
  description: |
    API предоставляет методы для работы с сервисами, лицензиями, пользователями и графиком выдачи ключей.
    Все запросы требуют аутентификации через заголовок `Authorization`.
  version: 1.0.0
  contact:
    name: Поддержка CRM4DEV
    email: support@crm4dev.ru

servers:
  - url: https://your-server.com/rest
    description: Основной сервер

components:
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: Используйте API-ключ или токен в формате `Bearer <токен>`

  schemas:
    SuccessResponse:
      type: object
      properties:
        success:
          type: boolean
          example: true
        data:
          type: object
          nullable: true
        error:
          type: string
          nullable: true
          example: ""
      required:
        - success
        - data
        - error

    ErrorResponse:
      type: object
      properties:
        success:
          type: boolean
          example: false
        data:
          type: null
        error:
          type: string
          example: "Method not found."
      required:
        - success
        - data
        - error

paths:
  /service:
    get:
      summary: Получить список сервисов или количество лицензий
      parameters:
        - name: ИмяМетода
          in: query
          required: true
          schema:
            type: string
            enum: [list_app, many_licenses]
          description: |
            `list_app` — получить список сервисов  
            `many_licenses` — получить количество активных лицензий
      security:
        - BearerAuth: []
      responses:
        '200':
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '404':
          description: Метод не найден
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '405':
          description: Ошибка авторизации
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'

    post:
      summary: Изменить данные пользователя или создать нового
      parameters:
        - name: ИмяМетода
          in: query
          required: true
          schema:
            type: string
            enum: [change_user, creat_user, alarm]
          description: |
            `change_user` — изменить пользователя  
            `creat_user` — создать пользователя  
            `alarm` — отправить сообщение о проблеме
      security:
        - BearerAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                UserID:
                  type: string
                  example: "U-123"
                Email:
                  type: string
                  format: email
                  example: "user@example.com"
                ФИО:
                  type: string
                  example: "Иванов Иван"
              required:
                - UserID
      responses:
        '200':
          description: Успешное выполнение
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '400':
          description: Неверный формат данных
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Метод не найден
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '405':
          description: Ошибка авторизации
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'

  /keys_issue:
    get:
      summary: Управление графиком выдачи ключей
      parameters:
        - name: ИмяМетода
          in: query
          required: true
          schema:
            type: string
            enum: [schedule, available_objects, available_period, not_available_period, mobile_auth, get_mobile_code]
      security:
        - BearerAuth: []
      responses:
        '200':
          description: Данные по графику выдачи
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '404':
          description: Метод не найден
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '405':
          description: Ошибка авторизации
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'

    post:
      summary: Работа с записями на выдачу ключей
      parameters:
        - name: ИмяМетода
          in: query
          required: true
          schema:
            type: string
            enum: [manual_record, publish, approve, archive, customer_confirmation, confirm_receipt, notify_clients, set_availability_of_periods, set_transfer_act]
      security:
        - BearerAuth: []
      responses:
        '200':
          description: Операция выполнена
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '404':
          description: Метод не найден
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '405':
          description: Ошибка авторизации
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'

    options:
      summary: CORS preflight
      responses:
        '200':
          description: OK

  /users:
    get:
      summary: Получить список пользователей
      security:
        - BearerAuth: []
      responses:
        '200':
          description: Список пользователей
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '405':
          description: Ошибка авторизации
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
    options:
      summary: CORS preflight
      responses:
        '200':
          description: OK

  /auth:
    get:
      summary: Получить данные пользователя по JWT
      security:
        - BearerAuth: []
      responses:
        '200':
          description: Данные пользователя
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '405':
          description: Ошибка авторизации
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
    options:
      summary: CORS preflight
      responses:
        '200':
          description: OK