---
swagger: "2.0"
info:
  version: "0.0.1"
  title: "Dolgovik"
host: "fsep-test.ru"
basePath: "/servers/dolgovik-server"
tags:
- name: "user"
  description: "Работа с пользователем"
- name: "debts"
  description: "Работа с долговыми отношениями"
- name: "group"
  description: "Работа с группами пользователей"
- name: "registration"
  description: "Регистрация и авторизация"
schemes:
- "http"
produces:
- "application/json"
paths:
  /spam/{id}:
    post:
      tags:
      - "user"
      summary: "Отправить в спам"
      parameters:
      - in: "path"
        name: "id"
        description: "Идентификатор оповещения (группы / долговых отношений / пользователя)"
        required: true
        type: "integer"
      - in: "header"
        name: "Auth-Token"
        description: "Токен авторизации"
        required: true
        type: "string"
      - in: "query"
        name: "type"
        description: "Тип идентификатора(группы / долговых отношений / пользователя)"
        required: true
        type: "string"
      responses:
        200:
          description: "Пользователь добавлен в спам"
          schema:
            $ref: "#/definitions/MetaDto"
        401:
          description: "Пользователь не авторизован"
          schema:
            $ref: "#/definitions/401_ErrorDto"
        404:
          description: "Пользователь не найден"
          schema:
            $ref: "#/definitions/404_ErrorDto"
        500:
          description: "Внутренняя ошибка сервера"
          schema:
            $ref: "#/definitions/500_ErrorDto"
  /groups/{group-id}:
    put:
      tags:
      - "group"
      summary: "Принять приглашение в группу"
      parameters:
      - in: "path"
        name: "group-id"
        description: "Идентификатор группы"
        required: true
        type: "integer"
      - name: "Auth-Token"
        in: "header"
        description: "Токен авторизации"
        required: true
        type: "string"
      - name: "accept"
        in: "query"
        required: true
        description: "Решение пользователя"
        type: "boolean"
      responses:
        200:
          description: "Вы состоите в группе"
          schema:
            $ref: "#/definitions/GroupInfoResponseDto"
        202:
          description: "Вы не вошли в группу"
          schema:
            $ref: "#/definitions/GroupInfoResponseDto"
        401:
          description: "Пользователь не авторизован"
          schema:
            $ref: "#/definitions/401_ErrorDto"
        404:
          description: "Пользователь не найден"
          schema:
            $ref: "#/definitions/404_ErrorDto"
        500:
          description: "Внутренняя ошибка сервера"
          schema:
            $ref: "#/definitions/500_ErrorDto"
  /groups:
    post:
      tags:
      - "group"
      summary: "Создание группы пользователей"
      parameters:
      - name: "body"
        in: "body"
        description: "Информация о группе пользователей"
        required: true
        schema:
          $ref: "#/definitions/PostGroupInfoDto"
      - name: "Auth-Token"
        in: "header"
        description: "Токен авторизации"
        required: true
        type: "string"
      responses:
        201:
          description: "Группа создана"
          schema:
            $ref: "#/definitions/GroupInfoResponseDto"
        401:
          description: "Пользователь не авторизован"
          schema:
            $ref: "#/definitions/401_ErrorDto"
        404:
          description: "Пользователь не найден"
          schema:
            $ref: "#/definitions/404_ErrorDto"
        500:
          description: "Внутренняя ошибка сервера"
          schema:
            $ref: "#/definitions/500_ErrorDto"
  /debts:
    get:
      tags:
      - "debts"
      summary: "Получить список долговых отношений"
      parameters:
      - name: "Auth-Token"
        in: "header"
        description: "Токен авторизации"
        required: true
        type: "string"
      responses:
        200:
          description: "Долговые отношения"
          schema:
            $ref: "#/definitions/DebtsArrayResponseDto"
        401:
          description: "Пользователь не авторизован"
          schema:
            $ref: "#/definitions/401_ErrorDto"
        403:
          description: "Данное действие для пользователя запрещенно"
          schema:
            $ref: "#/definitions/403_ErrorDto"
        404:
          description: "Пользователь не найден"
          schema:
            $ref: "#/definitions/404_ErrorDto"
        500:
          description: "Внутренняя ошибка сервера"
          schema:
            $ref: "#/definitions/500_ErrorDto"
    put:
      tags:
      - "debts"
      summary: "Принять задолженность"
      #operationId: "debtsUser_idAcceptPOST"
      parameters:
      - in: "body"
        name: "body"
        description: "Информация о принятом долге"
        required: true
        schema:
          $ref: "#/definitions/DebtPutDto"
      - name: "Auth-Token"
        in: "header"
        description: "Токен авторизации"
        required: true
        type: "string"
      responses:
        202:
          description: "Долговые отношения приняты"
          schema:
            $ref: "#/definitions/DebtResponseDto"
        401:
          description: "Пользователь не авторизован"
          schema:
            $ref: "#/definitions/401_ErrorDto"
        403:
          description: "Данное действие для пользователя запрещенно"
          schema:
            $ref: "#/definitions/403_ErrorDto"
        404:
          description: "Пользователь не найден"
          schema:
            $ref: "#/definitions/404_ErrorDto"
        500:
          description: "Внутренняя ошибка сервера"
          schema:
            $ref: "#/definitions/500_ErrorDto"
    post:
      tags:
      - "debts"
      summary: "Создать долговые отношения"
      description: "Запрос на создание долговых отношений с пользователем"
      parameters:
      - in: "body"
        name: "body"
        description: "Долговые отношения"
        required: true
        schema:
          $ref: "#/definitions/PostDebtDto"
      - name: "Auth-Token"
        in: "header"
        description: "Токен авторизации"
        required: true
        type: "string"
      responses:
        201:
          description: "Отправлена заявка для создания долговых отношений"
          schema:
            $ref: "#/definitions/DebtResponseDto"
        401:
          description: "Пользователь не авторизован"
          schema:
            $ref: "#/definitions/401_ErrorDto"
        403:
          description: "Данное действие для пользователя запрещенно"
          schema:
            $ref: "#/definitions/403_ErrorDto"
        404:
          description: "Пользователь не найден"
          schema:
            $ref: "#/definitions/404_ErrorDto"
        500:
          description: "Внутренняя ошибка сервера"
          schema:
            $ref: "#/definitions/500_ErrorDto"
  /debts/{debt-id}:
    delete:
      tags:
      - "debts"
      summary: "Закрыть долговые отношения"
      description: ""
      parameters:
      - name: "Auth-Token"
        in: "header"
        description: "Токен авторизации"
        required: true
        type: "string"
      - name: "debt-id"
        in: "path"
        description: "Идентификатор долговых отношений"
        required: true
        type: "integer"
      responses:
        200:
          description: "Отправлена заявка для закрытия долговых отношений"
          schema:
            $ref: "#/definitions/MetaDto"
        401:
          description: "Пользователь не авторизован"
          schema:
            $ref: "#/definitions/401_ErrorDto"
        404:
          description: "Пользователь не найден"
          schema:
            $ref: "#/definitions/404_ErrorDto"
        500:
          description: "Внутренняя ошибка сервера"
          schema:
            $ref: "#/definitions/500_ErrorDto"
  /debts/change:
    put:
      tags:
      - "debts"
      summary: "Изменить размера долга"
      description: "Запрос на изменение размера долга"
      #operationId: "debtsUser_idDebtClosePut"
      parameters:
      - name: "body"
        in: "body"
        description: "Информация об изменении долговых отношениях"
        schema:
          $ref: "#/definitions/DebtChangeDto"
      - name: "Auth-Token"
        in: "header"
        description: "Токен авторизации"
        required: true
        type: "string"
      responses:
        200:
          description: "Отправлена заявка для изменения долговых отношений"
          schema:
            $ref: "#/definitions/DebtResponseDto"
        401:
          description: "Пользователь не авторизован"
          schema:
            $ref: "#/definitions/401_ErrorDto"
        404:
          description: "Пользователь не найден"
          schema:
            $ref: "#/definitions/404_ErrorDto"
        500:
          description: "Внутренняя ошибка сервера"
          schema:
            $ref: "#/definitions/500_ErrorDto"
  /login:
    post:
      tags:
      - "registration"
      summary: "Авторизация"
      description: "Авторизация пользователя"
      #operationId: "loginPOST"
      parameters:
      - name: "phone"
        in: "header"
        description: "Телефон пользователя"
        required: true
        type: "string"
      - name: "password"
        in: "header"
        description: "Пароль"
        required: true
        type: "string"
      responses:
        200:
          description: "Авторизация прошла успешно"
          schema:
            $ref: "#/definitions/UserResponseDto"
          headers:
            Auth-Token:
              type: "string"
              description: "Токен авторизации"
        500:
          description: "Внутренняя ошибка сервера"
          schema:
            $ref: "#/definitions/500_ErrorDto"
  /registration:
    get:
      tags:
      - "registration"
      summary: "Проверка корректности данных регистрируемого пользователя"
      description: "Запрос производит проверку уникальности номера телефона и ника\
        \ пользователя, а также проводит проверку существования пользователя через код подтверждения (приходит на указанный номер по смс). О\
        твет на запрос зависит от параметров запроса."
      operationId: "registrationGET"
      produces:
      - "application/json"
      parameters:
      - name: "check_phone"
        in: "query"
        description: "Номер телефона пользователя"
        required: false
        type: "string"
      - name: "for_confirm"
        in: "query"
        description: "Номер телефона пользователя. После отправки запроса с данным параметром пользователю приходит смс."
        required: false
        type: "string"
      responses:
        200:
          description: "Запрос проверки уникальности успешно обработан"
          schema:
            $ref: "#/definitions/UniqueResponseDto"
        202:
          description: "Запрос на получение кода подтверждения прошел успешно."
          schema:
            $ref: "#/definitions/EmptyResponseDto"
          headers:
            TempAuth-Token:
              description: "Временный токен авторизации. Используется для подтверждения кода, высланного пользователю"
              type: "string"
        401:
          description: "Пользователь не авторизован - неверно указан временный ток\
            ен"
          schema:
            $ref: "#/definitions/401_ErrorDto"
        500:
          description: "Внутренняя ошибка сервера"
          schema:
            $ref: "#/definitions/500_ErrorDto"
  /user:
    post:
      tags:
      - "registration"
      summary: "Регистрация"
      description: "Регистрация пользователя"
      #operationId: "userPOST"
      parameters:
      - name: "Confirm-Code"
        in: "header"
        description: "Код подтверждения"
        required: true
        type: "integer"
      - name: "TempAuth-Token"
        in: "header"
        description: "Временный токен авторизации"
        required: true
        type: "string"
      - in: "body"
        name: "body"
        description: Информация о пользователе, которого необходимо зарегистрировать"
        required: true
        schema:
          $ref: "#/definitions/PostUserDto"
      responses:
        201:
          description: "Регистрация прошла успешно"
          schema:
            $ref: "#/definitions/UserResponseDto"
        500:
          description: "Внутренняя ошибка сервера"
          schema:
            $ref: "#/definitions/500_ErrorDto"
      x-swagger-router-controller: "Registration"
  /profile/{user-id}:
    get:
      tags:
      - "user"
      summary: "Профиль пользователя"
      description: ""
      parameters:
      - name: "user-id"
        in: "path"
        description: "Идентификатор пользователя"
        required: true
        type: "integer"
      - name: "Auth-Token"
        in: "header"
        description: "Токен авторизации"
        required: true
        type: "string"
      responses:
        200:
          description: "Профиль пользователя"
          schema:
            $ref: "#/definitions/UserResponseDto"
        401:
          description: "Пользователь не авторизован"
          schema:
            $ref: "#/definitions/401_ErrorDto"
        404:
          description: "Пользователь не найден"
          schema:
            $ref: "#/definitions/404_ErrorDto"
        500:
          description: "Внутренняя ошибка сервера"
          schema:
            $ref: "#/definitions/500_ErrorDto"
