Code Monkey home page Code Monkey logo

backend_ci_test's Introduction

Backend PHP | Full stack dev test task v2

Перед началом выполнения задания внимательно прочтите этот текст!

Структура

В папке system находится наше модифицированное ядро CodeIgniter v3. Некоторая информация находится в папке system/README.MD

В папке application реализован полный пример приложения-инстаграма. Main_page - контроллер, где есть готовые Endpoints. В нем существуют пути-методы: инициализация объекта, получение данных, препарация данных и передача на фронт. Там же есть пример класса комментариев, поста, пользователя. После установки вы увидите главную страницу с информацией которая поможет сделать задание.

Мы работаем всегда с моделями Emerald_model - наши ORM-OOP модели для работы с базой, связями. Они представляют базу данных и работу с ней. Вся логика также хранится в них.

Инициализация

PHP

Версии PHP 7.1+ . Составлялось и проверялось на 7.3

NGinx

nginx/test_task.conf - в nginx conf.d или sites_available укажите ваш домен CI_DOMAIN, к примеру sometestworkspace.com

Приложение

Изменить на ваши пути public/index.php - $application_folder

config/database.php - параметры базы

MySQL

mysql/dump.sql - залить дамп

Какие то мелочи могут не работать, например php - short_open_tags -> on. Фиксим вручную :)

После сделаного тестового.

Заливайте пожалуйста новый дамп базы, config файл nginx, если надо собрать фронт - прям тут напишите инструкцию! Спасибо за понимание!


ЗАДАЧИ

Задачи идут по возрастанию сложности кроме "задачи со звездочкой". Не обязательно выполнять все до единой, но каждая задача показывает Ваш уровень разработки по-своему.

У нас в нашем мини-инстаграме уже есть список постов и просмотр информации о посте. Но вот не хватает чуть монетизации и юзабилити.

  1. /main_page/login - Реализовать авторизацию. Login model уже содержит наброски для работы с сессией. Достаточно сделать логин-пароль авторизацию в базе данных. Для удобства пароль можно не шифровать, чтобы при проверке мы могли легко авторизоваться.

  2. /main_page/comment - Реализовать возможность комментирования постов.

Задачка "со звездочкой": Реализовать вложенные комментарии. Количество уровней вложенности не ограничено. Любыми способами на основе нашей текущей структуры переделать/улучшить/расширить возможность комментирования любого поста неограниченное число раз.

  1. /main_page/like - Реализовать возможность лайкнуть пост или комментарий. Число лайков на один пост/комментарий не ограничено (пользователь может лайкать пока у него на балансе еще есть лайки).

  2. /main_page/add_money - Реализовать монетизацию. Есть готовый API-Endpoint для зачисления средств принимающий количество валюты. У юзеров в базе есть столбец wallet_balance отвечающий за баланс. wallet_total_refilled - сумма, на которую юзер пополнил баланс за все время, wallet_total_withdrawn - сумма, которую юзер потратил (превратил в лайки). Эти два поля должны учитывать все действия по счету пользователя (пополнения и траты). Используемая валюта - доллар США.

  3. /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

Таким образом разность между результатом юзера и ценой бустерпака которую мы не выдали ему используется в будущих открытиях и выдается кому-то из следующих юзеров.

  1. Обеспечение максимальной безопасности. Думаю тут не нужно объснять, что мы должны логировать все действия с балансом? :)

Придумать отличную структуру для того чтобы мы могли и построить графики, и сделать выборки, и анализировать действия пользователей в нашей с системе, особенно когда ведется работа с балансом.

Ожидаемый результат по тестовому заданию для проверки: работоспособность через HTTP-запрос методов.

Дополнительная задача Vue.js | Frontend - Fullstack

Реализовать описанную в задачах выше функциональность на фронте. Вот требования к реализации фронта по каждой из них:

  1. Авторизация, обновление страницы после отправки данных.

  2. Комментирование, вложенность комментариев (если реализована на беке).

  3. Возможность на фронте лайкать посты и комментарии (в том числе вложенные если вложенность реализована).

  4. Отображение баланса пользователя в $ и лайках. В отдельной мочалке реализовать через запрос на бек отображение истории пополнений и расходов, в отдельном табе модалки показать общую пополненную сумму юзером, общую потраченную сумму, текущий баланс.

  5. История открытия бустерпаков (стоимость каждого, полученные из каждого открытия лайки).

  6. По связи безопасности и фронта конкретных требований нет но Вы можете проявить креативность.

Удачи Вам! ;)

backend_ci_test's People

Contributors

futureisrise avatar sidenser avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.