Live preview go to prize.vr9.ru
- После аутентификации пользователь может нажать на кнопку и получить случайный приз
- Призы бывают 3х типов: денежный (случайная сумма в интервале), бонусные баллы (случайная сумма в интервале), физический предмет (случайный предмет из списка)
- Денежный приз может быть перечислен на счет пользователя в банке (HTTP запрос к API банка), баллы зачислены на счет лояльности в приложении, предмет отправлен по почте (вручную работником)
- Денежный приз может конвертироваться в баллы лояльности с учетом коэфициэнта
- От приза можно отказаться
- Деньги и предметы ограничены, баллы лояльности нет
- Нужно предоставть коротокое описание решения для коллеги не-программиста или менеджера
- Нужно добавить HTML разметку, CSS стили и JS скрипт для получения приза без перезагрузки страницы
- Нужно предоставить прототип в PHP 5.6 или 7 без использования фреймворков и сторонних библиотек
- Реализация с помощью фреймворка
- Нужно добавить консольную команду которая будет отправлять денежные призы пачками на счета пользователей, которые еще не были отправлены
- Добавить юнит-тест конвертирования денежного приза в баллы лояльности
- Начинаем с регистрации, вводим емейл и пароль
- Попадаем на страницу подтверждения, нужно перейти на почту и пройти по ссылке
- Теперь доступен функционал, в правом верхнем углу кнопка выхода, количество баллов и ваш емейл, в центре описаны возможные категории призов (заполняются в базе), есть кнопка Получить приз
- Кликнув по кнопке Получить приз случайный алгоритм выбирает одну из возможных категорий, где есть неограниченные призы, например баллы, или ограниченные - деньги и предметы, которые есть в наличие
- Затем алгоритм выбирает случайный приз, с количеством больше нуля из вышеуказанной категории
- После этого идёт проверка, есть ли в настройках поля с минимальным и максимальным значениями. Если есть - выбирается случайное число из диапазона, если нет - единица. Это являеться количеством выигрыша. Для предметов это только 1, для баллов и денег диапазон из настроек (заполняются в базе), для баллов от 1 до 10 включительно, для денег от 100 до 10000
- Всплывает окно в котором виден выигрыш, а так же есть возможность его принять или отказаться с помощью кнопок.
- Если мы принимаем приз - срабатывает настройка, в которой указано количество секунд в течении которых нельзя повторно выбрать приз.
- После принятия приза следует проверка, какого типа приз.
- Если это баллы - они просто зачисляются на счёт
- Если деньги - их можно вывести на карту или перевести в баллы по курсу (в настройках, сейчас 1000).
- Для перевода - кнопка Конвертировать. Баллов должно хватить, если не хватает - будет ошибка. Остаток сгорает.
- Чтобы вывести на карту - нужно ввести номер карты и нажать отправить. Данные запишутся и запрос уйдёт в платёжную систему
- Если предмет - нужно ввести адрес и товар будет отправлен по нему
- Если откажемся от приза - ничего не произойдёт, мы сможем сыграть ещё раз. Запись транзакции останется с номером статуса в любом случае (-1 - отменён, 1 - ожидает, 2 - подтверждён, 5 - в обработке, 10 - исполнен). По ней можно вести статистику.
- Установить Composer, если отсутствует
- Клонировать проект на сервер, я использовал Open Server (PHP 5.6)
- Создать базу MySQL из файла /prizes.sql в корне проекта
- Выполнить
composer install
- Прописать доступы к базе в /config/db.php