definitions:
  EmptyResponseDto:
    type: "object"
    properties:
      meta:
        description: "Информация об ответе"
        $ref: "#/definitions/MetaDto"
  UniqueResponseDto:
    type: "object"
    properties:
      meta:
        description: "Информация об ответе"
        $ref: "#/definitions/MetaDto"
      data:
        description: "Сведения об уникальности данных"
        $ref: "#/definitions/UniqueDto"
  UniqueDto:
    type: "object"
    properties:
      isUnique:
        type: "boolean"
        description: "Уникальность логина/телефона"
  PostGroupInfoDto:
    type: "object"
    required:
    - "name"
    - "userIdArray"
    - "createrId"
    properties:
      name:
        type: "string"
        description: "Название группы"
      userIdArray:
        description: "Массив пользователей"
        $ref: "#/definitions/UserIdArrayDto"
      message:
        type: "string"
        description: "Сообщение группы"
      createrId:
        description: "Идентификатор создателя группы"
        type: "object"
        $ref: "#/definitions/UserIdDto"
  GroupInfoResponseDto:
    type: "object"
    required:
    - "id"
    - "name"
    - "userArray"
    - "creater"
    properties:
      id:
        type: "integer"
        description: "Идентификатор группу"
      name:
        type: "string"
        description: "Название группы"
      userArray:
        description: "Массив пользователей"
        $ref: "#/definitions/UserArrayDto"
      message:
        type: "string"
        description: "Сообщение группы"
      creater:
        type: "object"
        $ref: "#/definitions/UserDto"
        description: "Создатель группы"
  UserIdArrayDto:
    type: "array"
    items:
      $ref: "#/definitions/UserIdDto"
  ErrorResponseMetaDto:
    type: "object"
    properties:
      code:
        type: "integer"
        description: "Код ответа"
      status:
        type: "string"
        description: "Статус выполнения запроса"
      message:
        type: "string"
        description: "Сообщение сервера"
  PostUserDto:
    type: "object"
    required:
    - "firstName"
    - "lastName"
    - "password"
    - "phone"
    properties:
      firstName:
        type: "string"
        description: "Имя пользователя"
      lastName:
        type: "string"
        description: "Фамилия пользователя"
      phone:
        type: "string"
        description: "Номер телефона"
      password:
        type: "string"
        description: "Пароль пользователя"
  UserDto:
    type: "object"
    required:
    - "firstName"
    - "lastName"
    - "phone"
    properties:
      id:
        type: "integer"
        format: "int32"
      firstName:
        type: "string"
      lastName:
        type: "string"
      phone:
        type: "string"
      photoUrl:
        type: "string"
  UserIdDto:
    type: "object"
    required:
    - "userId"
    properties:
      userId:
        type: "integer"
        description: "Идентификатор пользователя"
  UserResponseDto:
    type: "object"
    properties:
      meta:
        description: "Информация об ответе"
        $ref: "#/definitions/MetaDto"
      data:
        description: "Пользователь"
        $ref: "#/definitions/UserDto"
  PostDebtDto:
    type: "object"
    required:
    - "receiverId"
    - "amount"
    properties:
      receiverId:
        type: "integer"
        description: "Идентификатор второго пользователя"
      groupId:
        type: "integer"
        description: "Идентификатор группы, которой принадлежит долг"
      amount:
        type: "number"
        description: "Размер долга"
      comment:
        type: "string"
        description: "Комментарий к долговым отношениям"
  DebtDto:
    type: "object"
    required:
    - "id"
    - "creditorId"
    - "debtorId"
    - "amount"
    properties:
      id:
        type: "integer"
        description: "Идентификатор долговых отношений"
      creditorId:
        type: "integer"
        description: "Идентификтор отправителя"
      debtorId:
        type: "integer"
        description: "Идентификатор получателя"
      groupId:
        type: "integer"
        description: "Идентификатор группы, которой принадлежит долг"
      amount:
        type: "number"
        description: "Размер долга"
      status:
        type: "string"
        description: "Статус"
      comment:
        type: "string"
        description: "Комментарий к долговым отношениям"
      date:
        type: "string"
        description: "Дата создания долговых отношений"
  DebtsArrayDto:
    type: "array"
    items:
      $ref: "#/definitions/DebtDto"
  UserArrayDto:
    type: "array"
    items:
      $ref: "#/definitions/UserDto"
  MetaDto:
    type: "object"
    properties:
      code:
        type: "integer"
        description: "HTTP-код"
      status:
        type: "string"
        description: "Статус выполнения запроса - success/fail"
    example:
      code: "200"
      status: "success"
  DebtResponseDto:
    type: "object"
    properties:
      meta:
        description: "Информация об ответе"
        $ref: "#/definitions/MetaDto"
      data:
        description: "Долг"
        $ref: "#/definitions/DebtDto"
  DebtsArrayResponseDto:
    type: "object"
    properties:
      meta:
        description: "Информация об ответе"
        $ref: "#/definitions/MetaDto"
      data:
        description: "Долг"
        $ref: "#/definitions/DebtsArrayDto"
  DebtPutDto:
    type: "object"
    required:
    - "debtId"
    properties:
      debtId:
        type: "integer"
        description: "Идентификатор долговых отношений"
      action:
        type: "string"
        description: "Информация о принятии долговых отношений"
  DebtChangeDto:
    type: object
    properties:
      debtId:
        type: "integer"
        description: "Идентификатор долговых отношений"
      amount:
        type: "number"
        description: "Размер изменения суммы долга"
  401_ErrorDto:
    type: "object"
    properties:
      meta:
        description: "Информация об ответе"
        $ref: "#/definitions/ErrorResponseMetaDto"
    example:
      meta:
        code: 401
        status: "fail"
        message: "Unauthorized user"
  403_ErrorDto:
    type: "object"
    properties:
      meta:
        description: "Информация об ответе"
        $ref: "#/definitions/ErrorResponseMetaDto"
    example:
      meta:
        code: 403
        status: "fail"
        message: "Banned user"
  404_ErrorDto:
    type: "object"
    properties:
      meta:
        description: "Информация об ответе"
        $ref: "#/definitions/ErrorResponseMetaDto"
    example:
      meta:
        code: 404
        status: "fail"
        message: "Not found"
  500_ErrorDto:
    type: "object"
    properties:
      meta:
        description: "Информация об ответе"
        $ref: "#/definitions/ErrorResponseMetaDto"
    example:
      meta:
        code: 500
        status: "fail"
        message: "IllegalArgumentException"