Code Monkey home page Code Monkey logo

feedem's Introduction

Build Status Codacy Badge

FeedEm платформа для предзаказа еды.

Роли пользователей

  • Покупатель
  • Продавец
  • Администратор

Сценарии использования

BG-1: Уменьшить время ожидания для покупателей

Данное приложение позволит вам совершать предзаказ и получать еду к назначенному времени.

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

Сервис feeEm не имеет очередей ожидания. Всё, что понадобится для заказа - соединение с сетью интернет.

Заказ пользователя готовится к назначенному времени и вместо ожидания в очереди нужно только забрать заказ.

F1-1: Покупатель может просматривать каталоги ресторанов

Для просмотра меню ресторана нужно выполнить следующую последовательность действий:

  • Зайти на сайт.
  • Зарегестрироваться (Если нужно).
  • Пройти авторизацию.
  • Осуществить поиск интересующего ресторана (Поиск осуществляется по описанию, названию, расстоянию до пользователя, по товарам).
  • Выбрать ресторан.

После выполненных действий пользователю будет доступно меню выбранного ресторана.

F1-2: Покупатель может осуществить заказ онлайн

Для совершения заказа нужно выполнить следующую последовательность действий:

  • Открыть меню интересующего ресторана.
  • Добавить интересующие пункты меню в корзину.
  • Добавить кредитную карту (Если нужно).
  • Проверить примерное время заказа (Если устраивает, то продолжить).
  • Заказать и оплатить заказ.

F1-3: Рейтинговая система для выбора лучшего магазина

Также, пользователи могут поставить оценку ресторану, что поможет другим пользователям выбрать продавца с наилучшим сервисом. Чтобы это сделать нужно:

  • Открыть страницу ресторана.
  • Поставить оценку (Нравится или не нравится).

BG-2: Увеличение дохода ресторана

FeedEm создан не для доставки, а для предзаказов. Цель продавцов - подготовка еды к нужному для клинтов времени. Покупатели сам придут, чтобы получить заказ.

F2-1: Составление меню для продажи онлайн

Для сосавления меню нужно выполнить следующие действия:

  • Открыть страницу упраления рестораном.
  • Открыть вкладку редактирования меню.
  • Добавить/отредактировать/удалить товары.

F2-2: Прием заказов онлайн

Для приема доступных заказов:

  • Открыть страницу упраления рестораном.
  • Открыть вкладку заказов.
  • Принять/отредактировать примерное время/отклонить заказы.

F2-3: Просмотр рейтинга ресторанов

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

Для просмотра рейтинга всех ресторанов:

  • Открыть панель выбора ресторана.На данной странице возможны следующие действия:

    • Сортировка по выбранному параметру.
    • Поиск по названию.

Компоненты

Модели (М в модели MVC)

Смотрите ER-диаграмму.

Реализованы как модели в Ruby on rails.

Данные хранятся в Postgresql.

  • Покупатели - модель, описывающая покупателей.
  • Кредитные карточки - кредитные карточки, которые имеют покупатели. Используются для покупки.
  • Продавцы - модель, описывающая рестораны.
  • Товары - модель, описывающая товары доступные на продажу.
  • Заказы - модель, описывающая заказы, которые запросил покупатель.
  • Элементы заказов - модель, описываюая товары, относящиеся к совершенным заказам пользователей.

Логика Базы Данных

Покупатели имеют:

  • Логин (Используется для входа)
  • Имя
  • Фамилию
  • Пароль (Используется для входа)

Кредитные карточки имеют:

  • Cvv-код (Код безопасности карточки).
  • Номер карточки.
  • Дату истечения срока действия.
  • Id Покупателя, к которуму принадлежит данная карта.

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

Заказ имеет:

  • Время (Примерное время приготовления заказа (Вычисляется через сумму примерного времени готовки всех товаров в заказе)).
  • Id Покупателя, который его составил.

Элемент заказа имеет:

  • Id Заказа, к которому принадлежит.
  • Id Товара, который заказал пользователь.
  • Количество Товара (Количество порций данного блюда (Тип - id товара)).

Продавец имеет:

  • Название ресторана (Название магазина, где пользователь может совершать покупки).
  • Токен для аутентификации (Выдается администраторами при регистрации).
  • Дизлайки, выставленные пользователями (Выставляются пользователями, если было составлено отрицательное впечатление о продавце).
  • Лайки, выставленные пользователями (Выставляются пользователями, если было составлено положительное впечатление о продавце).

Товар имеет:

  • Название.
  • Примерное время готовки (Оценка времени выставляется продавцом).
  • Описание (Описание блюда для клиента).
  • Id Продавца, который продаёт данный товар.

Продавец добавляет товары, для своего магазина. Покупатель совершает заказы товаров выбранного Продавца и оплачивает их Картой. У покупателя, в списке заказов, отображается примерное время готовки заказа.

Администратор имеет:

  • Логин.
  • Пароль.

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

Логическая схема:

Logical scheme

Полноформатное изображение логической схемы можно увидеть по ссылке: "https://raw.githubusercontent.com/s3rius/feedEm/docs/docs/ER.png"

Отображения (V в модели MVC)

Реализованы как отображения в Ruby on rails.

Используется Vue js фраемворк на стороне клиента.

  • Домашняя страница
  • Страница поиска
  • Страница товара
  • Страница заказа товара
  • Страница профиля пользователя
  • Страница входа для пользователя
  • Страница регистрации пользователя
  • Страница профиля продавца
  • Страница входа для продавца
  • Панель администратора

