Skip to content

StarSheriff2/expert-class

Repository files navigation


This RESTFUL API works as the backend for a React web app. The dockerized container of the app is currently hosted on Railway. All images are hosted in Cloudinary.


app screenshot mobile app screenshot mobile app screenshot mobile app screenshot mobile app screenshot mobile

Table of Contents

About

Expert Class API is the backend for a fully responsive web app that I built with a team of 4 members. The front end of the app is handled separately by another app. The repo for the front-end is here. The API documentation of this project was generated with the 'rswag' gem. We built request and integration tests, achieving a 95% coverage. We use cross-site session cookies to handle user authentication. We use PostgreSQL as the database and Cloudinary to store all images in the cloud.

API Documentation

We used Rswag to generate all the API documentation directly from our tests. You will find all the endpoints necessary to use our API here: Documentation

Features

  • authenticate user
  • create new user
  • create and delete a class
  • show all classes
  • show all reserved classes
  • reserve a class

Front-end React app

  • The front-end associated with this app is here.

  • The Github repo of the front-end is here.

Live Demo

Deployed to Railway: Live Demo

Video Presentation

Watch a quick demo and walk-through of this project:

Expert Class - 13 January 2022 - Watch Video

Built With

  • Ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [arm64-darwin20]
  • Rails 6.1.4.1
  • PostgreSQL 14
  • Cloudinary (for image storing)
  • Rspec (testing)
  • Faker gem
  • Factory bot
  • Docker 20.10.22
  • Docker compose v2.15.1

Project Management

We used an agile methodology to manage all the tasks in this project. This project's tasks are described in this kanban board.

We used GitHub's built-in Kanban board: kanban

Setup and Installation

To get a local copy up and running, follow these simple example steps.

Get files

  1. Open your terminal or command prompt.
  2. If you do not have git installed in your system, skip this step and go to step 3; otherwise, go to the directory where you want to copy the project files and clone it by copying this text into your command prompt/terminal:
  git clone git@github.com:StarSheriff2/expert-class.git

Now go to either the "Docker Deploy" or the "Local Deployt" section, depending on how you wish to deploy the API in your system.


  1. Download the program files by clicking on the green button that says β€œCode” on the upper right side of the project frame.
  2. You will see a dropdown menu. Click on β€œDownload ZIP.”
  3. Go to the directory where you downloaded the ZIP file and open it. Extract its contents to any directory you want in your system.

Cloudinary Setup

You will need a Cloudinary account to be able to deploy this app locally or through Docker. If you already have one, look for the API Environment variable, which you will find in your cloudinary dashboard:

  • for a Docker deployment, copy the API Environment variable into your .env file:
CLOUDINARY_URL=<your_unique_cloudinary_url>
  • for a local deployment, copy the API Environment variable into your config/cloudinary.rb file, by replacing the text "<cloudinary_url_here>" with the respective value of your API Environment variable

; otherwise, create a new account by going to Cloudinary and sign up for a free account: https://cloudinary.com/.

Once you have your new Cloudinary account set up, follow these steps:

  1. Login with your new account
  2. Go to your Cloudinary dashboard
  3. Look for the API Environment variable cloudinary_yml_file
  4. Do the following:
    • for a local deployment, copy it into your .env file, like exaplained above
    • for a Docker deployment, copy it into your config/cloudinary.rb file like explained above

Docker Deploy

Prerequisites

  • Docker 20.10.22 or latest
  • Docker Compose v2.15.1

Run

  docker compose up -d

Local deploy

Prerequisites

  • Ruby 3.0.2p107
  • Rails 6.1.4.1
  • PostgreSQL 14
  • Cloudinary account and cloudinary_url

Install Dependencies

  1. If you are not in your system terminal/command prompt already, please open it and go to the directory where you cloned the remote repository or extracted the project files.
  2. While in the project root directory, type
    bundle install
    
    This command will install all the necessary gems in your system.

Database Setup

Run

bin/rails db:setup

This will create your local databases, load the schema, and initialize with the seed data.

Note: If you get an error after running this command, it might be because you don't have a database called "postgres". This happens because when you create a new Rails application, Rails uses this "postgres" database to create and manage the databases for your application. You can easily create one by running this command:

createdb postgres

If Rails still complains about not finding the "postgres" role, you can create one with super-user priviledges:

createuser -s postgres

Now try running the db:setup command again!

You are all set now!

Usage

  1. In your terminal, run

    bin/rails server

    while inside the root directory of the repository files

    Note: This command will not stop on its own. To exit, hit "ctrl + c"

  2. The app allows API calls using curl or your favorite API client, such as Postman, HTTPPie or VS Code's Thunder Client. Here's a link to HTTPIE.

Development

Testing

We created all types of tests for this project:

  • Unit / Model tests
  • Integration tests
  • API request tests

Coverage report

test Coverage

To run all tests, type this into command line:

bundle exec rspec

Linters

To run Rubocop, go to the root directory of your repository and copy/paste the following command into your terminal:

 rubocop .

Authors

πŸ‘€ Arturo Alvarez

πŸ‘€ Breno Xavier

πŸ‘€ Francis Uloko

πŸ‘€ Mih Julius

🀝 Contributing

Contributions, issues, and feature requests are welcome!

Feel free to check the issues page.

Show your support

Give a ⭐️ if you like this project!

πŸ“ License

This project is MIT licensed.

About

This app allows users to sign up for a class taught by experts and gurus. This is the back-end, a RESTful API hosted in Railway. The front-end is hosted in Netlify.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •  

Languages