Задача [0447]: API получения пользователей с назначенным календарем

Формулировка проблемы: необходима возможность получения списка пользователей со статусами в определенный промежуток времени.

Решение: необходимо реализовать API метод, который возвращает список пользователей со статусами, которые полностью либо частично входят в определенный промежуток времени.

URL метода: /rest/api/userchooser/getUserStatusInPeriod

Тип запроса: GET.

Метод принимает следующие входные параметры:

Длина периода не может быть отрицательной и более 366 дней. Дата начала и дата завершения периода должны представлять собой корректную дату в указанном году (в том числе високосном) и месяце, т.е. даты типа 2016-05-51 и 2014-02-29 некорректны.

Метод возвращает список пользователей, назначенный период которых полностью или частично попадает в указанный промежуток времени.

В случае успешного выполнения метод возвращает массив объектов JSON, состоящий из следующих полей:

Примечание. Пользователь может возвращаться в списке результатов несколько раз, так как пользователю может быть назначено несколько статусов в разные периоды времени.

Пример запроса: /rest/api/userchooser/getUserStatusInPeriod?start=2016-02-13&finish=2016-04-01

Пример ответа:


[
     {
         "userID": "8f85e270-ebf1-11e5-835c-525400bb7fc6",
         "start": "2016-02-05",
         "finish": "2016-02-25",
         "calendar_type":
            {
                "type": 0,
                "title": "Отпуск",
                "statusLabel": "В отпуске с {date.start} по {date.finish}",
                "color": "#5462ef",
                "busyStatus": "free",
                "makeVacant": 0  
            }
     },
     {   
         "userID": "59377550-ea78-11e5-835c-525400bb7fc6",
         "start": "2016-02-15",
         "finish": "2017-02-15",
         "calendar_type":
            {
                "type": 2,
                "title": "Декретный отпуск",
                "statusLabel": "В декретном отпуске с {date.start} по {date.finish}",
                "color": "#5462ef",
                "busyStatus": "free",
                "makeVacant": 1  
            }
     },
     {
         "userID": "8f85e270-ebf1-11e5-835c-525400bb7fc6",
         "start": "2016-02-28",
         "finish": "2016-03-05",
         "calendar_type":
            {
                "type": 1,
                "title": "Командировка",
                "statusLabel": "В командировке с {date.start} по {date.finish}",
                "color": "#5462ef",
                "busyStatus": "busy",
                "makeVacant": 0  
            }
     },
     {  
         "userID": "08c164b0-e775-11e5-835c-525400bb7fc6",
         "start": "2016-03-17",
         "finish": "2016-03-23",
         "calendar_type":
            {
                "type": 1,
                "title": "Командировка",
                "statusLabel": "В командировке с {date.start} по {date.finish}",
                "color": "#5462ef",
                "busyStatus": "busy",
                "makeVacant": 0  
            }
     }
]

Альтернативные потоки событий.

Альтернативный поток №1. Не передан параметр start. Сервер возвращает ошибку HTTP 400 c cообщением:

{
    "errorCode": 13,
    "errorMessage": "Не передан параметр start"
}

действие не выполняется.

Альтернативный поток №2. Не передан параметр finish. Сервер возвращает ошибку HTTP 400 c cообщением:

{
    "errorCode": 13,
    "errorMessage": "Не передан параметр finish"
}

действие не выполняется.

Альтернативный поток №3. Передан период с некорректной длительностью - меньше нуля или больше 366. Сервер возвращает ошибку HTTP 400 с сообщением:

{
  "errorCode": 13,
  "errorMessage": "Передано некорректное значение периода:
   отрицательное либо больше 366 дней"
}

действие не выполняется.

Альтернативный поток №4. Передан некорректный параметр start: несуществующая дата, такой даты нет в указанном году (в том числе високосном) или месяце. Сервер возвращает ошибку HTTP 400 с сообщением:

{
  "errorCode": 13,
  "errorMessage": "Передан некорректный параметр start"
}

действие не выполняется.

Альтернативный поток №5. Передан некорректный параметр finish: несуществующая дата, такой даты нет в указанном году (в том числе високосном) или месяце. Сервер возвращает ошибку HTTP 400 с сообщением:

{
  "errorCode": 13,
  "errorMessage": "Передан некорректный параметр finish"
}

действие не выполняется.

Альтернативный поток №6. Передан несуществующий параметр type: в справочнике calendar_types в поле type нет такого значения. Сервер возвращает ошибку HTTP 400 с сообщением:

{
    "errorCode": 13,
    "errorMessage": "Передан несуществующий параметр type: в справочнике
     calendar_types в поле type нет такого значения"

}

действие не выполняется.

Альтернативный поток №7. Значение параметра recordsCount превышает максимальное значение. Сервер возвращает ошибку HTTP 400 с сообщением:

{
    "errorCode": 13,
    "errorMessage":"Значение параметра recordsCount превышает максимальное значение
     равное 100. Для просмотра дальнейших результатов воспользуйтесь параметром
     startRecord"
}

действие не выполняется.

Альтернативный поток №8. На стороне сервера произошла ошибка. Сервер возвращает ошибку HTTP 500 с сообщением:

{
    "errorCode": 13,
    "errorMessage": "Произошла внутренняя ошибка сервера"
}

действие не выполняется.