<p align="center">
  <a href="http://nestjs.com/" target="blank"><img src="https://nestjs.com/img/logo-small.svg" width="120" alt="Nest Logo" /></a>
</p>

[circleci-image]: https://img.shields.io/circleci/build/github/nestjs/nest/master?token=abc123def456
[circleci-url]: https://circleci.com/gh/nestjs/nest

  <p align="center">A progressive <a href="http://nodejs.org" target="_blank">Node.js</a> framework for building efficient and scalable server-side applications.</p>
    <p align="center">
<a href="https://www.npmjs.com/~nestjscore" target="_blank"><img src="https://img.shields.io/npm/v/@nestjs/core.svg" alt="NPM Version" /></a>
<a href="https://www.npmjs.com/~nestjscore" target="_blank"><img src="https://img.shields.io/npm/l/@nestjs/core.svg" alt="Package License" /></a>
<a href="https://www.npmjs.com/~nestjscore" target="_blank"><img src="https://img.shields.io/npm/dm/@nestjs/common.svg" alt="NPM Downloads" /></a>
<a href="https://circleci.com/gh/nestjs/nest" target="_blank"><img src="https://img.shields.io/circleci/build/github/nestjs/nest/master" alt="CircleCI" /></a>
<a href="https://discord.gg/G7Qnnhy" target="_blank"><img src="https://img.shields.io/badge/discord-online-brightgreen.svg" alt="Discord"/></a>
<a href="https://opencollective.com/nest#backer" target="_blank"><img src="https://opencollective.com/nest/backers/badge.svg" alt="Backers on Open Collective" /></a>
<a href="https://opencollective.com/nest#sponsor" target="_blank"><img src="https://opencollective.com/nest/sponsors/badge.svg" alt="Sponsors on Open Collective" /></a>
  <a href="https://paypal.me/kamilmysliwiec" target="_blank"><img src="https://img.shields.io/badge/Donate-PayPal-ff3f59.svg" alt="Donate us"/></a>
    <a href="https://opencollective.com/nest#sponsor"  target="_blank"><img src="https://img.shields.io/badge/Support%20us-Open%20Collective-41B883.svg" alt="Support us"></a>
  <a href="https://twitter.com/nestframework" target="_blank"><img src="https://img.shields.io/twitter/follow/nestframework.svg?style=social&label=Follow" alt="Follow us on Twitter"></a>
