Skip to content

Senchatay/vk_cybersecurity_trainer

Repository files navigation

VK Платформа для тренировки навыков и компетенций кибербезопасности (scoreboard demo)

Overview

  1. Задача
  2. Архитектура
  3. TODO
  4. Getting Started
  • Скорборд: Снимок экрана от 2023-05-09 14-33-12

Задача:

Дано: Вам предстоит работать над проектом по созданию платформы для тренировки навыков и компетенций кибербезопасности. 
Эта платформа должна быть доступна постоянно, в любое время. 
Ее основная функция – предоставлять доступ любому сотруднику VK к задачам разных категорий с одной стороны, 
а с другой – предоставлять возможность команде проекта добавлять эти задачи с заданной периодичностью. 
Помимо собственно доступа к задачам сотрудники должны видеть собственный рейтинг в решении задач 
(сколько решил от общего количества в каждой категории), 
а также собственный рейтинг по отношению к другим сотрудникам.

Задача: Разработать прототип скорборда этой платформы (и фронт без дизайна, и бэк), который должен включать:
1. Рейтинг пользователя по отношению к другим сотрудникам по 3 категориям задач
2. Собственный рейтинг пользователя в каждой из 3 категорий по отношению к общему количеству задач в каждой из категорий

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

Примечание:  В задаче нет строгого требования разработки ролевой модели доступа, однако при работе с платформой мы планируем админку. 
Кандидат на вакансию может учитывать эту информацию при работе с логикой и архитектурой раздела «скорборд», а может и не учитывать :)

Архитектура

Технологический стэк:

  • Бэкенд: Ruby on Rails
  • Фронтенд: Rails Action View + bootstrap
  • БД: PostgreSQL

UML-диаграмма Классов

UML-класс (1)

Highlights

  1. Скорборд - результат запроса на (/users).
  2. Если в задаче более одного решения - рейтинг не увеличивается. Важно именно количество решенных задач.
  3. RatingHelper
    • Хэлпер создает запрос к БД на получение упорядоченного рейтинга пользователей по каждой из категорий задач.
    • Использоваение ActiveRecord::Base.sanitize_sql позволяет избежать SQL-инъекции в передаваемом category_id, если класс будет модифицироваться.
  4. UsersController
    • При запросе скорборда (/users) рейтинг для каждой категории запрашивается только один раз
  5. User
    • Метод пользователя scoreboard возвращает Скорборд - таблицу с Названием категории, Количеством решенных задач, Общим количеством задач и Рэйтингом.
    • Количество решенных задач - результат работы метода solved_count_by_category_id, который делает запрос в БД.
  6. Добавлена авторизация без подтверждения подлинности для доработки ролевой модели доступа в будущем.
  7. Присутствует возможность создания новых Категорий, Задач, Пользователей и Решений.
  8. Добавлены Сиды - при сборке приложения в БД добавляются тестовые данные.

TODO

  • Добавить Пагинацию скорборда и запросов в БД. - Сейчас запрос на получение рейтинга всегда возвращает весь рейтинг.
  • Добавить кеширование запросов количества задач в категории и количества решенных задач в категории для пользователя.
  • Добавить сортировку пользователей по рейтингу.
  • Rails приложении при необходимости можно переписать под Django.
  • При необходимости переноса логики с БД на Бэкенд можно использовать микросервис на GO для ускорения операций с большими данными.

Getting started

Запустить приложение на localhost:3000:

docker-compose build
docker-compose up

About

Профильное задание, Фуллстек-разработчик, стажировка VK

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published