Skip to content

A JSON API which exposing the SalesEngine data schema.

Notifications You must be signed in to change notification settings

anlewis/rales_engine

Repository files navigation

Rails Engine

CircleCI

Table of Contents generated with DocToc

About

The purpose of this project is to use Rails and ActiveRecord to build a JSON API which exposes the SalesEngine data schema.

Getting Started

This project uses the Ruby on Rails framework, which can be installed from here. Bundler is used to install the gems needed for this application.

In order to run this appication in the development environment, perform the following in the CLI:

bundle install
rake db:create db:migrate
rake import_csv

In order to spin-up the server, run: rails s

To view the JSON API endpoint, visit the path, ending with .json. For example, visiting http://localhost:3000/api/v1/merchants/random.json returns a random merchant.

JSON Endpoints

Record Endpoints

For a given :resource (merchants, items, invoices, invoice_items, customers, transactions)...

  • GET /api/v1/:resource returns a list of all instances of a resource
  • GET /api/v1/:resource/:id returns a resource
  • GET /api/v1/:resource/find?<parameters> returns a resource with the given (as params) attributes
  • GET /api/v1/:resource/find_all?<parameters> returns a list of resources with the given (as params) attributes
  • GET /api/v1/:resource/random returns a random instance of a resource

Relationship Endpoints

Merchants

  • GET /api/v1/merchants/:id/items returns a collection of items associated with that merchant
  • GET /api/v1/merchants/:id/invoices returns a collection of invoices associated with that merchant from their known orders

Invoices

  • GET /api/v1/invoices/:id/transactions returns a collection of associated transactions
  • GET /api/v1/invoices/:id/invoice_items returns a collection of associated invoice items
  • GET /api/v1/invoices/:id/items returns a collection of associated items
  • GET /api/v1/invoices/:id/customer returns the associated customer
  • GET /api/v1/invoices/:id/merchant returns the associated merchant

Invoice Items

  • GET /api/v1/invoice_items/:id/invoice returns the associated invoice
  • GET /api/v1/invoice_items/:id/item returns the associated item

Items

  • GET /api/v1/items/:id/invoice_items returns a collection of associated invoice items
  • GET /api/v1/items/:id/merchant returns the associated merchant

Transactions

  • GET /api/v1/transactions/:id/invoice returns the associated invoice

Customers

  • GET /api/v1/customers/:id/invoices returns a collection of associated invoices
  • GET /api/v1/customers/:id/transactions returns a collection of associated transactions

Business Intelligence Endpoints

All Merchants

  • GET /api/v1/merchants/most_revenue?quantity=x returns the top x merchants ranked by total revenue
  • GET /api/v1/merchants/most_items?quantity=x returns the top x merchants ranked by total number of items sold
  • GET /api/v1/merchants/revenue?date=x returns the total revenue for date x across all merchants

Single Merchant

  • GET /api/v1/merchants/:id/revenue returns the total revenue for that merchant across successful transactions
  • GET /api/v1/merchants/:id/revenue?date=x returns the total revenue for that merchant for a specific invoice date x
  • GET /api/v1/merchants/:id/favorite_customer returns the customer who has conducted the most total number of successful transactions

Items

  • GET /api/v1/items/most_revenue?quantity=x returns the top x items ranked by total revenue generated
  • GET /api/v1/items/most_items?quantity=x returns the top x item instances ranked by total number sold
  • GET /api/v1/items/:id/best_day returns the date with the most sales for the given item using the invoice date. If there are multiple days with equal number of sales, return the most recent day.

Customers

  • GET /api/v1/customers/:id/favorite_merchant returns a merchant where the customer has conducted the most successful transactions

Testing

Rspec-Rails is used for testing. Factory_Bot is used to create test data.

In order to run tests, perform the following:

rake db:test:prepare

rspec

Schema

schema

Contributers

Anna Lewis (@anlewi5) Nico Lewis(@nico24687)

About

A JSON API which exposing the SalesEngine data schema.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published