# 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 Bun version 1.3 or higher installed.

## Getting started
Install the dependencies:
```bash
bun 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
bun run db:migrate
```

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

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

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

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

### Testing
To run the tests:
```bash
bun 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
bun run standalone
```

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

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

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