Перед началом выполнения задания внимательно прочтите этот текст!
В папке system находится наше модифицированное ядро CodeIgniter v3. Некоторая информация находится в папке system/README.MD
В папке application реализован полный пример приложения-инстаграма. Main_page - контроллер, где есть готовые Endpoints. В нем существуют пути-методы: инициализация объекта, получение данных, препарация данных и передача на фронт. Там же есть пример класса комментариев, поста, пользователя. После установки вы увидите главную страницу с информацией которая поможет сделать задание.
Мы работаем всегда с моделями Emerald_model - наши ORM-OOP модели для работы с базой, связями. Они представляют базу данных и работу с ней. Вся логика также хранится в них.
Версии PHP 7.1+ . Составлялось и проверялось на 7.3
nginx/test_task.conf - в nginx conf.d или sites_available укажите ваш домен CI_DOMAIN
, к примеру sometestworkspace.com
Изменить на ваши пути public/index.php - $application_folder
config/database.php - параметры базы
mysql/dump.sql - залить дамп
Какие то мелочи могут не работать, например php - short_open_tags -> on
. Фиксим вручную :)
Заливайте пожалуйста новый дамп базы, config файл nginx, если надо собрать фронт - прям тут напишите инструкцию! Спасибо за понимание!
Задачи идут по возрастанию сложности кроме "задачи со звездочкой". Не обязательно выполнять все до единой, но каждая задача показывает Ваш уровень разработки по-своему.
У нас в нашем мини-инстаграме уже есть список постов и просмотр информации о посте. Но вот не хватает чуть монетизации и юзабилити.
-
/main_page/login
- Реализовать авторизацию. Login model уже содержит наброски для работы с сессией. Достаточно сделать логин-пароль авторизацию в базе данных. Для удобства пароль можно не шифровать, чтобы при проверке мы могли легко авторизоваться. -
/main_page/comment
- Реализовать возможность комментирования постов.
Задачка "со звездочкой": Реализовать вложенные комментарии. Количество уровней вложенности не ограничено. Любыми способами на основе нашей текущей структуры переделать/улучшить/расширить возможность комментирования любого поста неограниченное число раз.
-
/main_page/like
- Реализовать возможность лайкнуть пост или комментарий. Число лайков на один пост/комментарий не ограничено (пользователь может лайкать пока у него на балансе еще есть лайки). -
/main_page/add_money
- Реализовать монетизацию. Есть готовый API-Endpoint для зачисления средств принимающий количество валюты. У юзеров в базе есть столбецwallet_balance
отвечающий за баланс.wallet_total_refilled
- сумма, на которую юзер пополнил баланс за все время,wallet_total_withdrawn
- сумма, которую юзер потратил (превратил в лайки). Эти два поля должны учитывать все действия по счету пользователя (пополнения и траты). Используемая валюта - доллар США. -
/main_page/buy_boosterpack
- Поскольку сейчас в мире самым популярным способом монетизации игр является покупка "бустерпаков" - сундуков/ящиков/кейсов с предметами/карточками/деньгами, - предлагаем реализовать эту максимально простую функциональность для наших пользователей :)
Нужно создать 3 бустерпака которые будут стоить 5$, 20$ и 50$. В базе для этого присутствует структура, класс также частично реализован. Покупая такой пак пользователь получает случайное количество лайков которые может потратить на "лайкинг" постов и комментариев. Лайки попадают на "лайк-счет" пользователя с которого он их будет тратить, то есть параллельно храним как счет в $, так и отдельный счет числа лайков у юзера.
Логика бустерпака:
С учетом накопленного профитбанка нужно выбрать доступную для выдачи часть бустерпака с учетом его цены.
Основываясь на этом из диапазона от 1 лайка до [цена бустерпака + профитбанк] рандомно нужно выбрать
получаемое юзером число лайков.
По результату выполнения нужно уменьшить значение профитбанка на сумму
[цена бустерпака — стоимость выданных в текущем открытии лайков]
1 лайк эквивалентен 1$.
Рассмотрим пример бустерпака за 5$:
Банк равен 0$. Пользователь покупает пак за 5$.
Формула: результат = рандом(от 1 до [цена бустерпака + профитбанк]) == рандом(от 1 до 5). Допустим,
юзер получил 2 лайка, в банк уходит 5$ - 2 лайка(2$) = 3$
Банк равен 3$. Пользователь покупает еще один пак за 5$.
Формула: итог = рандом(от 1 до [цена бустерпака + профитбанк]) == рандом(от 1 до 8). Допустим,
юзер получил 2 лайка, в банк уходит 5$ - 4 лайка(4$) = 1$, итого банк равен $4
Банк равен 4$. Пользователь покупает еще один пак за 5$.
Формула: итог = рандом(от 1 до [цена бустерпака + профитбанк]) == рандом(от 1 до 9). Допустим,
юзер получил 8 лайков, в таком случае в банк уходит 5$ - 8 лайка(8$) = -3$, итого банк равен $1
Таким образом разность между результатом юзера и ценой бустерпака которую мы не выдали ему используется в будущих открытиях и выдается кому-то из следующих юзеров.
- Обеспечение максимальной безопасности. Думаю тут не нужно объснять, что мы должны логировать все действия с балансом? :)
Придумать отличную структуру для того чтобы мы могли и построить графики, и сделать выборки, и анализировать действия пользователей в нашей с системе, особенно когда ведется работа с балансом.
Ожидаемый результат по тестовому заданию для проверки: работоспособность через HTTP-запрос методов.
Реализовать описанную в задачах выше функциональность на фронте. Вот требования к реализации фронта по каждой из них:
-
Авторизация, обновление страницы после отправки данных.
-
Комментирование, вложенность комментариев (если реализована на беке).
-
Возможность на фронте лайкать посты и комментарии (в том числе вложенные если вложенность реализована).
-
Отображение баланса пользователя в $ и лайках. В отдельной мочалке реализовать через запрос на бек отображение истории пополнений и расходов, в отдельном табе модалки показать общую пополненную сумму юзером, общую потраченную сумму, текущий баланс.
-
История открытия бустерпаков (стоимость каждого, полученные из каждого открытия лайки).
-
По связи безопасности и фронта конкретных требований нет но Вы можете проявить креативность.