HTTPS SSH

Тестовое задание - PHP/Yii2

Необходимо реализовать API для получения, создания и редактирования сотрудников.

Сотрудник состоит из следующих полей:

  • Имя
  • Фамилия
  • Дата рождения
  • Должность - выбирается из списка должностей (предположим селектом в форме), либо может быть заполнена собственным значением (например в селекте выбрано "Своя должность" и заполнено поле). У пользователя может быть только одна должность.
  • Образование - у сотрудника может быть несколько образований. Образование состоит из наименования учебного заведения и специальности (строковые значения).

API принимает данные в формате JSON следующего вида:

{
    "first_name": "",           // Строка
    "middle_name": "",          // Строка
    "last_name": "",            // Строка
    "birthday": "22.02.1983",   // Строка формата dd.mm.yyyy
    "job_id": "",               // Число
    "job_string": "",           // Строка
    "education": [{
        "facility": "",         // Строка
        "profession": ""        // Строка
    },{
        "facility": "",         // Строка
        "profession": ""        // Строка
    }, /* и т.п. */]
}

Перед сохранением нужно провалидировать данные.
Накладываются следующие условия валидации:

  • Имя, Фамилия, Отчество и Дата рождения - обязательные поля.
  • Дата должна быть в формате dd.mm.yyyy
  • Дата должна иметь корректное значение. Даты ранее 1 января 1950-го года и позже текущей даты считаются невалидными.
  • Должность обязательна и может быть выбрана из справочника или введена вручную. У сотрудника только одна должность. Если job_id заполнен, то проверить, что должность с данным id существует в справочнике. Если job_id не заполнен, то job_string является обязательным полем.
  • Образование не обязательно для заполнения ("education": []), но если образование добавлено, то все поля образования являются обязательными.

Ответ на запрос имеет следующий вид в формате JSON:

{
    "success": true/false,
    "errors": {
        "first_name": ["Имя обязательно для заполнения"],
        "job_string": ["Должность обязательна для заполнения"],
        "education": {
            "1": {
                "facility": "Заполните учебное заведение"
            }
        }
    },
    "data": {}
}

, где:

  • success - успешное сохранение или нет
  • errors - объект ошибок, если success == false. Объект ошибок содержит имя поля и массив сообщений об ошибках (их может быть несколько). Если поле для сохранения было представлено коллекцией, то в качестве ошибки возвращается объект, где под ключом со значением индекса в коллекции представлен объект ошибок сущности. В примере выше у образования есть одна ошибка: для сущности с индектом "1" отправленной коллекции незаполнено поле образовательного учреждения.
  • data - сохраняемый объект в неизменном виде.

Технические требования

  • PHP7 и Yii2
  • MySQL
  • Для проверки написать параметры для работы с API. Для проверки задания будет настроен web сервер к файлу index.php и с помощью, например, postman, осуществлено взаимодействие с API.