A template for an API using Fastify. Written in TypeScript.
-
Clone the repo
-
Checkout into a new branch with the proper name (feature/xx, refactor/xx, chore/xx... etc.)
-
Write your code + tests (required) and/or update documentation
-
Push changes to the remote branch
-
Create a PR and notify a maintainer and enjoy your day!
- Fastify
- Encapsulation
- Routes
- Plugins
- Logging
- Validation & Serialization
- Hooks
- Swagger Specification
- JSON Schema Specification
.
├── .github # Github specific files (dependabot, workflows... etc.)
├── .husky # husky dir (Readonly)
├── data # contains data for seeding the data
├── server # contains the main files for the backend
│ ├── config # stores configurations (server, logger, env vars... etc.)
│ ├── models # Objection.js models
│ ├── plugins # Custom plugins (auth, security, cache, db... etc.)
│ ├── routes # routes must be place here and versioned
│ │ └── v1 # example version
│ │ ├── accounts # exports subroutes under '/accounts/'
│ │ │ ├── index.js # exports routes login, register and token (and others)
│ │ │ ├── login # example route, mapped to '/api/v1/accounts/login'
│ │ │ │ ├── index.js
│ │ │ │ └── spec.json # JSON schema spec of the login route
│ │ │ ├── register # example route, mapped to '/api/v1/accounts/register'
│ │ │ │ ├── index.js
│ │ │ │ └── spec.json # JSON schema spec of the register route
│ │ │ └── token # example route, mapped to '/api/v1/accounts/token'
│ │ │ ├── index.js
│ │ │ └── spec.json # JSON schema spec of the token route
│ │ └── index.js # exports accounts routes (and others)
│ └── static # contains static assets (robots.txt)
└── tests # written tests go here
- Node.js
- Optional:
docker
&docker-compose
$ yarn dev
# run in development
$ yarn start
# run in production
$ yarn lint
# check for errors
$ yarn fix
# fix any errors
$ yarn test
# run tests
Most tests are ran using our CI (GitHub Actions), but to replicate testing, run the following:
$ docker-compose -f docker-compose.ci.yml up -d
# should download the images and run them in their respective ports
$ export $(cat .env.testing) && npm run test
# inject the testing env vars and run tests
See .env.template
See LICENSE.md