Контроллеры (C в модели MVC)

Реализованы как контроллеры в Ruby on Rails.

  • Контроллер домашней страницы
  • Контроллер пользователя
  • Контроллер продавца
  • Контроллер заказа
  • Контроллер товара
  • Контроллер кредитных карт

feedem's People

Contributors

dependabot-support avatar kolaer avatar s3rius avatar

Watchers

 avatar  avatar  avatar

feedem's Issues

Add search suggestions.

Add REST API for search suggestions.
Best implementation will be:

  1. Frontend sends you a request with search query.
  2. Backend returns possible suggestions with suggested item type.
    As example:
    Sent by frontend:
{
  "query": "pe"
}

Backend response:

[
  {
    "suggest": "pepperoni",
    "type": "Order item"
  },
  {
    "suggest": "Peaks Island",
    "type": "Seller"
  }
]

Dependabot can't resolve your Ruby dependency files

Dependabot can't resolve your Ruby dependency files.

As a result, Dependabot couldn't update your dependencies.

The error Dependabot encountered was:

Bundler::VersionConflict with message: Bundler could not find compatible versions for gem "coffee-script":
  In Gemfile:
    coffee-rails (~> 4.2) was resolved to 4.2.2, which depends on
      coffee-script (>= 2.2.0)

Could not find gem 'coffee-script (>= 2.2.0)', which is required by gem 'coffee-rails (~> 4.2)', in any of the sources.

If you think the above is an error on Dependabot's side please don't hesitate to get in touch - we'll do whatever we can to fix it.

You can mention @dependabot in the comments below to contact the Dependabot team.

Need to add vue integration with webpacker.

Run rails webpacker:install:vue into app folder. to integrate vue with rails. Also, i think we need to rebuild dockerfile from dockerhub, to provide vue support, but i don't know if it affects docker-image or not.

(Search API) Distinct items by name.

Search API is cool, but i got suggestions like this:

image

That doesn't seem right.
So we have at least 2 possible ways to solve that:

  • Distinct by name on client side.
  • Distinct on server side.

Style for model pages.

Create feedem styled pages for model pages.
Current progress for pages:

  • - Customers
  • - Admins
  • - Sellers
  • - Merchandises
  • - Orders
  • - Order items
  • - Cards

Update use-cases UML.

  • Add administrator to use-cases UML.
  • Add login to administrator, customer, seller. (not really needed?)

Cannot register customer.

Technically, i can register new customer. But not all fields will be filled properly.

Heres go some dirty ass logs from terminal.

web_1_4cab2842e0ef | Started POST "/customers" for 192.168.16.1 at 2018-12-12 15:11:56 +0000
web_1_4cab2842e0ef | Cannot render console from 192.168.16.1! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255
web_1_4cab2842e0ef | Processing by Devise::RegistrationsController#create as HTML
web_1_4cab2842e0ef |   Parameters: {"utf8"=>"", "authenticity_token"=>"y5kG4AoyH9DovXZ25/0UZ4Zs7BsX2FzFFBb7SgHUEtVSufWh+s15jZTdgBMU3xct/dXB6lpdykdOI3+8Zet1Ug==", "customer"=>{"email"=>"[email protected]", "name"=>"s3rius", "surname"=>"Bubuka", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"Create Customer"}
web_1_4cab2842e0ef | Unpermitted parameters: :name, :surname
web_1_4cab2842e0ef |    (0.2ms)  BEGIN
web_1_4cab2842e0ef |   ↳ /usr/local/bundle/gems/activerecord-5.2.1/lib/active_record/log_subscriber.rb:98
web_1_4cab2842e0ef |   Customer Exists (0.8ms)  SELECT  1 AS one FROM "customers" WHERE "customers"."email" = $1 LIMIT $2  [["email", "[email protected]"], ["LIMIT", 1]]
web_1_4cab2842e0ef |   ↳ /usr/local/bundle/gems/activerecord-5.2.1/lib/active_record/log_subscriber.rb:98
web_1_4cab2842e0ef |   Customer Create (114.2ms)  INSERT INTO "customers" ("created_at", "updated_at", "email", "encrypted_password") VALUES ($1, $2, $3, $4) RETURNING "id"  [["created_at", "2018-12-12 15:11:56.268381"], ["updated_at", "2018-12-12 15:11:56.268381"], ["email", "[email protected]"], ["encrypted_password", "$2a$11$kqI4vwaRI1aqemcMQJFAYeoSkPEGMvRoKm70lzNDUnvk0KzKGBspi"]]
web_1_4cab2842e0ef |   ↳ /usr/local/bundle/gems/activerecord-5.2.1/lib/active_record/log_subscriber.rb:98
web_1_4cab2842e0ef |    (37.8ms)  COMMIT
web_1_4cab2842e0ef |   ↳ /usr/local/bundle/gems/activerecord-5.2.1/lib/active_record/log_subscriber.rb:98
web_1_4cab2842e0ef | Redirected to http://localhost:3000/

As you can see, i posted username with name: (s3rius) and surname: (Bubuka). But only mail and password was accepted. Check it.

Add search rank values.

Add rank field to search API item, so that we could know which ones of the output items are more relevant to the search query.
Docs for it.

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.