Nest framework TypeScript starter repository.
In this starter you may find a working application pre configured with the PostgreSQL and JWT Auth.
Please go through Nest Docs before playing with the code.
To run the application you need to have PostgreSQL installed.
$ pnpm install# development
$ pnpm start
# watch mode
$ pnpm start:dev
# debug mode
$ pnpm start:debug
# production mode
$ pnpm start:prodWith Docker you can run it easily. Now port 3000 will be open and 9229 can be connected to debugger as well.
PostgreSQL is exposed via 5432 port.
$ docker-compose upThe project setup follows standard NestJS conventions. Checkout NestJS docs for more.
Directory structure follows module based on features.
src
├── @types # type defs goes here
├── common # common stuffs
│ ├── decorators # custom decorators
│ ├── dto # common DTOs
│ ├── exceptions # exceptions
│ ├── filters # filters for app
│ └── guards # guards for app
├── config # app config
├── database # database module
│ ├── migrations # db migrations
│ └── stubs # migration/seed stubs
└── modules # modules of app
├── auth # auth module
│ └── dto
├── health # health module
└── user # user module
├── dto
└── entitiesFor the database we use PostgreSQL. For interacting with the database, we now use Kysely, a modern, type-safe SQL query builder for TypeScript.
We now also handle migrations using kysely-ctl, the official CLI tool for Kysely. Migration files are written in TypeScript and reside in the src/database/migrations directory.
Kysely will automatically map your snake_case names into camelCase on application side. Don't use snake_case in JS side. Instead always use camelCase. Read more
Please change the database name in docker-compose file and .env
Api docs can be geneated thanks to @nestjs/swagger package. Since we are using cli plugin you can comment your Dtos with JSDocs and the documentation will be done automatically. Please follow conventions mentioned here
- Access swagger docs at http://localhost:3000/api-docs
- Access swagger.json at http://localhost:3000/api-docs-json
| Env Variable | Description | example |
|---|---|---|
| SECRET | Secret for JWT | somesecret |
| DATABASE_URL | PostgreSQL connection string | postgres://admin:admin@localhost:5432/wavezync |
| LOGGER_LEVEL | Level of logger | info |
| LOGGER_FORMAT | Format for logging | pretty or json |
You can find helpers by pressing CTRL + SHIFT + P in VSCode