Bookstore Node/Express API
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
Vic 156de8baf3 updated README.md 2 years ago
migrations updated README.md + edited orders + changed migrations 2 years ago
src updated README.md 2 years ago
.gitignore updated packages 2 years ago
LICENSE.txt init commit 2 years ago
README.md updated README.md 2 years ago
database.json small fixes 2 years ago
docker-compose.yml minor fix 2 years ago
jasmine.json added order_spec.ts 2 years ago
package.json updated README.md + edited orders + changed migrations 2 years ago
tsconfig.json small fixes 2 years ago
yarn.lock added user model and users handler 2 years ago

README.md

Shelf Project

An online storefront to showcase products. Users is able to browse an index of all products, see the specifics of a single product, and add products to an order that they can view in a cart page.

Pre-requisite

  • Add a .env file in /Shelf folder with the following :
POSTGRES_HOST=127.0.0.1
POSTGRES_DB=shelf
POSTGRES_TEST_DB="shelf_test"
POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
ENV=dev

BCRYPT_PASSWORD=speak-friend-and-enter
SALT_ROUNDS=10
TOKEN_SECRET=alohomora123!
TOKEN_SECRET_TEST=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjp7ImlkIjoxLCJmaXJzdG5hbWUiOiJKb2huIiwibGFzdG5hbWUiOiJEb2UiLCJ1c2VybmFtZSI6InRlc3QiLCJwYXNzd29yZF9kaWdlc3QiOiIkMmIkMTAkeXNkTHQuUjVqdjFJdHVzTk5NMGJNLlU0RkZvbmJRYUV2VFBsVnFhQWJqSkV3NTdzTEZwVGEifSwiaWF0IjoxNjUzMjUzODIxfQ.rdC42gcdhzAwnwwVJxmhBLVK5tvf2zONG3UcHLU6xE0`
  • Inside shelf folder mount the container: docker compose up
  • Create shelf_test database with the following commands:

docker exec -it shelf-postgres-1 /bin/bash

psql -U postgres

CREATE DATABASE shelf_test

Installation

  • Install packages dependencies: npm install
  • Run tests: npm run test
  • Run the database: npm run up and get access via http://127.0.0.1:5432
  • Launch the application: npm run start, you can access the application with this link : http://127.0.0.1:3000

Note : If needed you can reset the tables by closing the app and running the following commands:

  • npm run down
  • npm run up

Availaible endpoints

  • Products :

    HTTP Verb Endpoint CRUD
    Get /products Index
    Get /products/:id Read
    Post /products Create ( Token )
    Put /products/:id Update ( Token )
    Delete /products/:id Delete ( Token )
  • Users :

    HTTP Verb Endpoint CRUD
    Get /users, Index ( Token )
    Get /users/:id Read ( Token )
    Post /users Create
    Put /users/auth Authenticate ( Token )
    Put /users/:id Update ( Token )
    Delete /users/:id Delete ( Token )
  • Orders

    HTTP Verb Endpoint CRUD
    Get /orders, Index ( Token )
    Get /orders/:id Read
    Post /orders Create
    Post /orders/:id/products Create ( Token )
    Delete /orders/:id/products Delete ( Token )

Data shapes

  • Products :

    Column Type
    id SERIAL PRIMARY KEY
    name VARCHAR(250) NOT NULL
    price INTEGER NOT NULL
  • Users :

    Column Type
    id SERIAL PRIMARY KEY
    firstName VARCHAR(250) NOT NULL
    lastName VARCHAR(250) NOT NULL
    username VARCHAR(250) NOT NULL
    password VARCHAR(250) NOT NULL
  • Orders :

    Column Type
    id SERIAL PRIMARY KEY
    status VARCHAR(15)
    user_id INTEGER NOT NULL REFERENCES users(id)
  • Orders Products :

    Column Type
    id SERIAL PRIMARY KEY
    quantity INTEGER NOT NULL,
    order_id INTEGER NOT NULL REFERENCES orders(id)
    product_id INTEGER NOT NULL REFERENCES products(id)

Built with

  • Typescript
  • Node
  • Express
  • Dotenv
  • Docker
  • Postgres
  • Db-migrate
  • Jsonwebtoken
  • Jasmine
  • Supertest

Author

Anis Benziane.