- CRUD routes for Menu/Product/Order/User/Promotion
- find : get all instances
- findById : get an instance by id
- create : create an instance
- patch : update properties of an instance
- update : update an instance
- delete : delete an instance
- exists : check if an instance exists
- count : count the number of instance
- Access Control with roles for routes
- admin
- everyone
- owner
- Rate Limiting : 500 requests for 15 minutes per IP
- Logging
- Rotating logs
- Logs in console + in files
- Logging requests + internal logging
- Secure API
- Helmet : various HTTP headers
- Authentication : token based
- Route validation : easily customizable with Joi
- Error handling
- Easily extensible
- Create the table in the migrate file
- Create the model with the relations
- Add a controller which use the crud generic controller, overwrite functions if necessary
- Add an express router which use the crud generic router
- Environment variables used for configuring the API
- Unit tests with Mocha and Chai to test the CRUD generic controller
- Integration tests with Mocha, Chai and Supertest to test each route
- API Versioning : /api/v0/...
- Swagger : accessible through /api/v0/explorer
- ESLint
- Test coverage
- Limit, filter, include