Git Product home page Git Product logo

humsafar's Introduction

A brief about the solution

The schema has been kept very simple. We have a table schema_row which relates to the rows in a coach. seat table relates to the seat in a seat row of a coach.

SeatRow Schema

SeatRow Schema

Seat Schema

Seat Schema

sp_book

The main solution is packaged in procedure sp_book.

SQL Code

It is present in sql folder.

Basic Idea

  • Try to find if we have enough seat in a single row.
  • Start from the last seat as we have least number of seats there and thus in case if a user wants to book 1-3 seats it makes more sense to book seats there. Also, it would help to maximize the likelyhood of the number of bookings in which passengers can be seated together.
  • If we can't find a row with enough seats the result is ordered by seat_row_id in DESC order and seat_id in ASC order. Again, favoring to book the last rows first.
  • The procedure uses select for update to take a lock and then do the booking.

What is missing?

  • Would have liked to create a Mysql based Queue and implement distributed transaction (that is the reason for creating scheduler).

Config

  • Database : MySql v 8
  • Host: localhost
  • Port: 3306
  • Db_Name: trains
  • User: root
  • Password: root@123

It can be changed in .env.local

Running the app

The application has been tested only in dev environemnt and thus kindly use

npm run dev

or

npm start

package.json has been updated to use next dev -p 8080 even while using npm start.

Using the UI

UI

  • Button Execute: It will delete whole data and re-genearte the data. This facilitates testing.
  • Button Click To Book: Just try to do the booking.
  • Color Code: Yellow represents unbooked seats and red represents booked seats.

Video

Video

humsafar's People

Contributors

lilbond avatar

Watchers

 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.