# Fastify Official Demo

The aim of this repository is to provide a concrete example of a Fastify application using what are considered best practices by the Fastify community.

**Prerequisites:** You need to have Node.js version 22 or higher installed.

## Getting started
Install the dependencies:
```bash
npm install
```

### Database
You can run a MySQL instance with Docker:
```bash
docker compose up
```

To run it in the background:
```bash
docker compose up -d
```

To create and update the database schema, run the migrations:
```bash
npm run db:migrate
```

To populate the database with initial data, run:
```bash
npm run db:seed
```

### TypeScript
To build the project:
```bash
npm run build
```

### Start the server
In dev mode:
```bash
npm run dev
```
Open [http://localhost:3000](http://localhost:3000) to view it in the browser.

In production mode:
```bash
npm run start
```

### Testing
To run the tests:
```bash
npm run test
```

### Standalone
`dev` and `start` leverage [fastify-cli](https://github.com/fastify/fastify-cli),
but you can run the demo as a standalone executable (see [server.ts](./src/server.ts)):
```bash
npm run standalone
```

### Linting
To check for linting errors:
```bash
npm run lint
```

To check and automatically fix linting errors:
```bash
npm run lint:fix
```

## Learn More
To learn more about Fastify, check out the [Fastify documentation](https://www.fastify.io/docs/latest/).
