Giter VIP home page Giter VIP logo

booking-service's Introduction

Lairbnb / booking-service

CI Status

Booking & Calendar Service for the listing page of a vacation rental website

Related Projects

Table of Contents

  1. Usage
  2. Requirements
  3. Development
  4. Production
  5. Screenshot

Usage

Example URL: http://localhost:3002/25

API

  • Get full information of a listing

    • Method & Path

      GET /api/booking/:id

    • Sample Response

      {
        "listing": [
          {
            "id": 36,
            "ownerName": "Marcellus1",
            "rating": 4.42,
            "numRatings": 31,
            "pricePerNight": 159,
            "discountAmount": 0
          }
        ]
      }
  • Add a new listing

    • Method & Path

      POST /api/booking

    • Request Body (All properties are required)

      {
        "ownerName": <String>,
        "rating": <Number>,
        "numRatings": <Integer>,
        "pricePerNight": <Integer>,
        "discountAmount": <Integer>
      }
    • Sample Response

      {
        "listing": [
          {
            "id": 36,
            "ownerName": "Marcellus2",
            "rating": 4.44,
            "numRatings": 32,
            "pricePerNight": 159,
            "discountAmount": 10
          }
        ]
      }
  • Modify an existing listing

    • Method & Path

      PUT /api/booking/:id

    • Request Body (All properties are optional)

      {
        "ownerName": <String>,
        "rating": <Number>,
        "numRatings": <Integer>,
        "pricePerNight": <Integer>,
        "discountAmount": <Integer>
      }
    • Sample Response

      {
        "listing": [
          {
            "id": 36,
            "ownerName": "Marcellus2",
            "rating": 4.44,
            "numRatings": 32,
            "pricePerNight": 159,
            "discountAmount": 10
          }
        ]
      }
  • Delete an existing listing

    • Method & Path

      DELETE /api/booking/:id

    • Sample Response

      {
        "listing": [
          {
            "id": 36,
            "ownerName": "Marcellus2",
            "rating": 4.44,
            "numRatings": 32,
            "pricePerNight": 159,
            "discountAmount": 10
          }
        ]
      }

Requirements

Development

All commands from within the repository's root directory.

Installing Dependencies

npm install

Setting up Database

Create a "booking_db" database via PSQL. Please see how to set up the environment variables if your PostgreSQL requires authentication. Run the following command in terminal after the db is created.

npm run db:setup

Generating Listing Data for Database

  • Creates a CSV file with 10 Million records. Please follow the prompts.
    npm run db:generate
  • Creates a CSV file with custom amount of records. Please follow the prompts.
    npm run db:generate -- -n=<amount>

Development Server

On two separate terminal windows:

npm run build:dev
npm run start:dev

Testing

npm test

Production

Environment Variables

  • If you do not have the environment variables set up via shell, you can create a .env file in the repository's root folder to load them. These are optional.
 POSTGRES_URL=<your-db-host>
 POSTGRES_PORT=<your-db-port>
 POSTGRES_DB=<your-database-name>
 POSTGRES_USER=<your-db-username>
 POSTGRES_PASSWORD=<your-db-password>
 PORT=<your-server-port>
 NEW_RELIC_LICENSE_KEY=<your-new-relic-license-key>
 CLOUD_BUNDLE_URL=<your-cloud-hosted-bundle-url>

Webpack Production Build

npm run build

Node Express Server

npm start

Hosting The Bundle on Cloud

Requires Grunt and the dev dependencies to be installed

  • Create the grunt-aws.json file at $HOME/.aws directory

    {
      "accessKeyId": "<your-access-keyId>",
      "secretAccessKey": "<your-access-secret>",
      "bucket": "<your-bucket-name>"
    }
  • Add CLOUD_BUNDLE_URL=<your-bucket-url> to the environment variables

  • Run $ grunt on the terminal

Screenshot

Screenshot

booking-service's People

Contributors

mongoos avatar kzlsakal avatar brennancaldwell avatar phillipalexander avatar

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.