/TestTaskApiLaravel

Test tack for sobesedovanie

Primary LanguagePHP

Тестирование

Протестировать api можно проверить зайдя на вашсайт/test. Ответы на запросы выводятся в консоль

Обращение

Обращение к GET-запросу вашсайт/api/services/{service_id}/tarifs

  • response: ok
    • Возврщает json, содержащий данные о тарифах service_id
  • respone: error. Причины:

    • Тарифы по указанному service_id отсутствуют
    • Указанный service_id отсутствует

Обращение к PUT-запросу вашсайт/api/users/{user_id}/services/{service_id}/tarif

  • response: ok
  • respone: error. Причины:
    • Попытка изменить несуществующий user_id или service_id
    • Попытка задать tarif_id, который отсутствует у указанного service_id
    • service_id и user_id не находятся в одной строке

Тестовое задание

Дано

  1. Структура таблиц mysql

    services - сервисы пользователей

    tarifs - тарифы сервисов

    Тарифы связываются между собой через параметр tarif_group_id

  2. Файл с конфигом для доступа к БД - db_cfg.php

Задача: Написать код, реализующий API-запросы

  1. GET /services/{service_id}/tarifs - получает тарифы для конкретного сервиса. Тарифы могут быть только с тем же самым tarif_group_id, что и у текущего тарифа сервиса.
  2. PUT /users/{user_id}/services/{service_id}/tarif Данные: {"tarif_id": (ID тарифа из запроса на получениe тарифов)}

Общие требования к API

  1. Ответы на запросы в виде JSON

  2. JSON ответа по тарифам должен соответствовать примеру:

    {
    "result":"ok",
    "tarifs":[
        {
            "title":"Земля",
            "link":"http://www.mak72.ru/tarifi_internet/in/1.htm",
            "speed":50,
            "tarifs":[
                {"ID":2,"title":"Земля (3 месяца)","price":1350,"pay_period":"3","new_payday":"1452891600+0300","speed":50},
                {"ID":1,"title":"Земля","price":480,"pay_period":"1","new_payday":"1450213200+0300","speed":50},
                {"ID":3,"title":"Земля (6 месяцев)","price":2460,"pay_period":"6","new_payday":"1460754000+0300","speed":50},
                {"ID":4,"title":"Земля (12 месяцев)","price":4200,"pay_period":"12","new_payday":"1476565200+0300","speed":50}
            ]
        },
        ...
    ]
    }
    

    new_payday - timestamp даты следующего списания и таймзона. Рассчитывается как текущая дата полночь + pay_period

  3. Запрос на выставление тарифа должен возвращать {"result": "ok"} при успехе или {"result": "error"} в случае ошибки

  4. Запрос на выставление тарифа проставляет tarif_id и payday

  5. user_id и service_id будут задаваться вручную при проверке задания

Общие требования к результату

  1. Код должен работать в любом каталоге web-сервера (не обязательно в корневом)
  2. Код не должен использовать специфических для web-сервера функций и настроек
  3. Код должен использовать конфигурационный файл db_cfg.php только для настрок БД
  4. Прикладывать db_cfg.php к решению не нужно
  5. Точка входа в API должна быть в файле index.php
  6. Учесть при написании, что управление на index.php будет передаваться через обработку 404й ошибки