Skip to content

Latest commit

 

History

History
347 lines (277 loc) · 7.81 KB

README.md

File metadata and controls

347 lines (277 loc) · 7.81 KB

Overview

This API as been design to be used to tests the Swift Perfect framework performances.

This API is build to work with a PostgreSQL database and provide a way to interact with stores and products through an relational model.

Api Documentation

Stores | Products | Stock | Errors

Stores

URL : api/v1/stores | api/v1/stores/:id

Method : GET,POST | DELETE , PATCH GET

URL Params :     none         |  id: required

Parameters :  Limit and Offet with GET | None

Request body Structure :

// Store obj
{
   "refStore": String   //  Auto generated do not modify
   "name": String,      //  required
   "picture":String,    //  optional
   "vat":Double,        //  optional
   "currency":String,   //  optional
   "merchantkey":String //  optional
} 

Code

Code: 200 OK

Content:

// Store obj
{
   "refStore": String   //  Auto generated do not modify
   "name": String,      //  required
   "picture":String,    //  optional
   "vat":Double,        //  optional
   "currency":String,   //  optional
   "merchantkey":String //  optional
} 

OR

[
   {
      "refStore": String   //  Auto generated do not modify
      "name": String,      //  required
      "picture":String,    //  optional
      "vat":Double,        //  optional
      "currency":String,   //  optional
      "merchantkey":String //  optional
   },{
      "refStore": String   //  Auto generated do not modify
      "name": String,      //  required
      "picture":String,    //  optional
      "vat":Double,        //  optional
      "currency":String,   //  optional
      "merchantkey":String //  optional
   }
   ,...
] 

Code: 201 CREATED

Content:

// Store obj
{
   "refStore": String   //  Auto generated do not modify
   "name": String,      //  required
   "picture":String,    //  optional
   "vat":Double,        //  optional
   "currency":String,   //  optional
   "merchantkey":String //  optional
} 

Products

URL : api/v1/products | api/v1/products/:id

Method : GET,POST | DELETE , PATCH GET

URL Params :     none         |  id: required

Parameters :  Limit and Offet with GET | None

Request body Structure :

// Product obj
{
   "refproduct": String //  Auto generated do not modify
   "name": String,      //  required
   "picture":String,    //  optional
   "creationdate":Date //  Auto generated do not modify
} 

Code

Code: 200 OK

Content:

// Product obj
{
   "refproduct": String //  Auto generated do not modify
   "name": String,      //  required
   "picture":String,    //  optional
   "creationdate":Date //  Auto generated do not modify
} 

OR

[
   // Product obj
{
   "refproduct": String //  Auto generated do not modify
   "name": String,      //  required
   "picture":String,    //  optional
   "creationdate":Date //  Auto generated do not modify
},{
   "refproduct": String //  Auto generated do not modify
   "name": String,      //  required
   "picture":String,    //  optional
   "creationdate":Date //  Auto generated do not modify
} 
   ,...
] 

Code: 201 CREATED

Content:

// Product obj
{
   "refproduct": String //  Auto generated do not modify
   "name": String,      //  required
   "picture":String,    //  optional
   "creationdate":Date //  Auto generated do not modify
} 

Stock

URL : api/v1/stores/:storeId/products | api/v1/stores/:storeId/products/:productId

Method : GET,POST | DELETE , PATCH GET

URL Params :     storeId: required         |  storeId: required, productId: required

Parameters :  Limit and Offet with GET | None

Request body Structure :

// Stock obj
{
   "product_refproduct": String //  Auto generated do not modify
   "product_name": String,      //  required
   "product_picture":String,    //  optional
   "product_creationdate":Date, //  Auto generated do not modify
   "refproduct":String,
   "refstore":String,
   "quantity":Int,
   "vat":Double,
   "priceht":Double,
   "status":String,
   "creationdate":Date,
   "lastupdate":Date
} 

Code

Code: 200 OK

Content:

// Stock obj
{
   "product_refproduct": String //  Auto generated do not modify
   "product_name": String,      //  required
   "product_picture":String,    //  optional
   "product_creationdate":Date, //  Auto generated do not modify
   "refproduct":String,
   "refstore":String,
   "quantity":Int,
   "vat":Double,
   "priceht":Double,
   "status":String,
   "creationdate":Date,
   "lastupdate":Date
} 

OR

[
   // Product obj
// Stock obj
{
   "product_refproduct": String //  Auto generated do not modify
   "product_name": String,      //  required
   "product_picture":String,    //  optional
   "product_creationdate":Date, //  Auto generated do not modify
   "refproduct":String,
   "refstore":String,
   "quantity":Int,
   "vat":Double,
   "priceht":Double,
   "status":String,
   "creationdate":Date,
   "lastupdate":Date
} ,{
   "product_refproduct": String //  Auto generated do not modify
   "product_name": String,      //  required
   "product_picture":String,    //  optional
   "product_creationdate":Date, //  Auto generated do not modify
   "refproduct":String,
   "refstore":String,
   "quantity":Int,
   "vat":Double,
   "priceht":Double,
   "status":String,
   "creationdate":Date,
   "lastupdate":Date
}
   ,...
] 

Code: 201 CREATED

Content:

// Stock obj
{
   "product_refproduct": String //  Auto generated do not modify
   "product_name": String,      //  required
   "product_picture":String,    //  optional
   "product_creationdate":Date, //  Auto generated do not modify
   "refproduct":String,
   "refstore":String,
   "quantity":Int,
   "vat":Double,
   "priceht":Double,
   "status":String,
   "creationdate":Date,
   "lastupdate":Date
}

API Error

Code: 400 BAD REQUEST

Example :

  • Empty JSON Body for POST or PATCH

  • Missing required properties POST

  • Wrong limit or offset ( < 0 )

Code: 404 NOT FOUND

Example : Id not found in database

Code: 500 INTERNAL SERVER ERROR

Work with Docker

Required images :

$ docker pull postgres
$ docker pull swift

Launch database container :

$ docker run --name *containerName* -e POSTGRES_PASSWORD=*pwd* -e POSTGRES_USER=*userName* -e POSTGRES_DB=*dbName* -d postgres

Build image :

First go in the Docker file and update these lines :

ENV DATABASE_HOST=*host*  #provide your host name ( you can retrieve via docker inspect )
ENV DATABASE_PORT=*port*  #provide your host port ( postgres work often with 5432 )
ENV DATABASE_DB=*db name*
ENV DATABASE_USER=*user name*
ENV DATABASE_PASSWORD=*database password*

Then lauch this command inside the project folder. If you want to set it :

$ docker build -t *name* . 

Launch perfect container :

$ docker run -it --rm --link *databaseContainerName*:database -p 8080:8080 -v `pwd`:`pwd` -w `pwd` *perfectImageName*

Code Coverage

Coming Soon

Task Flow

  • Database connection
  • Stores routes
  • Products routes
  • Stock routes
  • Docker
  • Linux compatibility
  • API docs
  • Unit tests
  • CI
  • Code Cov