THE API HAS BEEN MOVED TO LARAVEL. See fight-food-waste/collects.
Stack: Express + MySQL via Knex (query builder).
Method | Path | Parameters | Returns |
---|---|---|---|
GET | / |
Welcome message | |
POST | auth |
{email, password} |
|
GET | /user |
User | |
GET | /user/:id |
User ID | User |
POST | /bundle |
Bundle ID | |
POST | /bundle/:id/close |
Bundle ID | |
GET | /bundle/:id |
Bundle ID | Bundle |
GET | /bundle/user/:id |
User ID | Bundle |
POST | /product |
{name, barcode, quantity, bundle_id, expiration_date} |
Product ID |
GET | /product/:id |
Product ID | Product |
GET | /product/bundle/:id |
Bundle ID | Product |
The entrypoint is bin/www
which launches app.js
.
Routes are added to the Express router by importing the files in routes/
.
Each route forwards to a controller stored in controllers/
.
Controllers validate input (GET/POST) with joi
.
Controllers can make database requests by importing knex
and the parameters in knexfile.js
.
MySQL parameters are set using environment variables. npm start
uses dotenv
preloading so these variables can be put in .env
. An example is available at .env.example
.
A ready-to-use MySQL server can be launched via docker-compose up -d
(see the docker-compose.yml
).
Helmet is an Express middleware used to set some HTTP headers to improve security.
Tests are run with mocha
and supertest
, via the files in tests/
.
When running npm test
, a bash script will run the migrations (= init the database) with the knex CLI using migrations/
. Sample data will be inserted with seeds/
.
Code coverage is automatically shown with nyc
. Linting is done with eslint
.
When pushing a commit to, a pipeline will check the linting and run the tests.