</p>
  <!--[![Backers on Open Collective](https://opencollective.com/nest/backers/badge.svg)](https://opencollective.com/nest#backer)
  [![Sponsors on Open Collective](https://opencollective.com/nest/sponsors/badge.svg)](https://opencollective.com/nest#sponsor)-->

## Description

[Nest](https://github.com/nestjs/nest) framework TypeScript starter repository.

## Project setup

```bash
$ yarn install
```

## Compile and run the project

```bash
# development
$ yarn run start

# watch mode
$ yarn run start:dev

# production mode
$ yarn run start:prod
```

## Run tests

```bash
# unit tests
$ yarn run test

# e2e tests
$ yarn run test:e2e

# test coverage
$ yarn run test:cov
```

From the workspace root, the same checks are available as:

```bash
yarn workspace backend test
yarn workspace backend test:e2e
yarn smoke:runtime
```

Use unit tests for resolver, service, controller, and helper logic. Use e2e tests
when changes cross GraphQL/API, Nest module, auth, Prisma, or database
boundaries. Use `yarn smoke:runtime` when a change needs the real local
backend/frontend dev path.

## Backend API scenarios

Backend/API scenario validation guidance lives in `scenarios/README.md`.

Scenario checks must use local/dev-safe configuration only. Do not use
production credentials, do not mutate production data, and clean up generated
records with approved prefixes such as `e2e-`, `smoke-`, or `scenario-`.

## Local/dev auth/admin setup

Auth/admin bootstrap is intentionally one-time. The backend rejects first-admin
bootstrap after any admin exists, so a local database that already has an
unknown admin will not show a usable first-admin setup path.

For local/dev only, configure safe placeholder values in `apps/backend/.env`:

```bash
DATABASE_URL=postgres://postgres:postgres@db:5432/app
TEST_DATABASE_URL=postgres://postgres:postgres@db:5432/app_test
JWT_SECRET=replace-with-at-least-32-characters
JWT_EXPIRES_IN=7d
AUTH_BOOTSTRAP_TOKEN=replace-with-local-bootstrap-token-at-least-16-characters
LOCAL_DEV_AUTH_RESET_CONFIRM=reset-local-auth-admin
LOCAL_DEV_ADMIN_EMAIL=local-admin@example.com
LOCAL_DEV_ADMIN_PASSWORD=replace-with-local-admin-password-at-least-12-characters
LOCAL_DEV_ADMIN_NAME=Local Dev Admin
```

`TEST_DATABASE_URL` must point at a test-only database for destructive backend
e2e tests. The e2e suite refuses to reset users against the normal local/dev
database unless the configured database is explicitly test-scoped. When neither
`TEST_DATABASE_URL` nor a test-named `DATABASE_URL` is configured, the e2e suite
skips with a clear warning so routine validation remains safe and explicit.

Use `db:5432` inside the devcontainer/docker-compose network. Use
`localhost:35432` only from host-side database tools. The canonical local test
database name is `app_test`; create it on the same Postgres service before
expecting DB-backed e2e assertions to run.

From the repository root, run this check to compare the committed example with
the local env shape without printing secret values:

```bash
yarn env:check
```

For ordinary local/dev verification, use the existing configured local admin
first. Start the local app and sign in with the email/password from your local
`.env`:

```bash
yarn dev
```

Open `http://localhost:4220`, sign in, then select `Admin`. If admin access is
unavailable, check that the frontend and backend are using the same local
database and that the current-user request reports the configured admin role.

When no usable local admin exists, or when reset/seed behavior itself is being
validated, reset local auth users and seed one admin:

```bash
yarn workspace backend auth:reset-local-admin
```

This command is deliberately guarded:

- it refuses `NODE_ENV=production`.
- it requires `LOCAL_DEV_AUTH_RESET_CONFIRM=reset-local-auth-admin`.
- it only accepts local/dev database hosts: `localhost`, `127.0.0.1`, or `db`.
- it deletes users from the configured local/dev database, then creates one
  admin from `LOCAL_DEV_ADMIN_EMAIL` and `LOCAL_DEV_ADMIN_PASSWORD`.
- it verifies the password hash without printing the password.

To run the runtime smoke from a clean local/dev auth state, use the reset flag
only when reset/seed validation is intentional:

```bash
SMOKE_RESET_AUTH_STATE=1 yarn smoke:runtime
```

The reset flag has the same local/dev protections as the seed command and also
requires `LOCAL_DEV_AUTH_RESET_CONFIRM=reset-local-auth-admin`.

## Deployment

When you're ready to deploy your NestJS application to production, there are some key steps you can take to ensure it runs as efficiently as possible. Check out the [deployment documentation](https://docs.nestjs.com/deployment) for more information.

If you are looking for a cloud-based platform to deploy your NestJS application, check out [Mau](https://mau.nestjs.com), our official platform for deploying NestJS applications on AWS. Mau makes deployment straightforward and fast, requiring just a few simple steps:

```bash
$ yarn install -g @nestjs/mau
$ mau deploy
```

With Mau, you can deploy your application in just a few clicks, allowing you to focus on building features rather than managing infrastructure.

## Resources

Check out a few resources that may come in handy when working with NestJS:

- Visit the [NestJS Documentation](https://docs.nestjs.com) to learn more about the framework.
- For questions and support, please visit our [Discord channel](https://discord.gg/G7Qnnhy).
- To dive deeper and get more hands-on experience, check out our official video [courses](https://courses.nestjs.com/).
- Deploy your application to AWS with the help of [NestJS Mau](https://mau.nestjs.com) in just a few clicks.
- Visualize your application graph and interact with the NestJS application in real-time using [NestJS Devtools](https://devtools.nestjs.com).
- Need help with your project (part-time to full-time)? Check out our official [enterprise support](https://enterprise.nestjs.com).
- To stay in the loop and get updates, follow us on [X](https://x.com/nestframework) and [LinkedIn](https://linkedin.com/company/nestjs).
- Looking for a job, or have a job to offer? Check out our official [Jobs board](https://jobs.nestjs.com).

## Support

Nest is an MIT-licensed open source project. It can grow thanks to the sponsors and support by the amazing backers. If you'd like to join them, please [read more here](https://docs.nestjs.com/support).

## Stay in touch

- Author - [Kamil Myśliwiec](https://twitter.com/kammysliwiec)
- Website - [https://nestjs.com](https://nestjs.com/)
- Twitter - [@nestframework](https://twitter.com/nestframework)

## License

Nest is [MIT licensed](https://github.com/nestjs/nest/blob/master/LICENSE).
