Skip to content

Instantly share code, notes, and snippets.

@AlxGolubev
Created July 30, 2021 12:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save AlxGolubev/9c0a20b3c9b9bee4cfb00541ef12f9f9 to your computer and use it in GitHub Desktop.
Save AlxGolubev/9c0a20b3c9b9bee4cfb00541ef12f9f9 to your computer and use it in GitHub Desktop.

Часть 1

Необходимо написать на чистом Руби класс, который реализует следующее: Вводим в консоли параметры перевозимого груза - вес(кг), длина(см), ширина(см), высота(см) Вводим в консоли название пункта отправления и название пункта назначения Через distancematrix.ai или любой другой сервис со схожим функционалом мы расчитываем расстояние, которое груз должен преодолеть

Результатом работы класса должен быть хеш следующего вида -> {weight: 1, length: 1, width: 1, height: 1, distance: 1, price: 1}

  • Расчет цены:
  1. Если груз меньше 1 метра кубического, то цена перевозки равна 1 рублю за километр,
  2. Если груз больше 1 метра кубического, но его вес не превышает 10 кг, то цена перевозки равна 2 рубля за километр,
  3. Если груз больше 1 метра кубического и его вес превышает 10кг, то цена перевозки ровна 3 рубля за километр.

Тесты

Часть 2

Написать Rails приложение:

  • Клиент заходит на главную страницу сайта и вводит следующие данные: Имя, Фамилия, Отчество, Телефон, Email, вес(кг), длина(см), ширина(см), высота(см), пункт отправления, пункт назначения (все поля обязательные)
  • Использовать скрипт, который писался в Part1 для расчетов
  • Данные сохранять в базу (PostgreSQL)
  • Клиент после расчета может вывести всю информацию по заявке (просмотра созданной заявки)
  • Прикрутить к приложению ActiveAdmin для просмотра заявок
  • Тесты

Часть 3

К частям 1 и 2:

  • Добавляем авторизацию(Devise)
  • Аватарки для юзеров(Carrierwave/shrine)
  • Каждый юзер может видеть свои заявки (Таблица: одна заявка - одна строчка)

Пагинация для таблицы с заявками (kaminari)

  • Сортировка данных: по дате создания, по цене и по расстоянию
  • Статусы у заявок (AASM) меняет Админ
  • Письмо после создания заявки отправляется юзеру через Sidekiq
  • При смене статуса у заявки также отправляем письмо юзеру
  • Тесты

Часть 4

Добавляем организации (Доступ к скопу данных организовывать используя гем Pundit)

Появляется такая сущность, как Organization

  • Сущность Organization объединяет в себе пользователей, которые могут иметь две роли Operator & Organization Admin
  • Operator может видеть только свои заявки, а Organization Admin может видеть заявки всех своих операторов
  • Добавляем фильтр по Операторам
  • Тесты

Часть 5

  • Аналитика для организаций (абстракция Widget) (Аналитика отображается в лк админа Организации)
  • Общее количество заявок на организацию
  • Количество заявок в разбивке по операторам
  • Общая сумма по всем заявкам
  • Средняя сумма по заявкам
  • Самая далеко отправления посылка
  • Самая близко отправления посылка
  • Тесты

Часть 6

  • Выгрузка табличных данных в csv (csv файл должен приходить по почте)
  • Автоматическое тестирование на Github Actions
  • Автоматическое развертывание кода на Heroku через Github Actions

Исходный код приложения нужно загрузить на github.com и в конце развернуть на heroku.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment