Functional Details 
This application is a book store where new books can be added and bought. 
For adding a book 
    The price , Isbn , title and author are mandortory fields . WHen a new book is added to  the book_entity table  , a corresponding Product or a Copy of the book is added to the product_entity table with sold flga as false . If the Book with the same isbn is already present , only a new row for the product is added to the product_entity table. 


Technical Details:


Adding New Book
    Url : /books
    Request Format : JSON request
    Method: Post
    Sample Request :
    {
        "ISBN":12345,
        "title":"title1",
        "author":"author1",
        "price":100.00
    } 
    Response Format : JSON

Buying New Book
    Url : /Buy/{isbn}
    Method : Put
    Request Format : JSON request
    
Search book 
    
    ISBN
        Url : /isbn/{isbn number}
        Method : Get
        Response Format : JSON
        
    Author
        Url : search/author/{Partial/Full <Author name>}
        Method : Get
        Response Format : JSON

    Title
        Url : search/title/{Partial/Full <Book title>}
        Method : Get
        Response Format : JSON

Media Coverage
        Url : search/coverage/{Partial/Full title}
        Method : Get
        Response Format : JSON


=====================================================================================================================================
Package Structure
    Endpoints 
        These define the Application Endpoints for various functionalities to be provided and the the validators to perform validations of raw requests. 
        This package also contains the Domain Objects(DO)  to be transafered between client and server in any format.
    
    Business Handler
        This package contains the POJOs for business objects and the main business handler to handle to the request from endpoint .

    Data Handler
        This package contains all the persistance and  database configuration related classes.


All these separate Modules has there own POJO classes for processing the data. 
    
    End Point : ProductDO, BookDO

    Business Handler : ProductBO, BookBO

    Data Handler : ProductEntity, BookEntity

    These POJOs are responsible for the data processing wthin Module . And when data has to be transafered , it takes the following flow pattern

    client -> End Point (DOs)-> business Handler (BOs)-> Data Handler(Entities) -> database (and back to the endpoint taling the same pathway reverse)

    To aid this data transfer , every POJO has "valueOf" methods to convert the data to its own internal required format


Such modular also aid in mocking the data handler at times of Unit testing . 

======================================================================================================================================
Database Structure

This Application has 2 Entities 

    book_entity : This table contains the details about the a Book with a Unique ISBN .

        create table book_entity (isbn integer not null, author varchar(255), price decimal(19,2), title varchar(255), primary key (isbn))

    product_entity : This table contains the details about copies of the product that is actually sold or in stock. The Products that are not sold has the "sold" flag to be false.

        create table product_entity (product_id integer not null, isbn integer, sold boolean, primary key (product_id))

    The Isbn Number is the reference to the Book Entity table . and Multiple products can refer to one Isbn Number in book_entity table.


******************