Дано: Вам предстоит работать над проектом по созданию платформы для тренировки навыков и компетенций кибербезопасности.
Эта платформа должна быть доступна постоянно, в любое время.
Ее основная функция – предоставлять доступ любому сотруднику VK к задачам разных категорий с одной стороны,
а с другой – предоставлять возможность команде проекта добавлять эти задачи с заданной периодичностью.
Помимо собственно доступа к задачам сотрудники должны видеть собственный рейтинг в решении задач
(сколько решил от общего количества в каждой категории),
а также собственный рейтинг по отношению к другим сотрудникам.
Задача: Разработать прототип скорборда этой платформы (и фронт без дизайна, и бэк), который должен включать:
1. Рейтинг пользователя по отношению к другим сотрудникам по 3 категориям задач
2. Собственный рейтинг пользователя в каждой из 3 категорий по отношению к общему количеству задач в каждой из категорий
По условиям задачи, скорборд берет данные по каждому из пользователей из базы данных (произвольная, схему можете составить самостоятельно).
Примечание: В задаче нет строгого требования разработки ролевой модели доступа, однако при работе с платформой мы планируем админку.
Кандидат на вакансию может учитывать эту информацию при работе с логикой и архитектурой раздела «скорборд», а может и не учитывать :)- Бэкенд: Ruby on Rails
- Фронтенд: Rails Action View + bootstrap
- БД: PostgreSQL
- Скорборд - результат запроса на (
/users). - Если в задаче более одного решения - рейтинг не увеличивается. Важно именно количество решенных задач.
- RatingHelper
- Хэлпер создает запрос к БД на получение упорядоченного рейтинга пользователей по каждой из категорий задач.
- Использоваение
ActiveRecord::Base.sanitize_sqlпозволяет избежать SQL-инъекции в передаваемомcategory_id, если класс будет модифицироваться.
- UsersController
- При запросе скорборда (
/users) рейтинг для каждой категории запрашивается только один раз
- При запросе скорборда (
- User
- Метод пользователя
scoreboardвозвращает Скорборд - таблицу с Названием категории, Количеством решенных задач, Общим количеством задач и Рэйтингом. - Количество решенных задач - результат работы метода
solved_count_by_category_id, который делает запрос в БД.
- Метод пользователя
- Добавлена авторизация без подтверждения подлинности для доработки ролевой модели доступа в будущем.
- Присутствует возможность создания новых Категорий, Задач, Пользователей и Решений.
- Добавлены Сиды - при сборке приложения в БД добавляются тестовые данные.
- Добавить Пагинацию скорборда и запросов в БД. - Сейчас запрос на получение рейтинга всегда возвращает весь рейтинг.
- Добавить кеширование запросов количества задач в категории и количества решенных задач в категории для пользователя.
- Добавить сортировку пользователей по рейтингу.
Railsприложении при необходимости можно переписать подDjango.- При необходимости переноса логики с БД на Бэкенд можно использовать микросервис на
GOдля ускорения операций с большими данными.
Запустить приложение на localhost:3000:
docker-compose build
docker-compose up
