Skip to content

Test task for Casexe (web application on Yii framework)

License

Notifications You must be signed in to change notification settings

j-tap/casexe-prizes

Repository files navigation

Test task for Casexe (web application on Yii framework)

Lottery random prizes

Live preview go to prize.vr9.ru

Задачи

  • После аутентификации пользователь может нажать на кнопку и получить случайный приз
  • Призы бывают 3х типов: денежный (случайная сумма в интервале), бонусные баллы (случайная сумма в интервале), физический предмет (случайный предмет из списка)
  • Денежный приз может быть перечислен на счет пользователя в банке (HTTP запрос к API банка), баллы зачислены на счет лояльности в приложении, предмет отправлен по почте (вручную работником)
  • Денежный приз может конвертироваться в баллы лояльности с учетом коэфициэнта
  • От приза можно отказаться
  • Деньги и предметы ограничены, баллы лояльности нет
  • Нужно предоставть коротокое описание решения для коллеги не-программиста или менеджера
  • Нужно добавить HTML разметку, CSS стили и JS скрипт для получения приза без перезагрузки страницы
  • Нужно предоставить прототип в PHP 5.6 или 7 без использования фреймворков и сторонних библиотек
  • Реализация с помощью фреймворка
  • Нужно добавить консольную команду которая будет отправлять денежные призы пачками на счета пользователей, которые еще не были отправлены
  • Добавить юнит-тест конвертирования денежного приза в баллы лояльности

Решения

Короткое описание

  1. Начинаем с регистрации, вводим емейл и пароль
  2. Попадаем на страницу подтверждения, нужно перейти на почту и пройти по ссылке
  3. Теперь доступен функционал, в правом верхнем углу кнопка выхода, количество баллов и ваш емейл, в центре описаны возможные категории призов (заполняются в базе), есть кнопка Получить приз
  4. Кликнув по кнопке Получить приз случайный алгоритм выбирает одну из возможных категорий, где есть неограниченные призы, например баллы, или ограниченные - деньги и предметы, которые есть в наличие
  5. Затем алгоритм выбирает случайный приз, с количеством больше нуля из вышеуказанной категории
  6. После этого идёт проверка, есть ли в настройках поля с минимальным и максимальным значениями. Если есть - выбирается случайное число из диапазона, если нет - единица. Это являеться количеством выигрыша. Для предметов это только 1, для баллов и денег диапазон из настроек (заполняются в базе), для баллов от 1 до 10 включительно, для денег от 100 до 10000
  7. Всплывает окно в котором виден выигрыш, а так же есть возможность его принять или отказаться с помощью кнопок.
  8. Если мы принимаем приз - срабатывает настройка, в которой указано количество секунд в течении которых нельзя повторно выбрать приз.
  9. После принятия приза следует проверка, какого типа приз.
    • Если это баллы - они просто зачисляются на счёт
    • Если деньги - их можно вывести на карту или перевести в баллы по курсу (в настройках, сейчас 1000).
      • Для перевода - кнопка Конвертировать. Баллов должно хватить, если не хватает - будет ошибка. Остаток сгорает.
      • Чтобы вывести на карту - нужно ввести номер карты и нажать отправить. Данные запишутся и запрос уйдёт в платёжную систему
    • Если предмет - нужно ввести адрес и товар будет отправлен по нему
  10. Если откажемся от приза - ничего не произойдёт, мы сможем сыграть ещё раз. Запись транзакции останется с номером статуса в любом случае (-1 - отменён, 1 - ожидает, 2 - подтверждён, 5 - в обработке, 10 - исполнен). По ней можно вести статистику.

Развёртывание

  1. Установить Composer, если отсутствует
  2. Клонировать проект на сервер, я использовал Open Server (PHP 5.6)
  3. Создать базу MySQL из файла /prizes.sql в корне проекта
  4. Выполнить composer install
  5. Прописать доступы к базе в /config/db.php

About

Test task for Casexe (web application on Yii framework)

Resources

License

Stars

Watchers

Forks