main 0c095be3c70d cached
2870 files
2.0 MB
698.9k tokens
3754 symbols
1 requests
Download .txt
Showing preview only (2,768K chars total). Download the full file or copy to clipboard to get everything.
Repository: HaiderMalik12/nestjs-fundamentals
Branch: main
Commit: 0c095be3c70d
Files: 2870
Total size: 2.0 MB

Directory structure:
gitextract_9ikg04a7/

├── module-02-Creating-REST-APIS/
│   ├── 01-Lesson-01/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── main.ts
│   │   │   └── songs/
│   │   │       └── songs.module.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   ├── 02-Lesson-02/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── rest-client.http
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── main.ts
│   │   │   └── songs/
│   │   │       ├── songs.controller.spec.ts
│   │   │       ├── songs.controller.ts
│   │   │       └── songs.module.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   └── 03-Lesson-03/
│       ├── .eslintrc.js
│       ├── .gitignore
│       ├── .prettierrc
│       ├── README.md
│       ├── nest-cli.json
│       ├── package.json
│       ├── rest-client.http
│       ├── src/
│       │   ├── app.controller.spec.ts
│       │   ├── app.controller.ts
│       │   ├── app.module.ts
│       │   ├── app.service.ts
│       │   ├── main.ts
│       │   └── songs/
│       │       ├── songs.controller.spec.ts
│       │       ├── songs.controller.ts
│       │       ├── songs.module.ts
│       │       ├── songs.service.spec.ts
│       │       └── songs.service.ts
│       ├── test/
│       │   ├── app.e2e-spec.ts
│       │   └── jest-e2e.json
│       ├── tsconfig.build.json
│       └── tsconfig.json
├── module-03-middlewares-exception-filters-pipes/
│   ├── lesson-01/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── rest-client.http
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── common/
│   │   │   │   └── middleware/
│   │   │   │       └── logger.middleware.ts
│   │   │   ├── main.ts
│   │   │   └── songs/
│   │   │       ├── songs.controller.spec.ts
│   │   │       ├── songs.controller.ts
│   │   │       ├── songs.module.ts
│   │   │       ├── songs.service.spec.ts
│   │   │       └── songs.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   ├── lesson-02/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── rest-client.http
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── common/
│   │   │   │   └── middleware/
│   │   │   │       └── logger.middleware.ts
│   │   │   ├── main.ts
│   │   │   └── songs/
│   │   │       ├── songs.controller.spec.ts
│   │   │       ├── songs.controller.ts
│   │   │       ├── songs.module.ts
│   │   │       ├── songs.service.spec.ts
│   │   │       └── songs.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   ├── lesson-03/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── rest-client.http
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── common/
│   │   │   │   └── middleware/
│   │   │   │       └── logger.middleware.ts
│   │   │   ├── main.ts
│   │   │   └── songs/
│   │   │       ├── songs.controller.spec.ts
│   │   │       ├── songs.controller.ts
│   │   │       ├── songs.module.ts
│   │   │       ├── songs.service.spec.ts
│   │   │       └── songs.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   └── lesson-04/
│       ├── .eslintrc.js
│       ├── .gitignore
│       ├── .prettierrc
│       ├── README.md
│       ├── nest-cli.json
│       ├── package.json
│       ├── rest-client.http
│       ├── src/
│       │   ├── app.controller.spec.ts
│       │   ├── app.controller.ts
│       │   ├── app.module.ts
│       │   ├── app.service.ts
│       │   ├── common/
│       │   │   └── middleware/
│       │   │       └── logger.middleware.ts
│       │   ├── main.ts
│       │   └── songs/
│       │       ├── dto/
│       │       │   └── create-song-dto.ts
│       │       ├── songs.controller.spec.ts
│       │       ├── songs.controller.ts
│       │       ├── songs.module.ts
│       │       ├── songs.service.spec.ts
│       │       └── songs.service.ts
│       ├── test/
│       │   ├── app.e2e-spec.ts
│       │   └── jest-e2e.json
│       ├── tsconfig.build.json
│       └── tsconfig.json
├── module-04-dependency-injection/
│   ├── lesson-01/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── rest-client.http
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── common/
│   │   │   │   ├── constatnts/
│   │   │   │   │   └── connection.ts
│   │   │   │   ├── middleware/
│   │   │   │   │   └── logger.middleware.ts
│   │   │   │   └── providers/
│   │   │   │       └── DevConfigService.ts
│   │   │   ├── main.ts
│   │   │   └── songs/
│   │   │       ├── dto/
│   │   │       │   └── create-song-dto.ts
│   │   │       ├── songs.controller.spec.ts
│   │   │       ├── songs.controller.ts
│   │   │       ├── songs.module.ts
│   │   │       ├── songs.service.spec.ts
│   │   │       └── songs.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   └── lesson-02/
│       ├── .eslintrc.js
│       ├── .gitignore
│       ├── .prettierrc
│       ├── README.md
│       ├── nest-cli.json
│       ├── package.json
│       ├── rest-client.http
│       ├── src/
│       │   ├── app.controller.spec.ts
│       │   ├── app.controller.ts
│       │   ├── app.module.ts
│       │   ├── app.service.ts
│       │   ├── common/
│       │   │   ├── constatnts/
│       │   │   │   └── connection.ts
│       │   │   ├── middleware/
│       │   │   │   └── logger.middleware.ts
│       │   │   └── providers/
│       │   │       └── DevConfigService.ts
│       │   ├── main.ts
│       │   └── songs/
│       │       ├── dto/
│       │       │   └── create-song-dto.ts
│       │       ├── songs.controller.spec.ts
│       │       ├── songs.controller.ts
│       │       ├── songs.module.ts
│       │       ├── songs.service.spec.ts
│       │       └── songs.service.ts
│       ├── test/
│       │   ├── app.e2e-spec.ts
│       │   └── jest-e2e.json
│       ├── tsconfig.build.json
│       └── tsconfig.json
├── module-05-connect-nestjs-to-postgress/
│   ├── lesson-01/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── rest-client.http
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── common/
│   │   │   │   ├── constatnts/
│   │   │   │   │   └── connection.ts
│   │   │   │   ├── middleware/
│   │   │   │   │   └── logger.middleware.ts
│   │   │   │   └── providers/
│   │   │   │       └── DevConfigService.ts
│   │   │   ├── main.ts
│   │   │   └── songs/
│   │   │       ├── dto/
│   │   │       │   └── create-song-dto.ts
│   │   │       ├── songs.controller.spec.ts
│   │   │       ├── songs.controller.ts
│   │   │       ├── songs.module.ts
│   │   │       ├── songs.service.spec.ts
│   │   │       └── songs.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   ├── lesson-02/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── rest-client.http
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── common/
│   │   │   │   ├── constatnts/
│   │   │   │   │   └── connection.ts
│   │   │   │   ├── middleware/
│   │   │   │   │   └── logger.middleware.ts
│   │   │   │   └── providers/
│   │   │   │       └── DevConfigService.ts
│   │   │   ├── main.ts
│   │   │   └── songs/
│   │   │       ├── dto/
│   │   │       │   └── create-song-dto.ts
│   │   │       ├── song.entity.ts
│   │   │       ├── songs.controller.spec.ts
│   │   │       ├── songs.controller.ts
│   │   │       ├── songs.module.ts
│   │   │       ├── songs.service.spec.ts
│   │   │       └── songs.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   ├── lesson-03/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── rest-client.http
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── common/
│   │   │   │   ├── constatnts/
│   │   │   │   │   └── connection.ts
│   │   │   │   ├── middleware/
│   │   │   │   │   └── logger.middleware.ts
│   │   │   │   └── providers/
│   │   │   │       └── DevConfigService.ts
│   │   │   ├── main.ts
│   │   │   └── songs/
│   │   │       ├── dto/
│   │   │       │   ├── create-song-dto.ts
│   │   │       │   └── update-song-dto.ts
│   │   │       ├── song.entity.ts
│   │   │       ├── songs.controller.spec.ts
│   │   │       ├── songs.controller.ts
│   │   │       ├── songs.module.ts
│   │   │       ├── songs.service.spec.ts
│   │   │       └── songs.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   └── lesson-04/
│       ├── .eslintrc.js
│       ├── .gitignore
│       ├── .prettierrc
│       ├── README.md
│       ├── nest-cli.json
│       ├── package.json
│       ├── rest-client.http
│       ├── src/
│       │   ├── app.controller.spec.ts
│       │   ├── app.controller.ts
│       │   ├── app.module.ts
│       │   ├── app.service.ts
│       │   ├── common/
│       │   │   ├── constatnts/
│       │   │   │   └── connection.ts
│       │   │   ├── middleware/
│       │   │   │   └── logger.middleware.ts
│       │   │   └── providers/
│       │   │       └── DevConfigService.ts
│       │   ├── main.ts
│       │   └── songs/
│       │       ├── dto/
│       │       │   ├── create-song-dto.ts
│       │       │   └── update-song-dto.ts
│       │       ├── song.entity.ts
│       │       ├── songs.controller.spec.ts
│       │       ├── songs.controller.ts
│       │       ├── songs.module.ts
│       │       ├── songs.service.spec.ts
│       │       └── songs.service.ts
│       ├── test/
│       │   ├── app.e2e-spec.ts
│       │   └── jest-e2e.json
│       ├── tsconfig.build.json
│       └── tsconfig.json
├── module-06-relations/
│   ├── lesson-01/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── rest-client.http
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── artists/
│   │   │   │   └── artist.entity.ts
│   │   │   ├── common/
│   │   │   │   ├── constatnts/
│   │   │   │   │   └── connection.ts
│   │   │   │   ├── middleware/
│   │   │   │   │   └── logger.middleware.ts
│   │   │   │   └── providers/
│   │   │   │       └── DevConfigService.ts
│   │   │   ├── main.ts
│   │   │   ├── songs/
│   │   │   │   ├── dto/
│   │   │   │   │   ├── create-song-dto.ts
│   │   │   │   │   └── update-song-dto.ts
│   │   │   │   ├── song.entity.ts
│   │   │   │   ├── songs.controller.spec.ts
│   │   │   │   ├── songs.controller.ts
│   │   │   │   ├── songs.module.ts
│   │   │   │   ├── songs.service.spec.ts
│   │   │   │   └── songs.service.ts
│   │   │   └── users/
│   │   │       └── user.entity.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   └── lesson-02-and-lesson-03/
│       ├── .eslintrc.js
│       ├── .gitignore
│       ├── .prettierrc
│       ├── README.md
│       ├── nest-cli.json
│       ├── package.json
│       ├── rest-client.http
│       ├── src/
│       │   ├── app.controller.spec.ts
│       │   ├── app.controller.ts
│       │   ├── app.module.ts
│       │   ├── app.service.ts
│       │   ├── artists/
│       │   │   └── artist.entity.ts
│       │   ├── common/
│       │   │   ├── constatnts/
│       │   │   │   └── connection.ts
│       │   │   ├── middleware/
│       │   │   │   └── logger.middleware.ts
│       │   │   └── providers/
│       │   │       └── DevConfigService.ts
│       │   ├── main.ts
│       │   ├── playlists/
│       │   │   ├── dto/
│       │   │   │   └── create-playlist.dto.ts
│       │   │   ├── playlist.entity.ts
│       │   │   ├── playlists.controller.ts
│       │   │   ├── playlists.module.ts
│       │   │   └── playlists.service.ts
│       │   ├── songs/
│       │   │   ├── dto/
│       │   │   │   ├── create-song-dto.ts
│       │   │   │   └── update-song-dto.ts
│       │   │   ├── song.entity.ts
│       │   │   ├── songs.controller.spec.ts
│       │   │   ├── songs.controller.ts
│       │   │   ├── songs.module.ts
│       │   │   ├── songs.service.spec.ts
│       │   │   └── songs.service.ts
│       │   └── users/
│       │       └── user.entity.ts
│       ├── test/
│       │   ├── app.e2e-spec.ts
│       │   └── jest-e2e.json
│       ├── tsconfig.build.json
│       └── tsconfig.json
├── module-07-authetication-and-authorization/
│   ├── lesson-01/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── rest-client.http
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── artists/
│   │   │   │   └── artist.entity.ts
│   │   │   ├── auth/
│   │   │   │   ├── auth.controller.spec.ts
│   │   │   │   ├── auth.controller.ts
│   │   │   │   ├── auth.module.ts
│   │   │   │   ├── auth.service.spec.ts
│   │   │   │   └── auth.service.ts
│   │   │   ├── common/
│   │   │   │   ├── constatnts/
│   │   │   │   │   └── connection.ts
│   │   │   │   ├── middleware/
│   │   │   │   │   └── logger.middleware.ts
│   │   │   │   └── providers/
│   │   │   │       └── DevConfigService.ts
│   │   │   ├── main.ts
│   │   │   ├── playlists/
│   │   │   │   ├── dto/
│   │   │   │   │   └── create-playlist.dto.ts
│   │   │   │   ├── playlist.entity.ts
│   │   │   │   ├── playlists.controller.ts
│   │   │   │   ├── playlists.module.ts
│   │   │   │   └── playlists.service.ts
│   │   │   ├── songs/
│   │   │   │   ├── dto/
│   │   │   │   │   ├── create-song-dto.ts
│   │   │   │   │   └── update-song-dto.ts
│   │   │   │   ├── song.entity.ts
│   │   │   │   ├── songs.controller.spec.ts
│   │   │   │   ├── songs.controller.ts
│   │   │   │   ├── songs.module.ts
│   │   │   │   ├── songs.service.spec.ts
│   │   │   │   └── songs.service.ts
│   │   │   └── users/
│   │   │       ├── dto/
│   │   │       │   └── create-user.dto.ts
│   │   │       ├── user.entity.ts
│   │   │       ├── users.module.ts
│   │   │       ├── users.service.spec.ts
│   │   │       └── users.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   ├── lesson-02/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── rest-client.http
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── artists/
│   │   │   │   └── artist.entity.ts
│   │   │   ├── auth/
│   │   │   │   ├── auth.controller.spec.ts
│   │   │   │   ├── auth.controller.ts
│   │   │   │   ├── auth.module.ts
│   │   │   │   ├── auth.service.spec.ts
│   │   │   │   ├── auth.service.ts
│   │   │   │   └── dto/
│   │   │   │       └── login.dto.ts
│   │   │   ├── common/
│   │   │   │   ├── constatnts/
│   │   │   │   │   └── connection.ts
│   │   │   │   ├── middleware/
│   │   │   │   │   └── logger.middleware.ts
│   │   │   │   └── providers/
│   │   │   │       └── DevConfigService.ts
│   │   │   ├── main.ts
│   │   │   ├── playlists/
│   │   │   │   ├── dto/
│   │   │   │   │   └── create-playlist.dto.ts
│   │   │   │   ├── playlist.entity.ts
│   │   │   │   ├── playlists.controller.ts
│   │   │   │   ├── playlists.module.ts
│   │   │   │   └── playlists.service.ts
│   │   │   ├── songs/
│   │   │   │   ├── dto/
│   │   │   │   │   ├── create-song-dto.ts
│   │   │   │   │   └── update-song-dto.ts
│   │   │   │   ├── song.entity.ts
│   │   │   │   ├── songs.controller.spec.ts
│   │   │   │   ├── songs.controller.ts
│   │   │   │   ├── songs.module.ts
│   │   │   │   ├── songs.service.spec.ts
│   │   │   │   └── songs.service.ts
│   │   │   └── users/
│   │   │       ├── dto/
│   │   │       │   └── create-user.dto.ts
│   │   │       ├── user.entity.ts
│   │   │       ├── users.module.ts
│   │   │       ├── users.service.spec.ts
│   │   │       └── users.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   ├── lesson-03/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── rest-client.http
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── artists/
│   │   │   │   └── artist.entity.ts
│   │   │   ├── auth/
│   │   │   │   ├── auth.constants.ts
│   │   │   │   ├── auth.controller.spec.ts
│   │   │   │   ├── auth.controller.ts
│   │   │   │   ├── auth.module.ts
│   │   │   │   ├── auth.service.spec.ts
│   │   │   │   ├── auth.service.ts
│   │   │   │   ├── dto/
│   │   │   │   │   └── login.dto.ts
│   │   │   │   ├── jwt-guard.ts
│   │   │   │   └── jwt-strategy.ts
│   │   │   ├── common/
│   │   │   │   ├── constatnts/
│   │   │   │   │   └── connection.ts
│   │   │   │   ├── middleware/
│   │   │   │   │   └── logger.middleware.ts
│   │   │   │   └── providers/
│   │   │   │       └── DevConfigService.ts
│   │   │   ├── main.ts
│   │   │   ├── playlists/
│   │   │   │   ├── dto/
│   │   │   │   │   └── create-playlist.dto.ts
│   │   │   │   ├── playlist.entity.ts
│   │   │   │   ├── playlists.controller.ts
│   │   │   │   ├── playlists.module.ts
│   │   │   │   └── playlists.service.ts
│   │   │   ├── songs/
│   │   │   │   ├── dto/
│   │   │   │   │   ├── create-song-dto.ts
│   │   │   │   │   └── update-song-dto.ts
│   │   │   │   ├── song.entity.ts
│   │   │   │   ├── songs.controller.spec.ts
│   │   │   │   ├── songs.controller.ts
│   │   │   │   ├── songs.module.ts
│   │   │   │   ├── songs.service.spec.ts
│   │   │   │   └── songs.service.ts
│   │   │   └── users/
│   │   │       ├── dto/
│   │   │       │   └── create-user.dto.ts
│   │   │       ├── user.entity.ts
│   │   │       ├── users.module.ts
│   │   │       ├── users.service.spec.ts
│   │   │       └── users.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   ├── lesson-04/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── rest-client.http
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── artists/
│   │   │   │   ├── artist.entity.ts
│   │   │   │   ├── artists.controller.spec.ts
│   │   │   │   ├── artists.controller.ts
│   │   │   │   ├── artists.module.ts
│   │   │   │   ├── artists.service.spec.ts
│   │   │   │   └── artists.service.ts
│   │   │   ├── auth/
│   │   │   │   ├── artists-jwt-guard.ts
│   │   │   │   ├── auth.constants.ts
│   │   │   │   ├── auth.controller.spec.ts
│   │   │   │   ├── auth.controller.ts
│   │   │   │   ├── auth.module.ts
│   │   │   │   ├── auth.service.spec.ts
│   │   │   │   ├── auth.service.ts
│   │   │   │   ├── dto/
│   │   │   │   │   └── login.dto.ts
│   │   │   │   ├── jwt-guard.ts
│   │   │   │   ├── jwt-strategy.ts
│   │   │   │   └── types.ts
│   │   │   ├── common/
│   │   │   │   ├── constatnts/
│   │   │   │   │   └── connection.ts
│   │   │   │   ├── middleware/
│   │   │   │   │   └── logger.middleware.ts
│   │   │   │   └── providers/
│   │   │   │       └── DevConfigService.ts
│   │   │   ├── main.ts
│   │   │   ├── playlists/
│   │   │   │   ├── dto/
│   │   │   │   │   └── create-playlist.dto.ts
│   │   │   │   ├── playlist.entity.ts
│   │   │   │   ├── playlists.controller.ts
│   │   │   │   ├── playlists.module.ts
│   │   │   │   └── playlists.service.ts
│   │   │   ├── songs/
│   │   │   │   ├── dto/
│   │   │   │   │   ├── create-song-dto.ts
│   │   │   │   │   └── update-song-dto.ts
│   │   │   │   ├── song.entity.ts
│   │   │   │   ├── songs.controller.spec.ts
│   │   │   │   ├── songs.controller.ts
│   │   │   │   ├── songs.module.ts
│   │   │   │   ├── songs.service.spec.ts
│   │   │   │   └── songs.service.ts
│   │   │   └── users/
│   │   │       ├── dto/
│   │   │       │   └── create-user.dto.ts
│   │   │       ├── user.entity.ts
│   │   │       ├── users.module.ts
│   │   │       ├── users.service.spec.ts
│   │   │       └── users.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   ├── lesson-05/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── rest-client.http
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── artists/
│   │   │   │   ├── artist.entity.ts
│   │   │   │   ├── artists.controller.spec.ts
│   │   │   │   ├── artists.controller.ts
│   │   │   │   ├── artists.module.ts
│   │   │   │   ├── artists.service.spec.ts
│   │   │   │   └── artists.service.ts
│   │   │   ├── auth/
│   │   │   │   ├── artists-jwt-guard.ts
│   │   │   │   ├── auth.constants.ts
│   │   │   │   ├── auth.controller.spec.ts
│   │   │   │   ├── auth.controller.ts
│   │   │   │   ├── auth.module.ts
│   │   │   │   ├── auth.service.spec.ts
│   │   │   │   ├── auth.service.ts
│   │   │   │   ├── dto/
│   │   │   │   │   ├── login.dto.ts
│   │   │   │   │   └── validate-token.dto.ts
│   │   │   │   ├── jwt-guard.ts
│   │   │   │   ├── jwt-strategy.ts
│   │   │   │   └── types.ts
│   │   │   ├── common/
│   │   │   │   ├── constatnts/
│   │   │   │   │   └── connection.ts
│   │   │   │   ├── middleware/
│   │   │   │   │   └── logger.middleware.ts
│   │   │   │   └── providers/
│   │   │   │       └── DevConfigService.ts
│   │   │   ├── main.ts
│   │   │   ├── playlists/
│   │   │   │   ├── dto/
│   │   │   │   │   └── create-playlist.dto.ts
│   │   │   │   ├── playlist.entity.ts
│   │   │   │   ├── playlists.controller.ts
│   │   │   │   ├── playlists.module.ts
│   │   │   │   └── playlists.service.ts
│   │   │   ├── songs/
│   │   │   │   ├── dto/
│   │   │   │   │   ├── create-song-dto.ts
│   │   │   │   │   └── update-song-dto.ts
│   │   │   │   ├── song.entity.ts
│   │   │   │   ├── songs.controller.spec.ts
│   │   │   │   ├── songs.controller.ts
│   │   │   │   ├── songs.module.ts
│   │   │   │   ├── songs.service.spec.ts
│   │   │   │   └── songs.service.ts
│   │   │   └── users/
│   │   │       ├── dto/
│   │   │       │   └── create-user.dto.ts
│   │   │       ├── user.entity.ts
│   │   │       ├── users.module.ts
│   │   │       ├── users.service.spec.ts
│   │   │       └── users.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   └── lesson-06/
│       ├── .eslintrc.js
│       ├── .gitignore
│       ├── .prettierrc
│       ├── README.md
│       ├── nest-cli.json
│       ├── package.json
│       ├── rest-client.http
│       ├── src/
│       │   ├── app.controller.spec.ts
│       │   ├── app.controller.ts
│       │   ├── app.module.ts
│       │   ├── app.service.ts
│       │   ├── artists/
│       │   │   ├── artist.entity.ts
│       │   │   ├── artists.controller.spec.ts
│       │   │   ├── artists.controller.ts
│       │   │   ├── artists.module.ts
│       │   │   ├── artists.service.spec.ts
│       │   │   └── artists.service.ts
│       │   ├── auth/
│       │   │   ├── api-key-strategy.ts
│       │   │   ├── artists-jwt-guard.ts
│       │   │   ├── auth.constants.ts
│       │   │   ├── auth.controller.spec.ts
│       │   │   ├── auth.controller.ts
│       │   │   ├── auth.module.ts
│       │   │   ├── auth.service.spec.ts
│       │   │   ├── auth.service.ts
│       │   │   ├── dto/
│       │   │   │   ├── login.dto.ts
│       │   │   │   └── validate-token.dto.ts
│       │   │   ├── jwt-guard.ts
│       │   │   ├── jwt-strategy.ts
│       │   │   └── types.ts
│       │   ├── common/
│       │   │   ├── constatnts/
│       │   │   │   └── connection.ts
│       │   │   ├── middleware/
│       │   │   │   └── logger.middleware.ts
│       │   │   └── providers/
│       │   │       └── DevConfigService.ts
│       │   ├── main.ts
│       │   ├── playlists/
│       │   │   ├── dto/
│       │   │   │   └── create-playlist.dto.ts
│       │   │   ├── playlist.entity.ts
│       │   │   ├── playlists.controller.ts
│       │   │   ├── playlists.module.ts
│       │   │   └── playlists.service.ts
│       │   ├── songs/
│       │   │   ├── dto/
│       │   │   │   ├── create-song-dto.ts
│       │   │   │   └── update-song-dto.ts
│       │   │   ├── song.entity.ts
│       │   │   ├── songs.controller.spec.ts
│       │   │   ├── songs.controller.ts
│       │   │   ├── songs.module.ts
│       │   │   ├── songs.service.spec.ts
│       │   │   └── songs.service.ts
│       │   └── users/
│       │       ├── dto/
│       │       │   └── create-user.dto.ts
│       │       ├── user.entity.ts
│       │       ├── users.module.ts
│       │       ├── users.service.spec.ts
│       │       └── users.service.ts
│       ├── test/
│       │   ├── app.e2e-spec.ts
│       │   └── jest-e2e.json
│       ├── tsconfig.build.json
│       └── tsconfig.json
├── module-08-migrations-seeds-debugging/
│   ├── lesson-01/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── .vscode/
│   │   │   └── launch.json
│   │   ├── README.md
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── rest-client.http
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── artists/
│   │   │   │   ├── artist.entity.ts
│   │   │   │   ├── artists.controller.spec.ts
│   │   │   │   ├── artists.controller.ts
│   │   │   │   ├── artists.module.ts
│   │   │   │   ├── artists.service.spec.ts
│   │   │   │   └── artists.service.ts
│   │   │   ├── auth/
│   │   │   │   ├── api-key-strategy.ts
│   │   │   │   ├── artists-jwt-guard.ts
│   │   │   │   ├── auth.constants.ts
│   │   │   │   ├── auth.controller.spec.ts
│   │   │   │   ├── auth.controller.ts
│   │   │   │   ├── auth.module.ts
│   │   │   │   ├── auth.service.spec.ts
│   │   │   │   ├── auth.service.ts
│   │   │   │   ├── dto/
│   │   │   │   │   ├── login.dto.ts
│   │   │   │   │   └── validate-token.dto.ts
│   │   │   │   ├── jwt-guard.ts
│   │   │   │   ├── jwt-strategy.ts
│   │   │   │   └── types.ts
│   │   │   ├── common/
│   │   │   │   ├── constatnts/
│   │   │   │   │   └── connection.ts
│   │   │   │   ├── middleware/
│   │   │   │   │   └── logger.middleware.ts
│   │   │   │   └── providers/
│   │   │   │       └── DevConfigService.ts
│   │   │   ├── main.ts
│   │   │   ├── playlists/
│   │   │   │   ├── dto/
│   │   │   │   │   └── create-playlist.dto.ts
│   │   │   │   ├── playlist.entity.ts
│   │   │   │   ├── playlists.controller.ts
│   │   │   │   ├── playlists.module.ts
│   │   │   │   └── playlists.service.ts
│   │   │   ├── songs/
│   │   │   │   ├── dto/
│   │   │   │   │   ├── create-song-dto.ts
│   │   │   │   │   └── update-song-dto.ts
│   │   │   │   ├── song.entity.ts
│   │   │   │   ├── songs.controller.spec.ts
│   │   │   │   ├── songs.controller.ts
│   │   │   │   ├── songs.module.ts
│   │   │   │   ├── songs.service.spec.ts
│   │   │   │   └── songs.service.ts
│   │   │   └── users/
│   │   │       ├── dto/
│   │   │       │   └── create-user.dto.ts
│   │   │       ├── user.entity.ts
│   │   │       ├── users.module.ts
│   │   │       ├── users.service.spec.ts
│   │   │       └── users.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   ├── lesson-02/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── .vscode/
│   │   │   └── launch.json
│   │   ├── README.md
│   │   ├── db/
│   │   │   ├── data-source.ts
│   │   │   └── migrations/
│   │   │       ├── 1685010320827-my-migrations.ts
│   │   │       └── 1685010456982-removed-phone.ts
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── rest-client.http
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── artists/
│   │   │   │   ├── artist.entity.ts
│   │   │   │   ├── artists.controller.spec.ts
│   │   │   │   ├── artists.controller.ts
│   │   │   │   ├── artists.module.ts
│   │   │   │   ├── artists.service.spec.ts
│   │   │   │   └── artists.service.ts
│   │   │   ├── auth/
│   │   │   │   ├── api-key-strategy.ts
│   │   │   │   ├── artists-jwt-guard.ts
│   │   │   │   ├── auth.constants.ts
│   │   │   │   ├── auth.controller.spec.ts
│   │   │   │   ├── auth.controller.ts
│   │   │   │   ├── auth.module.ts
│   │   │   │   ├── auth.service.spec.ts
│   │   │   │   ├── auth.service.ts
│   │   │   │   ├── dto/
│   │   │   │   │   ├── login.dto.ts
│   │   │   │   │   └── validate-token.dto.ts
│   │   │   │   ├── jwt-guard.ts
│   │   │   │   ├── jwt-strategy.ts
│   │   │   │   └── types.ts
│   │   │   ├── common/
│   │   │   │   ├── constatnts/
│   │   │   │   │   └── connection.ts
│   │   │   │   ├── middleware/
│   │   │   │   │   └── logger.middleware.ts
│   │   │   │   └── providers/
│   │   │   │       └── DevConfigService.ts
│   │   │   ├── main.ts
│   │   │   ├── playlists/
│   │   │   │   ├── dto/
│   │   │   │   │   └── create-playlist.dto.ts
│   │   │   │   ├── playlist.entity.ts
│   │   │   │   ├── playlists.controller.ts
│   │   │   │   ├── playlists.module.ts
│   │   │   │   └── playlists.service.ts
│   │   │   ├── songs/
│   │   │   │   ├── dto/
│   │   │   │   │   ├── create-song-dto.ts
│   │   │   │   │   └── update-song-dto.ts
│   │   │   │   ├── song.entity.ts
│   │   │   │   ├── songs.controller.spec.ts
│   │   │   │   ├── songs.controller.ts
│   │   │   │   ├── songs.module.ts
│   │   │   │   ├── songs.service.spec.ts
│   │   │   │   └── songs.service.ts
│   │   │   └── users/
│   │   │       ├── dto/
│   │   │       │   └── create-user.dto.ts
│   │   │       ├── user.entity.ts
│   │   │       ├── users.module.ts
│   │   │       ├── users.service.spec.ts
│   │   │       └── users.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   └── lesson-03/
│       ├── .eslintrc.js
│       ├── .gitignore
│       ├── .prettierrc
│       ├── .vscode/
│       │   └── launch.json
│       ├── README.md
│       ├── db/
│       │   ├── data-source.ts
│       │   ├── migrations/
│       │   │   ├── 1685010320827-my-migrations.ts
│       │   │   └── 1685010456982-removed-phone.ts
│       │   └── seeds/
│       │       └── seed-data.ts
│       ├── nest-cli.json
│       ├── package.json
│       ├── rest-client.http
│       ├── src/
│       │   ├── app.controller.spec.ts
│       │   ├── app.controller.ts
│       │   ├── app.module.ts
│       │   ├── app.service.ts
│       │   ├── artists/
│       │   │   ├── artist.entity.ts
│       │   │   ├── artists.controller.spec.ts
│       │   │   ├── artists.controller.ts
│       │   │   ├── artists.module.ts
│       │   │   ├── artists.service.spec.ts
│       │   │   └── artists.service.ts
│       │   ├── auth/
│       │   │   ├── api-key-strategy.ts
│       │   │   ├── artists-jwt-guard.ts
│       │   │   ├── auth.constants.ts
│       │   │   ├── auth.controller.spec.ts
│       │   │   ├── auth.controller.ts
│       │   │   ├── auth.module.ts
│       │   │   ├── auth.service.spec.ts
│       │   │   ├── auth.service.ts
│       │   │   ├── dto/
│       │   │   │   ├── login.dto.ts
│       │   │   │   └── validate-token.dto.ts
│       │   │   ├── jwt-guard.ts
│       │   │   ├── jwt-strategy.ts
│       │   │   └── types.ts
│       │   ├── common/
│       │   │   ├── constatnts/
│       │   │   │   └── connection.ts
│       │   │   ├── middleware/
│       │   │   │   └── logger.middleware.ts
│       │   │   └── providers/
│       │   │       └── DevConfigService.ts
│       │   ├── main.ts
│       │   ├── playlists/
│       │   │   ├── dto/
│       │   │   │   └── create-playlist.dto.ts
│       │   │   ├── playlist.entity.ts
│       │   │   ├── playlists.controller.ts
│       │   │   ├── playlists.module.ts
│       │   │   └── playlists.service.ts
│       │   ├── seed/
│       │   │   ├── seed.module.ts
│       │   │   └── seed.service.ts
│       │   ├── songs/
│       │   │   ├── dto/
│       │   │   │   ├── create-song-dto.ts
│       │   │   │   └── update-song-dto.ts
│       │   │   ├── song.entity.ts
│       │   │   ├── songs.controller.spec.ts
│       │   │   ├── songs.controller.ts
│       │   │   ├── songs.module.ts
│       │   │   ├── songs.service.spec.ts
│       │   │   └── songs.service.ts
│       │   └── users/
│       │       ├── dto/
│       │       │   └── create-user.dto.ts
│       │       ├── user.entity.ts
│       │       ├── users.module.ts
│       │       ├── users.service.spec.ts
│       │       └── users.service.ts
│       ├── test/
│       │   ├── app.e2e-spec.ts
│       │   └── jest-e2e.json
│       ├── tsconfig.build.json
│       └── tsconfig.json
├── module-09-application-configurations/
│   ├── lesson-01/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── .vscode/
│   │   │   └── launch.json
│   │   ├── README.md
│   │   ├── db/
│   │   │   ├── data-source.ts
│   │   │   ├── migrations/
│   │   │   │   ├── 1685010320827-my-migrations.ts
│   │   │   │   └── 1685010456982-removed-phone.ts
│   │   │   └── seeds/
│   │   │       └── seed-data.ts
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── rest-client.http
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── artists/
│   │   │   │   ├── artist.entity.ts
│   │   │   │   ├── artists.controller.spec.ts
│   │   │   │   ├── artists.controller.ts
│   │   │   │   ├── artists.module.ts
│   │   │   │   ├── artists.service.spec.ts
│   │   │   │   └── artists.service.ts
│   │   │   ├── auth/
│   │   │   │   ├── api-key-strategy.ts
│   │   │   │   ├── artists-jwt-guard.ts
│   │   │   │   ├── auth.constants.ts
│   │   │   │   ├── auth.controller.spec.ts
│   │   │   │   ├── auth.controller.ts
│   │   │   │   ├── auth.module.ts
│   │   │   │   ├── auth.service.spec.ts
│   │   │   │   ├── auth.service.ts
│   │   │   │   ├── dto/
│   │   │   │   │   ├── login.dto.ts
│   │   │   │   │   └── validate-token.dto.ts
│   │   │   │   ├── jwt-guard.ts
│   │   │   │   ├── jwt-strategy.ts
│   │   │   │   └── types.ts
│   │   │   ├── common/
│   │   │   │   ├── constatnts/
│   │   │   │   │   └── connection.ts
│   │   │   │   ├── middleware/
│   │   │   │   │   └── logger.middleware.ts
│   │   │   │   └── providers/
│   │   │   │       └── DevConfigService.ts
│   │   │   ├── config/
│   │   │   │   └── configuration.ts
│   │   │   ├── main.ts
│   │   │   ├── playlists/
│   │   │   │   ├── dto/
│   │   │   │   │   └── create-playlist.dto.ts
│   │   │   │   ├── playlist.entity.ts
│   │   │   │   ├── playlists.controller.ts
│   │   │   │   ├── playlists.module.ts
│   │   │   │   └── playlists.service.ts
│   │   │   ├── seed/
│   │   │   │   ├── seed.module.ts
│   │   │   │   └── seed.service.ts
│   │   │   ├── songs/
│   │   │   │   ├── dto/
│   │   │   │   │   ├── create-song-dto.ts
│   │   │   │   │   └── update-song-dto.ts
│   │   │   │   ├── song.entity.ts
│   │   │   │   ├── songs.controller.spec.ts
│   │   │   │   ├── songs.controller.ts
│   │   │   │   ├── songs.module.ts
│   │   │   │   ├── songs.service.spec.ts
│   │   │   │   └── songs.service.ts
│   │   │   └── users/
│   │   │       ├── dto/
│   │   │       │   └── create-user.dto.ts
│   │   │       ├── user.entity.ts
│   │   │       ├── users.module.ts
│   │   │       ├── users.service.spec.ts
│   │   │       └── users.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   ├── lesson-02/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── .vscode/
│   │   │   └── launch.json
│   │   ├── README.md
│   │   ├── db/
│   │   │   ├── data-source.ts
│   │   │   ├── migrations/
│   │   │   │   ├── 1685010320827-my-migrations.ts
│   │   │   │   └── 1685010456982-removed-phone.ts
│   │   │   └── seeds/
│   │   │       └── seed-data.ts
│   │   ├── env.validation.ts
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── rest-client.http
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── artists/
│   │   │   │   ├── artist.entity.ts
│   │   │   │   ├── artists.controller.spec.ts
│   │   │   │   ├── artists.controller.ts
│   │   │   │   ├── artists.module.ts
│   │   │   │   ├── artists.service.spec.ts
│   │   │   │   └── artists.service.ts
│   │   │   ├── auth/
│   │   │   │   ├── api-key-strategy.ts
│   │   │   │   ├── artists-jwt-guard.ts
│   │   │   │   ├── auth.constants.ts
│   │   │   │   ├── auth.controller.spec.ts
│   │   │   │   ├── auth.controller.ts
│   │   │   │   ├── auth.module.ts
│   │   │   │   ├── auth.service.spec.ts
│   │   │   │   ├── auth.service.ts
│   │   │   │   ├── dto/
│   │   │   │   │   ├── login.dto.ts
│   │   │   │   │   └── validate-token.dto.ts
│   │   │   │   ├── jwt-guard.ts
│   │   │   │   ├── jwt-strategy.ts
│   │   │   │   └── types.ts
│   │   │   ├── common/
│   │   │   │   ├── constatnts/
│   │   │   │   │   └── connection.ts
│   │   │   │   ├── middleware/
│   │   │   │   │   └── logger.middleware.ts
│   │   │   │   └── providers/
│   │   │   │       └── DevConfigService.ts
│   │   │   ├── config/
│   │   │   │   └── configuration.ts
│   │   │   ├── main.ts
│   │   │   ├── playlists/
│   │   │   │   ├── dto/
│   │   │   │   │   └── create-playlist.dto.ts
│   │   │   │   ├── playlist.entity.ts
│   │   │   │   ├── playlists.controller.ts
│   │   │   │   ├── playlists.module.ts
│   │   │   │   └── playlists.service.ts
│   │   │   ├── seed/
│   │   │   │   ├── seed.module.ts
│   │   │   │   └── seed.service.ts
│   │   │   ├── songs/
│   │   │   │   ├── dto/
│   │   │   │   │   ├── create-song-dto.ts
│   │   │   │   │   └── update-song-dto.ts
│   │   │   │   ├── song.entity.ts
│   │   │   │   ├── songs.controller.spec.ts
│   │   │   │   ├── songs.controller.ts
│   │   │   │   ├── songs.module.ts
│   │   │   │   ├── songs.service.spec.ts
│   │   │   │   └── songs.service.ts
│   │   │   └── users/
│   │   │       ├── dto/
│   │   │       │   └── create-user.dto.ts
│   │   │       ├── user.entity.ts
│   │   │       ├── users.module.ts
│   │   │       ├── users.service.spec.ts
│   │   │       └── users.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   └── lesson-03/
│       ├── .eslintrc.js
│       ├── .gitignore
│       ├── .prettierrc
│       ├── .vscode/
│       │   └── launch.json
│       ├── README.md
│       ├── db/
│       │   ├── data-source.ts
│       │   ├── migrations/
│       │   │   ├── 1685010320827-my-migrations.ts
│       │   │   └── 1685010456982-removed-phone.ts
│       │   └── seeds/
│       │       └── seed-data.ts
│       ├── env.validation.ts
│       ├── nest-cli.json
│       ├── package.json
│       ├── rest-client.http
│       ├── src/
│       │   ├── app.controller.spec.ts
│       │   ├── app.controller.ts
│       │   ├── app.module.ts
│       │   ├── app.service.ts
│       │   ├── artists/
│       │   │   ├── artist.entity.ts
│       │   │   ├── artists.controller.spec.ts
│       │   │   ├── artists.controller.ts
│       │   │   ├── artists.module.ts
│       │   │   ├── artists.service.spec.ts
│       │   │   └── artists.service.ts
│       │   ├── auth/
│       │   │   ├── api-key-strategy.ts
│       │   │   ├── artists-jwt-guard.ts
│       │   │   ├── auth.constants.ts
│       │   │   ├── auth.controller.spec.ts
│       │   │   ├── auth.controller.ts
│       │   │   ├── auth.module.ts
│       │   │   ├── auth.service.spec.ts
│       │   │   ├── auth.service.ts
│       │   │   ├── dto/
│       │   │   │   ├── login.dto.ts
│       │   │   │   └── validate-token.dto.ts
│       │   │   ├── jwt-guard.ts
│       │   │   ├── jwt-strategy.ts
│       │   │   └── types.ts
│       │   ├── common/
│       │   │   ├── constatnts/
│       │   │   │   └── connection.ts
│       │   │   ├── middleware/
│       │   │   │   └── logger.middleware.ts
│       │   │   └── providers/
│       │   │       └── DevConfigService.ts
│       │   ├── config/
│       │   │   └── configuration.ts
│       │   ├── main.ts
│       │   ├── playlists/
│       │   │   ├── dto/
│       │   │   │   └── create-playlist.dto.ts
│       │   │   ├── playlist.entity.ts
│       │   │   ├── playlists.controller.ts
│       │   │   ├── playlists.module.ts
│       │   │   └── playlists.service.ts
│       │   ├── seed/
│       │   │   ├── seed.module.ts
│       │   │   └── seed.service.ts
│       │   ├── songs/
│       │   │   ├── dto/
│       │   │   │   ├── create-song-dto.ts
│       │   │   │   └── update-song-dto.ts
│       │   │   ├── song.entity.ts
│       │   │   ├── songs.controller.spec.ts
│       │   │   ├── songs.controller.ts
│       │   │   ├── songs.module.ts
│       │   │   ├── songs.service.spec.ts
│       │   │   └── songs.service.ts
│       │   └── users/
│       │       ├── dto/
│       │       │   └── create-user.dto.ts
│       │       ├── user.entity.ts
│       │       ├── users.module.ts
│       │       ├── users.service.spec.ts
│       │       └── users.service.ts
│       ├── test/
│       │   ├── app.e2e-spec.ts
│       │   └── jest-e2e.json
│       ├── tsconfig.build.json
│       ├── tsconfig.json
│       └── webpack-hmr.config.js
├── module-10-api-documentation-with-swagger/
│   ├── lesson-01/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── .vscode/
│   │   │   └── launch.json
│   │   ├── README.md
│   │   ├── db/
│   │   │   ├── data-source.ts
│   │   │   ├── migrations/
│   │   │   │   ├── 1685010320827-my-migrations.ts
│   │   │   │   └── 1685010456982-removed-phone.ts
│   │   │   └── seeds/
│   │   │       └── seed-data.ts
│   │   ├── env.validation.ts
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── rest-client.http
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── artists/
│   │   │   │   ├── artist.entity.ts
│   │   │   │   ├── artists.controller.spec.ts
│   │   │   │   ├── artists.controller.ts
│   │   │   │   ├── artists.module.ts
│   │   │   │   ├── artists.service.spec.ts
│   │   │   │   └── artists.service.ts
│   │   │   ├── auth/
│   │   │   │   ├── api-key-strategy.ts
│   │   │   │   ├── artists-jwt-guard.ts
│   │   │   │   ├── auth.constants.ts
│   │   │   │   ├── auth.controller.spec.ts
│   │   │   │   ├── auth.controller.ts
│   │   │   │   ├── auth.module.ts
│   │   │   │   ├── auth.service.spec.ts
│   │   │   │   ├── auth.service.ts
│   │   │   │   ├── dto/
│   │   │   │   │   ├── login.dto.ts
│   │   │   │   │   └── validate-token.dto.ts
│   │   │   │   ├── jwt-guard.ts
│   │   │   │   ├── jwt-strategy.ts
│   │   │   │   └── types.ts
│   │   │   ├── common/
│   │   │   │   ├── constatnts/
│   │   │   │   │   └── connection.ts
│   │   │   │   ├── middleware/
│   │   │   │   │   └── logger.middleware.ts
│   │   │   │   └── providers/
│   │   │   │       └── DevConfigService.ts
│   │   │   ├── config/
│   │   │   │   └── configuration.ts
│   │   │   ├── main.ts
│   │   │   ├── playlists/
│   │   │   │   ├── dto/
│   │   │   │   │   └── create-playlist.dto.ts
│   │   │   │   ├── playlist.entity.ts
│   │   │   │   ├── playlists.controller.ts
│   │   │   │   ├── playlists.module.ts
│   │   │   │   └── playlists.service.ts
│   │   │   ├── seed/
│   │   │   │   ├── seed.module.ts
│   │   │   │   └── seed.service.ts
│   │   │   ├── songs/
│   │   │   │   ├── dto/
│   │   │   │   │   ├── create-song-dto.ts
│   │   │   │   │   └── update-song-dto.ts
│   │   │   │   ├── song.entity.ts
│   │   │   │   ├── songs.controller.spec.ts
│   │   │   │   ├── songs.controller.ts
│   │   │   │   ├── songs.module.ts
│   │   │   │   ├── songs.service.spec.ts
│   │   │   │   └── songs.service.ts
│   │   │   └── users/
│   │   │       ├── dto/
│   │   │       │   └── create-user.dto.ts
│   │   │       ├── user.entity.ts
│   │   │       ├── users.module.ts
│   │   │       ├── users.service.spec.ts
│   │   │       └── users.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   ├── tsconfig.json
│   │   └── webpack-hmr.config.js
│   ├── lesson-02/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── .vscode/
│   │   │   └── launch.json
│   │   ├── README.md
│   │   ├── db/
│   │   │   ├── data-source.ts
│   │   │   ├── migrations/
│   │   │   │   ├── 1685010320827-my-migrations.ts
│   │   │   │   └── 1685010456982-removed-phone.ts
│   │   │   └── seeds/
│   │   │       └── seed-data.ts
│   │   ├── env.validation.ts
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── rest-client.http
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── artists/
│   │   │   │   ├── artist.entity.ts
│   │   │   │   ├── artists.controller.spec.ts
│   │   │   │   ├── artists.controller.ts
│   │   │   │   ├── artists.module.ts
│   │   │   │   ├── artists.service.spec.ts
│   │   │   │   └── artists.service.ts
│   │   │   ├── auth/
│   │   │   │   ├── api-key-strategy.ts
│   │   │   │   ├── artists-jwt-guard.ts
│   │   │   │   ├── auth.constants.ts
│   │   │   │   ├── auth.controller.spec.ts
│   │   │   │   ├── auth.controller.ts
│   │   │   │   ├── auth.module.ts
│   │   │   │   ├── auth.service.spec.ts
│   │   │   │   ├── auth.service.ts
│   │   │   │   ├── dto/
│   │   │   │   │   ├── login.dto.ts
│   │   │   │   │   └── validate-token.dto.ts
│   │   │   │   ├── jwt-guard.ts
│   │   │   │   ├── jwt-strategy.ts
│   │   │   │   └── types.ts
│   │   │   ├── common/
│   │   │   │   ├── constatnts/
│   │   │   │   │   └── connection.ts
│   │   │   │   ├── middleware/
│   │   │   │   │   └── logger.middleware.ts
│   │   │   │   └── providers/
│   │   │   │       └── DevConfigService.ts
│   │   │   ├── config/
│   │   │   │   └── configuration.ts
│   │   │   ├── main.ts
│   │   │   ├── playlists/
│   │   │   │   ├── dto/
│   │   │   │   │   └── create-playlist.dto.ts
│   │   │   │   ├── playlist.entity.ts
│   │   │   │   ├── playlists.controller.ts
│   │   │   │   ├── playlists.module.ts
│   │   │   │   └── playlists.service.ts
│   │   │   ├── seed/
│   │   │   │   ├── seed.module.ts
│   │   │   │   └── seed.service.ts
│   │   │   ├── songs/
│   │   │   │   ├── dto/
│   │   │   │   │   ├── create-song-dto.ts
│   │   │   │   │   └── update-song-dto.ts
│   │   │   │   ├── song.entity.ts
│   │   │   │   ├── songs.controller.spec.ts
│   │   │   │   ├── songs.controller.ts
│   │   │   │   ├── songs.module.ts
│   │   │   │   ├── songs.service.spec.ts
│   │   │   │   └── songs.service.ts
│   │   │   └── users/
│   │   │       ├── dto/
│   │   │       │   └── create-user.dto.ts
│   │   │       ├── user.entity.ts
│   │   │       ├── users.module.ts
│   │   │       ├── users.service.spec.ts
│   │   │       └── users.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   ├── tsconfig.json
│   │   └── webpack-hmr.config.js
│   ├── lesson-03/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── .vscode/
│   │   │   └── launch.json
│   │   ├── README.md
│   │   ├── db/
│   │   │   ├── data-source.ts
│   │   │   ├── migrations/
│   │   │   │   ├── 1685010320827-my-migrations.ts
│   │   │   │   └── 1685010456982-removed-phone.ts
│   │   │   └── seeds/
│   │   │       └── seed-data.ts
│   │   ├── env.validation.ts
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── rest-client.http
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── artists/
│   │   │   │   ├── artist.entity.ts
│   │   │   │   ├── artists.controller.spec.ts
│   │   │   │   ├── artists.controller.ts
│   │   │   │   ├── artists.module.ts
│   │   │   │   ├── artists.service.spec.ts
│   │   │   │   └── artists.service.ts
│   │   │   ├── auth/
│   │   │   │   ├── api-key-strategy.ts
│   │   │   │   ├── artists-jwt-guard.ts
│   │   │   │   ├── auth.constants.ts
│   │   │   │   ├── auth.controller.spec.ts
│   │   │   │   ├── auth.controller.ts
│   │   │   │   ├── auth.module.ts
│   │   │   │   ├── auth.service.spec.ts
│   │   │   │   ├── auth.service.ts
│   │   │   │   ├── dto/
│   │   │   │   │   ├── login.dto.ts
│   │   │   │   │   └── validate-token.dto.ts
│   │   │   │   ├── jwt-guard.ts
│   │   │   │   ├── jwt-strategy.ts
│   │   │   │   └── types.ts
│   │   │   ├── common/
│   │   │   │   ├── constatnts/
│   │   │   │   │   └── connection.ts
│   │   │   │   ├── middleware/
│   │   │   │   │   └── logger.middleware.ts
│   │   │   │   └── providers/
│   │   │   │       └── DevConfigService.ts
│   │   │   ├── config/
│   │   │   │   └── configuration.ts
│   │   │   ├── main.ts
│   │   │   ├── playlists/
│   │   │   │   ├── dto/
│   │   │   │   │   └── create-playlist.dto.ts
│   │   │   │   ├── playlist.entity.ts
│   │   │   │   ├── playlists.controller.ts
│   │   │   │   ├── playlists.module.ts
│   │   │   │   └── playlists.service.ts
│   │   │   ├── seed/
│   │   │   │   ├── seed.module.ts
│   │   │   │   └── seed.service.ts
│   │   │   ├── songs/
│   │   │   │   ├── dto/
│   │   │   │   │   ├── create-song-dto.ts
│   │   │   │   │   └── update-song-dto.ts
│   │   │   │   ├── song.entity.ts
│   │   │   │   ├── songs.controller.spec.ts
│   │   │   │   ├── songs.controller.ts
│   │   │   │   ├── songs.module.ts
│   │   │   │   ├── songs.service.spec.ts
│   │   │   │   └── songs.service.ts
│   │   │   └── users/
│   │   │       ├── dto/
│   │   │       │   └── create-user.dto.ts
│   │   │       ├── user.entity.ts
│   │   │       ├── users.module.ts
│   │   │       ├── users.service.spec.ts
│   │   │       └── users.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   ├── tsconfig.json
│   │   └── webpack-hmr.config.js
│   └── lesson-04/
│       ├── .eslintrc.js
│       ├── .gitignore
│       ├── .prettierrc
│       ├── .vscode/
│       │   └── launch.json
│       ├── README.md
│       ├── db/
│       │   ├── data-source.ts
│       │   ├── migrations/
│       │   │   ├── 1685010320827-my-migrations.ts
│       │   │   └── 1685010456982-removed-phone.ts
│       │   └── seeds/
│       │       └── seed-data.ts
│       ├── env.validation.ts
│       ├── nest-cli.json
│       ├── package.json
│       ├── rest-client.http
│       ├── src/
│       │   ├── app.controller.spec.ts
│       │   ├── app.controller.ts
│       │   ├── app.module.ts
│       │   ├── app.service.ts
│       │   ├── artists/
│       │   │   ├── artist.entity.ts
│       │   │   ├── artists.controller.spec.ts
│       │   │   ├── artists.controller.ts
│       │   │   ├── artists.module.ts
│       │   │   ├── artists.service.spec.ts
│       │   │   └── artists.service.ts
│       │   ├── auth/
│       │   │   ├── api-key-strategy.ts
│       │   │   ├── artists-jwt-guard.ts
│       │   │   ├── auth.constants.ts
│       │   │   ├── auth.controller.spec.ts
│       │   │   ├── auth.controller.ts
│       │   │   ├── auth.module.ts
│       │   │   ├── auth.service.spec.ts
│       │   │   ├── auth.service.ts
│       │   │   ├── dto/
│       │   │   │   ├── login.dto.ts
│       │   │   │   └── validate-token.dto.ts
│       │   │   ├── jwt-guard.ts
│       │   │   ├── jwt-strategy.ts
│       │   │   └── types.ts
│       │   ├── common/
│       │   │   ├── constatnts/
│       │   │   │   └── connection.ts
│       │   │   ├── middleware/
│       │   │   │   └── logger.middleware.ts
│       │   │   └── providers/
│       │   │       └── DevConfigService.ts
│       │   ├── config/
│       │   │   └── configuration.ts
│       │   ├── main.ts
│       │   ├── playlists/
│       │   │   ├── dto/
│       │   │   │   └── create-playlist.dto.ts
│       │   │   ├── playlist.entity.ts
│       │   │   ├── playlists.controller.ts
│       │   │   ├── playlists.module.ts
│       │   │   └── playlists.service.ts
│       │   ├── seed/
│       │   │   ├── seed.module.ts
│       │   │   └── seed.service.ts
│       │   ├── songs/
│       │   │   ├── dto/
│       │   │   │   ├── create-song-dto.ts
│       │   │   │   └── update-song-dto.ts
│       │   │   ├── song.entity.ts
│       │   │   ├── songs.controller.spec.ts
│       │   │   ├── songs.controller.ts
│       │   │   ├── songs.module.ts
│       │   │   ├── songs.service.spec.ts
│       │   │   └── songs.service.ts
│       │   └── users/
│       │       ├── dto/
│       │       │   └── create-user.dto.ts
│       │       ├── user.entity.ts
│       │       ├── users.module.ts
│       │       ├── users.service.spec.ts
│       │       └── users.service.ts
│       ├── test/
│       │   ├── app.e2e-spec.ts
│       │   └── jest-e2e.json
│       ├── tsconfig.build.json
│       ├── tsconfig.json
│       └── webpack-hmr.config.js
├── module-11-mongodb/
│   ├── lesson-01/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── docker-compose.yml
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   └── main.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   ├── lesson-02-and-03/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── docker-compose.yml
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── main.ts
│   │   │   └── songs/
│   │   │       └── schemas/
│   │   │           └── song.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   ├── lesson-04/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── api.http
│   │   ├── docker-compose.yml
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── main.ts
│   │   │   └── songs/
│   │   │       ├── dto/
│   │   │       │   └── create-song-dto.ts
│   │   │       ├── schemas/
│   │   │       │   └── song.ts
│   │   │       ├── songs.controller.spec.ts
│   │   │       ├── songs.controller.ts
│   │   │       ├── songs.module.ts
│   │   │       ├── songs.service.spec.ts
│   │   │       └── songs.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   ├── lesson-05/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── api.http
│   │   ├── docker-compose.yml
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── main.ts
│   │   │   └── songs/
│   │   │       ├── dto/
│   │   │       │   └── create-song-dto.ts
│   │   │       ├── schemas/
│   │   │       │   └── song.ts
│   │   │       ├── songs.controller.spec.ts
│   │   │       ├── songs.controller.ts
│   │   │       ├── songs.module.ts
│   │   │       ├── songs.service.spec.ts
│   │   │       └── songs.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   └── lesson-06/
│       ├── .eslintrc.js
│       ├── .gitignore
│       ├── .prettierrc
│       ├── README.md
│       ├── api.http
│       ├── docker-compose.yml
│       ├── nest-cli.json
│       ├── package.json
│       ├── src/
│       │   ├── albums/
│       │   │   ├── albums.controller.ts
│       │   │   ├── albums.module.ts
│       │   │   ├── albums.service.ts
│       │   │   ├── dto/
│       │   │   │   └── create-album-dto.ts
│       │   │   └── schemas/
│       │   │       └── album.schema.ts
│       │   ├── app.controller.spec.ts
│       │   ├── app.controller.ts
│       │   ├── app.module.ts
│       │   ├── app.service.ts
│       │   ├── main.ts
│       │   └── songs/
│       │       ├── dto/
│       │       │   └── create-song-dto.ts
│       │       ├── schemas/
│       │       │   └── song.ts
│       │       ├── songs.controller.spec.ts
│       │       ├── songs.controller.ts
│       │       ├── songs.module.ts
│       │       ├── songs.service.spec.ts
│       │       └── songs.service.ts
│       ├── test/
│       │   ├── app.e2e-spec.ts
│       │   └── jest-e2e.json
│       ├── tsconfig.build.json
│       └── tsconfig.json
├── module-12-deploy-nestjs/
│   ├── deployment-finish/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── .vscode/
│   │   │   └── launch.json
│   │   ├── README.md
│   │   ├── db/
│   │   │   ├── data-source.ts
│   │   │   ├── migrations/
│   │   │   │   └── 1686309549613-init.ts
│   │   │   └── seeds/
│   │   │       └── seed-data.ts
│   │   ├── env.validation.ts
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── rest-client.http
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── artists/
│   │   │   │   ├── artist.entity.ts
│   │   │   │   ├── artists.controller.spec.ts
│   │   │   │   ├── artists.controller.ts
│   │   │   │   ├── artists.module.ts
│   │   │   │   ├── artists.service.spec.ts
│   │   │   │   └── artists.service.ts
│   │   │   ├── auth/
│   │   │   │   ├── api-key-strategy.ts
│   │   │   │   ├── artists-jwt-guard.ts
│   │   │   │   ├── auth.constants.ts
│   │   │   │   ├── auth.controller.spec.ts
│   │   │   │   ├── auth.controller.ts
│   │   │   │   ├── auth.module.ts
│   │   │   │   ├── auth.service.spec.ts
│   │   │   │   ├── auth.service.ts
│   │   │   │   ├── dto/
│   │   │   │   │   ├── login.dto.ts
│   │   │   │   │   └── validate-token.dto.ts
│   │   │   │   ├── jwt-guard.ts
│   │   │   │   ├── jwt-strategy.ts
│   │   │   │   └── types.ts
│   │   │   ├── common/
│   │   │   │   ├── constatnts/
│   │   │   │   │   └── connection.ts
│   │   │   │   ├── middleware/
│   │   │   │   │   └── logger.middleware.ts
│   │   │   │   └── providers/
│   │   │   │       └── DevConfigService.ts
│   │   │   ├── config/
│   │   │   │   └── configuration.ts
│   │   │   ├── main.ts
│   │   │   ├── playlists/
│   │   │   │   ├── dto/
│   │   │   │   │   └── create-playlist.dto.ts
│   │   │   │   ├── playlist.entity.ts
│   │   │   │   ├── playlists.controller.ts
│   │   │   │   ├── playlists.module.ts
│   │   │   │   └── playlists.service.ts
│   │   │   ├── seed/
│   │   │   │   ├── seed.module.ts
│   │   │   │   └── seed.service.ts
│   │   │   ├── songs/
│   │   │   │   ├── dto/
│   │   │   │   │   ├── create-song-dto.ts
│   │   │   │   │   └── update-song-dto.ts
│   │   │   │   ├── song.entity.ts
│   │   │   │   ├── songs.controller.spec.ts
│   │   │   │   ├── songs.controller.ts
│   │   │   │   ├── songs.module.ts
│   │   │   │   ├── songs.service.spec.ts
│   │   │   │   └── songs.service.ts
│   │   │   └── users/
│   │   │       ├── dto/
│   │   │       │   └── create-user.dto.ts
│   │   │       ├── user.entity.ts
│   │   │       ├── users.module.ts
│   │   │       ├── users.service.spec.ts
│   │   │       └── users.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   ├── tsconfig.json
│   │   └── webpack-hmr.config.js
│   └── deployment-starter/
│       ├── .eslintrc.js
│       ├── .gitignore
│       ├── .prettierrc
│       ├── .vscode/
│       │   └── launch.json
│       ├── README.md
│       ├── db/
│       │   ├── data-source.ts
│       │   ├── migrations/
│       │   │   ├── 1685010320827-my-migrations.ts
│       │   │   └── 1685010456982-removed-phone.ts
│       │   └── seeds/
│       │       └── seed-data.ts
│       ├── env.validation.ts
│       ├── nest-cli.json
│       ├── package.json
│       ├── rest-client.http
│       ├── src/
│       │   ├── app.controller.spec.ts
│       │   ├── app.controller.ts
│       │   ├── app.module.ts
│       │   ├── app.service.ts
│       │   ├── artists/
│       │   │   ├── artist.entity.ts
│       │   │   ├── artists.controller.spec.ts
│       │   │   ├── artists.controller.ts
│       │   │   ├── artists.module.ts
│       │   │   ├── artists.service.spec.ts
│       │   │   └── artists.service.ts
│       │   ├── auth/
│       │   │   ├── api-key-strategy.ts
│       │   │   ├── artists-jwt-guard.ts
│       │   │   ├── auth.constants.ts
│       │   │   ├── auth.controller.spec.ts
│       │   │   ├── auth.controller.ts
│       │   │   ├── auth.module.ts
│       │   │   ├── auth.service.spec.ts
│       │   │   ├── auth.service.ts
│       │   │   ├── dto/
│       │   │   │   ├── login.dto.ts
│       │   │   │   └── validate-token.dto.ts
│       │   │   ├── jwt-guard.ts
│       │   │   ├── jwt-strategy.ts
│       │   │   └── types.ts
│       │   ├── common/
│       │   │   ├── constatnts/
│       │   │   │   └── connection.ts
│       │   │   ├── middleware/
│       │   │   │   └── logger.middleware.ts
│       │   │   └── providers/
│       │   │       └── DevConfigService.ts
│       │   ├── config/
│       │   │   └── configuration.ts
│       │   ├── main.ts
│       │   ├── playlists/
│       │   │   ├── dto/
│       │   │   │   └── create-playlist.dto.ts
│       │   │   ├── playlist.entity.ts
│       │   │   ├── playlists.controller.ts
│       │   │   ├── playlists.module.ts
│       │   │   └── playlists.service.ts
│       │   ├── seed/
│       │   │   ├── seed.module.ts
│       │   │   └── seed.service.ts
│       │   ├── songs/
│       │   │   ├── dto/
│       │   │   │   ├── create-song-dto.ts
│       │   │   │   └── update-song-dto.ts
│       │   │   ├── song.entity.ts
│       │   │   ├── songs.controller.spec.ts
│       │   │   ├── songs.controller.ts
│       │   │   ├── songs.module.ts
│       │   │   ├── songs.service.spec.ts
│       │   │   └── songs.service.ts
│       │   └── users/
│       │       ├── dto/
│       │       │   └── create-user.dto.ts
│       │       ├── user.entity.ts
│       │       ├── users.module.ts
│       │       ├── users.service.spec.ts
│       │       └── users.service.ts
│       ├── test/
│       │   ├── app.e2e-spec.ts
│       │   └── jest-e2e.json
│       ├── tsconfig.build.json
│       ├── tsconfig.json
│       └── webpack-hmr.config.js
├── module-13-testing/
│   ├── end-to-end-testing/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── main.ts
│   │   │   └── song/
│   │   │       ├── dto/
│   │   │       │   ├── create-song-dto.ts
│   │   │       │   └── update-song-dto.ts
│   │   │       ├── song.controller.spec.ts
│   │   │       ├── song.controller.ts
│   │   │       ├── song.entity.ts
│   │   │       ├── song.module.ts
│   │   │       ├── song.service.spec.ts
│   │   │       └── song.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   ├── jest-e2e.json
│   │   │   └── songs/
│   │   │       └── songs.e2e-spec.ts
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   ├── jest-basics/
│   │   ├── .prettierrc
│   │   ├── mock-function.spec.js
│   │   ├── package.json
│   │   ├── spyon-demon.spec.js
│   │   ├── sum.js
│   │   └── sum.test.js
│   ├── unit-test-controller-and-service/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── main.ts
│   │   │   └── song/
│   │   │       ├── dto/
│   │   │       │   ├── create-song-dto.ts
│   │   │       │   └── update-song-dto.ts
│   │   │       ├── song.controller.spec.ts
│   │   │       ├── song.controller.ts
│   │   │       ├── song.entity.ts
│   │   │       ├── song.module.ts
│   │   │       ├── song.service.spec.ts
│   │   │       └── song.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   └── unit-test-setup/
│       ├── .eslintrc.js
│       ├── .gitignore
│       ├── .prettierrc
│       ├── README.md
│       ├── nest-cli.json
│       ├── package.json
│       ├── src/
│       │   ├── app.controller.spec.ts
│       │   ├── app.controller.ts
│       │   ├── app.module.ts
│       │   ├── app.service.ts
│       │   ├── main.ts
│       │   └── song/
│       │       ├── dto/
│       │       │   ├── create-song-dto.ts
│       │       │   └── update-song-dto.ts
│       │       ├── song.controller.spec.ts
│       │       ├── song.controller.ts
│       │       ├── song.entity.ts
│       │       ├── song.module.ts
│       │       ├── song.service.spec.ts
│       │       └── song.service.ts
│       ├── test/
│       │   ├── app.e2e-spec.ts
│       │   └── jest-e2e.json
│       ├── tsconfig.build.json
│       └── tsconfig.json
├── module-14-websocket/
│   ├── lesson-01/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   └── main.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   ├── lesson-02/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── lesson-01/
│   │   │   ├── .eslintrc.js
│   │   │   ├── .gitignore
│   │   │   ├── .prettierrc
│   │   │   ├── README.md
│   │   │   ├── nest-cli.json
│   │   │   ├── package.json
│   │   │   ├── src/
│   │   │   │   ├── app.controller.spec.ts
│   │   │   │   ├── app.controller.ts
│   │   │   │   ├── app.module.ts
│   │   │   │   ├── app.service.ts
│   │   │   │   └── main.ts
│   │   │   ├── test/
│   │   │   │   ├── app.e2e-spec.ts
│   │   │   │   └── jest-e2e.json
│   │   │   ├── tsconfig.build.json
│   │   │   └── tsconfig.json
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── events/
│   │   │   │   ├── events.gateway.spec.ts
│   │   │   │   ├── events.gateway.ts
│   │   │   │   └── events.module.ts
│   │   │   └── main.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   └── lesson-03/
│       ├── .eslintrc.js
│       ├── .gitignore
│       ├── .prettierrc
│       ├── .vscode/
│       │   └── settings.json
│       ├── README.md
│       ├── client/
│       │   └── index.html
│       ├── nest-cli.json
│       ├── package.json
│       ├── src/
│       │   ├── app.controller.spec.ts
│       │   ├── app.controller.ts
│       │   ├── app.module.ts
│       │   ├── app.service.ts
│       │   ├── events/
│       │   │   ├── events.gateway.spec.ts
│       │   │   ├── events.gateway.ts
│       │   │   └── events.module.ts
│       │   └── main.ts
│       ├── test/
│       │   ├── app.e2e-spec.ts
│       │   └── jest-e2e.json
│       ├── tsconfig.build.json
│       └── tsconfig.json
├── module-15-build-graphql-apis/
│   ├── lesson-01/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── generate-typings.ts
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── graphql.ts
│   │   │   ├── main.ts
│   │   │   └── song/
│   │   │       ├── dto/
│   │   │       │   ├── create-song-dto.ts
│   │   │       │   └── update-song-dto.ts
│   │   │       ├── song.controller.spec.ts
│   │   │       ├── song.controller.ts
│   │   │       ├── song.entity.ts
│   │   │       ├── song.graphql
│   │   │       ├── song.module.ts
│   │   │       ├── song.service.spec.ts
│   │   │       └── song.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   ├── lesson-02/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── generate-typings.ts
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── graphql.ts
│   │   │   ├── main.ts
│   │   │   └── song/
│   │   │       ├── dto/
│   │   │       │   ├── create-song-dto.ts
│   │   │       │   └── update-song-dto.ts
│   │   │       ├── song.controller.spec.ts
│   │   │       ├── song.controller.ts
│   │   │       ├── song.entity.ts
│   │   │       ├── song.graphql
│   │   │       ├── song.module.ts
│   │   │       ├── song.service.spec.ts
│   │   │       └── song.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   ├── lesson-03-and-04/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── generate-typings.ts
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── graphql.ts
│   │   │   ├── main.ts
│   │   │   └── song/
│   │   │       ├── dto/
│   │   │       │   ├── create-song-dto.ts
│   │   │       │   └── update-song-dto.ts
│   │   │       ├── song.controller.spec.ts
│   │   │       ├── song.controller.ts
│   │   │       ├── song.entity.ts
│   │   │       ├── song.graphql
│   │   │       ├── song.module.ts
│   │   │       ├── song.resolver.spec.ts
│   │   │       ├── song.resolver.ts
│   │   │       ├── song.service.spec.ts
│   │   │       └── song.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   └── lesson-05/
│       ├── .eslintrc.js
│       ├── .gitignore
│       ├── .prettierrc
│       ├── README.md
│       ├── generate-typings.ts
│       ├── nest-cli.json
│       ├── package.json
│       ├── src/
│       │   ├── app.controller.spec.ts
│       │   ├── app.controller.ts
│       │   ├── app.module.ts
│       │   ├── app.service.ts
│       │   ├── graphql.ts
│       │   ├── main.ts
│       │   └── song/
│       │       ├── dto/
│       │       │   ├── create-song-dto.ts
│       │       │   └── update-song-dto.ts
│       │       ├── song.controller.spec.ts
│       │       ├── song.controller.ts
│       │       ├── song.entity.ts
│       │       ├── song.graphql
│       │       ├── song.module.ts
│       │       ├── song.resolver.spec.ts
│       │       ├── song.resolver.ts
│       │       ├── song.service.spec.ts
│       │       └── song.service.ts
│       ├── test/
│       │   ├── app.e2e-spec.ts
│       │   └── jest-e2e.json
│       ├── tsconfig.build.json
│       └── tsconfig.json
├── module-16-authenticate-graphql-apis/
│   ├── lesson-01/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── .vscode/
│   │   │   └── launch.json
│   │   ├── README.md
│   │   ├── generate-typings.ts
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── rest-client.http
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── artists/
│   │   │   │   └── artist.entity.ts
│   │   │   ├── auth/
│   │   │   │   ├── auth.constants.ts
│   │   │   │   ├── auth.controller.spec.ts
│   │   │   │   ├── auth.controller.ts
│   │   │   │   ├── auth.graphql
│   │   │   │   ├── auth.module.ts
│   │   │   │   ├── auth.service.spec.ts
│   │   │   │   ├── auth.service.ts
│   │   │   │   ├── dto/
│   │   │   │   │   └── login.dto.ts
│   │   │   │   ├── jwt-guard.ts
│   │   │   │   └── jwt-strategy.ts
│   │   │   ├── common/
│   │   │   │   ├── constatnts/
│   │   │   │   │   └── connection.ts
│   │   │   │   ├── middleware/
│   │   │   │   │   └── logger.middleware.ts
│   │   │   │   └── providers/
│   │   │   │       └── DevConfigService.ts
│   │   │   ├── graphql.ts
│   │   │   ├── main.ts
│   │   │   ├── playlists/
│   │   │   │   ├── dto/
│   │   │   │   │   └── create-playlist.dto.ts
│   │   │   │   ├── playlist.entity.ts
│   │   │   │   ├── playlists.controller.ts
│   │   │   │   ├── playlists.module.ts
│   │   │   │   └── playlists.service.ts
│   │   │   ├── songs/
│   │   │   │   ├── dto/
│   │   │   │   │   ├── create-song-dto.ts
│   │   │   │   │   └── update-song-dto.ts
│   │   │   │   ├── song.entity.ts
│   │   │   │   ├── songs.controller.spec.ts
│   │   │   │   ├── songs.controller.ts
│   │   │   │   ├── songs.module.ts
│   │   │   │   ├── songs.service.spec.ts
│   │   │   │   └── songs.service.ts
│   │   │   └── users/
│   │   │       ├── dto/
│   │   │       │   └── create-user.dto.ts
│   │   │       ├── user.entity.ts
│   │   │       ├── users.module.ts
│   │   │       ├── users.service.spec.ts
│   │   │       └── users.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   ├── lesson-02/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── .vscode/
│   │   │   └── launch.json
│   │   ├── README.md
│   │   ├── generate-typings.ts
│   │   ├── lesson-01/
│   │   │   ├── .eslintrc.js
│   │   │   ├── .gitignore
│   │   │   ├── .prettierrc
│   │   │   ├── .vscode/
│   │   │   │   └── launch.json
│   │   │   ├── README.md
│   │   │   ├── generate-typings.ts
│   │   │   ├── nest-cli.json
│   │   │   ├── package.json
│   │   │   ├── rest-client.http
│   │   │   ├── src/
│   │   │   │   ├── app.controller.spec.ts
│   │   │   │   ├── app.controller.ts
│   │   │   │   ├── app.module.ts
│   │   │   │   ├── app.service.ts
│   │   │   │   ├── artists/
│   │   │   │   │   └── artist.entity.ts
│   │   │   │   ├── auth/
│   │   │   │   │   ├── auth.constants.ts
│   │   │   │   │   ├── auth.controller.spec.ts
│   │   │   │   │   ├── auth.controller.ts
│   │   │   │   │   ├── auth.graphql
│   │   │   │   │   ├── auth.module.ts
│   │   │   │   │   ├── auth.service.spec.ts
│   │   │   │   │   ├── auth.service.ts
│   │   │   │   │   ├── dto/
│   │   │   │   │   │   └── login.dto.ts
│   │   │   │   │   ├── jwt-guard.ts
│   │   │   │   │   └── jwt-strategy.ts
│   │   │   │   ├── common/
│   │   │   │   │   ├── constatnts/
│   │   │   │   │   │   └── connection.ts
│   │   │   │   │   ├── middleware/
│   │   │   │   │   │   └── logger.middleware.ts
│   │   │   │   │   └── providers/
│   │   │   │   │       └── DevConfigService.ts
│   │   │   │   ├── graphql.ts
│   │   │   │   ├── main.ts
│   │   │   │   ├── playlists/
│   │   │   │   │   ├── dto/
│   │   │   │   │   │   └── create-playlist.dto.ts
│   │   │   │   │   ├── playlist.entity.ts
│   │   │   │   │   ├── playlists.controller.ts
│   │   │   │   │   ├── playlists.module.ts
│   │   │   │   │   └── playlists.service.ts
│   │   │   │   ├── songs/
│   │   │   │   │   ├── dto/
│   │   │   │   │   │   ├── create-song-dto.ts
│   │   │   │   │   │   └── update-song-dto.ts
│   │   │   │   │   ├── song.entity.ts
│   │   │   │   │   ├── songs.controller.spec.ts
│   │   │   │   │   ├── songs.controller.ts
│   │   │   │   │   ├── songs.module.ts
│   │   │   │   │   ├── songs.service.spec.ts
│   │   │   │   │   └── songs.service.ts
│   │   │   │   └── users/
│   │   │   │       ├── dto/
│   │   │   │       │   └── create-user.dto.ts
│   │   │   │       ├── user.entity.ts
│   │   │   │       ├── users.module.ts
│   │   │   │       ├── users.service.spec.ts
│   │   │   │       └── users.service.ts
│   │   │   ├── test/
│   │   │   │   ├── app.e2e-spec.ts
│   │   │   │   └── jest-e2e.json
│   │   │   ├── tsconfig.build.json
│   │   │   └── tsconfig.json
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── rest-client.http
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── artists/
│   │   │   │   └── artist.entity.ts
│   │   │   ├── auth/
│   │   │   │   ├── auth.constants.ts
│   │   │   │   ├── auth.controller.spec.ts
│   │   │   │   ├── auth.controller.ts
│   │   │   │   ├── auth.graphql
│   │   │   │   ├── auth.module.ts
│   │   │   │   ├── auth.resolver.spec.ts
│   │   │   │   ├── auth.resolver.ts
│   │   │   │   ├── auth.service.spec.ts
│   │   │   │   ├── auth.service.ts
│   │   │   │   ├── dto/
│   │   │   │   │   └── login.dto.ts
│   │   │   │   ├── jwt-guard.ts
│   │   │   │   └── jwt-strategy.ts
│   │   │   ├── common/
│   │   │   │   ├── constatnts/
│   │   │   │   │   └── connection.ts
│   │   │   │   ├── middleware/
│   │   │   │   │   └── logger.middleware.ts
│   │   │   │   └── providers/
│   │   │   │       └── DevConfigService.ts
│   │   │   ├── graphql.ts
│   │   │   ├── main.ts
│   │   │   ├── playlists/
│   │   │   │   ├── dto/
│   │   │   │   │   └── create-playlist.dto.ts
│   │   │   │   ├── playlist.entity.ts
│   │   │   │   ├── playlists.controller.ts
│   │   │   │   ├── playlists.module.ts
│   │   │   │   └── playlists.service.ts
│   │   │   ├── songs/
│   │   │   │   ├── dto/
│   │   │   │   │   ├── create-song-dto.ts
│   │   │   │   │   └── update-song-dto.ts
│   │   │   │   ├── song.entity.ts
│   │   │   │   ├── songs.controller.spec.ts
│   │   │   │   ├── songs.controller.ts
│   │   │   │   ├── songs.module.ts
│   │   │   │   ├── songs.service.spec.ts
│   │   │   │   └── songs.service.ts
│   │   │   └── users/
│   │   │       ├── dto/
│   │   │       │   └── create-user.dto.ts
│   │   │       ├── user.entity.ts
│   │   │       ├── users.module.ts
│   │   │       ├── users.service.spec.ts
│   │   │       └── users.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   └── lesson-03/
│       ├── .eslintrc.js
│       ├── .gitignore
│       ├── .prettierrc
│       ├── .vscode/
│       │   └── launch.json
│       ├── README.md
│       ├── generate-typings.ts
│       ├── lesson-02/
│       │   ├── .eslintrc.js
│       │   ├── .gitignore
│       │   ├── .prettierrc
│       │   ├── .vscode/
│       │   │   └── launch.json
│       │   ├── README.md
│       │   ├── generate-typings.ts
│       │   ├── lesson-01/
│       │   │   ├── .eslintrc.js
│       │   │   ├── .gitignore
│       │   │   ├── .prettierrc
│       │   │   ├── .vscode/
│       │   │   │   └── launch.json
│       │   │   ├── README.md
│       │   │   ├── generate-typings.ts
│       │   │   ├── nest-cli.json
│       │   │   ├── package.json
│       │   │   ├── rest-client.http
│       │   │   ├── src/
│       │   │   │   ├── app.controller.spec.ts
│       │   │   │   ├── app.controller.ts
│       │   │   │   ├── app.module.ts
│       │   │   │   ├── app.service.ts
│       │   │   │   ├── artists/
│       │   │   │   │   └── artist.entity.ts
│       │   │   │   ├── auth/
│       │   │   │   │   ├── auth.constants.ts
│       │   │   │   │   ├── auth.controller.spec.ts
│       │   │   │   │   ├── auth.controller.ts
│       │   │   │   │   ├── auth.graphql
│       │   │   │   │   ├── auth.module.ts
│       │   │   │   │   ├── auth.service.spec.ts
│       │   │   │   │   ├── auth.service.ts
│       │   │   │   │   ├── dto/
│       │   │   │   │   │   └── login.dto.ts
│       │   │   │   │   ├── jwt-guard.ts
│       │   │   │   │   └── jwt-strategy.ts
│       │   │   │   ├── common/
│       │   │   │   │   ├── constatnts/
│       │   │   │   │   │   └── connection.ts
│       │   │   │   │   ├── middleware/
│       │   │   │   │   │   └── logger.middleware.ts
│       │   │   │   │   └── providers/
│       │   │   │   │       └── DevConfigService.ts
│       │   │   │   ├── graphql.ts
│       │   │   │   ├── main.ts
│       │   │   │   ├── playlists/
│       │   │   │   │   ├── dto/
│       │   │   │   │   │   └── create-playlist.dto.ts
│       │   │   │   │   ├── playlist.entity.ts
│       │   │   │   │   ├── playlists.controller.ts
│       │   │   │   │   ├── playlists.module.ts
│       │   │   │   │   └── playlists.service.ts
│       │   │   │   ├── songs/
│       │   │   │   │   ├── dto/
│       │   │   │   │   │   ├── create-song-dto.ts
│       │   │   │   │   │   └── update-song-dto.ts
│       │   │   │   │   ├── song.entity.ts
│       │   │   │   │   ├── songs.controller.spec.ts
│       │   │   │   │   ├── songs.controller.ts
│       │   │   │   │   ├── songs.module.ts
│       │   │   │   │   ├── songs.service.spec.ts
│       │   │   │   │   └── songs.service.ts
│       │   │   │   └── users/
│       │   │   │       ├── dto/
│       │   │   │       │   └── create-user.dto.ts
│       │   │   │       ├── user.entity.ts
│       │   │   │       ├── users.module.ts
│       │   │   │       ├── users.service.spec.ts
│       │   │   │       └── users.service.ts
│       │   │   ├── test/
│       │   │   │   ├── app.e2e-spec.ts
│       │   │   │   └── jest-e2e.json
│       │   │   ├── tsconfig.build.json
│       │   │   └── tsconfig.json
│       │   ├── nest-cli.json
│       │   ├── package.json
│       │   ├── rest-client.http
│       │   ├── src/
│       │   │   ├── app.controller.spec.ts
│       │   │   ├── app.controller.ts
│       │   │   ├── app.module.ts
│       │   │   ├── app.service.ts
│       │   │   ├── artists/
│       │   │   │   └── artist.entity.ts
│       │   │   ├── auth/
│       │   │   │   ├── auth.constants.ts
│       │   │   │   ├── auth.controller.spec.ts
│       │   │   │   ├── auth.controller.ts
│       │   │   │   ├── auth.graphql
│       │   │   │   ├── auth.module.ts
│       │   │   │   ├── auth.resolver.spec.ts
│       │   │   │   ├── auth.resolver.ts
│       │   │   │   ├── auth.service.spec.ts
│       │   │   │   ├── auth.service.ts
│       │   │   │   ├── dto/
│       │   │   │   │   └── login.dto.ts
│       │   │   │   ├── jwt-guard.ts
│       │   │   │   └── jwt-strategy.ts
│       │   │   ├── common/
│       │   │   │   ├── constatnts/
│       │   │   │   │   └── connection.ts
│       │   │   │   ├── middleware/
│       │   │   │   │   └── logger.middleware.ts
│       │   │   │   └── providers/
│       │   │   │       └── DevConfigService.ts
│       │   │   ├── graphql.ts
│       │   │   ├── main.ts
│       │   │   ├── playlists/
│       │   │   │   ├── dto/
│       │   │   │   │   └── create-playlist.dto.ts
│       │   │   │   ├── playlist.entity.ts
│       │   │   │   ├── playlists.controller.ts
│       │   │   │   ├── playlists.module.ts
│       │   │   │   └── playlists.service.ts
│       │   │   ├── songs/
│       │   │   │   ├── dto/
│       │   │   │   │   ├── create-song-dto.ts
│       │   │   │   │   └── update-song-dto.ts
│       │   │   │   ├── song.entity.ts
│       │   │   │   ├── songs.controller.spec.ts
│       │   │   │   ├── songs.controller.ts
│       │   │   │   ├── songs.module.ts
│       │   │   │   ├── songs.service.spec.ts
│       │   │   │   └── songs.service.ts
│       │   │   └── users/
│       │   │       ├── dto/
│       │   │       │   └── create-user.dto.ts
│       │   │       ├── user.entity.ts
│       │   │       ├── users.module.ts
│       │   │       ├── users.service.spec.ts
│       │   │       └── users.service.ts
│       │   ├── test/
│       │   │   ├── app.e2e-spec.ts
│       │   │   └── jest-e2e.json
│       │   ├── tsconfig.build.json
│       │   └── tsconfig.json
│       ├── nest-cli.json
│       ├── package.json
│       ├── rest-client.http
│       ├── src/
│       │   ├── app.controller.spec.ts
│       │   ├── app.controller.ts
│       │   ├── app.module.ts
│       │   ├── app.service.ts
│       │   ├── artists/
│       │   │   └── artist.entity.ts
│       │   ├── auth/
│       │   │   ├── auth.constants.ts
│       │   │   ├── auth.controller.spec.ts
│       │   │   ├── auth.controller.ts
│       │   │   ├── auth.graphql
│       │   │   ├── auth.module.ts
│       │   │   ├── auth.resolver.spec.ts
│       │   │   ├── auth.resolver.ts
│       │   │   ├── auth.service.spec.ts
│       │   │   ├── auth.service.ts
│       │   │   ├── dto/
│       │   │   │   └── login.dto.ts
│       │   │   ├── gql-auth-guard.ts
│       │   │   ├── jwt-guard.ts
│       │   │   └── jwt-strategy.ts
│       │   ├── common/
│       │   │   ├── constatnts/
│       │   │   │   └── connection.ts
│       │   │   ├── middleware/
│       │   │   │   └── logger.middleware.ts
│       │   │   └── providers/
│       │   │       └── DevConfigService.ts
│       │   ├── graphql.ts
│       │   ├── main.ts
│       │   ├── playlists/
│       │   │   ├── dto/
│       │   │   │   └── create-playlist.dto.ts
│       │   │   ├── playlist.entity.ts
│       │   │   ├── playlists.controller.ts
│       │   │   ├── playlists.module.ts
│       │   │   └── playlists.service.ts
│       │   ├── songs/
│       │   │   ├── dto/
│       │   │   │   ├── create-song-dto.ts
│       │   │   │   └── update-song-dto.ts
│       │   │   ├── song.entity.ts
│       │   │   ├── songs.controller.spec.ts
│       │   │   ├── songs.controller.ts
│       │   │   ├── songs.module.ts
│       │   │   ├── songs.service.spec.ts
│       │   │   └── songs.service.ts
│       │   └── users/
│       │       ├── dto/
│       │       │   └── create-user.dto.ts
│       │       ├── user.entity.ts
│       │       ├── users.module.ts
│       │       ├── users.service.spec.ts
│       │       └── users.service.ts
│       ├── test/
│       │   ├── app.e2e-spec.ts
│       │   └── jest-e2e.json
│       ├── tsconfig.build.json
│       └── tsconfig.json
├── module-17-subscription/
│   ├── subscription-finish/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── generate-typings.ts
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── graphql.ts
│   │   │   ├── main.ts
│   │   │   └── song/
│   │   │       ├── dto/
│   │   │       │   ├── create-song-dto.ts
│   │   │       │   └── update-song-dto.ts
│   │   │       ├── song.controller.spec.ts
│   │   │       ├── song.controller.ts
│   │   │       ├── song.entity.ts
│   │   │       ├── song.graphql
│   │   │       ├── song.module.ts
│   │   │       ├── song.resolver.spec.ts
│   │   │       ├── song.resolver.ts
│   │   │       ├── song.service.spec.ts
│   │   │       └── song.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   └── subscription-starter/
│       ├── .eslintrc.js
│       ├── .gitignore
│       ├── .prettierrc
│       ├── README.md
│       ├── generate-typings.ts
│       ├── nest-cli.json
│       ├── package.json
│       ├── src/
│       │   ├── app.controller.spec.ts
│       │   ├── app.controller.ts
│       │   ├── app.module.ts
│       │   ├── app.service.ts
│       │   ├── graphql.ts
│       │   ├── main.ts
│       │   └── song/
│       │       ├── dto/
│       │       │   ├── create-song-dto.ts
│       │       │   └── update-song-dto.ts
│       │       ├── song.controller.spec.ts
│       │       ├── song.controller.ts
│       │       ├── song.entity.ts
│       │       ├── song.graphql
│       │       ├── song.module.ts
│       │       ├── song.resolver.spec.ts
│       │       ├── song.resolver.ts
│       │       ├── song.service.spec.ts
│       │       └── song.service.ts
│       ├── test/
│       │   ├── app.e2e-spec.ts
│       │   └── jest-e2e.json
│       ├── tsconfig.build.json
│       └── tsconfig.json
├── module-18-testing-graphql-apis/
│   ├── lesson-01/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── generate-typings.ts
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── graphql.ts
│   │   │   ├── main.ts
│   │   │   └── song/
│   │   │       ├── dto/
│   │   │       │   ├── create-song-dto.ts
│   │   │       │   └── update-song-dto.ts
│   │   │       ├── song.controller.spec.ts
│   │   │       ├── song.controller.ts
│   │   │       ├── song.entity.ts
│   │   │       ├── song.graphql
│   │   │       ├── song.module.ts
│   │   │       ├── song.resolver.spec.ts
│   │   │       ├── song.resolver.ts
│   │   │       ├── song.service.spec.ts
│   │   │       └── song.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   └── lesson-02/
│       ├── .eslintrc.js
│       ├── .gitignore
│       ├── .prettierrc
│       ├── README.md
│       ├── generate-typings.ts
│       ├── nest-cli.json
│       ├── package.json
│       ├── src/
│       │   ├── app.controller.spec.ts
│       │   ├── app.controller.ts
│       │   ├── app.module.ts
│       │   ├── app.service.ts
│       │   ├── graphql.ts
│       │   ├── main.ts
│       │   └── song/
│       │       ├── dto/
│       │       │   ├── create-song-dto.ts
│       │       │   └── update-song-dto.ts
│       │       ├── song.controller.spec.ts
│       │       ├── song.controller.ts
│       │       ├── song.entity.ts
│       │       ├── song.graphql
│       │       ├── song.module.ts
│       │       ├── song.resolver.spec.ts
│       │       ├── song.resolver.ts
│       │       ├── song.service.spec.ts
│       │       └── song.service.ts
│       ├── test/
│       │   ├── app.e2e-spec.ts
│       │   ├── jest-e2e.json
│       │   └── song/
│       │       └── song.e2e-spec.ts
│       ├── tsconfig.build.json
│       └── tsconfig.json
├── module-19-graphql-advanced-concepts/
│   ├── lesson-01/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── generate-typings.ts
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── graphql.ts
│   │   │   ├── main.ts
│   │   │   └── song/
│   │   │       ├── dto/
│   │   │       │   ├── create-song-dto.ts
│   │   │       │   └── update-song-dto.ts
│   │   │       ├── song.controller.spec.ts
│   │   │       ├── song.controller.ts
│   │   │       ├── song.entity.ts
│   │   │       ├── song.graphql
│   │   │       ├── song.module.ts
│   │   │       ├── song.resolver.spec.ts
│   │   │       ├── song.resolver.ts
│   │   │       ├── song.service.spec.ts
│   │   │       └── song.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   ├── jest-e2e.json
│   │   │   └── song/
│   │   │       └── song.e2e-spec.ts
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   ├── lesson-02-dataloaders/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── app.module.ts
│   │   │   ├── main.ts
│   │   │   ├── posts/
│   │   │   │   ├── post.entity.ts
│   │   │   │   ├── posts.module.ts
│   │   │   │   ├── posts.resolver.ts
│   │   │   │   └── posts.service.ts
│   │   │   ├── schema.gql
│   │   │   ├── users/
│   │   │   │   ├── user.entity.ts
│   │   │   │   ├── users.loader.ts
│   │   │   │   ├── users.module.ts
│   │   │   │   ├── users.resolver.ts
│   │   │   │   └── users.service.ts
│   │   │   └── util.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   └── lesson-03-fetching-external-api/
│       ├── .eslintrc.js
│       ├── .gitignore
│       ├── .prettierrc
│       ├── README.md
│       ├── api.http
│       ├── docker-compose.yml
│       ├── generate-typings.ts
│       ├── nest-cli.json
│       ├── package.json
│       ├── src/
│       │   ├── album/
│       │   │   ├── album.controller.ts
│       │   │   ├── album.module.ts
│       │   │   ├── album.service.ts
│       │   │   ├── dto/
│       │   │   │   └── create-album-dto.ts
│       │   │   └── schemas/
│       │   │       └── album.schema.ts
│       │   ├── app.controller.spec.ts
│       │   ├── app.controller.ts
│       │   ├── app.module.ts
│       │   ├── app.service.ts
│       │   ├── graphql.ts
│       │   ├── main.ts
│       │   ├── product/
│       │   │   ├── product-owner.resolver.ts
│       │   │   ├── product.graphql
│       │   │   ├── product.module.ts
│       │   │   ├── product.resolver.spec.ts
│       │   │   ├── product.resolver.ts
│       │   │   ├── product.service.spec.ts
│       │   │   ├── product.service.ts
│       │   │   └── schemas/
│       │   │       └── product.schema.ts
│       │   ├── songs/
│       │   │   ├── dto/
│       │   │   │   └── create-song-dto.ts
│       │   │   ├── schemas/
│       │   │   │   └── song.schema.ts
│       │   │   ├── songs.controller.spec.ts
│       │   │   ├── songs.controller.ts
│       │   │   ├── songs.module.ts
│       │   │   ├── songs.service.spec.ts
│       │   │   └── songs.service.ts
│       │   ├── todo/
│       │   │   ├── todo.graphql
│       │   │   ├── todo.module.ts
│       │   │   ├── todo.resolver.spec.ts
│       │   │   ├── todo.resolver.ts
│       │   │   ├── todo.service.spec.ts
│       │   │   └── todo.service.ts
│       │   └── user/
│       │       ├── schemas/
│       │       │   └── user.schema.ts
│       │       ├── user.module.ts
│       │       └── user.service.ts
│       ├── test/
│       │   ├── app.e2e-spec.ts
│       │   └── jest-e2e.json
│       ├── tsconfig.build.json
│       └── tsconfig.json
├── module-20-prisma-integration/
│   ├── lesson-01/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── prisma/
│   │   │   └── schema.prisma
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   └── main.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   ├── jest-e2e.json
│   │   │   └── song/
│   │   │       └── song.e2e-spec.ts
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   ├── lesson-02/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── prisma/
│   │   │   ├── migrations/
│   │   │   │   ├── 20230730081110_init/
│   │   │   │   │   └── migration.sql
│   │   │   │   └── migration_lock.toml
│   │   │   └── schema.prisma
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   └── main.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   ├── jest-e2e.json
│   │   │   └── song/
│   │   │       └── song.e2e-spec.ts
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   ├── lesson-03/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── prisma/
│   │   │   ├── migrations/
│   │   │   │   ├── 20230730081110_init/
│   │   │   │   │   └── migration.sql
│   │   │   │   └── migration_lock.toml
│   │   │   └── schema.prisma
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── main.ts
│   │   │   └── prisma.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   ├── jest-e2e.json
│   │   │   └── song/
│   │   │       └── song.e2e-spec.ts
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   ├── lesson-04-and-05/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── http-client.http
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── prisma/
│   │   │   ├── migrations/
│   │   │   │   ├── 20230730081110_init/
│   │   │   │   │   └── migration.sql
│   │   │   │   └── migration_lock.toml
│   │   │   └── schema.prisma
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── main.ts
│   │   │   ├── prisma.service.ts
│   │   │   └── songs/
│   │   │       ├── dto/
│   │   │       │   ├── create-song.dto.ts
│   │   │       │   └── update-song.dto.ts
│   │   │       ├── entities/
│   │   │       │   └── song.entity.ts
│   │   │       ├── songs.controller.spec.ts
│   │   │       ├── songs.controller.ts
│   │   │       ├── songs.module.ts
│   │   │       ├── songs.service.spec.ts
│   │   │       └── songs.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   ├── jest-e2e.json
│   │   │   └── song/
│   │   │       └── song.e2e-spec.ts
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   ├── lesson-06/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── http-client.http
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── prisma/
│   │   │   ├── migrations/
│   │   │   │   ├── 20230730081110_init/
│   │   │   │   │   └── migration.sql
│   │   │   │   ├── 20230801082432_add_artists/
│   │   │   │   │   └── migration.sql
│   │   │   │   └── migration_lock.toml
│   │   │   └── schema.prisma
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── artists/
│   │   │   │   ├── artists.controller.spec.ts
│   │   │   │   ├── artists.controller.ts
│   │   │   │   ├── artists.module.ts
│   │   │   │   ├── artists.service.spec.ts
│   │   │   │   ├── artists.service.ts
│   │   │   │   └── dto/
│   │   │   │       ├── create-artist.dto.ts
│   │   │   │       └── update-artist.dto.ts
│   │   │   ├── main.ts
│   │   │   ├── prisma.service.ts
│   │   │   └── songs/
│   │   │       ├── dto/
│   │   │       │   ├── create-song.dto.ts
│   │   │       │   └── update-song.dto.ts
│   │   │       ├── songs.controller.spec.ts
│   │   │       ├── songs.controller.ts
│   │   │       ├── songs.module.ts
│   │   │       ├── songs.service.spec.ts
│   │   │       └── songs.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   ├── jest-e2e.json
│   │   │   └── song/
│   │   │       └── song.e2e-spec.ts
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   ├── lesson-07/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── http-client.http
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── prisma/
│   │   │   ├── migrations/
│   │   │   │   ├── 20230730081110_init/
│   │   │   │   │   └── migration.sql
│   │   │   │   ├── 20230801082432_add_artists/
│   │   │   │   │   └── migration.sql
│   │   │   │   ├── 20230801091013_one_to_one/
│   │   │   │   │   └── migration.sql
│   │   │   │   └── migration_lock.toml
│   │   │   └── schema.prisma
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── artists/
│   │   │   │   ├── artists.controller.spec.ts
│   │   │   │   ├── artists.controller.ts
│   │   │   │   ├── artists.module.ts
│   │   │   │   ├── artists.service.spec.ts
│   │   │   │   ├── artists.service.ts
│   │   │   │   └── dto/
│   │   │   │       ├── create-artist.dto.ts
│   │   │   │       └── update-artist.dto.ts
│   │   │   ├── main.ts
│   │   │   ├── prisma.service.ts
│   │   │   ├── songs/
│   │   │   │   ├── dto/
│   │   │   │   │   ├── create-song.dto.ts
│   │   │   │   │   └── update-song.dto.ts
│   │   │   │   ├── songs.controller.spec.ts
│   │   │   │   ├── songs.controller.ts
│   │   │   │   ├── songs.module.ts
│   │   │   │   ├── songs.service.spec.ts
│   │   │   │   └── songs.service.ts
│   │   │   └── users/
│   │   │       ├── dto/
│   │   │       │   ├── create-user.dto.ts
│   │   │       │   └── update-user.dto.ts
│   │   │       ├── users.controller.spec.ts
│   │   │       ├── users.controller.ts
│   │   │       ├── users.module.ts
│   │   │       ├── users.service.spec.ts
│   │   │       └── users.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   ├── jest-e2e.json
│   │   │   └── song/
│   │   │       └── song.e2e-spec.ts
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   ├── lesson-08/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── http-client.http
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── prisma/
│   │   │   ├── migrations/
│   │   │   │   ├── 20230730081110_init/
│   │   │   │   │   └── migration.sql
│   │   │   │   ├── 20230801082432_add_artists/
│   │   │   │   │   └── migration.sql
│   │   │   │   ├── 20230801091013_one_to_one/
│   │   │   │   │   └── migration.sql
│   │   │   │   ├── 20230802074328_many_to_many/
│   │   │   │   │   └── migration.sql
│   │   │   │   ├── 20230802081727_nested_queries/
│   │   │   │   │   └── migration.sql
│   │   │   │   ├── 20230802083400_default_value_for_type/
│   │   │   │   │   └── migration.sql
│   │   │   │   └── migration_lock.toml
│   │   │   └── schema.prisma
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── applications/
│   │   │   │   ├── applications.controller.spec.ts
│   │   │   │   ├── applications.controller.ts
│   │   │   │   ├── applications.module.ts
│   │   │   │   ├── applications.service.spec.ts
│   │   │   │   ├── applications.service.ts
│   │   │   │   └── dto/
│   │   │   │       ├── create-application.dto.ts
│   │   │   │       └── update-application.dto.ts
│   │   │   ├── artists/
│   │   │   │   ├── artists.controller.spec.ts
│   │   │   │   ├── artists.controller.ts
│   │   │   │   ├── artists.module.ts
│   │   │   │   ├── artists.service.spec.ts
│   │   │   │   ├── artists.service.ts
│   │   │   │   └── dto/
│   │   │   │       ├── create-artist.dto.ts
│   │   │   │       └── update-artist.dto.ts
│   │   │   ├── main.ts
│   │   │   ├── posts/
│   │   │   │   ├── dto/
│   │   │   │   │   ├── create-post.dto.ts
│   │   │   │   │   └── update-post.dto.ts
│   │   │   │   ├── posts.controller.spec.ts
│   │   │   │   ├── posts.controller.ts
│   │   │   │   ├── posts.module.ts
│   │   │   │   ├── posts.service.spec.ts
│   │   │   │   └── posts.service.ts
│   │   │   ├── prisma.service.ts
│   │   │   ├── songs/
│   │   │   │   ├── dto/
│   │   │   │   │   ├── create-song.dto.ts
│   │   │   │   │   └── update-song.dto.ts
│   │   │   │   ├── songs.controller.spec.ts
│   │   │   │   ├── songs.controller.ts
│   │   │   │   ├── songs.module.ts
│   │   │   │   ├── songs.service.spec.ts
│   │   │   │   └── songs.service.ts
│   │   │   └── users/
│   │   │       ├── dto/
│   │   │       │   ├── create-user.dto.ts
│   │   │       │   └── update-user.dto.ts
│   │   │       ├── users.controller.spec.ts
│   │   │       ├── users.controller.ts
│   │   │       ├── users.module.ts
│   │   │       ├── users.service.spec.ts
│   │   │       └── users.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   ├── jest-e2e.json
│   │   │   └── song/
│   │   │       └── song.e2e-spec.ts
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   ├── lesson-09/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── http-client.http
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── prisma/
│   │   │   ├── migrations/
│   │   │   │   ├── 20230730081110_init/
│   │   │   │   │   └── migration.sql
│   │   │   │   ├── 20230801082432_add_artists/
│   │   │   │   │   └── migration.sql
│   │   │   │   ├── 20230801091013_one_to_one/
│   │   │   │   │   └── migration.sql
│   │   │   │   ├── 20230802074328_many_to_many/
│   │   │   │   │   └── migration.sql
│   │   │   │   ├── 20230802081727_nested_queries/
│   │   │   │   │   └── migration.sql
│   │   │   │   ├── 20230802083400_default_value_for_type/
│   │   │   │   │   └── migration.sql
│   │   │   │   └── migration_lock.toml
│   │   │   └── schema.prisma
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── applications/
│   │   │   │   ├── applications.controller.spec.ts
│   │   │   │   ├── applications.controller.ts
│   │   │   │   ├── applications.module.ts
│   │   │   │   ├── applications.service.spec.ts
│   │   │   │   ├── applications.service.ts
│   │   │   │   └── dto/
│   │   │   │       ├── create-application.dto.ts
│   │   │   │       └── update-application.dto.ts
│   │   │   ├── artists/
│   │   │   │   ├── artists.controller.spec.ts
│   │   │   │   ├── artists.controller.ts
│   │   │   │   ├── artists.module.ts
│   │   │   │   ├── artists.service.spec.ts
│   │   │   │   ├── artists.service.ts
│   │   │   │   └── dto/
│   │   │   │       ├── create-artist.dto.ts
│   │   │   │       └── update-artist.dto.ts
│   │   │   ├── main.ts
│   │   │   ├── posts/
│   │   │   │   ├── dto/
│   │   │   │   │   ├── create-post.dto.ts
│   │   │   │   │   └── update-post.dto.ts
│   │   │   │   ├── posts.controller.spec.ts
│   │   │   │   ├── posts.controller.ts
│   │   │   │   ├── posts.module.ts
│   │   │   │   ├── posts.service.spec.ts
│   │   │   │   └── posts.service.ts
│   │   │   ├── prisma.service.ts
│   │   │   ├── songs/
│   │   │   │   ├── dto/
│   │   │   │   │   ├── create-song.dto.ts
│   │   │   │   │   └── update-song.dto.ts
│   │   │   │   ├── songs.controller.spec.ts
│   │   │   │   ├── songs.controller.ts
│   │   │   │   ├── songs.module.ts
│   │   │   │   ├── songs.service.spec.ts
│   │   │   │   └── songs.service.ts
│   │   │   └── users/
│   │   │       ├── dto/
│   │   │       │   ├── create-user.dto.ts
│   │   │       │   └── update-user.dto.ts
│   │   │       ├── users.controller.spec.ts
│   │   │       ├── users.controller.ts
│   │   │       ├── users.module.ts
│   │   │       ├── users.service.spec.ts
│   │   │       └── users.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   ├── jest-e2e.json
│   │   │   └── song/
│   │   │       └── song.e2e-spec.ts
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   └── lesson-11-interactive-transactions/
│       ├── .eslintrc.js
│       ├── .gitignore
│       ├── .prettierrc
│       ├── README.md
│       ├── http-client.http
│       ├── nest-cli.json
│       ├── package.json
│       ├── prisma/
│       │   ├── migrations/
│       │   │   ├── 20230730081110_init/
│       │   │   │   └── migration.sql
│       │   │   ├── 20230801082432_add_artists/
│       │   │   │   └── migration.sql
│       │   │   ├── 20230801091013_one_to_one/
│       │   │   │   └── migration.sql
│       │   │   ├── 20230802074328_many_to_many/
│       │   │   │   └── migration.sql
│       │   │   ├── 20230802081727_nested_queries/
│       │   │   │   └── migration.sql
│       │   │   ├── 20230802083400_default_value_for_type/
│       │   │   │   └── migration.sql
│       │   │   ├── 20230804090722_add_account/
│       │   │   │   └── migration.sql
│       │   │   └── migration_lock.toml
│       │   └── schema.prisma
│       ├── src/
│       │   ├── accounts/
│       │   │   ├── accounts.controller.spec.ts
│       │   │   ├── accounts.controller.ts
│       │   │   ├── accounts.module.ts
│       │   │   ├── accounts.service.spec.ts
│       │   │   ├── accounts.service.ts
│       │   │   └── dto/
│       │   │       ├── create-account.dto.ts
│       │   │       ├── transfer-account.dto.ts
│       │   │       └── update-account.dto.ts
│       │   ├── app.controller.spec.ts
│       │   ├── app.controller.ts
│       │   ├── app.module.ts
│       │   ├── app.service.ts
│       │   ├── applications/
│       │   │   ├── applications.controller.spec.ts
│       │   │   ├── applications.controller.ts
│       │   │   ├── applications.module.ts
│       │   │   ├── applications.service.spec.ts
│       │   │   ├── applications.service.ts
│       │   │   └── dto/
│       │   │       ├── create-application.dto.ts
│       │   │       └── update-application.dto.ts
│       │   ├── artists/
│       │   │   ├── artists.controller.spec.ts
│       │   │   ├── artists.controller.ts
│       │   │   ├── artists.module.ts
│       │   │   ├── artists.service.spec.ts
│       │   │   ├── artists.service.ts
│       │   │   └── dto/
│       │   │       ├── create-artist.dto.ts
│       │   │       └── update-artist.dto.ts
│       │   ├── main.ts
│       │   ├── posts/
│       │   │   ├── dto/
│       │   │   │   ├── create-post.dto.ts
│       │   │   │   └── update-post.dto.ts
│       │   │   ├── posts.controller.spec.ts
│       │   │   ├── posts.controller.ts
│       │   │   ├── posts.module.ts
│       │   │   ├── posts.service.spec.ts
│       │   │   └── posts.service.ts
│       │   ├── prisma.service.ts
│       │   ├── songs/
│       │   │   ├── dto/
│       │   │   │   ├── create-song.dto.ts
│       │   │   │   └── update-song.dto.ts
│       │   │   ├── songs.controller.spec.ts
│       │   │   ├── songs.controller.ts
│       │   │   ├── songs.module.ts
│       │   │   ├── songs.service.spec.ts
│       │   │   └── songs.service.ts
│       │   └── users/
│       │       ├── dto/
│       │       │   ├── create-user.dto.ts
│       │       │   └── update-user.dto.ts
│       │       ├── users.controller.spec.ts
│       │       ├── users.controller.ts
│       │       ├── users.module.ts
│       │       ├── users.service.spec.ts
│       │       └── users.service.ts
│       ├── test/
│       │   ├── app.e2e-spec.ts
│       │   ├── jest-e2e.json
│       │   └── song/
│       │       └── song.e2e-spec.ts
│       ├── tsconfig.build.json
│       └── tsconfig.json
└── module-21-nestjs-advanced-concepts/
    ├── 0-starter/
    │   ├── .eslintrc.js
    │   ├── .gitignore
    │   ├── .prettierrc
    │   ├── README.md
    │   ├── nest-cli.json
    │   ├── package.json
    │   ├── src/
    │   │   ├── app.controller.spec.ts
    │   │   ├── app.controller.ts
    │   │   ├── app.module.ts
    │   │   ├── app.service.ts
    │   │   └── main.ts
    │   ├── test/
    │   │   ├── app.e2e-spec.ts
    │   │   └── jest-e2e.json
    │   ├── tsconfig.build.json
    │   └── tsconfig.json
    ├── lesson-01-file-upload/
    │   ├── .eslintrc.js
    │   ├── .gitignore
    │   ├── .prettierrc
    │   ├── README.md
    │   ├── nest-cli.json
    │   ├── package.json
    │   ├── src/
    │   │   ├── app.controller.spec.ts
    │   │   ├── app.controller.ts
    │   │   ├── app.module.ts
    │   │   ├── app.service.ts
    │   │   └── main.ts
    │   ├── test/
    │   │   ├── app.e2e-spec.ts
    │   │   └── jest-e2e.json
    │   ├── tsconfig.build.json
    │   └── tsconfig.json
    ├── lesson-02-custom-decorator/
    │   ├── .eslintrc.js
    │   ├── .gitignore
    │   ├── .prettierrc
    │   ├── README.md
    │   ├── http-client.http
    │   ├── nest-cli.json
    │   ├── package.json
    │   ├── src/
    │   │   ├── app.controller.spec.ts
    │   │   ├── app.controller.ts
    │   │   ├── app.module.ts
    │   │   ├── app.service.ts
    │   │   ├── main.ts
    │   │   ├── user.decorator.ts
    │   │   └── user.entity.ts
    │   ├── test/
    │   │   ├── app.e2e-spec.ts
    │   │   └── jest-e2e.json
    │   ├── tsconfig.build.json
    │   └── tsconfig.json
    ├── lesson-03-Task-scheduling/
    │   ├── .eslintrc.js
    │   ├── .gitignore
    │   ├── .prettierrc
    │   ├── README.md
    │   ├── http-client.http
    │   ├── nest-cli.json
    │   ├── package.json
    │   ├── src/
    │   │   ├── app.controller.spec.ts
    │   │   ├── app.controller.ts
    │   │   ├── app.module.ts
    │   │   ├── app.service.ts
    │   │   ├── main.ts
    │   │   ├── task/
    │   │   │   ├── task.service.spec.ts
    │   │   │   └── task.service.ts
    │   │   ├── user.decorator.ts
    │   │   └── user.entity.ts
    │   ├── test/
    │   │   ├── app.e2e-spec.ts
    │   │   └── jest-e2e.json
    │   ├── tsconfig.build.json
    │   └── tsconfig.json
    ├── lesson-04-cookies/
    │   ├── .eslintrc.js
    │   ├── .gitignore
    │   ├── .prettierrc
    │   ├── README.md
    │   ├── http-client.http
    │   ├── nest-cli.json
    │   ├── package.json
    │   ├── src/
    │   │   ├── app.controller.spec.ts
    │   │   ├── app.controller.ts
    │   │   ├── app.module.ts
    │   │   ├── app.service.ts
    │   │   ├── main.ts
    │   │   ├── task/
    │   │   │   ├── task.service.spec.ts
    │   │   │   └── task.service.ts
    │   │   ├── user.decorator.ts
    │   │   └── user.entity.ts
    │   ├── test/
    │   │   ├── app.e2e-spec.ts
    │   │   └── jest-e2e.json
    │   ├── tsconfig.build.json
    │   └── tsconfig.json
    ├── lesson-05-queues/
    │   ├── .eslintrc.js
    │   ├── .gitignore
    │   ├── .prettierrc
    │   ├── README.md
    │   ├── http-client.http
    │   ├── nest-cli.json
    │   ├── package.json
    │   ├── src/
    │   │   ├── app.controller.spec.ts
    │   │   ├── app.controller.ts
    │   │   ├── app.module.ts
    │   │   ├── app.service.ts
    │   │   ├── main.ts
    │   │   ├── task/
    │   │   │   ├── task.service.spec.ts
    │   │   │   └── task.service.ts
    │   │   ├── user.decorator.ts
    │   │   └── user.entity.ts
    │   ├── test/
    │   │   ├── app.e2e-spec.ts
    │   │   └── jest-e2e.json
    │   ├── tsconfig.build.json
    │   └── tsconfig.json
    ├── lesson-06-event-emitter/
    │   ├── .eslintrc.js
    │   ├── .gitignore
    │   ├── .prettierrc
    │   ├── README.md
    │   ├── docker-compose.yml
    │   ├── http-client.http
    │   ├── nest-cli.json
    │   ├── package.json
    │   ├── src/
    │   │   ├── app.controller.spec.ts
    │   │   ├── app.controller.ts
    │   │   ├── app.module.ts
    │   │   ├── app.service.ts
    │   │   ├── audio/
    │   │   │   ├── audio-converted-listener.ts
    │   │   │   ├── audio.controller.spec.ts
    │   │   │   ├── audio.controller.ts
    │   │   │   ├── audio.module.ts
    │   │   │   ├── audio.processor.ts
    │   │   │   └── events/
    │   │   │       └── audio-converted-event.ts
    │   │   ├── main.ts
    │   │   ├── task/
    │   │   │   ├── task.service.spec.ts
    │   │   │   └── task.service.ts
    │   │   ├── user.decorator.ts
    │   │   └── user.entity.ts
    │   ├── test/
    │   │   ├── app.e2e-spec.ts
    │   │   └── jest-e2e.json
    │   ├── tsconfig.build.json
    │   └── tsconfig.json
    ├── lesson-07-streaming/
    │   ├── .eslintrc.js
    │   ├── .gitignore
    │   ├── .prettierrc
    │   ├── README.md
    │   ├── docker-compose.yml
    │   ├── http-client.http
    │   ├── nest-cli.json
    │   ├── package.json
    │   ├── src/
    │   │   ├── app.controller.spec.ts
    │   │   ├── app.controller.ts
    │   │   ├── app.module.ts
    │   │   ├── app.service.ts
    │   │   ├── audio/
    │   │   │   ├── audio-converted-listener.ts
    │   │   │   ├── audio.controller.spec.ts
    │   │   │   ├── audio.controller.ts
    │   │   │   ├── audio.module.ts
    │   │   │   ├── audio.processor.ts
    │   │   │   └── events/
    │   │   │       └── audio-converted-event.ts
    │   │   ├── file/
    │   │   │   ├── file.controller.spec.ts
    │   │   │   └── file.controller.ts
    │   │   ├── main.ts
    │   │   ├── task/
    │   │   │   ├── task.service.spec.ts
    │   │   │   └── task.service.ts
    │   │   ├── user.decorator.ts
    │   │   └── user.entity.ts
    │   ├── test/
    │   │   ├── app.e2e-spec.ts
    │   │   └── jest-e2e.json
    │   ├── tsconfig.build.json
    │   └── tsconfig.json
    └── lesson-08-session/
        ├── .eslintrc.js
        ├── .gitignore
        ├── .prettierrc
        ├── README.md
        ├── docker-compose.yml
        ├── http-client.http
        ├── nest-cli.json
        ├── package.json
        ├── src/
        │   ├── app.controller.spec.ts
        │   ├── app.controller.ts
        │   ├── app.module.ts
        │   ├── app.service.ts
        │   ├── audio/
        │   │   ├── audio-converted-listener.ts
        │   │   ├── audio.controller.spec.ts
        │   │   ├── audio.controller.ts
        │   │   ├── audio.module.ts
        │   │   ├── audio.processor.ts
        │   │   └── events/
        │   │       └── audio-converted-event.ts
        │   ├── file/
        │   │   ├── file.controller.spec.ts
        │   │   └── file.controller.ts
        │   ├── main.ts
        │   ├── task/
        │   │   ├── task.service.spec.ts
        │   │   └── task.service.ts
        │   ├── user.decorator.ts
        │   └── user.entity.ts
        ├── test/
        │   ├── app.e2e-spec.ts
        │   └── jest-e2e.json
        ├── tsconfig.build.json
        └── tsconfig.json

================================================
FILE CONTENTS
================================================

================================================
FILE: module-02-Creating-REST-APIS/01-Lesson-01/.eslintrc.js
================================================
module.exports = {
  parser: '@typescript-eslint/parser',
  parserOptions: {
    project: 'tsconfig.json',
    tsconfigRootDir: __dirname,
    sourceType: 'module',
  },
  plugins: ['@typescript-eslint/eslint-plugin'],
  extends: [
    'plugin:@typescript-eslint/recommended',
    'plugin:prettier/recommended',
  ],
  root: true,
  env: {
    node: true,
    jest: true,
  },
  ignorePatterns: ['.eslintrc.js'],
  rules: {
    '@typescript-eslint/interface-name-prefix': 'off',
    '@typescript-eslint/explicit-function-return-type': 'off',
    '@typescript-eslint/explicit-module-boundary-types': 'off',
    '@typescript-eslint/no-explicit-any': 'off',
  },
};


================================================
FILE: module-02-Creating-REST-APIS/01-Lesson-01/.gitignore
================================================
# compiled output
/dist
/node_modules

# Logs
logs
*.log
npm-debug.log*
pnpm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*

# OS
.DS_Store

# Tests
/coverage
/.nyc_output

# IDEs and editors
/.idea
.project
.classpath
.c9/
*.launch
.settings/
*.sublime-workspace

# IDE - VSCode
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json

================================================
FILE: module-02-Creating-REST-APIS/01-Lesson-01/.prettierrc
================================================
{
  "singleQuote": true,
  "trailingComma": "all"
}

================================================
FILE: module-02-Creating-REST-APIS/01-Lesson-01/README.md
================================================
<p align="center">
  <a href="http://nestjs.com/" target="blank"><img src="https://nestjs.com/img/logo-small.svg" width="200" 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://coveralls.io/github/nestjs/nest?branch=master" target="_blank"><img src="https://coveralls.io/repos/github/nestjs/nest/badge.svg?branch=master#9" alt="Coverage" /></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"/></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"></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.

## Installation

```bash
$ npm install
```

## Running the app

```bash
# development
$ npm run start

# watch mode
$ npm run start:dev

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

## Test

```bash
# unit tests
$ npm run test

# e2e tests
$ npm run test:e2e

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

## 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://kamilmysliwiec.com)
- Website - [https://nestjs.com](https://nestjs.com/)
- Twitter - [@nestframework](https://twitter.com/nestframework)

## License

Nest is [MIT licensed](LICENSE).


================================================
FILE: module-02-Creating-REST-APIS/01-Lesson-01/nest-cli.json
================================================
{
  "$schema": "https://json.schemastore.org/nest-cli",
  "collection": "@nestjs/schematics",
  "sourceRoot": "src",
  "compilerOptions": {
    "deleteOutDir": true
  }
}


================================================
FILE: module-02-Creating-REST-APIS/01-Lesson-01/package.json
================================================
{
  "name": "n-fundamentals-pro",
  "version": "0.0.1",
  "description": "",
  "author": "",
  "private": true,
  "license": "UNLICENSED",
  "scripts": {
    "build": "nest build",
    "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
    "start": "nest start",
    "start:dev": "nest start --watch",
    "start:debug": "nest start --debug --watch",
    "start:prod": "node dist/main",
    "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
    "test": "jest",
    "test:watch": "jest --watch",
    "test:cov": "jest --coverage",
    "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
    "test:e2e": "jest --config ./test/jest-e2e.json"
  },
  "dependencies": {
    "@nestjs/common": "^9.0.0",
    "@nestjs/core": "^9.0.0",
    "@nestjs/platform-express": "^9.0.0",
    "reflect-metadata": "^0.1.13",
    "rxjs": "^7.2.0"
  },
  "devDependencies": {
    "@nestjs/cli": "^9.0.0",
    "@nestjs/schematics": "^9.0.0",
    "@nestjs/testing": "^9.0.0",
    "@types/express": "^4.17.13",
    "@types/jest": "29.2.4",
    "@types/node": "18.11.18",
    "@types/supertest": "^2.0.11",
    "@typescript-eslint/eslint-plugin": "^5.0.0",
    "@typescript-eslint/parser": "^5.0.0",
    "eslint": "^8.0.1",
    "eslint-config-prettier": "^8.3.0",
    "eslint-plugin-prettier": "^4.0.0",
    "jest": "29.3.1",
    "prettier": "^2.3.2",
    "source-map-support": "^0.5.20",
    "supertest": "^6.1.3",
    "ts-jest": "29.0.3",
    "ts-loader": "^9.2.3",
    "ts-node": "^10.0.0",
    "tsconfig-paths": "4.1.1",
    "typescript": "^4.7.4"
  },
  "jest": {
    "moduleFileExtensions": [
      "js",
      "json",
      "ts"
    ],
    "rootDir": "src",
    "testRegex": ".*\\.spec\\.ts$",
    "transform": {
      "^.+\\.(t|j)s$": "ts-jest"
    },
    "collectCoverageFrom": [
      "**/*.(t|j)s"
    ],
    "coverageDirectory": "../coverage",
    "testEnvironment": "node"
  }
}


================================================
FILE: module-02-Creating-REST-APIS/01-Lesson-01/src/app.controller.spec.ts
================================================
import { Test, TestingModule } from '@nestjs/testing';
import { AppController } from './app.controller';
import { AppService } from './app.service';

describe('AppController', () => {
  let appController: AppController;

  beforeEach(async () => {
    const app: TestingModule = await Test.createTestingModule({
      controllers: [AppController],
      providers: [AppService],
    }).compile();

    appController = app.get<AppController>(AppController);
  });

  describe('root', () => {
    it('should return "Hello World!"', () => {
      expect(appController.getHello()).toBe('Hello World!');
    });
  });
});


================================================
FILE: module-02-Creating-REST-APIS/01-Lesson-01/src/app.controller.ts
================================================
import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';

@Controller()
export class AppController {
  constructor(private readonly appService: AppService) {}

  @Get()
  getHello(): string {
    return this.appService.getHello();
  }
}


================================================
FILE: module-02-Creating-REST-APIS/01-Lesson-01/src/app.module.ts
================================================
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { SongsModule } from './songs/songs.module';

@Module({
  imports: [SongsModule],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}


================================================
FILE: module-02-Creating-REST-APIS/01-Lesson-01/src/app.service.ts
================================================
import { Injectable } from '@nestjs/common';

@Injectable()
export class AppService {
  getHello(): string {
    return 'Hello I am learning Nest.js Fundamentals';
  }
}


================================================
FILE: module-02-Creating-REST-APIS/01-Lesson-01/src/main.ts
================================================
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  await app.listen(3000);
}
bootstrap();


================================================
FILE: module-02-Creating-REST-APIS/01-Lesson-01/src/songs/songs.module.ts
================================================
import { Module } from '@nestjs/common';

@Module({})
export class SongsModule {}


================================================
FILE: module-02-Creating-REST-APIS/01-Lesson-01/test/app.e2e-spec.ts
================================================
import { Test, TestingModule } from '@nestjs/testing';
import { INestApplication } from '@nestjs/common';
import * as request from 'supertest';
import { AppModule } from './../src/app.module';

describe('AppController (e2e)', () => {
  let app: INestApplication;

  beforeEach(async () => {
    const moduleFixture: TestingModule = await Test.createTestingModule({
      imports: [AppModule],
    }).compile();

    app = moduleFixture.createNestApplication();
    await app.init();
  });

  it('/ (GET)', () => {
    return request(app.getHttpServer())
      .get('/')
      .expect(200)
      .expect('Hello World!');
  });
});


================================================
FILE: module-02-Creating-REST-APIS/01-Lesson-01/test/jest-e2e.json
================================================
{
  "moduleFileExtensions": ["js", "json", "ts"],
  "rootDir": ".",
  "testEnvironment": "node",
  "testRegex": ".e2e-spec.ts$",
  "transform": {
    "^.+\\.(t|j)s$": "ts-jest"
  }
}


================================================
FILE: module-02-Creating-REST-APIS/01-Lesson-01/tsconfig.build.json
================================================
{
  "extends": "./tsconfig.json",
  "exclude": ["node_modules", "test", "dist", "**/*spec.ts"]
}


================================================
FILE: module-02-Creating-REST-APIS/01-Lesson-01/tsconfig.json
================================================
{
  "compilerOptions": {
    "module": "commonjs",
    "declaration": true,
    "removeComments": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "allowSyntheticDefaultImports": true,
    "target": "es2017",
    "sourceMap": true,
    "outDir": "./dist",
    "baseUrl": "./",
    "incremental": true,
    "skipLibCheck": true,
    "strictNullChecks": false,
    "noImplicitAny": false,
    "strictBindCallApply": false,
    "forceConsistentCasingInFileNames": false,
    "noFallthroughCasesInSwitch": false
  }
}


================================================
FILE: module-02-Creating-REST-APIS/02-Lesson-02/.eslintrc.js
================================================
module.exports = {
  parser: '@typescript-eslint/parser',
  parserOptions: {
    project: 'tsconfig.json',
    tsconfigRootDir: __dirname,
    sourceType: 'module',
  },
  plugins: ['@typescript-eslint/eslint-plugin'],
  extends: [
    'plugin:@typescript-eslint/recommended',
    'plugin:prettier/recommended',
  ],
  root: true,
  env: {
    node: true,
    jest: true,
  },
  ignorePatterns: ['.eslintrc.js'],
  rules: {
    '@typescript-eslint/interface-name-prefix': 'off',
    '@typescript-eslint/explicit-function-return-type': 'off',
    '@typescript-eslint/explicit-module-boundary-types': 'off',
    '@typescript-eslint/no-explicit-any': 'off',
  },
};


================================================
FILE: module-02-Creating-REST-APIS/02-Lesson-02/.gitignore
================================================
# compiled output
/dist
/node_modules

# Logs
logs
*.log
npm-debug.log*
pnpm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*

# OS
.DS_Store

# Tests
/coverage
/.nyc_output

# IDEs and editors
/.idea
.project
.classpath
.c9/
*.launch
.settings/
*.sublime-workspace

# IDE - VSCode
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json

================================================
FILE: module-02-Creating-REST-APIS/02-Lesson-02/.prettierrc
================================================
{
  "singleQuote": true,
  "trailingComma": "all"
}

================================================
FILE: module-02-Creating-REST-APIS/02-Lesson-02/README.md
================================================
<p align="center">
  <a href="http://nestjs.com/" target="blank"><img src="https://nestjs.com/img/logo-small.svg" width="200" 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://coveralls.io/github/nestjs/nest?branch=master" target="_blank"><img src="https://coveralls.io/repos/github/nestjs/nest/badge.svg?branch=master#9" alt="Coverage" /></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"/></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"></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.

## Installation

```bash
$ npm install
```

## Running the app

```bash
# development
$ npm run start

# watch mode
$ npm run start:dev

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

## Test

```bash
# unit tests
$ npm run test

# e2e tests
$ npm run test:e2e

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

## 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://kamilmysliwiec.com)
- Website - [https://nestjs.com](https://nestjs.com/)
- Twitter - [@nestframework](https://twitter.com/nestframework)

## License

Nest is [MIT licensed](LICENSE).


================================================
FILE: module-02-Creating-REST-APIS/02-Lesson-02/nest-cli.json
================================================
{
  "$schema": "https://json.schemastore.org/nest-cli",
  "collection": "@nestjs/schematics",
  "sourceRoot": "src",
  "compilerOptions": {
    "deleteOutDir": true
  }
}


================================================
FILE: module-02-Creating-REST-APIS/02-Lesson-02/package.json
================================================
{
  "name": "n-fundamentals-pro",
  "version": "0.0.1",
  "description": "",
  "author": "",
  "private": true,
  "license": "UNLICENSED",
  "scripts": {
    "build": "nest build",
    "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
    "start": "nest start",
    "start:dev": "nest start --watch",
    "start:debug": "nest start --debug --watch",
    "start:prod": "node dist/main",
    "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
    "test": "jest",
    "test:watch": "jest --watch",
    "test:cov": "jest --coverage",
    "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
    "test:e2e": "jest --config ./test/jest-e2e.json"
  },
  "dependencies": {
    "@nestjs/common": "^9.0.0",
    "@nestjs/core": "^9.0.0",
    "@nestjs/platform-express": "^9.0.0",
    "reflect-metadata": "^0.1.13",
    "rxjs": "^7.2.0"
  },
  "devDependencies": {
    "@nestjs/cli": "^9.0.0",
    "@nestjs/schematics": "^9.0.0",
    "@nestjs/testing": "^9.0.0",
    "@types/express": "^4.17.13",
    "@types/jest": "29.2.4",
    "@types/node": "18.11.18",
    "@types/supertest": "^2.0.11",
    "@typescript-eslint/eslint-plugin": "^5.0.0",
    "@typescript-eslint/parser": "^5.0.0",
    "eslint": "^8.0.1",
    "eslint-config-prettier": "^8.3.0",
    "eslint-plugin-prettier": "^4.0.0",
    "jest": "29.3.1",
    "prettier": "^2.3.2",
    "source-map-support": "^0.5.20",
    "supertest": "^6.1.3",
    "ts-jest": "29.0.3",
    "ts-loader": "^9.2.3",
    "ts-node": "^10.0.0",
    "tsconfig-paths": "4.1.1",
    "typescript": "^4.7.4"
  },
  "jest": {
    "moduleFileExtensions": [
      "js",
      "json",
      "ts"
    ],
    "rootDir": "src",
    "testRegex": ".*\\.spec\\.ts$",
    "transform": {
      "^.+\\.(t|j)s$": "ts-jest"
    },
    "collectCoverageFrom": [
      "**/*.(t|j)s"
    ],
    "coverageDirectory": "../coverage",
    "testEnvironment": "node"
  }
}


================================================
FILE: module-02-Creating-REST-APIS/02-Lesson-02/rest-client.http
================================================
GET http://localhost:3000

### SEND FETCH SONGS REQUEST
GET http://localhost:3000/songs

### Find SONGS REQUEST
GET http://localhost:3000/songs/1

### Create New SONGS REQUEST
POST http://localhost:3000/songs


### Update SONGS REQUEST
PUT http://localhost:3000/songs/1

### Update SONGS REQUEST
DELETE http://localhost:3000/songs/1

================================================
FILE: module-02-Creating-REST-APIS/02-Lesson-02/src/app.controller.spec.ts
================================================
import { Test, TestingModule } from '@nestjs/testing';
import { AppController } from './app.controller';
import { AppService } from './app.service';

describe('AppController', () => {
  let appController: AppController;

  beforeEach(async () => {
    const app: TestingModule = await Test.createTestingModule({
      controllers: [AppController],
      providers: [AppService],
    }).compile();

    appController = app.get<AppController>(AppController);
  });

  describe('root', () => {
    it('should return "Hello World!"', () => {
      expect(appController.getHello()).toBe('Hello World!');
    });
  });
});


================================================
FILE: module-02-Creating-REST-APIS/02-Lesson-02/src/app.controller.ts
================================================
import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';

@Controller()
export class AppController {
  constructor(private readonly appService: AppService) {}

  @Get()
  getHello(): string {
    return this.appService.getHello();
  }
}


================================================
FILE: module-02-Creating-REST-APIS/02-Lesson-02/src/app.module.ts
================================================
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { SongsModule } from './songs/songs.module';

@Module({
  imports: [SongsModule],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}


================================================
FILE: module-02-Creating-REST-APIS/02-Lesson-02/src/app.service.ts
================================================
import { Injectable } from '@nestjs/common';

@Injectable()
export class AppService {
  getHello(): string {
    return 'Hello I am learning Nest.js Fundamentals';
  }
}


================================================
FILE: module-02-Creating-REST-APIS/02-Lesson-02/src/main.ts
================================================
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  await app.listen(3000);
}
bootstrap();


================================================
FILE: module-02-Creating-REST-APIS/02-Lesson-02/src/songs/songs.controller.spec.ts
================================================
import { Test, TestingModule } from '@nestjs/testing';
import { SongsController } from './songs.controller';

describe('SongsController', () => {
  let controller: SongsController;

  beforeEach(async () => {
    const module: TestingModule = await Test.createTestingModule({
      controllers: [SongsController],
    }).compile();

    controller = module.get<SongsController>(SongsController);
  });

  it('should be defined', () => {
    expect(controller).toBeDefined();
  });
});


================================================
FILE: module-02-Creating-REST-APIS/02-Lesson-02/src/songs/songs.controller.ts
================================================
import { Controller, Get, Put, Delete, Post } from '@nestjs/common';

@Controller('songs')
export class SongsController {
  @Post()
  create() {
    return 'create a new song endpoint';
  }
  @Get()
  findAll() {
    return 'find all songs endpoint';
  }
  @Get(':id')
  findOne() {
    return 'fetch song on the based on id';
  }

  @Put(':id')
  update() {
    return 'update song on the based on id';
  }

  @Delete(':id')
  delete() {
    return 'delete song on the based on id';
  }
}


================================================
FILE: module-02-Creating-REST-APIS/02-Lesson-02/src/songs/songs.module.ts
================================================
import { Module } from '@nestjs/common';
import { SongsController } from './songs.controller';

@Module({
  controllers: [SongsController]
})
export class SongsModule {}


================================================
FILE: module-02-Creating-REST-APIS/02-Lesson-02/test/app.e2e-spec.ts
================================================
import { Test, TestingModule } from '@nestjs/testing';
import { INestApplication } from '@nestjs/common';
import * as request from 'supertest';
import { AppModule } from './../src/app.module';

describe('AppController (e2e)', () => {
  let app: INestApplication;

  beforeEach(async () => {
    const moduleFixture: TestingModule = await Test.createTestingModule({
      imports: [AppModule],
    }).compile();

    app = moduleFixture.createNestApplication();
    await app.init();
  });

  it('/ (GET)', () => {
    return request(app.getHttpServer())
      .get('/')
      .expect(200)
      .expect('Hello World!');
  });
});


================================================
FILE: module-02-Creating-REST-APIS/02-Lesson-02/test/jest-e2e.json
================================================
{
  "moduleFileExtensions": ["js", "json", "ts"],
  "rootDir": ".",
  "testEnvironment": "node",
  "testRegex": ".e2e-spec.ts$",
  "transform": {
    "^.+\\.(t|j)s$": "ts-jest"
  }
}


================================================
FILE: module-02-Creating-REST-APIS/02-Lesson-02/tsconfig.build.json
================================================
{
  "extends": "./tsconfig.json",
  "exclude": ["node_modules", "test", "dist", "**/*spec.ts"]
}


================================================
FILE: module-02-Creating-REST-APIS/02-Lesson-02/tsconfig.json
================================================
{
  "compilerOptions": {
    "module": "commonjs",
    "declaration": true,
    "removeComments": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "allowSyntheticDefaultImports": true,
    "target": "es2017",
    "sourceMap": true,
    "outDir": "./dist",
    "baseUrl": "./",
    "incremental": true,
    "skipLibCheck": true,
    "strictNullChecks": false,
    "noImplicitAny": false,
    "strictBindCallApply": false,
    "forceConsistentCasingInFileNames": false,
    "noFallthroughCasesInSwitch": false
  }
}


================================================
FILE: module-02-Creating-REST-APIS/03-Lesson-03/.eslintrc.js
================================================
module.exports = {
  parser: '@typescript-eslint/parser',
  parserOptions: {
    project: 'tsconfig.json',
    tsconfigRootDir: __dirname,
    sourceType: 'module',
  },
  plugins: ['@typescript-eslint/eslint-plugin'],
  extends: [
    'plugin:@typescript-eslint/recommended',
    'plugin:prettier/recommended',
  ],
  root: true,
  env: {
    node: true,
    jest: true,
  },
  ignorePatterns: ['.eslintrc.js'],
  rules: {
    '@typescript-eslint/interface-name-prefix': 'off',
    '@typescript-eslint/explicit-function-return-type': 'off',
    '@typescript-eslint/explicit-module-boundary-types': 'off',
    '@typescript-eslint/no-explicit-any': 'off',
  },
};


================================================
FILE: module-02-Creating-REST-APIS/03-Lesson-03/.gitignore
================================================
# compiled output
/dist
/node_modules

# Logs
logs
*.log
npm-debug.log*
pnpm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*

# OS
.DS_Store

# Tests
/coverage
/.nyc_output

# IDEs and editors
/.idea
.project
.classpath
.c9/
*.launch
.settings/
*.sublime-workspace

# IDE - VSCode
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json

================================================
FILE: module-02-Creating-REST-APIS/03-Lesson-03/.prettierrc
================================================
{
  "singleQuote": true,
  "trailingComma": "all"
}

================================================
FILE: module-02-Creating-REST-APIS/03-Lesson-03/README.md
================================================
<p align="center">
  <a href="http://nestjs.com/" target="blank"><img src="https://nestjs.com/img/logo-small.svg" width="200" 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://coveralls.io/github/nestjs/nest?branch=master" target="_blank"><img src="https://coveralls.io/repos/github/nestjs/nest/badge.svg?branch=master#9" alt="Coverage" /></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"/></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"></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.

## Installation

```bash
$ npm install
```

## Running the app

```bash
# development
$ npm run start

# watch mode
$ npm run start:dev

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

## Test

```bash
# unit tests
$ npm run test

# e2e tests
$ npm run test:e2e

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

## 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://kamilmysliwiec.com)
- Website - [https://nestjs.com](https://nestjs.com/)
- Twitter - [@nestframework](https://twitter.com/nestframework)

## License

Nest is [MIT licensed](LICENSE).


================================================
FILE: module-02-Creating-REST-APIS/03-Lesson-03/nest-cli.json
================================================
{
  "$schema": "https://json.schemastore.org/nest-cli",
  "collection": "@nestjs/schematics",
  "sourceRoot": "src",
  "compilerOptions": {
    "deleteOutDir": true
  }
}


================================================
FILE: module-02-Creating-REST-APIS/03-Lesson-03/package.json
================================================
{
  "name": "n-fundamentals-pro",
  "version": "0.0.1",
  "description": "",
  "author": "",
  "private": true,
  "license": "UNLICENSED",
  "scripts": {
    "build": "nest build",
    "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
    "start": "nest start",
    "start:dev": "nest start --watch",
    "start:debug": "nest start --debug --watch",
    "start:prod": "node dist/main",
    "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
    "test": "jest",
    "test:watch": "jest --watch",
    "test:cov": "jest --coverage",
    "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
    "test:e2e": "jest --config ./test/jest-e2e.json"
  },
  "dependencies": {
    "@nestjs/common": "^9.0.0",
    "@nestjs/core": "^9.0.0",
    "@nestjs/platform-express": "^9.0.0",
    "reflect-metadata": "^0.1.13",
    "rxjs": "^7.2.0"
  },
  "devDependencies": {
    "@nestjs/cli": "^9.0.0",
    "@nestjs/schematics": "^9.0.0",
    "@nestjs/testing": "^9.0.0",
    "@types/express": "^4.17.13",
    "@types/jest": "29.2.4",
    "@types/node": "18.11.18",
    "@types/supertest": "^2.0.11",
    "@typescript-eslint/eslint-plugin": "^5.0.0",
    "@typescript-eslint/parser": "^5.0.0",
    "eslint": "^8.0.1",
    "eslint-config-prettier": "^8.3.0",
    "eslint-plugin-prettier": "^4.0.0",
    "jest": "29.3.1",
    "prettier": "^2.3.2",
    "source-map-support": "^0.5.20",
    "supertest": "^6.1.3",
    "ts-jest": "29.0.3",
    "ts-loader": "^9.2.3",
    "ts-node": "^10.0.0",
    "tsconfig-paths": "4.1.1",
    "typescript": "^4.7.4"
  },
  "jest": {
    "moduleFileExtensions": [
      "js",
      "json",
      "ts"
    ],
    "rootDir": "src",
    "testRegex": ".*\\.spec\\.ts$",
    "transform": {
      "^.+\\.(t|j)s$": "ts-jest"
    },
    "collectCoverageFrom": [
      "**/*.(t|j)s"
    ],
    "coverageDirectory": "../coverage",
    "testEnvironment": "node"
  }
}


================================================
FILE: module-02-Creating-REST-APIS/03-Lesson-03/rest-client.http
================================================
GET http://localhost:3000

### SEND FETCH SONGS REQUEST
GET http://localhost:3000/songs

### Find SONGS REQUEST
GET http://localhost:3000/songs/1

### Create New SONGS REQUEST
POST http://localhost:3000/songs


### Update SONGS REQUEST
PUT http://localhost:3000/songs/1

### Update SONGS REQUEST
DELETE http://localhost:3000/songs/1

================================================
FILE: module-02-Creating-REST-APIS/03-Lesson-03/src/app.controller.spec.ts
================================================
import { Test, TestingModule } from '@nestjs/testing';
import { AppController } from './app.controller';
import { AppService } from './app.service';

describe('AppController', () => {
  let appController: AppController;

  beforeEach(async () => {
    const app: TestingModule = await Test.createTestingModule({
      controllers: [AppController],
      providers: [AppService],
    }).compile();

    appController = app.get<AppController>(AppController);
  });

  describe('root', () => {
    it('should return "Hello World!"', () => {
      expect(appController.getHello()).toBe('Hello World!');
    });
  });
});


================================================
FILE: module-02-Creating-REST-APIS/03-Lesson-03/src/app.controller.ts
================================================
import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';

@Controller()
export class AppController {
  constructor(private readonly appService: AppService) {}

  @Get()
  getHello(): string {
    return this.appService.getHello();
  }
}


================================================
FILE: module-02-Creating-REST-APIS/03-Lesson-03/src/app.module.ts
================================================
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { SongsModule } from './songs/songs.module';

@Module({
  imports: [SongsModule],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}


================================================
FILE: module-02-Creating-REST-APIS/03-Lesson-03/src/app.service.ts
================================================
import { Injectable } from '@nestjs/common';

@Injectable()
export class AppService {
  getHello(): string {
    return 'Hello I am learning Nest.js Fundamentals';
  }
}


================================================
FILE: module-02-Creating-REST-APIS/03-Lesson-03/src/main.ts
================================================
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  await app.listen(3000);
}
bootstrap();


================================================
FILE: module-02-Creating-REST-APIS/03-Lesson-03/src/songs/songs.controller.spec.ts
================================================
import { Test, TestingModule } from '@nestjs/testing';
import { SongsController } from './songs.controller';

describe('SongsController', () => {
  let controller: SongsController;

  beforeEach(async () => {
    const module: TestingModule = await Test.createTestingModule({
      controllers: [SongsController],
    }).compile();

    controller = module.get<SongsController>(SongsController);
  });

  it('should be defined', () => {
    expect(controller).toBeDefined();
  });
});


================================================
FILE: module-02-Creating-REST-APIS/03-Lesson-03/src/songs/songs.controller.ts
================================================
import { Controller, Get, Put, Delete, Post } from '@nestjs/common';
import { SongsService } from './songs.service';

@Controller('songs')
export class SongsController {
  constructor(private songsService: SongsService) {}
  @Post()
  create() {
    return this.songsService.create('Animals by Martin Garrix');
  }
  @Get()
  findAll() {
    return this.songsService.findAll();
  }
  @Get(':id')
  findOne() {
    return 'fetch song on the based on id';
  }

  @Put(':id')
  update() {
    return 'update song on the based on id';
  }

  @Delete(':id')
  delete() {
    return 'delete song on the based on id';
  }
}


================================================
FILE: module-02-Creating-REST-APIS/03-Lesson-03/src/songs/songs.module.ts
================================================
import { Module } from '@nestjs/common';
import { SongsController } from './songs.controller';
import { SongsService } from './songs.service';

@Module({
  controllers: [SongsController],
  providers: [SongsService]
})
export class SongsModule {}


================================================
FILE: module-02-Creating-REST-APIS/03-Lesson-03/src/songs/songs.service.spec.ts
================================================
import { Test, TestingModule } from '@nestjs/testing';
import { SongsService } from './songs.service';

describe('SongsService', () => {
  let service: SongsService;

  beforeEach(async () => {
    const module: TestingModule = await Test.createTestingModule({
      providers: [SongsService],
    }).compile();

    service = module.get<SongsService>(SongsService);
  });

  it('should be defined', () => {
    expect(service).toBeDefined();
  });
});


================================================
FILE: module-02-Creating-REST-APIS/03-Lesson-03/src/songs/songs.service.ts
================================================
import { Injectable } from '@nestjs/common';

@Injectable()
export class SongsService {
  // local db
  // local array

  private readonly songs = [];

  create(song) {
    // Save the song in the database
    this.songs.push(song);
    return this.songs;
  }

  findAll() {
    // fetch the songs from the db
    return this.songs;
  }
}


================================================
FILE: module-02-Creating-REST-APIS/03-Lesson-03/test/app.e2e-spec.ts
================================================
import { Test, TestingModule } from '@nestjs/testing';
import { INestApplication } from '@nestjs/common';
import * as request from 'supertest';
import { AppModule } from './../src/app.module';

describe('AppController (e2e)', () => {
  let app: INestApplication;

  beforeEach(async () => {
    const moduleFixture: TestingModule = await Test.createTestingModule({
      imports: [AppModule],
    }).compile();

    app = moduleFixture.createNestApplication();
    await app.init();
  });

  it('/ (GET)', () => {
    return request(app.getHttpServer())
      .get('/')
      .expect(200)
      .expect('Hello World!');
  });
});


================================================
FILE: module-02-Creating-REST-APIS/03-Lesson-03/test/jest-e2e.json
================================================
{
  "moduleFileExtensions": ["js", "json", "ts"],
  "rootDir": ".",
  "testEnvironment": "node",
  "testRegex": ".e2e-spec.ts$",
  "transform": {
    "^.+\\.(t|j)s$": "ts-jest"
  }
}


================================================
FILE: module-02-Creating-REST-APIS/03-Lesson-03/tsconfig.build.json
================================================
{
  "extends": "./tsconfig.json",
  "exclude": ["node_modules", "test", "dist", "**/*spec.ts"]
}


================================================
FILE: module-02-Creating-REST-APIS/03-Lesson-03/tsconfig.json
================================================
{
  "compilerOptions": {
    "module": "commonjs",
    "declaration": true,
    "removeComments": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "allowSyntheticDefaultImports": true,
    "target": "es2017",
    "sourceMap": true,
    "outDir": "./dist",
    "baseUrl": "./",
    "incremental": true,
    "skipLibCheck": true,
    "strictNullChecks": false,
    "noImplicitAny": false,
    "strictBindCallApply": false,
    "forceConsistentCasingInFileNames": false,
    "noFallthroughCasesInSwitch": false
  }
}


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-01/.eslintrc.js
================================================
module.exports = {
  parser: '@typescript-eslint/parser',
  parserOptions: {
    project: 'tsconfig.json',
    tsconfigRootDir: __dirname,
    sourceType: 'module',
  },
  plugins: ['@typescript-eslint/eslint-plugin'],
  extends: [
    'plugin:@typescript-eslint/recommended',
    'plugin:prettier/recommended',
  ],
  root: true,
  env: {
    node: true,
    jest: true,
  },
  ignorePatterns: ['.eslintrc.js'],
  rules: {
    '@typescript-eslint/interface-name-prefix': 'off',
    '@typescript-eslint/explicit-function-return-type': 'off',
    '@typescript-eslint/explicit-module-boundary-types': 'off',
    '@typescript-eslint/no-explicit-any': 'off',
  },
};


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-01/.gitignore
================================================
# compiled output
/dist
/node_modules

# Logs
logs
*.log
npm-debug.log*
pnpm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*

# OS
.DS_Store

# Tests
/coverage
/.nyc_output

# IDEs and editors
/.idea
.project
.classpath
.c9/
*.launch
.settings/
*.sublime-workspace

# IDE - VSCode
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json

================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-01/.prettierrc
================================================
{
  "singleQuote": true,
  "trailingComma": "all"
}

================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-01/README.md
================================================
<p align="center">
  <a href="http://nestjs.com/" target="blank"><img src="https://nestjs.com/img/logo-small.svg" width="200" 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://coveralls.io/github/nestjs/nest?branch=master" target="_blank"><img src="https://coveralls.io/repos/github/nestjs/nest/badge.svg?branch=master#9" alt="Coverage" /></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"/></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"></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.

## Installation

```bash
$ npm install
```

## Running the app

```bash
# development
$ npm run start

# watch mode
$ npm run start:dev

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

## Test

```bash
# unit tests
$ npm run test

# e2e tests
$ npm run test:e2e

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

## 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://kamilmysliwiec.com)
- Website - [https://nestjs.com](https://nestjs.com/)
- Twitter - [@nestframework](https://twitter.com/nestframework)

## License

Nest is [MIT licensed](LICENSE).


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-01/nest-cli.json
================================================
{
  "$schema": "https://json.schemastore.org/nest-cli",
  "collection": "@nestjs/schematics",
  "sourceRoot": "src",
  "compilerOptions": {
    "deleteOutDir": true
  }
}


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-01/package.json
================================================
{
  "name": "n-fundamentals-pro",
  "version": "0.0.1",
  "description": "",
  "author": "",
  "private": true,
  "license": "UNLICENSED",
  "scripts": {
    "build": "nest build",
    "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
    "start": "nest start",
    "start:dev": "nest start --watch",
    "start:debug": "nest start --debug --watch",
    "start:prod": "node dist/main",
    "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
    "test": "jest",
    "test:watch": "jest --watch",
    "test:cov": "jest --coverage",
    "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
    "test:e2e": "jest --config ./test/jest-e2e.json"
  },
  "dependencies": {
    "@nestjs/common": "^9.0.0",
    "@nestjs/core": "^9.0.0",
    "@nestjs/platform-express": "^9.0.0",
    "reflect-metadata": "^0.1.13",
    "rxjs": "^7.2.0"
  },
  "devDependencies": {
    "@nestjs/cli": "^9.0.0",
    "@nestjs/schematics": "^9.0.0",
    "@nestjs/testing": "^9.0.0",
    "@types/express": "^4.17.13",
    "@types/jest": "29.2.4",
    "@types/node": "18.11.18",
    "@types/supertest": "^2.0.11",
    "@typescript-eslint/eslint-plugin": "^5.0.0",
    "@typescript-eslint/parser": "^5.0.0",
    "eslint": "^8.0.1",
    "eslint-config-prettier": "^8.3.0",
    "eslint-plugin-prettier": "^4.0.0",
    "jest": "29.3.1",
    "prettier": "^2.3.2",
    "source-map-support": "^0.5.20",
    "supertest": "^6.1.3",
    "ts-jest": "29.0.3",
    "ts-loader": "^9.2.3",
    "ts-node": "^10.0.0",
    "tsconfig-paths": "4.1.1",
    "typescript": "^4.7.4"
  },
  "jest": {
    "moduleFileExtensions": [
      "js",
      "json",
      "ts"
    ],
    "rootDir": "src",
    "testRegex": ".*\\.spec\\.ts$",
    "transform": {
      "^.+\\.(t|j)s$": "ts-jest"
    },
    "collectCoverageFrom": [
      "**/*.(t|j)s"
    ],
    "coverageDirectory": "../coverage",
    "testEnvironment": "node"
  }
}


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-01/rest-client.http
================================================
GET http://localhost:3000

### SEND FETCH SONGS REQUEST
GET http://localhost:3000/songs

### Find SONGS REQUEST
GET http://localhost:3000/songs/1

### Create New SONGS REQUEST
POST http://localhost:3000/songs


### Update SONGS REQUEST
PUT http://localhost:3000/songs/1

### Update SONGS REQUEST
DELETE http://localhost:3000/songs/1

================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-01/src/app.controller.spec.ts
================================================
import { Test, TestingModule } from '@nestjs/testing';
import { AppController } from './app.controller';
import { AppService } from './app.service';

describe('AppController', () => {
  let appController: AppController;

  beforeEach(async () => {
    const app: TestingModule = await Test.createTestingModule({
      controllers: [AppController],
      providers: [AppService],
    }).compile();

    appController = app.get<AppController>(AppController);
  });

  describe('root', () => {
    it('should return "Hello World!"', () => {
      expect(appController.getHello()).toBe('Hello World!');
    });
  });
});


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-01/src/app.controller.ts
================================================
import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';

@Controller()
export class AppController {
  constructor(private readonly appService: AppService) {}

  @Get()
  getHello(): string {
    return this.appService.getHello();
  }
}


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-01/src/app.module.ts
================================================
import {
  MiddlewareConsumer,
  Module,
  NestModule,
  RequestMethod,
} from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { LoggerMiddleware } from './common/middleware/logger.middleware';
import { SongsController } from './songs/songs.controller';
import { SongsModule } from './songs/songs.module';

@Module({
  imports: [SongsModule],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule implements NestModule {
  configure(consumer: MiddlewareConsumer) {
    // consumer.apply(LoggerMiddleware).forRoutes('songs'); // option no 1
    // consumer
    //   .apply(LoggerMiddleware)
    //   .forRoutes({ path: 'songs', method: RequestMethod.POST }); //option no 2

    consumer.apply(LoggerMiddleware).forRoutes(SongsController); //option no 3
  }
}


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-01/src/app.service.ts
================================================
import { Injectable } from '@nestjs/common';

@Injectable()
export class AppService {
  getHello(): string {
    return 'Hello I am learning Nest.js Fundamentals';
  }
}


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-01/src/common/middleware/logger.middleware.ts
================================================
import { Injectable, NestMiddleware } from '@nestjs/common';

@Injectable()
export class LoggerMiddleware implements NestMiddleware {
  use(req: any, res: any, next: () => void) {
    console.log('Request ....', new Date().toDateString());
    next();
  }
}


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-01/src/main.ts
================================================
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  await app.listen(3000);
}
bootstrap();


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-01/src/songs/songs.controller.spec.ts
================================================
import { Test, TestingModule } from '@nestjs/testing';
import { SongsController } from './songs.controller';

describe('SongsController', () => {
  let controller: SongsController;

  beforeEach(async () => {
    const module: TestingModule = await Test.createTestingModule({
      controllers: [SongsController],
    }).compile();

    controller = module.get<SongsController>(SongsController);
  });

  it('should be defined', () => {
    expect(controller).toBeDefined();
  });
});


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-01/src/songs/songs.controller.ts
================================================
import { Controller, Get, Put, Delete, Post } from '@nestjs/common';
import { SongsService } from './songs.service';

@Controller('songs')
export class SongsController {
  constructor(private songsService: SongsService) {}
  @Post()
  create() {
    return this.songsService.create('Animals by Martin Garrix');
  }
  @Get()
  findAll() {
    return this.songsService.findAll();
  }
  @Get(':id')
  findOne() {
    return 'fetch song on the based on id';
  }

  @Put(':id')
  update() {
    return 'update song on the based on id';
  }

  @Delete(':id')
  delete() {
    return 'delete song on the based on id';
  }
}


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-01/src/songs/songs.module.ts
================================================
import { Module } from '@nestjs/common';
import { SongsController } from './songs.controller';
import { SongsService } from './songs.service';

@Module({
  controllers: [SongsController],
  providers: [SongsService]
})
export class SongsModule {}


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-01/src/songs/songs.service.spec.ts
================================================
import { Test, TestingModule } from '@nestjs/testing';
import { SongsService } from './songs.service';

describe('SongsService', () => {
  let service: SongsService;

  beforeEach(async () => {
    const module: TestingModule = await Test.createTestingModule({
      providers: [SongsService],
    }).compile();

    service = module.get<SongsService>(SongsService);
  });

  it('should be defined', () => {
    expect(service).toBeDefined();
  });
});


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-01/src/songs/songs.service.ts
================================================
import { Injectable } from '@nestjs/common';

@Injectable()
export class SongsService {
  // local db
  // local array

  private readonly songs = [];

  create(song) {
    // Save the song in the database
    this.songs.push(song);
    return this.songs;
  }

  findAll() {
    // fetch the songs from the db
    return this.songs;
  }
}


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-01/test/app.e2e-spec.ts
================================================
import { Test, TestingModule } from '@nestjs/testing';
import { INestApplication } from '@nestjs/common';
import * as request from 'supertest';
import { AppModule } from './../src/app.module';

describe('AppController (e2e)', () => {
  let app: INestApplication;

  beforeEach(async () => {
    const moduleFixture: TestingModule = await Test.createTestingModule({
      imports: [AppModule],
    }).compile();

    app = moduleFixture.createNestApplication();
    await app.init();
  });

  it('/ (GET)', () => {
    return request(app.getHttpServer())
      .get('/')
      .expect(200)
      .expect('Hello World!');
  });
});


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-01/test/jest-e2e.json
================================================
{
  "moduleFileExtensions": ["js", "json", "ts"],
  "rootDir": ".",
  "testEnvironment": "node",
  "testRegex": ".e2e-spec.ts$",
  "transform": {
    "^.+\\.(t|j)s$": "ts-jest"
  }
}


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-01/tsconfig.build.json
================================================
{
  "extends": "./tsconfig.json",
  "exclude": ["node_modules", "test", "dist", "**/*spec.ts"]
}


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-01/tsconfig.json
================================================
{
  "compilerOptions": {
    "module": "commonjs",
    "declaration": true,
    "removeComments": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "allowSyntheticDefaultImports": true,
    "target": "es2017",
    "sourceMap": true,
    "outDir": "./dist",
    "baseUrl": "./",
    "incremental": true,
    "skipLibCheck": true,
    "strictNullChecks": false,
    "noImplicitAny": false,
    "strictBindCallApply": false,
    "forceConsistentCasingInFileNames": false,
    "noFallthroughCasesInSwitch": false
  }
}


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-02/.eslintrc.js
================================================
module.exports = {
  parser: '@typescript-eslint/parser',
  parserOptions: {
    project: 'tsconfig.json',
    tsconfigRootDir: __dirname,
    sourceType: 'module',
  },
  plugins: ['@typescript-eslint/eslint-plugin'],
  extends: [
    'plugin:@typescript-eslint/recommended',
    'plugin:prettier/recommended',
  ],
  root: true,
  env: {
    node: true,
    jest: true,
  },
  ignorePatterns: ['.eslintrc.js'],
  rules: {
    '@typescript-eslint/interface-name-prefix': 'off',
    '@typescript-eslint/explicit-function-return-type': 'off',
    '@typescript-eslint/explicit-module-boundary-types': 'off',
    '@typescript-eslint/no-explicit-any': 'off',
  },
};


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-02/.gitignore
================================================
# compiled output
/dist
/node_modules

# Logs
logs
*.log
npm-debug.log*
pnpm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*

# OS
.DS_Store

# Tests
/coverage
/.nyc_output

# IDEs and editors
/.idea
.project
.classpath
.c9/
*.launch
.settings/
*.sublime-workspace

# IDE - VSCode
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json

================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-02/.prettierrc
================================================
{
  "singleQuote": true,
  "trailingComma": "all"
}

================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-02/README.md
================================================
<p align="center">
  <a href="http://nestjs.com/" target="blank"><img src="https://nestjs.com/img/logo-small.svg" width="200" 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://coveralls.io/github/nestjs/nest?branch=master" target="_blank"><img src="https://coveralls.io/repos/github/nestjs/nest/badge.svg?branch=master#9" alt="Coverage" /></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"/></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"></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.

## Installation

```bash
$ npm install
```

## Running the app

```bash
# development
$ npm run start

# watch mode
$ npm run start:dev

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

## Test

```bash
# unit tests
$ npm run test

# e2e tests
$ npm run test:e2e

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

## 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://kamilmysliwiec.com)
- Website - [https://nestjs.com](https://nestjs.com/)
- Twitter - [@nestframework](https://twitter.com/nestframework)

## License

Nest is [MIT licensed](LICENSE).


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-02/nest-cli.json
================================================
{
  "$schema": "https://json.schemastore.org/nest-cli",
  "collection": "@nestjs/schematics",
  "sourceRoot": "src",
  "compilerOptions": {
    "deleteOutDir": true
  }
}


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-02/package.json
================================================
{
  "name": "n-fundamentals-pro",
  "version": "0.0.1",
  "description": "",
  "author": "",
  "private": true,
  "license": "UNLICENSED",
  "scripts": {
    "build": "nest build",
    "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
    "start": "nest start",
    "start:dev": "nest start --watch",
    "start:debug": "nest start --debug --watch",
    "start:prod": "node dist/main",
    "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
    "test": "jest",
    "test:watch": "jest --watch",
    "test:cov": "jest --coverage",
    "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
    "test:e2e": "jest --config ./test/jest-e2e.json"
  },
  "dependencies": {
    "@nestjs/common": "^9.0.0",
    "@nestjs/core": "^9.0.0",
    "@nestjs/platform-express": "^9.0.0",
    "reflect-metadata": "^0.1.13",
    "rxjs": "^7.2.0"
  },
  "devDependencies": {
    "@nestjs/cli": "^9.0.0",
    "@nestjs/schematics": "^9.0.0",
    "@nestjs/testing": "^9.0.0",
    "@types/express": "^4.17.13",
    "@types/jest": "29.2.4",
    "@types/node": "18.11.18",
    "@types/supertest": "^2.0.11",
    "@typescript-eslint/eslint-plugin": "^5.0.0",
    "@typescript-eslint/parser": "^5.0.0",
    "eslint": "^8.0.1",
    "eslint-config-prettier": "^8.3.0",
    "eslint-plugin-prettier": "^4.0.0",
    "jest": "29.3.1",
    "prettier": "^2.3.2",
    "source-map-support": "^0.5.20",
    "supertest": "^6.1.3",
    "ts-jest": "29.0.3",
    "ts-loader": "^9.2.3",
    "ts-node": "^10.0.0",
    "tsconfig-paths": "4.1.1",
    "typescript": "^4.7.4"
  },
  "jest": {
    "moduleFileExtensions": [
      "js",
      "json",
      "ts"
    ],
    "rootDir": "src",
    "testRegex": ".*\\.spec\\.ts$",
    "transform": {
      "^.+\\.(t|j)s$": "ts-jest"
    },
    "collectCoverageFrom": [
      "**/*.(t|j)s"
    ],
    "coverageDirectory": "../coverage",
    "testEnvironment": "node"
  }
}


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-02/rest-client.http
================================================
GET http://localhost:3000

### SEND FETCH SONGS REQUEST
GET http://localhost:3000/songs

### Find SONGS REQUEST
GET http://localhost:3000/songs/1

### Create New SONGS REQUEST
POST http://localhost:3000/songs


### Update SONGS REQUEST
PUT http://localhost:3000/songs/1

### Update SONGS REQUEST
DELETE http://localhost:3000/songs/1

================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-02/src/app.controller.spec.ts
================================================
import { Test, TestingModule } from '@nestjs/testing';
import { AppController } from './app.controller';
import { AppService } from './app.service';

describe('AppController', () => {
  let appController: AppController;

  beforeEach(async () => {
    const app: TestingModule = await Test.createTestingModule({
      controllers: [AppController],
      providers: [AppService],
    }).compile();

    appController = app.get<AppController>(AppController);
  });

  describe('root', () => {
    it('should return "Hello World!"', () => {
      expect(appController.getHello()).toBe('Hello World!');
    });
  });
});


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-02/src/app.controller.ts
================================================
import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';

@Controller()
export class AppController {
  constructor(private readonly appService: AppService) {}

  @Get()
  getHello(): string {
    return this.appService.getHello();
  }
}


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-02/src/app.module.ts
================================================
import {
  MiddlewareConsumer,
  Module,
  NestModule,
  RequestMethod,
} from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { LoggerMiddleware } from './common/middleware/logger.middleware';
import { SongsController } from './songs/songs.controller';
import { SongsModule } from './songs/songs.module';

@Module({
  imports: [SongsModule],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule implements NestModule {
  configure(consumer: MiddlewareConsumer) {
    // consumer.apply(LoggerMiddleware).forRoutes('songs'); // option no 1
    // consumer
    //   .apply(LoggerMiddleware)
    //   .forRoutes({ path: 'songs', method: RequestMethod.POST }); //option no 2

    consumer.apply(LoggerMiddleware).forRoutes(SongsController); //option no 3
  }
}


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-02/src/app.service.ts
================================================
import { Injectable } from '@nestjs/common';

@Injectable()
export class AppService {
  getHello(): string {
    return 'Hello I am learning Nest.js Fundamentals';
  }
}


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-02/src/common/middleware/logger.middleware.ts
================================================
import { Injectable, NestMiddleware } from '@nestjs/common';

@Injectable()
export class LoggerMiddleware implements NestMiddleware {
  use(req: any, res: any, next: () => void) {
    console.log('Request ....', new Date().toDateString());
    next();
  }
}


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-02/src/main.ts
================================================
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  await app.listen(3000);
}
bootstrap();


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-02/src/songs/songs.controller.spec.ts
================================================
import { Test, TestingModule } from '@nestjs/testing';
import { SongsController } from './songs.controller';

describe('SongsController', () => {
  let controller: SongsController;

  beforeEach(async () => {
    const module: TestingModule = await Test.createTestingModule({
      controllers: [SongsController],
    }).compile();

    controller = module.get<SongsController>(SongsController);
  });

  it('should be defined', () => {
    expect(controller).toBeDefined();
  });
});


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-02/src/songs/songs.controller.ts
================================================
import {
  Controller,
  Get,
  Put,
  Delete,
  Post,
  HttpException,
  HttpStatus,
} from '@nestjs/common';
import { SongsService } from './songs.service';

@Controller('songs')
export class SongsController {
  constructor(private songsService: SongsService) {}
  @Post()
  create() {
    return this.songsService.create('Animals by Martin Garrix');
  }
  @Get()
  findAll() {
    try {
      return this.songsService.findAll();
    } catch (e) {
      throw new HttpException(
        'server error',
        HttpStatus.INTERNAL_SERVER_ERROR,
        {
          cause: e,
        },
      );
    }
  }
  @Get(':id')
  findOne() {
    return 'fetch song on the based on id';
  }

  @Put(':id')
  update() {
    return 'update song on the based on id';
  }

  @Delete(':id')
  delete() {
    return 'delete song on the based on id';
  }
}


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-02/src/songs/songs.module.ts
================================================
import { Module } from '@nestjs/common';
import { SongsController } from './songs.controller';
import { SongsService } from './songs.service';

@Module({
  controllers: [SongsController],
  providers: [SongsService]
})
export class SongsModule {}


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-02/src/songs/songs.service.spec.ts
================================================
import { Test, TestingModule } from '@nestjs/testing';
import { SongsService } from './songs.service';

describe('SongsService', () => {
  let service: SongsService;

  beforeEach(async () => {
    const module: TestingModule = await Test.createTestingModule({
      providers: [SongsService],
    }).compile();

    service = module.get<SongsService>(SongsService);
  });

  it('should be defined', () => {
    expect(service).toBeDefined();
  });
});


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-02/src/songs/songs.service.ts
================================================
import { Injectable } from '@nestjs/common';

@Injectable()
export class SongsService {
  // local db
  // local array

  private readonly songs = [];

  create(song) {
    // Save the song in the database
    this.songs.push(song);
    return this.songs;
  }

  findAll() {
    // fetch the songs from the db
    // Errors comes while fetching the data from DB
    throw new Error('Error in Db whil fetching record');
    return this.songs;
  }
}


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-02/test/app.e2e-spec.ts
================================================
import { Test, TestingModule } from '@nestjs/testing';
import { INestApplication } from '@nestjs/common';
import * as request from 'supertest';
import { AppModule } from './../src/app.module';

describe('AppController (e2e)', () => {
  let app: INestApplication;

  beforeEach(async () => {
    const moduleFixture: TestingModule = await Test.createTestingModule({
      imports: [AppModule],
    }).compile();

    app = moduleFixture.createNestApplication();
    await app.init();
  });

  it('/ (GET)', () => {
    return request(app.getHttpServer())
      .get('/')
      .expect(200)
      .expect('Hello World!');
  });
});


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-02/test/jest-e2e.json
================================================
{
  "moduleFileExtensions": ["js", "json", "ts"],
  "rootDir": ".",
  "testEnvironment": "node",
  "testRegex": ".e2e-spec.ts$",
  "transform": {
    "^.+\\.(t|j)s$": "ts-jest"
  }
}


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-02/tsconfig.build.json
================================================
{
  "extends": "./tsconfig.json",
  "exclude": ["node_modules", "test", "dist", "**/*spec.ts"]
}


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-02/tsconfig.json
================================================
{
  "compilerOptions": {
    "module": "commonjs",
    "declaration": true,
    "removeComments": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "allowSyntheticDefaultImports": true,
    "target": "es2017",
    "sourceMap": true,
    "outDir": "./dist",
    "baseUrl": "./",
    "incremental": true,
    "skipLibCheck": true,
    "strictNullChecks": false,
    "noImplicitAny": false,
    "strictBindCallApply": false,
    "forceConsistentCasingInFileNames": false,
    "noFallthroughCasesInSwitch": false
  }
}


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-03/.eslintrc.js
================================================
module.exports = {
  parser: '@typescript-eslint/parser',
  parserOptions: {
    project: 'tsconfig.json',
    tsconfigRootDir: __dirname,
    sourceType: 'module',
  },
  plugins: ['@typescript-eslint/eslint-plugin'],
  extends: [
    'plugin:@typescript-eslint/recommended',
    'plugin:prettier/recommended',
  ],
  root: true,
  env: {
    node: true,
    jest: true,
  },
  ignorePatterns: ['.eslintrc.js'],
  rules: {
    '@typescript-eslint/interface-name-prefix': 'off',
    '@typescript-eslint/explicit-function-return-type': 'off',
    '@typescript-eslint/explicit-module-boundary-types': 'off',
    '@typescript-eslint/no-explicit-any': 'off',
  },
};


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-03/.gitignore
================================================
# compiled output
/dist
/node_modules

# Logs
logs
*.log
npm-debug.log*
pnpm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*

# OS
.DS_Store

# Tests
/coverage
/.nyc_output

# IDEs and editors
/.idea
.project
.classpath
.c9/
*.launch
.settings/
*.sublime-workspace

# IDE - VSCode
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json

================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-03/.prettierrc
================================================
{
  "singleQuote": true,
  "trailingComma": "all"
}

================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-03/README.md
================================================
<p align="center">
  <a href="http://nestjs.com/" target="blank"><img src="https://nestjs.com/img/logo-small.svg" width="200" 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://coveralls.io/github/nestjs/nest?branch=master" target="_blank"><img src="https://coveralls.io/repos/github/nestjs/nest/badge.svg?branch=master#9" alt="Coverage" /></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"/></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"></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.

## Installation

```bash
$ npm install
```

## Running the app

```bash
# development
$ npm run start

# watch mode
$ npm run start:dev

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

## Test

```bash
# unit tests
$ npm run test

# e2e tests
$ npm run test:e2e

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

## 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://kamilmysliwiec.com)
- Website - [https://nestjs.com](https://nestjs.com/)
- Twitter - [@nestframework](https://twitter.com/nestframework)

## License

Nest is [MIT licensed](LICENSE).


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-03/nest-cli.json
================================================
{
  "$schema": "https://json.schemastore.org/nest-cli",
  "collection": "@nestjs/schematics",
  "sourceRoot": "src",
  "compilerOptions": {
    "deleteOutDir": true
  }
}


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-03/package.json
================================================
{
  "name": "n-fundamentals-pro",
  "version": "0.0.1",
  "description": "",
  "author": "",
  "private": true,
  "license": "UNLICENSED",
  "scripts": {
    "build": "nest build",
    "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
    "start": "nest start",
    "start:dev": "nest start --watch",
    "start:debug": "nest start --debug --watch",
    "start:prod": "node dist/main",
    "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
    "test": "jest",
    "test:watch": "jest --watch",
    "test:cov": "jest --coverage",
    "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
    "test:e2e": "jest --config ./test/jest-e2e.json"
  },
  "dependencies": {
    "@nestjs/common": "^9.0.0",
    "@nestjs/core": "^9.0.0",
    "@nestjs/platform-express": "^9.0.0",
    "reflect-metadata": "^0.1.13",
    "rxjs": "^7.2.0"
  },
  "devDependencies": {
    "@nestjs/cli": "^9.0.0",
    "@nestjs/schematics": "^9.0.0",
    "@nestjs/testing": "^9.0.0",
    "@types/express": "^4.17.13",
    "@types/jest": "29.2.4",
    "@types/node": "18.11.18",
    "@types/supertest": "^2.0.11",
    "@typescript-eslint/eslint-plugin": "^5.0.0",
    "@typescript-eslint/parser": "^5.0.0",
    "eslint": "^8.0.1",
    "eslint-config-prettier": "^8.3.0",
    "eslint-plugin-prettier": "^4.0.0",
    "jest": "29.3.1",
    "prettier": "^2.3.2",
    "source-map-support": "^0.5.20",
    "supertest": "^6.1.3",
    "ts-jest": "29.0.3",
    "ts-loader": "^9.2.3",
    "ts-node": "^10.0.0",
    "tsconfig-paths": "4.1.1",
    "typescript": "^4.7.4"
  },
  "jest": {
    "moduleFileExtensions": [
      "js",
      "json",
      "ts"
    ],
    "rootDir": "src",
    "testRegex": ".*\\.spec\\.ts$",
    "transform": {
      "^.+\\.(t|j)s$": "ts-jest"
    },
    "collectCoverageFrom": [
      "**/*.(t|j)s"
    ],
    "coverageDirectory": "../coverage",
    "testEnvironment": "node"
  }
}


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-03/rest-client.http
================================================
GET http://localhost:3000

### SEND FETCH SONGS REQUEST
GET http://localhost:3000/songs

### Find SONGS REQUEST
GET http://localhost:3000/songs/1

### Create New SONGS REQUEST
POST http://localhost:3000/songs


### Update SONGS REQUEST
PUT http://localhost:3000/songs/1

### Update SONGS REQUEST
DELETE http://localhost:3000/songs/1

================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-03/src/app.controller.spec.ts
================================================
import { Test, TestingModule } from '@nestjs/testing';
import { AppController } from './app.controller';
import { AppService } from './app.service';

describe('AppController', () => {
  let appController: AppController;

  beforeEach(async () => {
    const app: TestingModule = await Test.createTestingModule({
      controllers: [AppController],
      providers: [AppService],
    }).compile();

    appController = app.get<AppController>(AppController);
  });

  describe('root', () => {
    it('should return "Hello World!"', () => {
      expect(appController.getHello()).toBe('Hello World!');
    });
  });
});


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-03/src/app.controller.ts
================================================
import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';

@Controller()
export class AppController {
  constructor(private readonly appService: AppService) {}

  @Get()
  getHello(): string {
    return this.appService.getHello();
  }
}


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-03/src/app.module.ts
================================================
import {
  MiddlewareConsumer,
  Module,
  NestModule,
  RequestMethod,
} from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { LoggerMiddleware } from './common/middleware/logger.middleware';
import { SongsController } from './songs/songs.controller';
import { SongsModule } from './songs/songs.module';

@Module({
  imports: [SongsModule],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule implements NestModule {
  configure(consumer: MiddlewareConsumer) {
    // consumer.apply(LoggerMiddleware).forRoutes('songs'); // option no 1
    // consumer
    //   .apply(LoggerMiddleware)
    //   .forRoutes({ path: 'songs', method: RequestMethod.POST }); //option no 2

    consumer.apply(LoggerMiddleware).forRoutes(SongsController); //option no 3
  }
}


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-03/src/app.service.ts
================================================
import { Injectable } from '@nestjs/common';

@Injectable()
export class AppService {
  getHello(): string {
    return 'Hello I am learning Nest.js Fundamentals';
  }
}


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-03/src/common/middleware/logger.middleware.ts
================================================
import { Injectable, NestMiddleware } from '@nestjs/common';

@Injectable()
export class LoggerMiddleware implements NestMiddleware {
  use(req: any, res: any, next: () => void) {
    console.log('Request ....', new Date().toDateString());
    next();
  }
}


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-03/src/main.ts
================================================
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  await app.listen(3000);
}
bootstrap();


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-03/src/songs/songs.controller.spec.ts
================================================
import { Test, TestingModule } from '@nestjs/testing';
import { SongsController } from './songs.controller';

describe('SongsController', () => {
  let controller: SongsController;

  beforeEach(async () => {
    const module: TestingModule = await Test.createTestingModule({
      controllers: [SongsController],
    }).compile();

    controller = module.get<SongsController>(SongsController);
  });

  it('should be defined', () => {
    expect(controller).toBeDefined();
  });
});


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-03/src/songs/songs.controller.ts
================================================
import {
  Controller,
  Get,
  Put,
  Delete,
  Post,
  HttpException,
  HttpStatus,
  Param,
  ParseIntPipe,
} from '@nestjs/common';
import { SongsService } from './songs.service';

@Controller('songs')
export class SongsController {
  constructor(private songsService: SongsService) {}
  @Post()
  create() {
    return this.songsService.create('Animals by Martin Garrix');
  }
  @Get()
  findAll() {
    try {
      return this.songsService.findAll();
    } catch (e) {
      throw new HttpException(
        'server error',
        HttpStatus.INTERNAL_SERVER_ERROR,
        {
          cause: e,
        },
      );
    }
  }
  @Get(':id')
  findOne(
    @Param(
      'id',
      new ParseIntPipe({ errorHttpStatusCode: HttpStatus.NOT_ACCEPTABLE }),
    )
    id: number,
  ) {
    return `fetch song on the based on id ${typeof id}`;
  }

  @Put(':id')
  update() {
    return 'update song on the based on id';
  }

  @Delete(':id')
  delete() {
    return 'delete song on the based on id';
  }
}


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-03/src/songs/songs.module.ts
================================================
import { Module } from '@nestjs/common';
import { SongsController } from './songs.controller';
import { SongsService } from './songs.service';

@Module({
  controllers: [SongsController],
  providers: [SongsService]
})
export class SongsModule {}


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-03/src/songs/songs.service.spec.ts
================================================
import { Test, TestingModule } from '@nestjs/testing';
import { SongsService } from './songs.service';

describe('SongsService', () => {
  let service: SongsService;

  beforeEach(async () => {
    const module: TestingModule = await Test.createTestingModule({
      providers: [SongsService],
    }).compile();

    service = module.get<SongsService>(SongsService);
  });

  it('should be defined', () => {
    expect(service).toBeDefined();
  });
});


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-03/src/songs/songs.service.ts
================================================
import { Injectable } from '@nestjs/common';

@Injectable()
export class SongsService {
  // local db
  // local array

  private readonly songs = [];

  create(song) {
    // Save the song in the database
    this.songs.push(song);
    return this.songs;
  }

  findAll() {
    // fetch the songs from the db
    // Errors comes while fetching the data from DB
    throw new Error('Error in Db whil fetching record');
    return this.songs;
  }
}


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-03/test/app.e2e-spec.ts
================================================
import { Test, TestingModule } from '@nestjs/testing';
import { INestApplication } from '@nestjs/common';
import * as request from 'supertest';
import { AppModule } from './../src/app.module';

describe('AppController (e2e)', () => {
  let app: INestApplication;

  beforeEach(async () => {
    const moduleFixture: TestingModule = await Test.createTestingModule({
      imports: [AppModule],
    }).compile();

    app = moduleFixture.createNestApplication();
    await app.init();
  });

  it('/ (GET)', () => {
    return request(app.getHttpServer())
      .get('/')
      .expect(200)
      .expect('Hello World!');
  });
});


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-03/test/jest-e2e.json
================================================
{
  "moduleFileExtensions": ["js", "json", "ts"],
  "rootDir": ".",
  "testEnvironment": "node",
  "testRegex": ".e2e-spec.ts$",
  "transform": {
    "^.+\\.(t|j)s$": "ts-jest"
  }
}


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-03/tsconfig.build.json
================================================
{
  "extends": "./tsconfig.json",
  "exclude": ["node_modules", "test", "dist", "**/*spec.ts"]
}


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-03/tsconfig.json
================================================
{
  "compilerOptions": {
    "module": "commonjs",
    "declaration": true,
    "removeComments": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "allowSyntheticDefaultImports": true,
    "target": "es2017",
    "sourceMap": true,
    "outDir": "./dist",
    "baseUrl": "./",
    "incremental": true,
    "skipLibCheck": true,
    "strictNullChecks": false,
    "noImplicitAny": false,
    "strictBindCallApply": false,
    "forceConsistentCasingInFileNames": false,
    "noFallthroughCasesInSwitch": false
  }
}


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-04/.eslintrc.js
================================================
module.exports = {
  parser: '@typescript-eslint/parser',
  parserOptions: {
    project: 'tsconfig.json',
    tsconfigRootDir: __dirname,
    sourceType: 'module',
  },
  plugins: ['@typescript-eslint/eslint-plugin'],
  extends: [
    'plugin:@typescript-eslint/recommended',
    'plugin:prettier/recommended',
  ],
  root: true,
  env: {
    node: true,
    jest: true,
  },
  ignorePatterns: ['.eslintrc.js'],
  rules: {
    '@typescript-eslint/interface-name-prefix': 'off',
    '@typescript-eslint/explicit-function-return-type': 'off',
    '@typescript-eslint/explicit-module-boundary-types': 'off',
    '@typescript-eslint/no-explicit-any': 'off',
  },
};


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-04/.gitignore
================================================
# compiled output
/dist
/node_modules

# Logs
logs
*.log
npm-debug.log*
pnpm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*

# OS
.DS_Store

# Tests
/coverage
/.nyc_output

# IDEs and editors
/.idea
.project
.classpath
.c9/
*.launch
.settings/
*.sublime-workspace

# IDE - VSCode
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json

================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-04/.prettierrc
================================================
{
  "singleQuote": true,
  "trailingComma": "all"
}

================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-04/README.md
================================================
<p align="center">
  <a href="http://nestjs.com/" target="blank"><img src="https://nestjs.com/img/logo-small.svg" width="200" 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://coveralls.io/github/nestjs/nest?branch=master" target="_blank"><img src="https://coveralls.io/repos/github/nestjs/nest/badge.svg?branch=master#9" alt="Coverage" /></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"/></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"></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.

## Installation

```bash
$ npm install
```

## Running the app

```bash
# development
$ npm run start

# watch mode
$ npm run start:dev

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

## Test

```bash
# unit tests
$ npm run test

# e2e tests
$ npm run test:e2e

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

## 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://kamilmysliwiec.com)
- Website - [https://nestjs.com](https://nestjs.com/)
- Twitter - [@nestframework](https://twitter.com/nestframework)

## License

Nest is [MIT licensed](LICENSE).


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-04/nest-cli.json
================================================
{
  "$schema": "https://json.schemastore.org/nest-cli",
  "collection": "@nestjs/schematics",
  "sourceRoot": "src",
  "compilerOptions": {
    "deleteOutDir": true
  }
}


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-04/package.json
================================================
{
  "name": "n-fundamentals-pro",
  "version": "0.0.1",
  "description": "",
  "author": "",
  "private": true,
  "license": "UNLICENSED",
  "scripts": {
    "build": "nest build",
    "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
    "start": "nest start",
    "start:dev": "nest start --watch",
    "start:debug": "nest start --debug --watch",
    "start:prod": "node dist/main",
    "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
    "test": "jest",
    "test:watch": "jest --watch",
    "test:cov": "jest --coverage",
    "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
    "test:e2e": "jest --config ./test/jest-e2e.json"
  },
  "dependencies": {
    "@nestjs/common": "^9.0.0",
    "@nestjs/core": "^9.0.0",
    "@nestjs/platform-express": "^9.0.0",
    "class-transformer": "^0.5.1",
    "class-validator": "^0.14.0",
    "reflect-metadata": "^0.1.13",
    "rxjs": "^7.2.0"
  },
  "devDependencies": {
    "@nestjs/cli": "^9.0.0",
    "@nestjs/schematics": "^9.0.0",
    "@nestjs/testing": "^9.0.0",
    "@types/express": "^4.17.13",
    "@types/jest": "29.2.4",
    "@types/node": "18.11.18",
    "@types/supertest": "^2.0.11",
    "@typescript-eslint/eslint-plugin": "^5.0.0",
    "@typescript-eslint/parser": "^5.0.0",
    "eslint": "^8.0.1",
    "eslint-config-prettier": "^8.3.0",
    "eslint-plugin-prettier": "^4.0.0",
    "jest": "29.3.1",
    "prettier": "^2.3.2",
    "source-map-support": "^0.5.20",
    "supertest": "^6.1.3",
    "ts-jest": "29.0.3",
    "ts-loader": "^9.2.3",
    "ts-node": "^10.0.0",
    "tsconfig-paths": "4.1.1",
    "typescript": "^4.7.4"
  },
  "jest": {
    "moduleFileExtensions": [
      "js",
      "json",
      "ts"
    ],
    "rootDir": "src",
    "testRegex": ".*\\.spec\\.ts$",
    "transform": {
      "^.+\\.(t|j)s$": "ts-jest"
    },
    "collectCoverageFrom": [
      "**/*.(t|j)s"
    ],
    "coverageDirectory": "../coverage",
    "testEnvironment": "node"
  }
}


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-04/rest-client.http
================================================
GET http://localhost:3000

### SEND FETCH SONGS REQUEST
GET http://localhost:3000/songs

### Find SONGS REQUEST
GET http://localhost:3000/songs/1

### Create New SONGS REQUEST
POST http://localhost:3001/songs
Content-Type: application/json

{
    "title": "lasting lover",
    "artists": ["sigla"],
"releasedDate" : "2022-09-29",
"duration" :"02:34"
}



### Update SONGS REQUEST
PUT http://localhost:3000/songs/1

### Update SONGS REQUEST
DELETE http://localhost:3000/songs/1

================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-04/src/app.controller.spec.ts
================================================
import { Test, TestingModule } from '@nestjs/testing';
import { AppController } from './app.controller';
import { AppService } from './app.service';

describe('AppController', () => {
  let appController: AppController;

  beforeEach(async () => {
    const app: TestingModule = await Test.createTestingModule({
      controllers: [AppController],
      providers: [AppService],
    }).compile();

    appController = app.get<AppController>(AppController);
  });

  describe('root', () => {
    it('should return "Hello World!"', () => {
      expect(appController.getHello()).toBe('Hello World!');
    });
  });
});


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-04/src/app.controller.ts
================================================
import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';

@Controller()
export class AppController {
  constructor(private readonly appService: AppService) {}

  @Get()
  getHello(): string {
    return this.appService.getHello();
  }
}


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-04/src/app.module.ts
================================================
import {
  MiddlewareConsumer,
  Module,
  NestModule,
  RequestMethod,
} from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { LoggerMiddleware } from './common/middleware/logger.middleware';
import { SongsController } from './songs/songs.controller';
import { SongsModule } from './songs/songs.module';

@Module({
  imports: [SongsModule],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule implements NestModule {
  configure(consumer: MiddlewareConsumer) {
    // consumer.apply(LoggerMiddleware).forRoutes('songs'); // option no 1
    // consumer
    //   .apply(LoggerMiddleware)
    //   .forRoutes({ path: 'songs', method: RequestMethod.POST }); //option no 2

    consumer.apply(LoggerMiddleware).forRoutes(SongsController); //option no 3
  }
}


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-04/src/app.service.ts
================================================
import { Injectable } from '@nestjs/common';

@Injectable()
export class AppService {
  getHello(): string {
    return 'Hello I am learning Nest.js Fundamentals';
  }
}


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-04/src/common/middleware/logger.middleware.ts
================================================
import { Injectable, NestMiddleware } from '@nestjs/common';

@Injectable()
export class LoggerMiddleware implements NestMiddleware {
  use(req: any, res: any, next: () => void) {
    console.log('Request ....', new Date().toDateString());
    next();
  }
}


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-04/src/main.ts
================================================
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { ValidationPipe } from '@nestjs/common';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  app.useGlobalPipes(new ValidationPipe());
  await app.listen(3000);
}
bootstrap();


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-04/src/songs/dto/create-song-dto.ts
================================================
import {
  IsArray,
  IsDateString,
  IsMilitaryTime,
  IsNotEmpty,
  IsString,
} from 'class-validator';

export class CreateSongDTO {
  @IsString()
  @IsNotEmpty()
  readonly title: string;

  @IsNotEmpty()
  @IsArray()
  @IsString()
  readonly artists: string[];

  @IsNotEmpty()
  @IsDateString()
  readonly releasedDate: Date;

  @IsMilitaryTime()
  @IsNotEmpty()
  readonly duration: Date;
}


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-04/src/songs/songs.controller.spec.ts
================================================
import { Test, TestingModule } from '@nestjs/testing';
import { SongsController } from './songs.controller';

describe('SongsController', () => {
  let controller: SongsController;

  beforeEach(async () => {
    const module: TestingModule = await Test.createTestingModule({
      controllers: [SongsController],
    }).compile();

    controller = module.get<SongsController>(SongsController);
  });

  it('should be defined', () => {
    expect(controller).toBeDefined();
  });
});


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-04/src/songs/songs.controller.ts
================================================
import {
  Controller,
  Get,
  Put,
  Delete,
  Post,
  HttpException,
  HttpStatus,
  Param,
  ParseIntPipe,
  Body,
} from '@nestjs/common';
import { SongsService } from './songs.service';
import { CreateSongDTO } from './dto/create-song-dto';

@Controller('songs')
export class SongsController {
  constructor(private songsService: SongsService) {}
  @Post()
  create(@Body() createSongDTO: CreateSongDTO) {
    return this.songsService.create(createSongDTO);
  }
  @Get()
  findAll() {
    try {
      return this.songsService.findAll();
    } catch (e) {
      throw new HttpException(
        'server error',
        HttpStatus.INTERNAL_SERVER_ERROR,
        {
          cause: e,
        },
      );
    }
  }
  @Get(':id')
  findOne(
    @Param(
      'id',
      new ParseIntPipe({ errorHttpStatusCode: HttpStatus.NOT_ACCEPTABLE }),
    )
    id: number,
  ) {
    return `fetch song on the based on id ${typeof id}`;
  }

  @Put(':id')
  update() {
    return 'update song on the based on id';
  }

  @Delete(':id')
  delete() {
    return 'delete song on the based on id';
  }
}


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-04/src/songs/songs.module.ts
================================================
import { Module } from '@nestjs/common';
import { SongsController } from './songs.controller';
import { SongsService } from './songs.service';

@Module({
  controllers: [SongsController],
  providers: [SongsService]
})
export class SongsModule {}


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-04/src/songs/songs.service.spec.ts
================================================
import { Test, TestingModule } from '@nestjs/testing';
import { SongsService } from './songs.service';

describe('SongsService', () => {
  let service: SongsService;

  beforeEach(async () => {
    const module: TestingModule = await Test.createTestingModule({
      providers: [SongsService],
    }).compile();

    service = module.get<SongsService>(SongsService);
  });

  it('should be defined', () => {
    expect(service).toBeDefined();
  });
});


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-04/src/songs/songs.service.ts
================================================
import { Injectable } from '@nestjs/common';

@Injectable()
export class SongsService {
  // local db
  // local array

  private readonly songs = [];

  create(song) {
    // Save the song in the database
    this.songs.push(song);
    return this.songs;
  }

  findAll() {
    // fetch the songs from the db
    // Errors comes while fetching the data from DB
    throw new Error('Error in Db whil fetching record');
    return this.songs;
  }
}


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-04/test/app.e2e-spec.ts
================================================
import { Test, TestingModule } from '@nestjs/testing';
import { INestApplication } from '@nestjs/common';
import * as request from 'supertest';
import { AppModule } from './../src/app.module';

describe('AppController (e2e)', () => {
  let app: INestApplication;

  beforeEach(async () => {
    const moduleFixture: TestingModule = await Test.createTestingModule({
      imports: [AppModule],
    }).compile();

    app = moduleFixture.createNestApplication();
    await app.init();
  });

  it('/ (GET)', () => {
    return request(app.getHttpServer())
      .get('/')
      .expect(200)
      .expect('Hello World!');
  });
});


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-04/test/jest-e2e.json
================================================
{
  "moduleFileExtensions": ["js", "json", "ts"],
  "rootDir": ".",
  "testEnvironment": "node",
  "testRegex": ".e2e-spec.ts$",
  "transform": {
    "^.+\\.(t|j)s$": "ts-jest"
  }
}


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-04/tsconfig.build.json
================================================
{
  "extends": "./tsconfig.json",
  "exclude": ["node_modules", "test", "dist", "**/*spec.ts"]
}


================================================
FILE: module-03-middlewares-exception-filters-pipes/lesson-04/tsconfig.json
================================================
{
  "compilerOptions": {
    "module": "commonjs",
    "declaration": true,
    "removeComments": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "allowSyntheticDefaultImports": true,
    "target": "es2017",
    "sourceMap": true,
    "outDir": "./dist",
    "baseUrl": "./",
    "incremental": true,
    "skipLibCheck": true,
    "strictNullChecks": false,
    "noImplicitAny": false,
    "strictBindCallApply": false,
    "forceConsistentCasingInFileNames": false,
    "noFallthroughCasesInSwitch": false
  }
}


================================================
FILE: module-04-dependency-injection/lesson-01/.eslintrc.js
================================================
module.exports = {
  parser: '@typescript-eslint/parser',
  parserOptions: {
    project: 'tsconfig.json',
    tsconfigRootDir: __dirname,
    sourceType: 'module',
  },
  plugins: ['@typescript-eslint/eslint-plugin'],
  extends: [
    'plugin:@typescript-eslint/recommended',
    'plugin:prettier/recommended',
  ],
  root: true,
  env: {
    node: true,
    jest: true,
  },
  ignorePatterns: ['.eslintrc.js'],
  rules: {
    '@typescript-eslint/interface-name-prefix': 'off',
    '@typescript-eslint/explicit-function-return-type': 'off',
    '@typescript-eslint/explicit-module-boundary-types': 'off',
    '@typescript-eslint/no-explicit-any': 'off',
  },
};


================================================
FILE: module-04-dependency-injection/lesson-01/.gitignore
================================================
# compiled output
/dist
/node_modules

# Logs
logs
*.log
npm-debug.log*
pnpm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*

# OS
.DS_Store

# Tests
/coverage
/.nyc_output

# IDEs and editors
/.idea
.project
.classpath
.c9/
*.launch
.settings/
*.sublime-workspace

# IDE - VSCode
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json

================================================
FILE: module-04-dependency-injection/lesson-01/.prettierrc
================================================
{
  "singleQuote": true,
  "trailingComma": "all"
}

================================================
FILE: module-04-dependency-injection/lesson-01/README.md
================================================
<p align="center">
  <a href="http://nestjs.com/" target="blank"><img src="https://nestjs.com/img/logo-small.svg" width="200" 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://coveralls.io/github/nestjs/nest?branch=master" target="_blank"><img src="https://coveralls.io/repos/github/nestjs/nest/badge.svg?branch=master#9" alt="Coverage" /></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"/></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"></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.

## Installation

```bash
$ npm install
```

## Running the app

```bash
# development
$ npm run start

# watch mode
$ npm run start:dev

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

## Test

```bash
# unit tests
$ npm run test

# e2e tests
$ npm run test:e2e

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

## 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://kamilmysliwiec.com)
- Website - [https://nestjs.com](https://nestjs.com/)
- Twitter - [@nestframework](https://twitter.com/nestframework)

## License

Nest is [MIT licensed](LICENSE).


================================================
FILE: module-04-dependency-injection/lesson-01/nest-cli.json
================================================
{
  "$schema": "https://json.schemastore.org/nest-cli",
  "collection": "@nestjs/schematics",
  "sourceRoot": "src",
  "compilerOptions": {
    "deleteOutDir": true
  }
}


================================================
FILE: module-04-dependency-injection/lesson-01/package.json
================================================
{
  "name": "n-fundamentals-pro",
  "version": "0.0.1",
  "description": "",
  "author": "",
  "private": true,
  "license": "UNLICENSED",
  "scripts": {
    "build": "nest build",
    "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
    "start": "nest start",
    "start:dev": "nest start --watch",
    "start:debug": "nest start --debug --watch",
    "start:prod": "node dist/main",
    "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
    "test": "jest",
    "test:watch": "jest --watch",
    "test:cov": "jest --coverage",
    "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
    "test:e2e": "jest --config ./test/jest-e2e.json"
  },
  "dependencies": {
    "@nestjs/common": "^9.0.0",
    "@nestjs/core": "^9.0.0",
    "@nestjs/platform-express": "^9.0.0",
    "class-transformer": "^0.5.1",
    "class-validator": "^0.14.0",
    "reflect-metadata": "^0.1.13",
    "rxjs": "^7.2.0"
  },
  "devDependencies": {
    "@nestjs/cli": "^9.0.0",
    "@nestjs/schematics": "^9.0.0",
    "@nestjs/testing": "^9.0.0",
    "@types/express": "^4.17.13",
    "@types/jest": "29.2.4",
    "@types/node": "18.11.18",
    "@types/supertest": "^2.0.11",
    "@typescript-eslint/eslint-plugin": "^5.0.0",
    "@typescript-eslint/parser": "^5.0.0",
    "eslint": "^8.0.1",
    "eslint-config-prettier": "^8.3.0",
    "eslint-plugin-prettier": "^4.0.0",
    "jest": "29.3.1",
    "prettier": "^2.3.2",
    "source-map-support": "^0.5.20",
    "supertest": "^6.1.3",
    "ts-jest": "29.0.3",
    "ts-loader": "^9.2.3",
    "ts-node": "^10.0.0",
    "tsconfig-paths": "4.1.1",
    "typescript": "^4.7.4"
  },
  "jest": {
    "moduleFileExtensions": [
      "js",
      "json",
      "ts"
    ],
    "rootDir": "src",
    "testRegex": ".*\\.spec\\.ts$",
    "transform": {
      "^.+\\.(t|j)s$": "ts-jest"
    },
    "collectCoverageFrom": [
      "**/*.(t|j)s"
    ],
    "coverageDirectory": "../coverage",
    "testEnvironment": "node"
  }
}


================================================
FILE: module-04-dependency-injection/lesson-01/rest-client.http
================================================
GET http://localhost:3000

### SEND FETCH SONGS REQUEST
GET http://localhost:3000/songs

### Find SONGS REQUEST
GET http://localhost:3000/songs/1

### Create New SONGS REQUEST
POST http://localhost:3000/songs
Content-Type: application/json

{
"title": "lasting lover",
"artists": [
    "Siagla",
    "Martin",
    "John"
],
"releasedDate" : "2022-09-29",
"duration" :"02:34"
}



### Update SONGS REQUEST
PUT http://localhost:3000/songs/1

### Update SONGS REQUEST
DELETE http://localhost:3000/songs/1

================================================
FILE: module-04-dependency-injection/lesson-01/src/app.controller.spec.ts
================================================
import { Test, TestingModule } from '@nestjs/testing';
import { AppController } from './app.controller';
import { AppService } from './app.service';

describe('AppController', () => {
  let appController: AppController;

  beforeEach(async () => {
    const app: TestingModule = await Test.createTestingModule({
      controllers: [AppController],
      providers: [AppService],
    }).compile();

    appController = app.get<AppController>(AppController);
  });

  describe('root', () => {
    it('should return "Hello World!"', () => {
      expect(appController.getHello()).toBe('Hello World!');
    });
  });
});


================================================
FILE: module-04-dependency-injection/lesson-01/src/app.controller.ts
================================================
import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';

@Controller()
export class AppController {
  constructor(private readonly appService: AppService) {}

  @Get()
  getHello(): string {
    return this.appService.getHello();
  }
}


================================================
FILE: module-04-dependency-injection/lesson-01/src/app.module.ts
================================================
import { MiddlewareConsumer, Module, NestModule } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { LoggerMiddleware } from './common/middleware/logger.middleware';
import { SongsController } from './songs/songs.controller';
import { SongsModule } from './songs/songs.module';
import { DevConfigService } from './common/providers/DevConfigService';

const devConfig = { port: 3000 };
const proConfig = { port: 4000 };

@Module({
  imports: [SongsModule],
  controllers: [AppController],
  providers: [
    AppService,
    {
      provide: DevConfigService,
      useClass: DevConfigService,
    },
    {
      provide: 'CONFIG',
      useFactory: () => {
        return process.env.NODE_ENV === 'development' ? devConfig : proConfig;
      },
    },
  ],
})
export class AppModule implements NestModule {
  configure(consumer: MiddlewareConsumer) {
    // consumer.apply(LoggerMiddleware).forRoutes('songs'); // option no 1
    // consumer
    //   .apply(LoggerMiddleware)
    //   .forRoutes({ path: 'songs', method: RequestMethod.POST }); //option no 2

    consumer.apply(LoggerMiddleware).forRoutes(SongsController); //option no 3
  }
}


================================================
FILE: module-04-dependency-injection/lesson-01/src/app.service.ts
================================================
import { Inject, Injectable } from '@nestjs/common';
import { DevConfigService } from './common/providers/DevConfigService';

@Injectable()
export class AppService {
  constructor(
    private devConfigService: DevConfigService,
    @Inject('CONFIG')
    private config: { port: string },
  ) {}
  getHello(): string {
    return `Hello I am learning Nest.js Fundamentals ${this.devConfigService.getDBHOST()} PORT = ${
      this.config.port
    }`;
  }
}


================================================
FILE: module-04-dependency-injection/lesson-01/src/common/constatnts/connection.ts
================================================
export const connection: Connection = {
  CONNECTION_STRING: 'MYSQL://12324/sad',
  DB: 'MYSQL',
  DBNAME: 'TEST',
};
export type Connection = {
  CONNECTION_STRING: string;
  DB: string;
  DBNAME: string;
};


================================================
FILE: module-04-dependency-injection/lesson-01/src/common/middleware/logger.middleware.ts
================================================
import { Injectable, NestMiddleware } from '@nestjs/common';

@Injectable()
export class LoggerMiddleware implements NestMiddleware {
  use(req: any, res: any, next: () => void) {
    console.log('Request ....', new Date().toDateString());
    next();
  }
}


================================================
FILE: module-04-dependency-injection/lesson-01/src/common/providers/DevConfigService.ts
================================================
import { Injectable } from '@nestjs/common';

@Injectable()
export class DevConfigService {
  DBHOST = 'localhost';
  getDBHOST() {
    return this.DBHOST;
  }
}


================================================
FILE: module-04-dependency-injection/lesson-01/src/main.ts
================================================
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { ValidationPipe } from '@nestjs/common';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  app.useGlobalPipes(new ValidationPipe());
  await app.listen(3000);
}
bootstrap();


================================================
FILE: module-04-dependency-injection/lesson-01/src/songs/dto/create-song-dto.ts
================================================
import {
  IsArray,
  IsDateString,
  IsMilitaryTime,
  IsNotEmpty,
  IsString,
} from 'class-validator';

export class CreateSongDTO {
  @IsString()
  @IsNotEmpty()
  readonly title;

  @IsNotEmpty()
  @IsArray()
  @IsString({ each: true })
  readonly artists;

  @IsNotEmpty()
  @IsDateString()
  readonly releasedDate: Date;

  @IsMilitaryTime()
  @IsNotEmpty()
  readonly duration: Date;
}


================================================
FILE: module-04-dependency-injection/lesson-01/src/songs/songs.controller.spec.ts
================================================
import { Test, TestingModule } from '@nestjs/testing';
import { SongsController } from './songs.controller';

describe('SongsController', () => {
  let controller: SongsController;

  beforeEach(async () => {
    const module: TestingModule = await Test.createTestingModule({
      controllers: [SongsController],
    }).compile();

    controller = module.get<SongsController>(SongsController);
  });

  it('should be defined', () => {
    expect(controller).toBeDefined();
  });
});


================================================
FILE: module-04-dependency-injection/lesson-01/src/songs/songs.controller.ts
================================================
import {
  Controller,
  Get,
  Put,
  Delete,
  Post,
  HttpException,
  HttpStatus,
  Param,
  ParseIntPipe,
  Body,
  Inject,
} from '@nestjs/common';
import { SongsService } from './songs.service';
import { CreateSongDTO } from './dto/create-song-dto';
import { Connection } from 'src/common/constatnts/connection';

@Controller('songs')
export class SongsController {
  constructor(
    private songsService: SongsService,
    @Inject('CONNECTION')
    private connection: Connection,
  ) {
    console.log(
      `THIS IS CONNECTION STRING ${this.connection.CONNECTION_STRING}`,
    );
  }
  @Post()
  create(@Body() createSongDTO: CreateSongDTO) {
    return this.songsService.create(createSongDTO);
  }
  @Get()
  findAll() {
    try {
      return this.songsService.findAll();
    } catch (e) {
      throw new HttpException(
        'server error',
        HttpStatus.INTERNAL_SERVER_ERROR,
        {
          cause: e,
        },
      );
    }
  }
  @Get(':id')
  findOne(
    @Param(
      'id',
      new ParseIntPipe({ errorHttpStatusCode: HttpStatus.NOT_ACCEPTABLE }),
    )
    id: number,
  ) {
    return `fetch song on the based on id ${typeof id}`;
  }

  @Put(':id')
  update() {
    return 'update song on the based on id';
  }

  @Delete(':id')
  delete() {
    return 'delete song on the based on id';
  }
}


================================================
FILE: module-04-dependency-injection/lesson-01/src/songs/songs.module.ts
================================================
import { Module } from '@nestjs/common';
import { SongsController } from './songs.controller';
import { SongsService } from './songs.service';
import { connection } from 'src/common/constatnts/connection';

const mockSongsService = {
  findAll() {
    return [{ id: 1, title: 'Lasting lover', artists: ['Siagla'] }];
  },
};

@Module({
  controllers: [SongsController],
  providers: [
    SongsService,
    // {
    //   provide: SongsService,
    //   useClass: SongsService,
    // },
    // {
    //   provide: SongsService,
    //   useValue: mockSongsService,
    // },
    {
      provide: 'CONNECTION',
      useValue: connection,
    },
  ],
})
export class SongsModule {}


================================================
FILE: module-04-dependency-injection/lesson-01/src/songs/songs.service.spec.ts
================================================
import { Test, TestingModule } from '@nestjs/testing';
import { SongsService } from './songs.service';

describe('SongsService', () => {
  let service: SongsService;

  beforeEach(async () => {
    const module: TestingModule = await Test.createTestingModule({
      providers: [SongsService],
    }).compile();

    service = module.get<SongsService>(SongsService);
  });

  it('should be defined', () => {
    expect(service).toBeDefined();
  });
});


================================================
FILE: module-04-dependency-injection/lesson-01/src/songs/songs.service.ts
================================================
import { Injectable } from '@nestjs/common';

@Injectable()
export class SongsService {
  // local db
  // local array

  private readonly songs = [];

  create(song) {
    // Save the song in the database
    this.songs.push(song);
    return this.songs;
  }

  findAll() {
    // fetch the songs from the db
    // Errors comes while fetching the data from DB
    // throw new Error('Error in Db whil fetching record');
    return this.songs;
  }
}


================================================
FILE: module-04-dependency-injection/lesson-01/test/app.e2e-spec.ts
================================================
import { Test, TestingModule } from '@nestjs/testing';
import { INestApplication } from '@nestjs/common';
import * as request from 'supertest';
import { AppModule } from './../src/app.module';

describe('AppController (e2e)', () => {
  let app: INestApplication;

  beforeEach(async () => {
    const moduleFixture: TestingModule = await Test.createTestingModule({
      imports: [AppModule],
    }).compile();

    app = moduleFixture.createNestApplication();
    await app.init();
  });

  it('/ (GET)', () => {
    return request(app.getHttpServer())
      .get('/')
      .expect(200)
      .expect('Hello World!');
  });
});


================================================
FILE: module-04-dependency-injection/lesson-01/test/jest-e2e.json
================================================
{
  "moduleFileExtensions": ["js", "json", "ts"],
  "rootDir": ".",
  "testEnvironment": "node",
  "testRegex": ".e2e-spec.ts$",
  "transform": {
    "^.+\\.(t|j)s$": "ts-jest"
  }
}


================================================
FILE: module-04-dependency-injection/lesson-01/tsconfig.build.json
================================================
{
  "extends": "./tsconfig.json",
  "exclude": ["node_modules", "test", "dist", "**/*spec.ts"]
}


================================================
FILE: module-04-dependency-injection/lesson-01/tsconfig.json
================================================
{
  "compilerOptions": {
    "module": "commonjs",
    "declaration": true,
    "removeComments": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "allowSyntheticDefaultImports": true,
    "target": "es2017",
    "sourceMap": true,
    "outDir": "./dist",
    "baseUrl": "./",
    "incremental": true,
    "skipLibCheck": true,
    "strictNullChecks": false,
    "noImplicitAny": false,
    "strictBindCallApply": false,
    "forceConsistentCasingInFileNames": false,
    "noFallthroughCasesInSwitch": false
  }
}


================================================
FILE: module-04-dependency-injection/lesson-02/.eslintrc.js
================================================
module.exports = {
  parser: '@typescript-eslint/parser',
  parserOptions: {
    project: 'tsconfig.json',
    tsconfigRootDir: __dirname,
    sourceType: 'module',
  },
  plugins: ['@typescript-eslint/eslint-plugin'],
  extends: [
    'plugin:@typescript-eslint/recommended',
    'plugin:prettier/recommended',
  ],
  root: true,
  env: {
    node: true,
    jest: true,
  },
  ignorePatterns: ['.eslintrc.js'],
  rules: {
    '@typescript-eslint/interface-name-prefix': 'off',
    '@typescript-eslint/explicit-function-return-type': 'off',
    '@typescript-eslint/explicit-module-boundary-types': 'off',
    '@typescript-eslint/no-explicit-any': 'off',
  },
};


================================================
FILE: module-04-dependency-injection/lesson-02/.gitignore
================================================
# compiled output
/dist
/node_modules

# Logs
logs
*.log
npm-debug.log*
pnpm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*

# OS
.DS_Store

# Tests
/coverage
/.nyc_output

# IDEs and editors
/.idea
.project
.classpath
.c9/
*.launch
.settings/
*.sublime-workspace

# IDE - VSCode
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json

================================================
FILE: module-04-dependency-injection/lesson-02/.prettierrc
================================================
{
  "singleQuote": true,
  "trailingComma": "all"
}

================================================
FILE: module-04-dependency-injection/lesson-02/README.md
================================================
<p align="center">
  <a href="http://nestjs.com/" target="blank"><img src="https://nestjs.com/img/logo-small.svg" width="200" 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://coveralls.io/github/nestjs/nest?branch=master" target="_blank"><img src="https://coveralls.io/repos/github/nestjs/nest/badge.svg?branch=master#9" alt="Coverage" /></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"/></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"></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.

## Installation

```bash
$ npm install
```

## Running the app

```bash
# development
$ npm run start

# watch mode
$ npm run start:dev

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

## Test

```bash
# unit tests
$ npm run test

# e2e tests
$ npm run test:e2e

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

## 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://kamilmysliwiec.com)
- Website - [https://nestjs.com](https://nestjs.com/)
- Twitter - [@nestframework](https://twitter.com/nestframework)

## License

Nest is [MIT licensed](LICENSE).


================================================
FILE: module-04-dependency-injection/lesson-02/nest-cli.json
================================================
{
  "$schema": "https://json.schemastore.org/nest-cli",
  "collection": "@nestjs/schematics",
  "sourceRoot": "src",
  "compilerOptions": {
    "deleteOutDir": true
  }
}


================================================
FILE: module-04-dependency-injection/lesson-02/package.json
================================================
{
  "name": "n-fundamentals-pro",
  "version": "0.0.1",
  "description": "",
  "author": "",
  "private": true,
  "license": "UNLICENSED",
  "scripts": {
    "build": "nest build",
    "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
    "start": "nest start",
    "start:dev": "nest start --watch",
    "start:debug": "nest start --debug --watch",
    "start:prod": "node dist/main",
    "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
    "test": "jest",
    "test:watch": "jest --watch",
    "test:cov": "jest --coverage",
    "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
    "test:e2e": "jest --config ./test/jest-e2e.json"
  },
  "dependencies": {
    "@nestjs/common": "^9.0.0",
    "@nestjs/core": "^9.0.0",
    "@nestjs/platform-express": "^9.0.0",
    "class-transformer": "^0.5.1",
    "class-validator": "^0.14.0",
    "reflect-metadata": "^0.1.13",
    "rxjs": "^7.2.0"
  },
  "devDependencies": {
    "@nestjs/cli": "^9.0.0",
    "@nestjs/schematics": "^9.0.0",
    "@nestjs/testing": "^9.0.0",
    "@types/express": "^4.17.13",
    "@types/jest": "29.2.4",
    "@types/node": "18.11.18",
    "@types/supertest": "^2.0.11",
    "@typescript-eslint/eslint-plugin": "^5.0.0",
    "@typescript-eslint/parser": "^5.0.0",
    "eslint": "^8.0.1",
    "eslint-config-prettier": "^8.3.0",
    "eslint-plugin-prettier": "^4.0.0",
    "jest": "29.3.1",
    "prettier": "^2.3.2",
    "source-map-support": "^0.5.20",
    "supertest": "^6.1.3",
    "ts-jest": "29.0.3",
    "ts-loader": "^9.2.3",
    "ts-node": "^10.0.0",
    "tsconfig-paths": "4.1.1",
    "typescript": "^4.7.4"
  },
  "jest": {
    "moduleFileExtensions": [
      "js",
      "json",
      "ts"
    ],
    "rootDir": "src",
    "testRegex": ".*\\.spec\\.ts$",
    "transform": {
      "^.+\\.(t|j)s$": "ts-jest"
    },
    "collectCoverageFrom": [
      "**/*.(t|j)s"
    ],
    "coverageDirectory": "../coverage",
    "testEnvironment": "node"
  }
}


================================================
FILE: module-04-dependency-injection/lesson-02/rest-client.http
================================================
GET http://localhost:3000

### SEND FETCH SONGS REQUEST
GET http://localhost:3000/songs

### Find SONGS REQUEST
GET http://localhost:3000/songs/1

### Create New SONGS REQUEST
POST http://localhost:3000/songs
Content-Type: application/json

{
"title": "lasting lover",
"artists": [
    "Siagla",
    "Martin",
    "John"
],
"releasedDate" : "2022-09-29",
"duration" :"02:34"
}



### Update SONGS REQUEST
PUT http://localhost:3000/songs/1

### Update SONGS REQUEST
DELETE http://localhost:3000/songs/1

================================================
FILE: module-04-dependency-injection/lesson-02/src/app.controller.spec.ts
================================================
import { Test, TestingModule } from '@nestjs/testing';
import { AppController } from './app.controller';
import { AppService } from './app.service';

describe('AppController', () => {
  let appController: AppController;

  beforeEach(async () => {
    const app: TestingModule = await Test.createTestingModule({
      controllers: [AppController],
      providers: [AppService],
    }).compile();

    appController = app.get<AppController>(AppController);
  });

  describe('root', () => {
    it('should return "Hello World!"', () => {
      expect(appController.getHello()).toBe('Hello World!');
    });
  });
});


================================================
FILE: module-04-dependency-injection/lesson-02/src/app.controller.ts
================================================
import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';

@Controller()
export class AppController {
  constructor(private readonly appService: AppService) {}

  @Get()
  getHello(): string {
    return this.appService.getHello();
  }
}


================================================
FILE: module-04-dependency-injection/lesson-02/src/app.module.ts
================================================
import { MiddlewareConsumer, Module, NestModule } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { LoggerMiddleware } from './common/middleware/logger.middleware';
import { SongsController } from './songs/songs.controller';
import { SongsModule } from './songs/songs.module';
import { DevConfigService } from './common/providers/DevConfigService';

const devConfig = { port: 3000 };
const proConfig = { port: 4000 };

@Module({
  imports: [SongsModule],
  controllers: [AppController],
  providers: [
    AppService,
    {
      provide: DevConfigService,
      useClass: DevConfigService,
    },
    {
      provide: 'CONFIG',
      useFactory: () => {
        return process.env.NODE_ENV === 'development' ? devConfig : proConfig;
      },
    },
  ],
})
export class AppModule implements NestModule {
  configure(consumer: MiddlewareConsumer) {
    // consumer.apply(LoggerMiddleware).forRoutes('songs'); // option no 1
    // consumer
    //   .apply(LoggerMiddleware)
    //   .forRoutes({ path: 'songs', method: RequestMethod.POST }); //option no 2

    consumer.apply(LoggerMiddleware).forRoutes(SongsController); //option no 3
  }
}


================================================
FILE: module-04-dependency-injection/lesson-02/src/app.service.ts
================================================
import { Inject, Injectable } from '@nestjs/common';
import { DevConfigService } from './common/providers/DevConfigService';

@Injectable()
export class AppService {
  constructor(
    private devConfigService: DevConfigService,
    @Inject('CONFIG')
    private config: { port: string },
  ) {}
  getHello(): string {
    return `Hello I am learning Nest.js Fundamentals ${this.devConfigService.getDBHOST()} PORT = ${
      this.config.port
    }`;
  }
}


================================================
FILE: module-04-dependency-injection/lesson-02/src/common/constatnts/connection.ts
================================================
export const connection: Connection = {
  CONNECTION_STRING: 'MYSQL://12324/sad',
  DB: 'MYSQL',
  DBNAME: 'TEST',
};
export type Connection = {
  CONNECTION_STRING: string;
  DB: string;
  DBNAME: string;
};


================================================
FILE: module-04-dependency-injection/lesson-02/src/common/middleware/logger.middleware.ts
================================================
import { Injectable, NestMiddleware } from '@nestjs/common';

@Injectable()
export class LoggerMiddleware implements NestMiddleware {
  use(req: any, res: any, next: () => void) {
    console.log('Request ....', new Date().toDateString());
    next();
  }
}


================================================
FILE: module-04-dependency-injection/lesson-02/src/common/providers/DevConfigService.ts
================================================
import { Injectable } from '@nestjs/common';

@Injectable()
export class DevConfigService {
  DBHOST = 'localhost';
  getDBHOST() {
    return this.DBHOST;
  }
}


================================================
FILE: module-04-dependency-injection/lesson-02/src/main.ts
================================================
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { ValidationPipe } from '@nestjs/common';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  app.useGlobalPipes(new ValidationPipe());
  await app.listen(3000);
}
bootstrap();


================================================
FILE: module-04-dependency-injection/lesson-02/src/songs/dto/create-song-dto.ts
================================================
import {
  IsArray,
  IsDateString,
  IsMilitaryTime,
  IsNotEmpty,
  IsString,
} from 'class-validator';

export class CreateSongDTO {
  @IsString()
  @IsNotEmpty()
  readonly title;

  @IsNotEmpty()
  @IsArray()
  @IsString({ each: true })
  readonly artists;

  @IsNotEmpty()
  @IsDateString()
  readonly releasedDate: Date;

  @IsMilitaryTime()
  @IsNotEmpty()
  readonly duration: Date;
}


================================================
FILE: module-04-dependency-injection/lesson-02/src/songs/songs.controller.spec.ts
================================================
import { Test, TestingModule } from '@nestjs/testing';
import { SongsController } from './songs.controller';

describe('SongsController', () => {
  let controller: SongsController;

  beforeEach(async () => {
    const module: TestingModule = await Test.createTestingModule({
      controllers: [SongsController],
    }).compile();

    controller = module.get<SongsController>(SongsController);
  });

  it('should be defined', () => {
    expect(controller).toBeDefined();
  });
});


================================================
FILE: module-04-dependency-injection/lesson-02/src/songs/songs.controller.ts
================================================
import {
  Controller,
  Get,
  Put,
  Delete,
  Post,
  HttpException,
  HttpStatus,
  Param,
  ParseIntPipe,
  Body,
  Inject,
  Scope,
} from '@nestjs/common';
import { SongsService } from './songs.service';
import { CreateSongDTO } from './dto/create-song-dto';
import { Connection } from 'src/common/constatnts/connection';

@Controller({ path: 'songs', scope: Scope.REQUEST })
export class SongsController {
  constructor(
    private songsService: SongsService,
    @Inject('CONNECTION')
    private connection: Connection,
  ) {
    console.log(
      `THIS IS CONNECTION STRING ${this.connection.CONNECTION_STRING}`,
    );
  }
  @Post()
  create(@Body() createSongDTO: CreateSongDTO) {
    return this.songsService.create(createSongDTO);
  }
  @Get()
  findAll() {
    try {
      return this.songsService.findAll();
    } catch (e) {
      throw new HttpException(
        'server error',
        HttpStatus.INTERNAL_SERVER_ERROR,
        {
          cause: e,
        },
      );
    }
  }
  @Get(':id')
  findOne(
    @Param(
      'id',
      new ParseIntPipe({ errorHttpStatusCode: HttpStatus.NOT_ACCEPTABLE }),
    )
    id: number,
  ) {
    return `fetch song on the based on id ${typeof id}`;
  }

  @Put(':id')
  update() {
    return 'update song on the based on id';
  }

  @Delete(':id')
  delete() {
    return 'delete song on the based on id';
  }
}


================================================
FILE: module-04-dependency-injection/lesson-02/src/songs/songs.module.ts
================================================
import { Module } from '@nestjs/common';
import { SongsController } from './songs.controller';
import { SongsService } from './songs.service';
import { connection } from 'src/common/constatnts/connection';

const mockSongsService = {
  findAll() {
    return [{ id: 1, title: 'Lasting lover', artists: ['Siagla'] }];
  },
};

@Module({
  controllers: [SongsController],
  providers: [
    SongsService,
    // {
    //   provide: SongsService,
    //   useClass: SongsService,
    // },
    // {
    //   provide: SongsService,
    //   useValue: mockSongsService,
    // },
    {
      provide: 'CONNECTION',
      useValue: connection,
    },
  ],
})
export class SongsModule {}


================================================
FILE: module-04-dependency-injection/lesson-02/src/songs/songs.service.spec.ts
================================================
import { Test, TestingModule } from '@nestjs/testing';
import { SongsService } from './songs.service';

describe('SongsService', () => {
  let service: SongsService;

  beforeEach(async () => {
    const module: TestingModule = await Test.createTestingModule({
      providers: [SongsService],
    }).compile();

    service = module.get<SongsService>(SongsService);
  });

  it('should be defined', () => {
    expect(service).toBeDefined();
  });
});


================================================
FILE: module-04-dependency-injection/lesson-02/src/songs/songs.service.ts
================================================
import { Injectable, Scope } from '@nestjs/common';

@Injectable({
  scope: Scope.TRANSIENT,
})
export class SongsService {
  // local db
  // local array

  private readonly songs = [];

  create(song) {
    // Save the song in the database
    this.songs.push(song);
    return this.songs;
  }

  findAll() {
    // fetch the songs from the db
    // Errors comes while fetching the data from DB
    // throw new Error('Error in Db whil fetching record');
    return this.songs;
  }
}


================================================
FILE: module-04-dependency-injection/lesson-02/test/app.e2e-spec.ts
================================================
import { Test, TestingModule } from '@nestjs/testing';
import { INestApplication } from '@nestjs/common';
import * as request from 'supertest';
import { AppModule } from './../src/app.module';

describe('AppController (e2e)', () => {
  let app: INestApplication;

  beforeEach(async () => {
    const moduleFixture: TestingModule = await Test.createTestingModule({
      imports: [AppModule],
    }).compile();

    app = moduleFixture.createNestApplication();
    await app.init();
  });

  it('/ (GET)', () => {
    return request(app.getHttpServer())
      .get('/')
      .expect(200)
      .expect('Hello World!');
  });
});


================================================
FILE: module-04-dependency-injection/lesson-02/test/jest-e2e.json
================================================
{
  "moduleFileExtensions": ["js", "json", "ts"],
  "rootDir": ".",
  "testEnvironment": "node",
  "testRegex": ".e2e-spec.ts$",
  "transform": {
    "^.+\\.(t|j)s$": "ts-jest"
  }
}


================================================
FILE: module-04-dependency-injection/lesson-02/tsconfig.build.json
================================================
{
  "extends": "./tsconfig.json",
  "exclude": ["node_modules", "test", "dist", "**/*spec.ts"]
}


================================================
FILE: module-04-dependency-injection/lesson-02/tsconfig.json
================================================
{
  "compilerOptions": {
    "module": "commonjs",
    "declaration": true,
    "removeComments": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "allowSyntheticDefaultImports": true,
    "target": "es2017",
    "sourceMap": true,
    "outDir": "./dist",
    "baseUrl": "./",
    "incremental": true,
    "skipLibCheck": true,
    "strictNullChecks": false,
    "noImplicitAny": false,
    "strictBindCallApply": false,
    "forceConsistentCasingInFileNames": false,
    "noFallthroughCasesInSwitch": false
  }
}


================================================
FILE: module-05-connect-nestjs-to-postgress/lesson-01/.eslintrc.js
================================================
module.exports = {
  parser: '@typescript-eslint/parser',
  parserOptions: {
    project: 'tsconfig.json',
    tsconfigRootDir: __dirname,
    sourceType: 'module',
  },
  plugins: ['@typescript-eslint/eslint-plugin'],
  extends: [
    'plugin:@typescript-eslint/recommended',
    'plugin:prettier/recommended',
  ],
  root: true,
  env: {
    node: true,
    jest: true,
  },
  ignorePatterns: ['.eslintrc.js'],
  rules: {
    '@typescript-eslint/interface-name-prefix': 'off',
    '@typescript-eslint/explicit-function-return-type': 'off',
    '@typescript-eslint/explicit-module-boundary-types': 'off',
    '@typescript-eslint/no-explicit-any': 'off',
  },
};


================================================
FILE: module-05-connect-nestjs-to-postgress/lesson-01/.gitignore
================================================
# compiled output
/dist
/node_modules

# Logs
logs
*.log
npm-debug.log*
pnpm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*

# OS
.DS_Store

# Tests
/coverage
/.nyc_output

# IDEs and editors
/.idea
.project
.classpath
.c9/
*.launch
.settings/
*.sublime-workspace

# IDE - VSCode
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json

================================================
FILE: module-05-connect-nestjs-to-postgress/lesson-01/.prettierrc
================================================
{
  "singleQuote": true,
  "trailingComma": "all"
}

================================================
FILE: module-05-connect-nestjs-to-postgress/lesson-01/README.md
================================================
<p align="center">
  <a href="http://nestjs.com/" target="blank"><img src="https://nestjs.com/img/logo-small.svg" width="200" 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://coveralls.io/github/nestjs/nest?branch=master" target="_blank"><img src="https://coveralls.io/repos/github/nestjs/nest/badge.svg?branch=master#9" alt="Coverage" /></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"/></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"></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.

## Installation

```bash
$ npm install
```

## Running the app

```bash
# development
$ npm run start

# watch mode
$ npm run start:dev

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

## Test

```bash
# unit tests
$ npm run test

# e2e tests
$ npm run test:e2e

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

## 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://kamilmysliwiec.com)
- Website - [https://nestjs.com](https://nestjs.com/)
- Twitter - [@nestframework](https://twitter.com/nestframework)

## License

Nest is [MIT licensed](LICENSE).


================================================
FILE: module-05-connect-nestjs-to-postgress/lesson-01/nest-cli.json
================================================
{
  "$schema": "https://json.schemastore.org/nest-cli",
  "collection": "@nestjs/schematics",
  "sourceRoot": "src",
  "compilerOptions": {
    "deleteOutDir": true
  }
}


================================================
FILE: module-05-connect-nestjs-to-postgress/lesson-01/package.json
================================================
{
  "name": "n-fundamentals-pro",
  "version": "0.0.1",
  "description": "",
  "author": "",
  "private": true,
  "license": "UNLICENSED",
  "scripts": {
    "build": "nest build",
    "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
    "start": "nest start",
    "start:dev": "nest start --watch",
    "start:debug": "nest start --debug --watch",
    "start:prod": "node dist/main",
    "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
    "test": "jest",
    "test:watch": "jest --watch",
    "test:cov": "jest --coverage",
    "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
    "test:e2e": "jest --config ./test/jest-e2e.json"
  },
  "dependencies": {
    "@nestjs/common": "^9.0.0",
    "@nestjs/core": "^9.0.0",
    "@nestjs/platform-express": "^9.0.0",
    "class-transformer": "^0.5.1",
    "class-validator": "^0.14.0",
    "reflect-metadata": "^0.1.13",
    "rxjs": "^7.2.0",
    "@nestjs/typeorm": "^9.0.1",
    "pg": "^8.10.0",
    "typeorm": "^0.3.15"
  },
  "devDependencies": {
    "@nestjs/cli": "^9.0.0",
    "@nestjs/schematics": "^9.0.0",
    "@nestjs/testing": "^9.0.0",
    "@types/express": "^4.17.13",
    "@types/jest": "29.2.4",
    "@types/node": "18.11.18",
    "@types/supertest": "^2.0.11",
    "@typescript-eslint/eslint-plugin": "^5.0.0",
    "@typescript-eslint/parser": "^5.0.0",
    "eslint": "^8.0.1",
    "eslint-config-prettier": "^8.3.0",
    "eslint-plugin-prettier": "^4.0.0",
    "jest": "29.3.1",
    "prettier": "^2.3.2",
    "source-map-support": "^0.5.20",
    "supertest": "^6.1.3",
    "ts-jest": "29.0.3",
    "ts-loader": "^9.2.3",
    "ts-node": "^10.0.0",
    "tsconfig-paths": "4.1.1",
    "typescript": "^4.7.4"
  },
  "jest": {
    "moduleFileExtensions": [
      "js",
      "json",
      "ts"
    ],
    "rootDir": "src",
    "testRegex": ".*\\.spec\\.ts$",
    "transform": {
      "^.+\\.(t|j)s$": "ts-jest"
    },
    "collectCoverageFrom": [
      "**/*.(t|j)s"
    ],
    "coverageDirectory": "../coverage",
    "testEnvironment": "node"
  }
}


================================================
FILE: module-05-connect-nestjs-to-postgress/lesson-01/rest-client.http
================================================
GET http://localhost:3000

### SEND FETCH SONGS REQUEST
GET http://localhost:3000/songs

### Find SONGS REQUEST
GET http://localhost:3000/songs/1

### Create New SONGS REQUEST
POST http://localhost:3000/songs
Content-Type: application/json

{
"title": "lasting lover",
"artists": [
    "Siagla",
    "Martin",
    "John"
],
"releasedDate" : "2022-09-29",
"duration" :"02:34"
}



### Update SONGS REQUEST
PUT http://localhost:3000/songs/1

### Update SONGS REQUEST
DELETE http://localhost:3000/songs/1

================================================
FILE: module-05-connect-nestjs-to-postgress/lesson-01/src/app.controller.spec.ts
================================================
import { Test, TestingModule } from '@nestjs/testing';
import { AppController } from './app.controller';
import { AppService } from './app.service';

describe('AppController', () => {
  let appController: AppController;

  beforeEach(async () => {
    const app: TestingModule = await Test.createTestingModule({
      controllers: [AppController],
      providers: [AppService],
    }).compile();

    appController = app.get<AppController>(AppController);
  });

  describe('root', () => {
    it('should return "Hello World!"', () => {
      expect(appController.getHello()).toBe('Hello World!');
    });
  });
});


================================================
FILE: module-05-connect-nestjs-to-postgress/lesson-01/src/app.controller.ts
================================================
import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';

@Controller()
export class AppController {
  constructor(private readonly appService: AppService) {}

  @Get()
  getHello(): string {
    return this.appService.getHello();
  }
}


================================================
FILE: module-05-connect-nestjs-to-postgress/lesson-01/src/app.module.ts
================================================
import { MiddlewareConsumer, Module, NestModule } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { LoggerMiddleware } from './common/middleware/logger.middleware';
import { SongsController } from './songs/songs.controller';
import { SongsModule } from './songs/songs.module';
import { DataSource } from 'typeorm';

@Module({
  imports: [
    TypeOrmModule.forRoot({
      type: 'postgres',
      database: 'spotify-clone',
      host: 'localhost',
      port: 5432,
      username: 'postgres',
      password: 'root',
      entities: [],
      synchronize: true,
    }),
    SongsModule,
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule implements NestModule {
  constructor(private dataSource: DataSource) {
    console.log('dbName ', dataSource.driver.database);
  }
  configure(consumer: MiddlewareConsumer) {
    // consumer.apply(LoggerMiddleware).forRoutes('songs'); // option no 1
    // consumer
    //   .apply(LoggerMiddleware)
    //   .forRoutes({ path: 'songs', method: RequestMethod.POST }); //option no 2

    consumer.apply(LoggerMiddleware).forRoutes(SongsController); //option no 3
  }
}


================================================
FILE: module-05-connect-nestjs-to-postgress/lesson-01/src/app.service.ts
================================================
import { Inject, Injectable } from '@nestjs/common';
import { DevConfigService } from './common/providers/DevConfigService';

@Injectable()
export class AppService {
  getHello(): string {
    return 'Hello I am learning Nest.js Fundamentals';
  }
}


================================================
FILE: module-05-connect-nestjs-to-postgress/lesson-01/src/common/constatnts/connection.ts
================================================
export const connection: Connection = {
  CONNECTION_STRING: 'MYSQL://12324/sad',
  DB: 'MYSQL',
  DBNAME: 'TEST',
};
export type Connection = {
  CONNECTION_STRING: string;
  DB: string;
  DBNAME: string;
};


================================================
FILE: module-05-connect-nestjs-to-postgress/lesson-01/src/common/middleware/logger.middleware.ts
================================================
import { Injectable, NestMiddleware } from '@nestjs/common';

@Injectable()
export class LoggerMiddleware implements NestMiddleware {
  use(req: any, res: any, next: () => void) {
    console.log('Request ....', new Date().toDateString());
    next();
  }
}


================================================
FILE: module-05-connect-nestjs-to-postgress/lesson-01/src/common/providers/DevConfigService.ts
================================================
import { Injectable } from '@nestjs/common';

@Injectable()
export class DevConfigService {
  DBHOST = 'localhost';
  getDBHOST() {
    return this.DBHOST;
  }
}


================================================
FILE: module-05-connect-nestjs-to-postgress/lesson-01/src/main.ts
================================================
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { ValidationPipe } from '@nestjs/common';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  app.useGlobalPipes(new ValidationPipe());
  await app.listen(3000);
}
bootstrap();


================================================
FILE: module-05-connect-nestjs-to-postgress/lesson-01/src/songs/dto/create-song-dto.ts
================================================
import {
  IsArray,
  IsDateString,
  IsMilitaryTime,
  IsNotEmpty,
  IsString,
} from 'class-validator';

export class CreateSongDTO {
  @IsString()
  @IsNotEmpty()
  readonly title;

  @IsNotEmpty()
  @IsArray()
  @IsString({ each: true })
  readonly artists;

  @IsNotEmpty()
  @IsDateString()
  readonly releasedDate: Date;

  @IsMilitaryTime()
  @IsNotEmpty()
  readonly duration: Date;
}


================================================
FILE: module-05-connect-nestjs-to-postgress/lesson-01/src/songs/songs.controller.spec.ts
================================================
import { Test, TestingModule } from '@nestjs/testing';
import { SongsController } from './songs.controller';

describe('SongsController', () => {
  let controller: SongsController;

  beforeEach(async () => {
    const module: TestingModule = await Test.createTestingModule({
      controllers: [SongsController],
    }).compile();

    controller = module.get<SongsController>(SongsController);
  });

  it('should be defined', () => {
    expect(controller).toBeDefined();
  });
});


================================================
FILE: module-05-connect-nestjs-to-postgress/lesson-01/src/songs/songs.controller.ts
================================================
import {
  Controller,
  Get,
  Put,
  Delete,
  Post,
  HttpException,
  HttpStatus,
  Param,
  ParseIntPipe,
  Body,
  Inject,
  Scope,
} from '@nestjs/common';
import { SongsService } from './songs.service';
import { CreateSongDTO } from './dto/create-song-dto';

@Controller('songs')
export class SongsController {
  constructor(private songsService: SongsService) {}
  @Post()
  create(@Body() createSongDTO: CreateSongDTO) {
    return this.songsService.create(createSongDTO);
  }
  @Get()
  findAll() {
    try {
      return this.songsService.findAll();
    } catch (e) {
      throw new HttpException(
        'server error',
        HttpStatus.INTERNAL_SERVER_ERROR,
        {
          cause: e,
        },
      );
    }
  }
  @Get(':id')
  findOne(
    @Param(
      'id',
      new ParseIntPipe({ errorHttpStatusCode: HttpStatus.NOT_ACCEPTABLE }),
    )
    id: number,
  ) {
    return `fetch song on the based on id ${typeof id}`;
  }

  @Put(':id')
  update() {
    return 'update song on the based on id';
  }

  @Delete(':id')
  delete() {
    return 'delete song on the based on id';
  }
}


================================================
FILE: module-05-connect-nestjs-to-postgress/lesson-01/src/songs/songs.module.ts
================================================
import { Module } from '@nestjs/common';
import { SongsController } from './songs.controller';
import { SongsService } from './songs.service';

@Module({
  controllers: [SongsController],
  providers: [SongsService],
})
export class SongsModule {}


================================================
FILE: module-05-connect-nestjs-to-postgress/lesson-01/src/songs/songs.service.spec.ts
================================================
import { Test, TestingModule } from '@nestjs/testing';
import { SongsService } from './songs.service';

describe('SongsService', () => {
  let service: SongsService;

  beforeEach(async () => {
    const module: TestingModule = await Test.createTestingModule({
      providers: [SongsService],
    }).compile();

    service = module.get<SongsService>(SongsService);
  });

  it('should be defined', () => {
    expect(service).toBeDefined();
  });
});


================================================
FILE: module-05-connect-nestjs-to-postgress/lesson-01/src/songs/songs.service.ts
================================================
import { Injectable } from '@nestjs/common';

@Injectable()
export class SongsService {
  // local db
  // local array

  private readonly songs = [];

  create(song) {
    // Save the song in the database
    this.songs.push(song);
    return this.songs;
  }

  findAll() {
    // fetch the songs from the db
    // Errors comes while fetching the data from DB
    // throw new Error('Error in Db whil fetching record');
    return this.songs;
  }
}


================================================
FILE: module-05-connect-nestjs-to-postgress/lesson-01/test/app.e2e-spec.ts
================================================
import { Test, TestingModule } from '@nestjs/testing';
import { INestApplication } from '@nestjs/common';
import * as request from 'supertest';
import { AppModule } from './../src/app.module';

describe('AppController (e2e)', () => {
  let app: INestApplication;

  beforeEach(async () => {
    const moduleFixture: TestingModule = await Test.createTestingModule({
      imports: [AppModule],
    }).compile();

    app = moduleFixture.createNestApplication();
    await app.init();
  });

  it('/ (GET)', () => {
    return request(app.getHttpServer())
      .get('/')
      .expect(200)
      .expect('Hello World!');
  });
});


================================================
FILE: module-05-connect-nestjs-to-postgress/lesson-01/test/jest-e2e.json
================================================
{
  "moduleFileExtensions": ["js", "json", "ts"],
  "rootDir": ".",
  "testEnvironment": "node",
  "testRegex": ".e2e-spec.ts$",
  "transform": {
    "^.+\\.(t|j)s$": "ts-jest"
  }
}


================================================
FILE: module-05-connect-nestjs-to-postgress/lesson-01/tsconfig.build.json
================================================
{
  "extends": "./tsconfig.json",
  "exclude": ["node_modules", "test", "dist", "**/*spec.ts"]
}


================================================
FILE: module-05-connect-nestjs-to-postgress/lesson-01/tsconfig.json
================================================
{
  "compilerOptions": {
    "module": "commonjs",
    "declaration": true,
    "removeComments": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "allowSyntheticDefaultImports": true,
    "target": "es2017",
    "sourceMap": true,
    "outDir": "./dist",
    "baseUrl": "./",
    "incremental": true,
    "skipLibCheck": true,
    "strictNullChecks": false,
    "noImplicitAny": false,
    "strictBindCallApply": false,
    "forceConsistentCasingInFileNames": false,
    "noFallthroughCasesInSwitch": false
  }
}


================================================
FILE: module-05-connect-nestjs-to-postgress/lesson-02/.eslintrc.js
================================================
module.exports = {
  parser: '@typescript-eslint/parser',
  parserOptions: {
    project: 'tsconfig.json',
    tsconfigRootDir: __dirname,
    sourceType: 'module',
  },
  plugins: ['@typescript-eslint/eslint-plugin'],
  extends: [
    'plugin:@typescript-eslint/recommended',
    'plugin:prettier/recommended',
  ],
  root: true,
  env: {
    node: true,
    jest: true,
  },
  ignorePatterns: ['.eslintrc.js'],
  rules: {
    '@typescript-eslint/interface-name-prefix': 'off',
    '@typescript-eslint/explicit-function-return-type': 'off',
    '@typescript-eslint/explicit-module-boundary-types': 'off',
    '@typescript-eslint/no-explicit-any': 'off',
  },
};


================================================
FILE: module-05-connect-nestjs-to-postgress/lesson-02/.gitignore
================================================
# compiled output
/dist
/node_modules

# Logs
logs
*.log
npm-debug.log*
pnpm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*

# OS
.DS_Store

# Tests
/coverage
/.nyc_output

# IDEs and editors
/.idea
.project
.classpath
.c9/
*.launch
.settings/
*.sublime-workspace

# IDE - VSCode
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json

================================================
FILE: module-05-connect-nestjs-to-postgress/lesson-02/.prettierrc
================================================
{
  "singleQuote": true,
  "trailingComma": "all"
}

================================================
FILE: module-05-connect-nestjs-to-postgress/lesson-02/README.md
================================================
<p align="center">
  <a href="http://nestjs.com/" target="blank"><img src="https://nestjs.com/img/logo-small.svg" width="200" 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://coveralls.io/github/nestjs/nest?branch=master" target="_blank"><img src="https://coveralls.io/repos/github/nestjs/nest/badge.svg?branch=master#9" alt="Coverage" /></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"/></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"></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.

## Installation

```bash
$ npm install
```

## Running the app

```bash
# development
$ npm run start

# watch mode
$ npm run start:dev

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

## Test

```bash
# unit tests
$ npm run test

# e2e tests
$ npm run test:e2e

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

## 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://kamilmysliwiec.com)
- Website - [https://nestjs.com](https://nestjs.com/)
- Twitter - [@nestframework](https://twitter.com/nestframework)

## License

Nest is [MIT licensed](LICENSE).


================================================
FILE: module-05-connect-nestjs-to-postgress/lesson-02/nest-cli.json
================================================
{
  "$schema": "https://json.schemastore.org/nest-cli",
  "collection": "@nestjs/schematics",
  "sourceRoot": "src",
  "compilerOptions": {
    "deleteOutDir": true
  }
}


================================================
FILE: module-05-connect-nestjs-to-postgress/lesson-02/package.json
================================================
{
  "name": "n-fundamentals-pro",
  "version": "0.0.1",
  "description": "",
  "author": "",
  "private": true,
  "license": "UNLICENSED",
  "scripts": {
    "build": "nest build",
    "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
    "start": "nest start",
    "start:dev": "nest start --watch",
    "start:debug": "nest start --debug --watch",
    "start:prod": "node dist/main",
    "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
    "test": "jest",
    "test:watch": "jest --watch",
    "test:cov": "jest --coverage",
    "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
    "test:e2e": "jest --config ./test/jest-e2e.json"
  },
  "dependencies": {
    "@nestjs/common": "^9.0.0",
    "@nestjs/core": "^9.0.0",
    "@nestjs/platform-express": "^9.0.0",
    "class-transformer": "^0.5.1",
    "class-validator": "^0.14.0",
    "reflect-metadata": "^0.1.13",
    "rxjs": "^7.2.0",
    "@nestjs/typeorm": "^9.0.1",
    "pg": "^8.10.0",
    "typeorm": "^0.3.15"
  },
  "devDependencies": {
    "@nestjs/cli": "^9.0.0",
    "@nestjs/schematics": "^9.0.0",
    "@nestjs/testing": "^9.0.0",
    "@types/express": "^4.17.13",
    "@types/jest": "29.2.4",
    "@types/node": "18.11.18",
    "@types/supertest": "^2.0.11",
    "@typescript-eslint/eslint-plugin": "^5.0.0",
    "@typescript-eslint/parser": "^5.0.0",
    "eslint": "^8.0.1",
    "eslint-config-prettier": "^8.3.0",
    "eslint-plugin-prettier": "^4.0.0",
    "jest": "29.3.1",
    "prettier": "^2.3.2",
    "source-map-support": "^0.5.20",
    "supertest": "^6.1.3",
    "ts-jest": "29.0.3",
    "ts-loader": "^9.2.3",
    "ts-node": "^10.0.0",
    "tsconfig-paths": "4.1.1",
    "typescript": "^4.7.4"
  },
  "jest": {
    "moduleFileExtensions": [
      "js",
      "json",
      "ts"
    ],
    "rootDir": "src",
    "testRegex": ".*\\.spec\\.ts$",
    "transform": {
      "^.+\\.(t|j)s$": "ts-jest"
    },
    "collectCoverageFrom": [
      "**/*.(t|j)s"
    ],
    "coverageDirectory": "../coverage",
    "testEnvironment": "node"
  }
}


================================================
FILE: module-05-connect-nestjs-to-postgress/lesson-02/rest-client.http
================================================
GET http://localhost:3000

### SEND FETCH SONGS REQUEST
GET http://localhost:3000/songs

### Find SONGS REQUEST
GET http://localhost:3000/songs/1

### Create New SONGS REQUEST
POST http://localhost:3000/songs
Content-Type: application/json

{
"title": "lasting lover",
"artists": [
    "Siagla",
    "Martin",
    "John"
],
"releasedDate" : "2022-09-29",
"duration" :"02:34"
}



### Update SONGS REQUEST
PUT http://localhost:3000/songs/1

### Update SONGS REQUEST
DELETE http://localhost:3000/songs/1

================================================
FILE: module-05-connect-nestjs-to-postgress/lesson-02/src/app.controller.spec.ts
================================================
import { Test, TestingModule } from '@nestjs/testing';
import { AppController } from './app.controller';
import { AppService } from './app.service';

describe('AppController', () => {
  let appController: AppController;

  beforeEach(async () => {
    const app: TestingModule = await Test.createTestingModule({
      controllers: [AppController],
      providers: [AppService],
    }).compile();

    appController = app.get<AppController>(AppController);
  });

  describe('root', () => {
    it('should return "Hello World!"', () => {
      expect(appController.getHello()).toBe('Hello World!');
    });
  });
});


================================================
FILE: module-05-connect-nestjs-to-postgress/lesson-02/src/app.controller.ts
================================================
import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';

@Controller()
export class AppController {
  constructor(private readonly appService: AppService) {}

  @Get()
  getHello(): string {
    return this.appService.getHello();
  }
}


================================================
FILE: module-05-connect-nestjs-to-postgress/lesson-02/src/app.module.ts
================================================
import { MiddlewareConsumer, Module, NestModule } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { LoggerMiddleware } from './common/middleware/logger.middleware';
import { SongsController } from './songs/songs.controller';
import { SongsModule } from './songs/songs.module';
import { Song } from './songs/song.entity';
// import { DataSource } from 'typeorm';

@Module({
  imports: [
    TypeOrmModule.forRoot({
      type: 'postgres',
      database: 'spotify-clone',
      host: 'localhost',
      port: 5432,
      username: 'postgres',
      password: 'root',
      entities: [Song],
      synchronize: true,
    }),
    SongsModule,
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule implements NestModule {
  constructor(/*private dataSource: DataSource*/) {
    // console.log('dbName ', dataSource.driver.database);
  }
  configure(consumer: MiddlewareConsumer) {
    // consumer.apply(LoggerMiddleware).forRoutes('songs'); // option no 1
    // consumer
    //   .apply(LoggerMiddleware)
    //   .forRoutes({ path: 'songs', method: RequestMethod.POST }); //option no 2

    consumer.apply(LoggerMiddleware).forRoutes(SongsController); //option no 3
  }
}


================================================
FILE: module-05-connect-nestjs-to-postgress/lesson-02/src/app.service.ts
================================================
import { Inject, Injectable } from '@nestjs/common';
import { DevConfigService } from './common/providers/DevConfigService';

@Injectable()
export class AppService {
  getHello(): string {
    return 'Hello I am learning Nest.js Fundamentals';
  }
}


================================================
FILE: module-05-connect-nestjs-to-postgress/lesson-02/src/common/constatnts/connection.ts
================================================
export const connection: Connection = {
  CONNECTION_STRING: 'MYSQL://12324/sad',
  DB: 'MYSQL',
  DBNAME: 'TEST',
};
export type Connection = {
  CONNECTION_STRING: string;
  DB: string;
  DBNAME: string;
};


================================================
FILE: module-05-connect-nestjs-to-postgress/lesson-02/src/common/middleware/logger.middleware.ts
================================================
import { Injectable, NestMiddleware } from '@nestjs/common';

@Injectable()
export class LoggerMiddleware implements NestMiddleware {
  use(req: any, res: any, next: () => void) {
    console.log('Request ....', new Date().toDateString());
    next();
  }
}


================================================
FILE: module-05-connect-nestjs-to-postgress/lesson-02/src/common/providers/DevConfigService.ts
================================================
import { Injectable } from '@nestjs/common';

@Injectable()
export class DevConfigService {
  DBHOST = 'localhost';
  getDBHOST() {
    return this.DBHOST;
  }
}


================================================
FILE: module-05-connect-nestjs-to-postgress/lesson-02/src/main.ts
================================================
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { ValidationPipe } from '@nestjs/common';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  app.useGlobalPipes(new ValidationPipe());
  await app.listen(3000);
}
bootstrap();


================================================
FILE: module-05-connect-nestjs-to-postgress/lesson-02/src/songs/dto/create-song-dto.ts
================================================
import {
  IsArray,
  IsDateString,
  IsMilitaryTime,
  IsNotEmpty,
  IsOptional,
  IsString,
} from 'class-validator';

export class CreateSongDTO {
  @IsString()
  @IsNotEmpty()
  readonly title;

  @IsNotEmpty()
  @IsArray()
  @IsString({ each: true })
  readonly artists;

  @IsNotEmpty()
  @IsDateString()
  readonly releasedDate: Date;

  @IsMilitaryTime()
  @IsNotEmpty()
  readonly duration: Date;

  @IsString()
  @IsOptional()
  readonly lyrics: string;
}


================================================
FILE: module-05-connect-nestjs-to-postgress/lesson-02/src/songs/song.entity.ts
================================================
import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm';

@Entity('songs')
export class Song {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  title: string;

  @Column('varchar', { array: true })
  artists: string[];

  @Column('date')
  releasedDate: Date;

  @Column('time')
  duration: Date;

  @Column('text')
  lyrics: string;
}


================================================
FILE: module-05-connect-nestjs-to-postgress/lesson-02/src/songs/songs.controller.spec.ts
================================================
import { Test, TestingModule } from '@nestjs/testing';
import { SongsController } from './songs.controller';

describe('SongsController', () => {
  let controller: SongsController;

  beforeEach(async () => {
    const module: TestingModule = await Test.createTestingModule({
      controllers: [SongsController],
    }).compile();

    controller = module.get<SongsController>(SongsController);
  });

  it('should be defined', () => {
    expect(controller).toBeDefined();
  });
});


================================================
FILE: module-05-connect-nestjs-to-postgress/lesson-02/src/songs/songs.controller.ts
================================================
import {
  Controller,
  Get,
  Put,
  Delete,
  Post,
  HttpException,
  HttpStatus,
  Param,
  ParseIntPipe,
  Body,
  Inject,
  Scope,
} from '@nestjs/common';
import { SongsService } from './songs.service';
import { CreateSongDTO } from './dto/create-song-dto';

@Controller('songs')
export class SongsController {
  constructor(private songsService: SongsService) {}
  @Post()
  create(@Body() createSongDTO: CreateSongDTO) {
    return this.songsService.create(createSongDTO);
  }
  @Get()
  findAll() {
    try {
      return this.songsService.findAll();
    } catch (e) {
      throw new HttpException(
        'server error',
        HttpStatus.INTERNAL_SERVER_ERROR,
        {
          cause: e,
        },
      );
    }
  }
  @Get(':id')
  findOne(
    @Param(
      'id',
      new ParseIntPipe({ errorHttpStatusCode: HttpStatus.NOT_ACCEPTABLE }),
    )
    id: number,
  ) {
    return `fetch song on the based on id ${typeof id}`;
  }

  @Put(':id')
  update() {
    return 'update song on the based on id';
  }

  @Delete(':id')
  delete() {
    return 'delete song on the based on id';
  }
}


================================================
FILE: module-05-connect-nestjs-to-postgress/lesson-02/src/songs/songs.module.ts
================================================
import { Module } from '@nestjs/common';
import { SongsController } from './songs.controller';
import { SongsService } from './songs.service';

@Module({
  controllers: [SongsController],
  providers: [SongsService],
})
export class SongsModule {}


================================================
FILE: module-05-connect-nestjs-to-postgress/lesson-02/src/songs/songs.service.spec.ts
================================================
import { Test, TestingModule } from '@nestjs/testing';
import { SongsService } from './songs.service';

describe('SongsService', () => {
  let service: SongsService;

  beforeEach(async () => {
    const module: TestingModule = await Test.createTestingModule({
      providers: [SongsService],
    }).compile();

    service = module.get<SongsService>(SongsService);
  });

  it('should be defined', () => {
    expect(service).toBeDefined();
  });
});


================================================
FILE: module-05-connect-nestjs-to-postgress/lesson-02/src/songs/songs.service.ts
================================================
import { Injectable } from '@nestjs/common';

@Injectable()
export class SongsService {
  // local db
  // local array

  private readonly songs = [];

  create(song) {
    // Save the song in the database
    this.songs.push(song);
    return this.songs;
  }

  findAll() {
    // fetch the songs from the db
    // Errors comes while fetching the data from DB
    // throw new Error('Error in Db whil fetching record');
    return this.songs;
  }
}


================================================
FILE: module-05-connect-nestjs-to-postgress/lesson-02/test/app.e2e-spec.ts
================================================
import { Test, TestingModule } from '@nestjs/testing';
import { INestApplication } from '@nestjs/common';
import * as request from 'supertest';
import { AppModule } from './../src/app.module';

describe('AppController (e2e)', () => {
  let app: INestApplication;

  beforeEach(async () => {
    const moduleFixture: TestingModule = await Test.createTestingModule({
      imports: [AppModule],
    }).compile();

    app = moduleFixture.createNestApplication();
    await app.init();
  });

  it('/ (GET)', () => {
    return request(app.getHttpServer())
      .get('/')
      .expect(200)
      .expect('Hello World!');
  });
});


================================================
FILE: module-05-connect-nestjs-to-postgress/lesson-02/test/jest-e2e.json
================================================
{
  "moduleFileExtensions": ["js", "json", "ts"],
  "rootDir": ".",
  "testEnvironment": "node",
  "testRegex": ".e2e-spec.ts$",
  "transform": {
    "^.+\\.(t|j)s$": "ts-jest"
  }
}


================================================
FILE: module-05-connect-nestjs-to-postgress/lesson-02/tsconfig.build.json
================================================
{
  "extends": "./tsconfig.json",
  "exclude": ["node_modules", "test", "dist", "**/*spec.ts"]
}


================================================
FILE: module-05-connect-nestjs-to-postgress/lesson-02/tsconfig.json
================================================
{
  "compilerOptions": {
    "module": "commonjs",
    "declaration": true,
    "removeComments": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "allowSyntheticDefaultImports": true,
    "target": "es2017",
    "sourceMap": true,
    "outDir": "./dist",
    "baseUrl": "./",
    "incremental": true,
    "skipLibCheck": true,
    "strictNullChecks": false,
    "noImplicitAny": false,
    "strictBindCallApply": false,
    "forceConsistentCasingInFileNames": false,
    "noFallthroughCasesInSwitch": false
  }
}


================================================
FILE: module-05-connect-nestjs-to-postgress/lesson-03/.eslintrc.js
================================================
module.exports = {
  parser: '@typescript-eslint/parser',
  parserOptions: {
    project: 'tsconfig.json',
    tsconfigRootDir: __dirname,
    sourceType: 'module',
  },
  plugins: ['@typescript-eslint/eslint-plugin'],
  extends: [
    'plugin:@typescript-eslint/recommended',
    'plugin:prettier/recommended',
  ],
  root: true,
  env: {
    node: true,
    jest: true,
  },
  ignorePatterns: ['.eslintrc.js'],
  rules: {
    '@typescript-eslint/interface-name-prefix': 'off',
    '@typescript-eslint/explicit-function-return-type': 'off',
    '@typescript-eslint/explicit-module-boundary-types': 'off',
    '@typescript-eslint/no-explicit-any': 'off',
  },
};


================================================
FILE: module-05-connect-nestjs-to-postgress/lesson-03/.gitignore
================================================
# compiled output
/dist
/node_modules

# Logs
logs
*.log
npm-debug.log*
pnpm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*

# OS
.DS_Store

# Tests
/coverage
/.nyc_output

# IDEs and editors
/.idea
.project
.classpath
.c9/
*.launch
.settings/
*.sublime-workspace

# IDE - VSCode
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json

================================================
FILE: module-05-connect-nestjs-to-postgress/lesson-03/.prettierrc
================================================
{
  "singleQuote": true,
  "trailingComma": "all"
}

================================================
FILE: module-05-connect-nestjs-to-postgress/lesson-03/README.md
================================================
<p align="center">
  <a href="http://nestjs.com/" target="blank"><img src="https://nestjs.com/img/logo-small.svg" width="200" 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://coveralls.io/github/nestjs/nest?branch=master" target="_blank"><img src="https://coveralls.io/repos/github/nestjs/nest/badge.svg?branch=master#9" alt="Coverage" /></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"/></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"></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.

## Installation

```bash
$ npm install
```

## Running the app

```bash
# development
$ npm run start

# watch mode
$ npm run start:dev

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

## Test

```bash
# unit tests
$ npm run test

# e2e tests
$ npm run test:e2e

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

## 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://kamilmysliwiec.com)
- Website - [https://nestjs.com](https://nestjs.com/)
- Twitter - [@nestframework](https://twitter.com/nestframework)

## License

Nest is [MIT licensed](LICENSE).


================================================
FILE: module-05-connect-nestjs-to-postgress/lesson-03/nest-cli.json
================================================
{
  "$schema": "https://json.schemastore.org/nest-cli",
  "collection": "@nestjs/schematics",
  "sourceRoot": "src",
  "compilerOptions": {
    "deleteOutDir": true
  }
}


================================================
FILE: module-05-connect-nestjs-to-postgress/lesson-03/package.json
================================================
{
  "name": "n-fundamentals-pro",
  "version": "0.0.1",
  "description": "",
  "author": "",
  "private": true,
  "license": "UNLICENSED",
  "scripts": {
    "build": "nest build",
    "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
    "start": "nest start",
    "start:dev": "nest start --watch",
    "start:debug": "nest start --debug --watch",
    "start:prod": "node dist/main",
    "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
    "test": "jest",
    "test:watch": "jest --watch",
    "test:cov": "jest --coverage",
    "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
    "test:e2e": "jest --config ./test/jest-e2e.json"
  },
  "dependencies": {
    "@nestjs/common": "^9.0.0",
    "@nestjs/core": "^9.0.0",
    "@nestjs/platform-express": "^9.0.0",
    "class-transformer": "^0.5.1",
    "class-validator": "^0.14.0",
    "reflect-metadata": "^0.1.13",
    "rxjs": "^7.2.0",
    "@nestjs/typeorm": "^9.0.1",
    "pg": "^8.10.0",
    "typeorm": "^0.3.15"
  },
  "devDependencies": {
    "@nestjs/cli": "^9.0.0",
    "@nestjs/schematics": "^9.0.0",
    "@nestjs/testing": "^9.0.0",
    "@types/express": "^4.17.13",
    "@types/jest": "29.2.4",
    "@types/node": "18.11.18",
    "@types/supertest": "^2.0.11",
    "@typescript-eslint/eslint-plugin": "^5.0.0",
    "@typescript-eslint/parser": "^5.0.0",
    "eslint": "^8.0.1",
    "eslint-config-prettier": "^8.3.0",
    "eslint-plugin-prettier": "^4.0.0",
    "jest": "29.3.1",
    "prettier": "^2.3.2",
    "source-map-support": "^0.5.20",
    "supertest": "^6.1.3",
    "ts-jest": "29.0.3",
    "ts-loader": "^9.2.3",
    "ts-node": "^10.0.0",
    "tsconfig-paths": "4.1.1",
    "typescript": "^4.7.4"
  },
  "jest": {
    "moduleFileExtensions": [
      "js",
      "json",
      "ts"
    ],
    "rootDir": "src",
    "testRegex": ".*\\.spec\\.ts$",
    "transform": {
      "^.+\\.(t|j)s$": "ts-jest"
    },
    "collectCoverageFrom": [
      "**/*.(t|j)s"
    ],
    "coverageDirectory": "../coverage",
    "testEnvironment": "node"
  }
}


================================================
FILE: module-05-connect-nestjs-to-postgress/less
Download .txt
gitextract_9ikg04a7/

├── module-02-Creating-REST-APIS/
│   ├── 01-Lesson-01/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── main.ts
│   │   │   └── songs/
│   │   │       └── songs.module.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   ├── 02-Lesson-02/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── rest-client.http
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── main.ts
│   │   │   └── songs/
│   │   │       ├── songs.controller.spec.ts
│   │   │       ├── songs.controller.ts
│   │   │       └── songs.module.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   └── 03-Lesson-03/
│       ├── .eslintrc.js
│       ├── .gitignore
│       ├── .prettierrc
│       ├── README.md
│       ├── nest-cli.json
│       ├── package.json
│       ├── rest-client.http
│       ├── src/
│       │   ├── app.controller.spec.ts
│       │   ├── app.controller.ts
│       │   ├── app.module.ts
│       │   ├── app.service.ts
│       │   ├── main.ts
│       │   └── songs/
│       │       ├── songs.controller.spec.ts
│       │       ├── songs.controller.ts
│       │       ├── songs.module.ts
│       │       ├── songs.service.spec.ts
│       │       └── songs.service.ts
│       ├── test/
│       │   ├── app.e2e-spec.ts
│       │   └── jest-e2e.json
│       ├── tsconfig.build.json
│       └── tsconfig.json
├── module-03-middlewares-exception-filters-pipes/
│   ├── lesson-01/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── rest-client.http
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── common/
│   │   │   │   └── middleware/
│   │   │   │       └── logger.middleware.ts
│   │   │   ├── main.ts
│   │   │   └── songs/
│   │   │       ├── songs.controller.spec.ts
│   │   │       ├── songs.controller.ts
│   │   │       ├── songs.module.ts
│   │   │       ├── songs.service.spec.ts
│   │   │       └── songs.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   ├── lesson-02/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── rest-client.http
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── common/
│   │   │   │   └── middleware/
│   │   │   │       └── logger.middleware.ts
│   │   │   ├── main.ts
│   │   │   └── songs/
│   │   │       ├── songs.controller.spec.ts
│   │   │       ├── songs.controller.ts
│   │   │       ├── songs.module.ts
│   │   │       ├── songs.service.spec.ts
│   │   │       └── songs.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   ├── lesson-03/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── rest-client.http
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── common/
│   │   │   │   └── middleware/
│   │   │   │       └── logger.middleware.ts
│   │   │   ├── main.ts
│   │   │   └── songs/
│   │   │       ├── songs.controller.spec.ts
│   │   │       ├── songs.controller.ts
│   │   │       ├── songs.module.ts
│   │   │       ├── songs.service.spec.ts
│   │   │       └── songs.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   └── lesson-04/
│       ├── .eslintrc.js
│       ├── .gitignore
│       ├── .prettierrc
│       ├── README.md
│       ├── nest-cli.json
│       ├── package.json
│       ├── rest-client.http
│       ├── src/
│       │   ├── app.controller.spec.ts
│       │   ├── app.controller.ts
│       │   ├── app.module.ts
│       │   ├── app.service.ts
│       │   ├── common/
│       │   │   └── middleware/
│       │   │       └── logger.middleware.ts
│       │   ├── main.ts
│       │   └── songs/
│       │       ├── dto/
│       │       │   └── create-song-dto.ts
│       │       ├── songs.controller.spec.ts
│       │       ├── songs.controller.ts
│       │       ├── songs.module.ts
│       │       ├── songs.service.spec.ts
│       │       └── songs.service.ts
│       ├── test/
│       │   ├── app.e2e-spec.ts
│       │   └── jest-e2e.json
│       ├── tsconfig.build.json
│       └── tsconfig.json
├── module-04-dependency-injection/
│   ├── lesson-01/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── rest-client.http
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── common/
│   │   │   │   ├── constatnts/
│   │   │   │   │   └── connection.ts
│   │   │   │   ├── middleware/
│   │   │   │   │   └── logger.middleware.ts
│   │   │   │   └── providers/
│   │   │   │       └── DevConfigService.ts
│   │   │   ├── main.ts
│   │   │   └── songs/
│   │   │       ├── dto/
│   │   │       │   └── create-song-dto.ts
│   │   │       ├── songs.controller.spec.ts
│   │   │       ├── songs.controller.ts
│   │   │       ├── songs.module.ts
│   │   │       ├── songs.service.spec.ts
│   │   │       └── songs.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   └── lesson-02/
│       ├── .eslintrc.js
│       ├── .gitignore
│       ├── .prettierrc
│       ├── README.md
│       ├── nest-cli.json
│       ├── package.json
│       ├── rest-client.http
│       ├── src/
│       │   ├── app.controller.spec.ts
│       │   ├── app.controller.ts
│       │   ├── app.module.ts
│       │   ├── app.service.ts
│       │   ├── common/
│       │   │   ├── constatnts/
│       │   │   │   └── connection.ts
│       │   │   ├── middleware/
│       │   │   │   └── logger.middleware.ts
│       │   │   └── providers/
│       │   │       └── DevConfigService.ts
│       │   ├── main.ts
│       │   └── songs/
│       │       ├── dto/
│       │       │   └── create-song-dto.ts
│       │       ├── songs.controller.spec.ts
│       │       ├── songs.controller.ts
│       │       ├── songs.module.ts
│       │       ├── songs.service.spec.ts
│       │       └── songs.service.ts
│       ├── test/
│       │   ├── app.e2e-spec.ts
│       │   └── jest-e2e.json
│       ├── tsconfig.build.json
│       └── tsconfig.json
├── module-05-connect-nestjs-to-postgress/
│   ├── lesson-01/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── rest-client.http
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── common/
│   │   │   │   ├── constatnts/
│   │   │   │   │   └── connection.ts
│   │   │   │   ├── middleware/
│   │   │   │   │   └── logger.middleware.ts
│   │   │   │   └── providers/
│   │   │   │       └── DevConfigService.ts
│   │   │   ├── main.ts
│   │   │   └── songs/
│   │   │       ├── dto/
│   │   │       │   └── create-song-dto.ts
│   │   │       ├── songs.controller.spec.ts
│   │   │       ├── songs.controller.ts
│   │   │       ├── songs.module.ts
│   │   │       ├── songs.service.spec.ts
│   │   │       └── songs.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   ├── lesson-02/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── rest-client.http
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── common/
│   │   │   │   ├── constatnts/
│   │   │   │   │   └── connection.ts
│   │   │   │   ├── middleware/
│   │   │   │   │   └── logger.middleware.ts
│   │   │   │   └── providers/
│   │   │   │       └── DevConfigService.ts
│   │   │   ├── main.ts
│   │   │   └── songs/
│   │   │       ├── dto/
│   │   │       │   └── create-song-dto.ts
│   │   │       ├── song.entity.ts
│   │   │       ├── songs.controller.spec.ts
│   │   │       ├── songs.controller.ts
│   │   │       ├── songs.module.ts
│   │   │       ├── songs.service.spec.ts
│   │   │       └── songs.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   ├── lesson-03/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── rest-client.http
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── common/
│   │   │   │   ├── constatnts/
│   │   │   │   │   └── connection.ts
│   │   │   │   ├── middleware/
│   │   │   │   │   └── logger.middleware.ts
│   │   │   │   └── providers/
│   │   │   │       └── DevConfigService.ts
│   │   │   ├── main.ts
│   │   │   └── songs/
│   │   │       ├── dto/
│   │   │       │   ├── create-song-dto.ts
│   │   │       │   └── update-song-dto.ts
│   │   │       ├── song.entity.ts
│   │   │       ├── songs.controller.spec.ts
│   │   │       ├── songs.controller.ts
│   │   │       ├── songs.module.ts
│   │   │       ├── songs.service.spec.ts
│   │   │       └── songs.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   └── lesson-04/
│       ├── .eslintrc.js
│       ├── .gitignore
│       ├── .prettierrc
│       ├── README.md
│       ├── nest-cli.json
│       ├── package.json
│       ├── rest-client.http
│       ├── src/
│       │   ├── app.controller.spec.ts
│       │   ├── app.controller.ts
│       │   ├── app.module.ts
│       │   ├── app.service.ts
│       │   ├── common/
│       │   │   ├── constatnts/
│       │   │   │   └── connection.ts
│       │   │   ├── middleware/
│       │   │   │   └── logger.middleware.ts
│       │   │   └── providers/
│       │   │       └── DevConfigService.ts
│       │   ├── main.ts
│       │   └── songs/
│       │       ├── dto/
│       │       │   ├── create-song-dto.ts
│       │       │   └── update-song-dto.ts
│       │       ├── song.entity.ts
│       │       ├── songs.controller.spec.ts
│       │       ├── songs.controller.ts
│       │       ├── songs.module.ts
│       │       ├── songs.service.spec.ts
│       │       └── songs.service.ts
│       ├── test/
│       │   ├── app.e2e-spec.ts
│       │   └── jest-e2e.json
│       ├── tsconfig.build.json
│       └── tsconfig.json
├── module-06-relations/
│   ├── lesson-01/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── rest-client.http
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── artists/
│   │   │   │   └── artist.entity.ts
│   │   │   ├── common/
│   │   │   │   ├── constatnts/
│   │   │   │   │   └── connection.ts
│   │   │   │   ├── middleware/
│   │   │   │   │   └── logger.middleware.ts
│   │   │   │   └── providers/
│   │   │   │       └── DevConfigService.ts
│   │   │   ├── main.ts
│   │   │   ├── songs/
│   │   │   │   ├── dto/
│   │   │   │   │   ├── create-song-dto.ts
│   │   │   │   │   └── update-song-dto.ts
│   │   │   │   ├── song.entity.ts
│   │   │   │   ├── songs.controller.spec.ts
│   │   │   │   ├── songs.controller.ts
│   │   │   │   ├── songs.module.ts
│   │   │   │   ├── songs.service.spec.ts
│   │   │   │   └── songs.service.ts
│   │   │   └── users/
│   │   │       └── user.entity.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   └── lesson-02-and-lesson-03/
│       ├── .eslintrc.js
│       ├── .gitignore
│       ├── .prettierrc
│       ├── README.md
│       ├── nest-cli.json
│       ├── package.json
│       ├── rest-client.http
│       ├── src/
│       │   ├── app.controller.spec.ts
│       │   ├── app.controller.ts
│       │   ├── app.module.ts
│       │   ├── app.service.ts
│       │   ├── artists/
│       │   │   └── artist.entity.ts
│       │   ├── common/
│       │   │   ├── constatnts/
│       │   │   │   └── connection.ts
│       │   │   ├── middleware/
│       │   │   │   └── logger.middleware.ts
│       │   │   └── providers/
│       │   │       └── DevConfigService.ts
│       │   ├── main.ts
│       │   ├── playlists/
│       │   │   ├── dto/
│       │   │   │   └── create-playlist.dto.ts
│       │   │   ├── playlist.entity.ts
│       │   │   ├── playlists.controller.ts
│       │   │   ├── playlists.module.ts
│       │   │   └── playlists.service.ts
│       │   ├── songs/
│       │   │   ├── dto/
│       │   │   │   ├── create-song-dto.ts
│       │   │   │   └── update-song-dto.ts
│       │   │   ├── song.entity.ts
│       │   │   ├── songs.controller.spec.ts
│       │   │   ├── songs.controller.ts
│       │   │   ├── songs.module.ts
│       │   │   ├── songs.service.spec.ts
│       │   │   └── songs.service.ts
│       │   └── users/
│       │       └── user.entity.ts
│       ├── test/
│       │   ├── app.e2e-spec.ts
│       │   └── jest-e2e.json
│       ├── tsconfig.build.json
│       └── tsconfig.json
├── module-07-authetication-and-authorization/
│   ├── lesson-01/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── rest-client.http
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── artists/
│   │   │   │   └── artist.entity.ts
│   │   │   ├── auth/
│   │   │   │   ├── auth.controller.spec.ts
│   │   │   │   ├── auth.controller.ts
│   │   │   │   ├── auth.module.ts
│   │   │   │   ├── auth.service.spec.ts
│   │   │   │   └── auth.service.ts
│   │   │   ├── common/
│   │   │   │   ├── constatnts/
│   │   │   │   │   └── connection.ts
│   │   │   │   ├── middleware/
│   │   │   │   │   └── logger.middleware.ts
│   │   │   │   └── providers/
│   │   │   │       └── DevConfigService.ts
│   │   │   ├── main.ts
│   │   │   ├── playlists/
│   │   │   │   ├── dto/
│   │   │   │   │   └── create-playlist.dto.ts
│   │   │   │   ├── playlist.entity.ts
│   │   │   │   ├── playlists.controller.ts
│   │   │   │   ├── playlists.module.ts
│   │   │   │   └── playlists.service.ts
│   │   │   ├── songs/
│   │   │   │   ├── dto/
│   │   │   │   │   ├── create-song-dto.ts
│   │   │   │   │   └── update-song-dto.ts
│   │   │   │   ├── song.entity.ts
│   │   │   │   ├── songs.controller.spec.ts
│   │   │   │   ├── songs.controller.ts
│   │   │   │   ├── songs.module.ts
│   │   │   │   ├── songs.service.spec.ts
│   │   │   │   └── songs.service.ts
│   │   │   └── users/
│   │   │       ├── dto/
│   │   │       │   └── create-user.dto.ts
│   │   │       ├── user.entity.ts
│   │   │       ├── users.module.ts
│   │   │       ├── users.service.spec.ts
│   │   │       └── users.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   ├── lesson-02/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── rest-client.http
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── artists/
│   │   │   │   └── artist.entity.ts
│   │   │   ├── auth/
│   │   │   │   ├── auth.controller.spec.ts
│   │   │   │   ├── auth.controller.ts
│   │   │   │   ├── auth.module.ts
│   │   │   │   ├── auth.service.spec.ts
│   │   │   │   ├── auth.service.ts
│   │   │   │   └── dto/
│   │   │   │       └── login.dto.ts
│   │   │   ├── common/
│   │   │   │   ├── constatnts/
│   │   │   │   │   └── connection.ts
│   │   │   │   ├── middleware/
│   │   │   │   │   └── logger.middleware.ts
│   │   │   │   └── providers/
│   │   │   │       └── DevConfigService.ts
│   │   │   ├── main.ts
│   │   │   ├── playlists/
│   │   │   │   ├── dto/
│   │   │   │   │   └── create-playlist.dto.ts
│   │   │   │   ├── playlist.entity.ts
│   │   │   │   ├── playlists.controller.ts
│   │   │   │   ├── playlists.module.ts
│   │   │   │   └── playlists.service.ts
│   │   │   ├── songs/
│   │   │   │   ├── dto/
│   │   │   │   │   ├── create-song-dto.ts
│   │   │   │   │   └── update-song-dto.ts
│   │   │   │   ├── song.entity.ts
│   │   │   │   ├── songs.controller.spec.ts
│   │   │   │   ├── songs.controller.ts
│   │   │   │   ├── songs.module.ts
│   │   │   │   ├── songs.service.spec.ts
│   │   │   │   └── songs.service.ts
│   │   │   └── users/
│   │   │       ├── dto/
│   │   │       │   └── create-user.dto.ts
│   │   │       ├── user.entity.ts
│   │   │       ├── users.module.ts
│   │   │       ├── users.service.spec.ts
│   │   │       └── users.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   ├── lesson-03/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── rest-client.http
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── artists/
│   │   │   │   └── artist.entity.ts
│   │   │   ├── auth/
│   │   │   │   ├── auth.constants.ts
│   │   │   │   ├── auth.controller.spec.ts
│   │   │   │   ├── auth.controller.ts
│   │   │   │   ├── auth.module.ts
│   │   │   │   ├── auth.service.spec.ts
│   │   │   │   ├── auth.service.ts
│   │   │   │   ├── dto/
│   │   │   │   │   └── login.dto.ts
│   │   │   │   ├── jwt-guard.ts
│   │   │   │   └── jwt-strategy.ts
│   │   │   ├── common/
│   │   │   │   ├── constatnts/
│   │   │   │   │   └── connection.ts
│   │   │   │   ├── middleware/
│   │   │   │   │   └── logger.middleware.ts
│   │   │   │   └── providers/
│   │   │   │       └── DevConfigService.ts
│   │   │   ├── main.ts
│   │   │   ├── playlists/
│   │   │   │   ├── dto/
│   │   │   │   │   └── create-playlist.dto.ts
│   │   │   │   ├── playlist.entity.ts
│   │   │   │   ├── playlists.controller.ts
│   │   │   │   ├── playlists.module.ts
│   │   │   │   └── playlists.service.ts
│   │   │   ├── songs/
│   │   │   │   ├── dto/
│   │   │   │   │   ├── create-song-dto.ts
│   │   │   │   │   └── update-song-dto.ts
│   │   │   │   ├── song.entity.ts
│   │   │   │   ├── songs.controller.spec.ts
│   │   │   │   ├── songs.controller.ts
│   │   │   │   ├── songs.module.ts
│   │   │   │   ├── songs.service.spec.ts
│   │   │   │   └── songs.service.ts
│   │   │   └── users/
│   │   │       ├── dto/
│   │   │       │   └── create-user.dto.ts
│   │   │       ├── user.entity.ts
│   │   │       ├── users.module.ts
│   │   │       ├── users.service.spec.ts
│   │   │       └── users.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   ├── lesson-04/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── rest-client.http
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── artists/
│   │   │   │   ├── artist.entity.ts
│   │   │   │   ├── artists.controller.spec.ts
│   │   │   │   ├── artists.controller.ts
│   │   │   │   ├── artists.module.ts
│   │   │   │   ├── artists.service.spec.ts
│   │   │   │   └── artists.service.ts
│   │   │   ├── auth/
│   │   │   │   ├── artists-jwt-guard.ts
│   │   │   │   ├── auth.constants.ts
│   │   │   │   ├── auth.controller.spec.ts
│   │   │   │   ├── auth.controller.ts
│   │   │   │   ├── auth.module.ts
│   │   │   │   ├── auth.service.spec.ts
│   │   │   │   ├── auth.service.ts
│   │   │   │   ├── dto/
│   │   │   │   │   └── login.dto.ts
│   │   │   │   ├── jwt-guard.ts
│   │   │   │   ├── jwt-strategy.ts
│   │   │   │   └── types.ts
│   │   │   ├── common/
│   │   │   │   ├── constatnts/
│   │   │   │   │   └── connection.ts
│   │   │   │   ├── middleware/
│   │   │   │   │   └── logger.middleware.ts
│   │   │   │   └── providers/
│   │   │   │       └── DevConfigService.ts
│   │   │   ├── main.ts
│   │   │   ├── playlists/
│   │   │   │   ├── dto/
│   │   │   │   │   └── create-playlist.dto.ts
│   │   │   │   ├── playlist.entity.ts
│   │   │   │   ├── playlists.controller.ts
│   │   │   │   ├── playlists.module.ts
│   │   │   │   └── playlists.service.ts
│   │   │   ├── songs/
│   │   │   │   ├── dto/
│   │   │   │   │   ├── create-song-dto.ts
│   │   │   │   │   └── update-song-dto.ts
│   │   │   │   ├── song.entity.ts
│   │   │   │   ├── songs.controller.spec.ts
│   │   │   │   ├── songs.controller.ts
│   │   │   │   ├── songs.module.ts
│   │   │   │   ├── songs.service.spec.ts
│   │   │   │   └── songs.service.ts
│   │   │   └── users/
│   │   │       ├── dto/
│   │   │       │   └── create-user.dto.ts
│   │   │       ├── user.entity.ts
│   │   │       ├── users.module.ts
│   │   │       ├── users.service.spec.ts
│   │   │       └── users.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   ├── lesson-05/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── rest-client.http
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── artists/
│   │   │   │   ├── artist.entity.ts
│   │   │   │   ├── artists.controller.spec.ts
│   │   │   │   ├── artists.controller.ts
│   │   │   │   ├── artists.module.ts
│   │   │   │   ├── artists.service.spec.ts
│   │   │   │   └── artists.service.ts
│   │   │   ├── auth/
│   │   │   │   ├── artists-jwt-guard.ts
│   │   │   │   ├── auth.constants.ts
│   │   │   │   ├── auth.controller.spec.ts
│   │   │   │   ├── auth.controller.ts
│   │   │   │   ├── auth.module.ts
│   │   │   │   ├── auth.service.spec.ts
│   │   │   │   ├── auth.service.ts
│   │   │   │   ├── dto/
│   │   │   │   │   ├── login.dto.ts
│   │   │   │   │   └── validate-token.dto.ts
│   │   │   │   ├── jwt-guard.ts
│   │   │   │   ├── jwt-strategy.ts
│   │   │   │   └── types.ts
│   │   │   ├── common/
│   │   │   │   ├── constatnts/
│   │   │   │   │   └── connection.ts
│   │   │   │   ├── middleware/
│   │   │   │   │   └── logger.middleware.ts
│   │   │   │   └── providers/
│   │   │   │       └── DevConfigService.ts
│   │   │   ├── main.ts
│   │   │   ├── playlists/
│   │   │   │   ├── dto/
│   │   │   │   │   └── create-playlist.dto.ts
│   │   │   │   ├── playlist.entity.ts
│   │   │   │   ├── playlists.controller.ts
│   │   │   │   ├── playlists.module.ts
│   │   │   │   └── playlists.service.ts
│   │   │   ├── songs/
│   │   │   │   ├── dto/
│   │   │   │   │   ├── create-song-dto.ts
│   │   │   │   │   └── update-song-dto.ts
│   │   │   │   ├── song.entity.ts
│   │   │   │   ├── songs.controller.spec.ts
│   │   │   │   ├── songs.controller.ts
│   │   │   │   ├── songs.module.ts
│   │   │   │   ├── songs.service.spec.ts
│   │   │   │   └── songs.service.ts
│   │   │   └── users/
│   │   │       ├── dto/
│   │   │       │   └── create-user.dto.ts
│   │   │       ├── user.entity.ts
│   │   │       ├── users.module.ts
│   │   │       ├── users.service.spec.ts
│   │   │       └── users.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   └── lesson-06/
│       ├── .eslintrc.js
│       ├── .gitignore
│       ├── .prettierrc
│       ├── README.md
│       ├── nest-cli.json
│       ├── package.json
│       ├── rest-client.http
│       ├── src/
│       │   ├── app.controller.spec.ts
│       │   ├── app.controller.ts
│       │   ├── app.module.ts
│       │   ├── app.service.ts
│       │   ├── artists/
│       │   │   ├── artist.entity.ts
│       │   │   ├── artists.controller.spec.ts
│       │   │   ├── artists.controller.ts
│       │   │   ├── artists.module.ts
│       │   │   ├── artists.service.spec.ts
│       │   │   └── artists.service.ts
│       │   ├── auth/
│       │   │   ├── api-key-strategy.ts
│       │   │   ├── artists-jwt-guard.ts
│       │   │   ├── auth.constants.ts
│       │   │   ├── auth.controller.spec.ts
│       │   │   ├── auth.controller.ts
│       │   │   ├── auth.module.ts
│       │   │   ├── auth.service.spec.ts
│       │   │   ├── auth.service.ts
│       │   │   ├── dto/
│       │   │   │   ├── login.dto.ts
│       │   │   │   └── validate-token.dto.ts
│       │   │   ├── jwt-guard.ts
│       │   │   ├── jwt-strategy.ts
│       │   │   └── types.ts
│       │   ├── common/
│       │   │   ├── constatnts/
│       │   │   │   └── connection.ts
│       │   │   ├── middleware/
│       │   │   │   └── logger.middleware.ts
│       │   │   └── providers/
│       │   │       └── DevConfigService.ts
│       │   ├── main.ts
│       │   ├── playlists/
│       │   │   ├── dto/
│       │   │   │   └── create-playlist.dto.ts
│       │   │   ├── playlist.entity.ts
│       │   │   ├── playlists.controller.ts
│       │   │   ├── playlists.module.ts
│       │   │   └── playlists.service.ts
│       │   ├── songs/
│       │   │   ├── dto/
│       │   │   │   ├── create-song-dto.ts
│       │   │   │   └── update-song-dto.ts
│       │   │   ├── song.entity.ts
│       │   │   ├── songs.controller.spec.ts
│       │   │   ├── songs.controller.ts
│       │   │   ├── songs.module.ts
│       │   │   ├── songs.service.spec.ts
│       │   │   └── songs.service.ts
│       │   └── users/
│       │       ├── dto/
│       │       │   └── create-user.dto.ts
│       │       ├── user.entity.ts
│       │       ├── users.module.ts
│       │       ├── users.service.spec.ts
│       │       └── users.service.ts
│       ├── test/
│       │   ├── app.e2e-spec.ts
│       │   └── jest-e2e.json
│       ├── tsconfig.build.json
│       └── tsconfig.json
├── module-08-migrations-seeds-debugging/
│   ├── lesson-01/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── .vscode/
│   │   │   └── launch.json
│   │   ├── README.md
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── rest-client.http
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── artists/
│   │   │   │   ├── artist.entity.ts
│   │   │   │   ├── artists.controller.spec.ts
│   │   │   │   ├── artists.controller.ts
│   │   │   │   ├── artists.module.ts
│   │   │   │   ├── artists.service.spec.ts
│   │   │   │   └── artists.service.ts
│   │   │   ├── auth/
│   │   │   │   ├── api-key-strategy.ts
│   │   │   │   ├── artists-jwt-guard.ts
│   │   │   │   ├── auth.constants.ts
│   │   │   │   ├── auth.controller.spec.ts
│   │   │   │   ├── auth.controller.ts
│   │   │   │   ├── auth.module.ts
│   │   │   │   ├── auth.service.spec.ts
│   │   │   │   ├── auth.service.ts
│   │   │   │   ├── dto/
│   │   │   │   │   ├── login.dto.ts
│   │   │   │   │   └── validate-token.dto.ts
│   │   │   │   ├── jwt-guard.ts
│   │   │   │   ├── jwt-strategy.ts
│   │   │   │   └── types.ts
│   │   │   ├── common/
│   │   │   │   ├── constatnts/
│   │   │   │   │   └── connection.ts
│   │   │   │   ├── middleware/
│   │   │   │   │   └── logger.middleware.ts
│   │   │   │   └── providers/
│   │   │   │       └── DevConfigService.ts
│   │   │   ├── main.ts
│   │   │   ├── playlists/
│   │   │   │   ├── dto/
│   │   │   │   │   └── create-playlist.dto.ts
│   │   │   │   ├── playlist.entity.ts
│   │   │   │   ├── playlists.controller.ts
│   │   │   │   ├── playlists.module.ts
│   │   │   │   └── playlists.service.ts
│   │   │   ├── songs/
│   │   │   │   ├── dto/
│   │   │   │   │   ├── create-song-dto.ts
│   │   │   │   │   └── update-song-dto.ts
│   │   │   │   ├── song.entity.ts
│   │   │   │   ├── songs.controller.spec.ts
│   │   │   │   ├── songs.controller.ts
│   │   │   │   ├── songs.module.ts
│   │   │   │   ├── songs.service.spec.ts
│   │   │   │   └── songs.service.ts
│   │   │   └── users/
│   │   │       ├── dto/
│   │   │       │   └── create-user.dto.ts
│   │   │       ├── user.entity.ts
│   │   │       ├── users.module.ts
│   │   │       ├── users.service.spec.ts
│   │   │       └── users.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   ├── lesson-02/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── .vscode/
│   │   │   └── launch.json
│   │   ├── README.md
│   │   ├── db/
│   │   │   ├── data-source.ts
│   │   │   └── migrations/
│   │   │       ├── 1685010320827-my-migrations.ts
│   │   │       └── 1685010456982-removed-phone.ts
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── rest-client.http
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── artists/
│   │   │   │   ├── artist.entity.ts
│   │   │   │   ├── artists.controller.spec.ts
│   │   │   │   ├── artists.controller.ts
│   │   │   │   ├── artists.module.ts
│   │   │   │   ├── artists.service.spec.ts
│   │   │   │   └── artists.service.ts
│   │   │   ├── auth/
│   │   │   │   ├── api-key-strategy.ts
│   │   │   │   ├── artists-jwt-guard.ts
│   │   │   │   ├── auth.constants.ts
│   │   │   │   ├── auth.controller.spec.ts
│   │   │   │   ├── auth.controller.ts
│   │   │   │   ├── auth.module.ts
│   │   │   │   ├── auth.service.spec.ts
│   │   │   │   ├── auth.service.ts
│   │   │   │   ├── dto/
│   │   │   │   │   ├── login.dto.ts
│   │   │   │   │   └── validate-token.dto.ts
│   │   │   │   ├── jwt-guard.ts
│   │   │   │   ├── jwt-strategy.ts
│   │   │   │   └── types.ts
│   │   │   ├── common/
│   │   │   │   ├── constatnts/
│   │   │   │   │   └── connection.ts
│   │   │   │   ├── middleware/
│   │   │   │   │   └── logger.middleware.ts
│   │   │   │   └── providers/
│   │   │   │       └── DevConfigService.ts
│   │   │   ├── main.ts
│   │   │   ├── playlists/
│   │   │   │   ├── dto/
│   │   │   │   │   └── create-playlist.dto.ts
│   │   │   │   ├── playlist.entity.ts
│   │   │   │   ├── playlists.controller.ts
│   │   │   │   ├── playlists.module.ts
│   │   │   │   └── playlists.service.ts
│   │   │   ├── songs/
│   │   │   │   ├── dto/
│   │   │   │   │   ├── create-song-dto.ts
│   │   │   │   │   └── update-song-dto.ts
│   │   │   │   ├── song.entity.ts
│   │   │   │   ├── songs.controller.spec.ts
│   │   │   │   ├── songs.controller.ts
│   │   │   │   ├── songs.module.ts
│   │   │   │   ├── songs.service.spec.ts
│   │   │   │   └── songs.service.ts
│   │   │   └── users/
│   │   │       ├── dto/
│   │   │       │   └── create-user.dto.ts
│   │   │       ├── user.entity.ts
│   │   │       ├── users.module.ts
│   │   │       ├── users.service.spec.ts
│   │   │       └── users.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   └── lesson-03/
│       ├── .eslintrc.js
│       ├── .gitignore
│       ├── .prettierrc
│       ├── .vscode/
│       │   └── launch.json
│       ├── README.md
│       ├── db/
│       │   ├── data-source.ts
│       │   ├── migrations/
│       │   │   ├── 1685010320827-my-migrations.ts
│       │   │   └── 1685010456982-removed-phone.ts
│       │   └── seeds/
│       │       └── seed-data.ts
│       ├── nest-cli.json
│       ├── package.json
│       ├── rest-client.http
│       ├── src/
│       │   ├── app.controller.spec.ts
│       │   ├── app.controller.ts
│       │   ├── app.module.ts
│       │   ├── app.service.ts
│       │   ├── artists/
│       │   │   ├── artist.entity.ts
│       │   │   ├── artists.controller.spec.ts
│       │   │   ├── artists.controller.ts
│       │   │   ├── artists.module.ts
│       │   │   ├── artists.service.spec.ts
│       │   │   └── artists.service.ts
│       │   ├── auth/
│       │   │   ├── api-key-strategy.ts
│       │   │   ├── artists-jwt-guard.ts
│       │   │   ├── auth.constants.ts
│       │   │   ├── auth.controller.spec.ts
│       │   │   ├── auth.controller.ts
│       │   │   ├── auth.module.ts
│       │   │   ├── auth.service.spec.ts
│       │   │   ├── auth.service.ts
│       │   │   ├── dto/
│       │   │   │   ├── login.dto.ts
│       │   │   │   └── validate-token.dto.ts
│       │   │   ├── jwt-guard.ts
│       │   │   ├── jwt-strategy.ts
│       │   │   └── types.ts
│       │   ├── common/
│       │   │   ├── constatnts/
│       │   │   │   └── connection.ts
│       │   │   ├── middleware/
│       │   │   │   └── logger.middleware.ts
│       │   │   └── providers/
│       │   │       └── DevConfigService.ts
│       │   ├── main.ts
│       │   ├── playlists/
│       │   │   ├── dto/
│       │   │   │   └── create-playlist.dto.ts
│       │   │   ├── playlist.entity.ts
│       │   │   ├── playlists.controller.ts
│       │   │   ├── playlists.module.ts
│       │   │   └── playlists.service.ts
│       │   ├── seed/
│       │   │   ├── seed.module.ts
│       │   │   └── seed.service.ts
│       │   ├── songs/
│       │   │   ├── dto/
│       │   │   │   ├── create-song-dto.ts
│       │   │   │   └── update-song-dto.ts
│       │   │   ├── song.entity.ts
│       │   │   ├── songs.controller.spec.ts
│       │   │   ├── songs.controller.ts
│       │   │   ├── songs.module.ts
│       │   │   ├── songs.service.spec.ts
│       │   │   └── songs.service.ts
│       │   └── users/
│       │       ├── dto/
│       │       │   └── create-user.dto.ts
│       │       ├── user.entity.ts
│       │       ├── users.module.ts
│       │       ├── users.service.spec.ts
│       │       └── users.service.ts
│       ├── test/
│       │   ├── app.e2e-spec.ts
│       │   └── jest-e2e.json
│       ├── tsconfig.build.json
│       └── tsconfig.json
├── module-09-application-configurations/
│   ├── lesson-01/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── .vscode/
│   │   │   └── launch.json
│   │   ├── README.md
│   │   ├── db/
│   │   │   ├── data-source.ts
│   │   │   ├── migrations/
│   │   │   │   ├── 1685010320827-my-migrations.ts
│   │   │   │   └── 1685010456982-removed-phone.ts
│   │   │   └── seeds/
│   │   │       └── seed-data.ts
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── rest-client.http
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── artists/
│   │   │   │   ├── artist.entity.ts
│   │   │   │   ├── artists.controller.spec.ts
│   │   │   │   ├── artists.controller.ts
│   │   │   │   ├── artists.module.ts
│   │   │   │   ├── artists.service.spec.ts
│   │   │   │   └── artists.service.ts
│   │   │   ├── auth/
│   │   │   │   ├── api-key-strategy.ts
│   │   │   │   ├── artists-jwt-guard.ts
│   │   │   │   ├── auth.constants.ts
│   │   │   │   ├── auth.controller.spec.ts
│   │   │   │   ├── auth.controller.ts
│   │   │   │   ├── auth.module.ts
│   │   │   │   ├── auth.service.spec.ts
│   │   │   │   ├── auth.service.ts
│   │   │   │   ├── dto/
│   │   │   │   │   ├── login.dto.ts
│   │   │   │   │   └── validate-token.dto.ts
│   │   │   │   ├── jwt-guard.ts
│   │   │   │   ├── jwt-strategy.ts
│   │   │   │   └── types.ts
│   │   │   ├── common/
│   │   │   │   ├── constatnts/
│   │   │   │   │   └── connection.ts
│   │   │   │   ├── middleware/
│   │   │   │   │   └── logger.middleware.ts
│   │   │   │   └── providers/
│   │   │   │       └── DevConfigService.ts
│   │   │   ├── config/
│   │   │   │   └── configuration.ts
│   │   │   ├── main.ts
│   │   │   ├── playlists/
│   │   │   │   ├── dto/
│   │   │   │   │   └── create-playlist.dto.ts
│   │   │   │   ├── playlist.entity.ts
│   │   │   │   ├── playlists.controller.ts
│   │   │   │   ├── playlists.module.ts
│   │   │   │   └── playlists.service.ts
│   │   │   ├── seed/
│   │   │   │   ├── seed.module.ts
│   │   │   │   └── seed.service.ts
│   │   │   ├── songs/
│   │   │   │   ├── dto/
│   │   │   │   │   ├── create-song-dto.ts
│   │   │   │   │   └── update-song-dto.ts
│   │   │   │   ├── song.entity.ts
│   │   │   │   ├── songs.controller.spec.ts
│   │   │   │   ├── songs.controller.ts
│   │   │   │   ├── songs.module.ts
│   │   │   │   ├── songs.service.spec.ts
│   │   │   │   └── songs.service.ts
│   │   │   └── users/
│   │   │       ├── dto/
│   │   │       │   └── create-user.dto.ts
│   │   │       ├── user.entity.ts
│   │   │       ├── users.module.ts
│   │   │       ├── users.service.spec.ts
│   │   │       └── users.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   ├── lesson-02/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── .vscode/
│   │   │   └── launch.json
│   │   ├── README.md
│   │   ├── db/
│   │   │   ├── data-source.ts
│   │   │   ├── migrations/
│   │   │   │   ├── 1685010320827-my-migrations.ts
│   │   │   │   └── 1685010456982-removed-phone.ts
│   │   │   └── seeds/
│   │   │       └── seed-data.ts
│   │   ├── env.validation.ts
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── rest-client.http
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── artists/
│   │   │   │   ├── artist.entity.ts
│   │   │   │   ├── artists.controller.spec.ts
│   │   │   │   ├── artists.controller.ts
│   │   │   │   ├── artists.module.ts
│   │   │   │   ├── artists.service.spec.ts
│   │   │   │   └── artists.service.ts
│   │   │   ├── auth/
│   │   │   │   ├── api-key-strategy.ts
│   │   │   │   ├── artists-jwt-guard.ts
│   │   │   │   ├── auth.constants.ts
│   │   │   │   ├── auth.controller.spec.ts
│   │   │   │   ├── auth.controller.ts
│   │   │   │   ├── auth.module.ts
│   │   │   │   ├── auth.service.spec.ts
│   │   │   │   ├── auth.service.ts
│   │   │   │   ├── dto/
│   │   │   │   │   ├── login.dto.ts
│   │   │   │   │   └── validate-token.dto.ts
│   │   │   │   ├── jwt-guard.ts
│   │   │   │   ├── jwt-strategy.ts
│   │   │   │   └── types.ts
│   │   │   ├── common/
│   │   │   │   ├── constatnts/
│   │   │   │   │   └── connection.ts
│   │   │   │   ├── middleware/
│   │   │   │   │   └── logger.middleware.ts
│   │   │   │   └── providers/
│   │   │   │       └── DevConfigService.ts
│   │   │   ├── config/
│   │   │   │   └── configuration.ts
│   │   │   ├── main.ts
│   │   │   ├── playlists/
│   │   │   │   ├── dto/
│   │   │   │   │   └── create-playlist.dto.ts
│   │   │   │   ├── playlist.entity.ts
│   │   │   │   ├── playlists.controller.ts
│   │   │   │   ├── playlists.module.ts
│   │   │   │   └── playlists.service.ts
│   │   │   ├── seed/
│   │   │   │   ├── seed.module.ts
│   │   │   │   └── seed.service.ts
│   │   │   ├── songs/
│   │   │   │   ├── dto/
│   │   │   │   │   ├── create-song-dto.ts
│   │   │   │   │   └── update-song-dto.ts
│   │   │   │   ├── song.entity.ts
│   │   │   │   ├── songs.controller.spec.ts
│   │   │   │   ├── songs.controller.ts
│   │   │   │   ├── songs.module.ts
│   │   │   │   ├── songs.service.spec.ts
│   │   │   │   └── songs.service.ts
│   │   │   └── users/
│   │   │       ├── dto/
│   │   │       │   └── create-user.dto.ts
│   │   │       ├── user.entity.ts
│   │   │       ├── users.module.ts
│   │   │       ├── users.service.spec.ts
│   │   │       └── users.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   └── lesson-03/
│       ├── .eslintrc.js
│       ├── .gitignore
│       ├── .prettierrc
│       ├── .vscode/
│       │   └── launch.json
│       ├── README.md
│       ├── db/
│       │   ├── data-source.ts
│       │   ├── migrations/
│       │   │   ├── 1685010320827-my-migrations.ts
│       │   │   └── 1685010456982-removed-phone.ts
│       │   └── seeds/
│       │       └── seed-data.ts
│       ├── env.validation.ts
│       ├── nest-cli.json
│       ├── package.json
│       ├── rest-client.http
│       ├── src/
│       │   ├── app.controller.spec.ts
│       │   ├── app.controller.ts
│       │   ├── app.module.ts
│       │   ├── app.service.ts
│       │   ├── artists/
│       │   │   ├── artist.entity.ts
│       │   │   ├── artists.controller.spec.ts
│       │   │   ├── artists.controller.ts
│       │   │   ├── artists.module.ts
│       │   │   ├── artists.service.spec.ts
│       │   │   └── artists.service.ts
│       │   ├── auth/
│       │   │   ├── api-key-strategy.ts
│       │   │   ├── artists-jwt-guard.ts
│       │   │   ├── auth.constants.ts
│       │   │   ├── auth.controller.spec.ts
│       │   │   ├── auth.controller.ts
│       │   │   ├── auth.module.ts
│       │   │   ├── auth.service.spec.ts
│       │   │   ├── auth.service.ts
│       │   │   ├── dto/
│       │   │   │   ├── login.dto.ts
│       │   │   │   └── validate-token.dto.ts
│       │   │   ├── jwt-guard.ts
│       │   │   ├── jwt-strategy.ts
│       │   │   └── types.ts
│       │   ├── common/
│       │   │   ├── constatnts/
│       │   │   │   └── connection.ts
│       │   │   ├── middleware/
│       │   │   │   └── logger.middleware.ts
│       │   │   └── providers/
│       │   │       └── DevConfigService.ts
│       │   ├── config/
│       │   │   └── configuration.ts
│       │   ├── main.ts
│       │   ├── playlists/
│       │   │   ├── dto/
│       │   │   │   └── create-playlist.dto.ts
│       │   │   ├── playlist.entity.ts
│       │   │   ├── playlists.controller.ts
│       │   │   ├── playlists.module.ts
│       │   │   └── playlists.service.ts
│       │   ├── seed/
│       │   │   ├── seed.module.ts
│       │   │   └── seed.service.ts
│       │   ├── songs/
│       │   │   ├── dto/
│       │   │   │   ├── create-song-dto.ts
│       │   │   │   └── update-song-dto.ts
│       │   │   ├── song.entity.ts
│       │   │   ├── songs.controller.spec.ts
│       │   │   ├── songs.controller.ts
│       │   │   ├── songs.module.ts
│       │   │   ├── songs.service.spec.ts
│       │   │   └── songs.service.ts
│       │   └── users/
│       │       ├── dto/
│       │       │   └── create-user.dto.ts
│       │       ├── user.entity.ts
│       │       ├── users.module.ts
│       │       ├── users.service.spec.ts
│       │       └── users.service.ts
│       ├── test/
│       │   ├── app.e2e-spec.ts
│       │   └── jest-e2e.json
│       ├── tsconfig.build.json
│       ├── tsconfig.json
│       └── webpack-hmr.config.js
├── module-10-api-documentation-with-swagger/
│   ├── lesson-01/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── .vscode/
│   │   │   └── launch.json
│   │   ├── README.md
│   │   ├── db/
│   │   │   ├── data-source.ts
│   │   │   ├── migrations/
│   │   │   │   ├── 1685010320827-my-migrations.ts
│   │   │   │   └── 1685010456982-removed-phone.ts
│   │   │   └── seeds/
│   │   │       └── seed-data.ts
│   │   ├── env.validation.ts
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── rest-client.http
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── artists/
│   │   │   │   ├── artist.entity.ts
│   │   │   │   ├── artists.controller.spec.ts
│   │   │   │   ├── artists.controller.ts
│   │   │   │   ├── artists.module.ts
│   │   │   │   ├── artists.service.spec.ts
│   │   │   │   └── artists.service.ts
│   │   │   ├── auth/
│   │   │   │   ├── api-key-strategy.ts
│   │   │   │   ├── artists-jwt-guard.ts
│   │   │   │   ├── auth.constants.ts
│   │   │   │   ├── auth.controller.spec.ts
│   │   │   │   ├── auth.controller.ts
│   │   │   │   ├── auth.module.ts
│   │   │   │   ├── auth.service.spec.ts
│   │   │   │   ├── auth.service.ts
│   │   │   │   ├── dto/
│   │   │   │   │   ├── login.dto.ts
│   │   │   │   │   └── validate-token.dto.ts
│   │   │   │   ├── jwt-guard.ts
│   │   │   │   ├── jwt-strategy.ts
│   │   │   │   └── types.ts
│   │   │   ├── common/
│   │   │   │   ├── constatnts/
│   │   │   │   │   └── connection.ts
│   │   │   │   ├── middleware/
│   │   │   │   │   └── logger.middleware.ts
│   │   │   │   └── providers/
│   │   │   │       └── DevConfigService.ts
│   │   │   ├── config/
│   │   │   │   └── configuration.ts
│   │   │   ├── main.ts
│   │   │   ├── playlists/
│   │   │   │   ├── dto/
│   │   │   │   │   └── create-playlist.dto.ts
│   │   │   │   ├── playlist.entity.ts
│   │   │   │   ├── playlists.controller.ts
│   │   │   │   ├── playlists.module.ts
│   │   │   │   └── playlists.service.ts
│   │   │   ├── seed/
│   │   │   │   ├── seed.module.ts
│   │   │   │   └── seed.service.ts
│   │   │   ├── songs/
│   │   │   │   ├── dto/
│   │   │   │   │   ├── create-song-dto.ts
│   │   │   │   │   └── update-song-dto.ts
│   │   │   │   ├── song.entity.ts
│   │   │   │   ├── songs.controller.spec.ts
│   │   │   │   ├── songs.controller.ts
│   │   │   │   ├── songs.module.ts
│   │   │   │   ├── songs.service.spec.ts
│   │   │   │   └── songs.service.ts
│   │   │   └── users/
│   │   │       ├── dto/
│   │   │       │   └── create-user.dto.ts
│   │   │       ├── user.entity.ts
│   │   │       ├── users.module.ts
│   │   │       ├── users.service.spec.ts
│   │   │       └── users.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   ├── tsconfig.json
│   │   └── webpack-hmr.config.js
│   ├── lesson-02/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── .vscode/
│   │   │   └── launch.json
│   │   ├── README.md
│   │   ├── db/
│   │   │   ├── data-source.ts
│   │   │   ├── migrations/
│   │   │   │   ├── 1685010320827-my-migrations.ts
│   │   │   │   └── 1685010456982-removed-phone.ts
│   │   │   └── seeds/
│   │   │       └── seed-data.ts
│   │   ├── env.validation.ts
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── rest-client.http
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── artists/
│   │   │   │   ├── artist.entity.ts
│   │   │   │   ├── artists.controller.spec.ts
│   │   │   │   ├── artists.controller.ts
│   │   │   │   ├── artists.module.ts
│   │   │   │   ├── artists.service.spec.ts
│   │   │   │   └── artists.service.ts
│   │   │   ├── auth/
│   │   │   │   ├── api-key-strategy.ts
│   │   │   │   ├── artists-jwt-guard.ts
│   │   │   │   ├── auth.constants.ts
│   │   │   │   ├── auth.controller.spec.ts
│   │   │   │   ├── auth.controller.ts
│   │   │   │   ├── auth.module.ts
│   │   │   │   ├── auth.service.spec.ts
│   │   │   │   ├── auth.service.ts
│   │   │   │   ├── dto/
│   │   │   │   │   ├── login.dto.ts
│   │   │   │   │   └── validate-token.dto.ts
│   │   │   │   ├── jwt-guard.ts
│   │   │   │   ├── jwt-strategy.ts
│   │   │   │   └── types.ts
│   │   │   ├── common/
│   │   │   │   ├── constatnts/
│   │   │   │   │   └── connection.ts
│   │   │   │   ├── middleware/
│   │   │   │   │   └── logger.middleware.ts
│   │   │   │   └── providers/
│   │   │   │       └── DevConfigService.ts
│   │   │   ├── config/
│   │   │   │   └── configuration.ts
│   │   │   ├── main.ts
│   │   │   ├── playlists/
│   │   │   │   ├── dto/
│   │   │   │   │   └── create-playlist.dto.ts
│   │   │   │   ├── playlist.entity.ts
│   │   │   │   ├── playlists.controller.ts
│   │   │   │   ├── playlists.module.ts
│   │   │   │   └── playlists.service.ts
│   │   │   ├── seed/
│   │   │   │   ├── seed.module.ts
│   │   │   │   └── seed.service.ts
│   │   │   ├── songs/
│   │   │   │   ├── dto/
│   │   │   │   │   ├── create-song-dto.ts
│   │   │   │   │   └── update-song-dto.ts
│   │   │   │   ├── song.entity.ts
│   │   │   │   ├── songs.controller.spec.ts
│   │   │   │   ├── songs.controller.ts
│   │   │   │   ├── songs.module.ts
│   │   │   │   ├── songs.service.spec.ts
│   │   │   │   └── songs.service.ts
│   │   │   └── users/
│   │   │       ├── dto/
│   │   │       │   └── create-user.dto.ts
│   │   │       ├── user.entity.ts
│   │   │       ├── users.module.ts
│   │   │       ├── users.service.spec.ts
│   │   │       └── users.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   ├── tsconfig.json
│   │   └── webpack-hmr.config.js
│   ├── lesson-03/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── .vscode/
│   │   │   └── launch.json
│   │   ├── README.md
│   │   ├── db/
│   │   │   ├── data-source.ts
│   │   │   ├── migrations/
│   │   │   │   ├── 1685010320827-my-migrations.ts
│   │   │   │   └── 1685010456982-removed-phone.ts
│   │   │   └── seeds/
│   │   │       └── seed-data.ts
│   │   ├── env.validation.ts
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── rest-client.http
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── artists/
│   │   │   │   ├── artist.entity.ts
│   │   │   │   ├── artists.controller.spec.ts
│   │   │   │   ├── artists.controller.ts
│   │   │   │   ├── artists.module.ts
│   │   │   │   ├── artists.service.spec.ts
│   │   │   │   └── artists.service.ts
│   │   │   ├── auth/
│   │   │   │   ├── api-key-strategy.ts
│   │   │   │   ├── artists-jwt-guard.ts
│   │   │   │   ├── auth.constants.ts
│   │   │   │   ├── auth.controller.spec.ts
│   │   │   │   ├── auth.controller.ts
│   │   │   │   ├── auth.module.ts
│   │   │   │   ├── auth.service.spec.ts
│   │   │   │   ├── auth.service.ts
│   │   │   │   ├── dto/
│   │   │   │   │   ├── login.dto.ts
│   │   │   │   │   └── validate-token.dto.ts
│   │   │   │   ├── jwt-guard.ts
│   │   │   │   ├── jwt-strategy.ts
│   │   │   │   └── types.ts
│   │   │   ├── common/
│   │   │   │   ├── constatnts/
│   │   │   │   │   └── connection.ts
│   │   │   │   ├── middleware/
│   │   │   │   │   └── logger.middleware.ts
│   │   │   │   └── providers/
│   │   │   │       └── DevConfigService.ts
│   │   │   ├── config/
│   │   │   │   └── configuration.ts
│   │   │   ├── main.ts
│   │   │   ├── playlists/
│   │   │   │   ├── dto/
│   │   │   │   │   └── create-playlist.dto.ts
│   │   │   │   ├── playlist.entity.ts
│   │   │   │   ├── playlists.controller.ts
│   │   │   │   ├── playlists.module.ts
│   │   │   │   └── playlists.service.ts
│   │   │   ├── seed/
│   │   │   │   ├── seed.module.ts
│   │   │   │   └── seed.service.ts
│   │   │   ├── songs/
│   │   │   │   ├── dto/
│   │   │   │   │   ├── create-song-dto.ts
│   │   │   │   │   └── update-song-dto.ts
│   │   │   │   ├── song.entity.ts
│   │   │   │   ├── songs.controller.spec.ts
│   │   │   │   ├── songs.controller.ts
│   │   │   │   ├── songs.module.ts
│   │   │   │   ├── songs.service.spec.ts
│   │   │   │   └── songs.service.ts
│   │   │   └── users/
│   │   │       ├── dto/
│   │   │       │   └── create-user.dto.ts
│   │   │       ├── user.entity.ts
│   │   │       ├── users.module.ts
│   │   │       ├── users.service.spec.ts
│   │   │       └── users.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   ├── tsconfig.json
│   │   └── webpack-hmr.config.js
│   └── lesson-04/
│       ├── .eslintrc.js
│       ├── .gitignore
│       ├── .prettierrc
│       ├── .vscode/
│       │   └── launch.json
│       ├── README.md
│       ├── db/
│       │   ├── data-source.ts
│       │   ├── migrations/
│       │   │   ├── 1685010320827-my-migrations.ts
│       │   │   └── 1685010456982-removed-phone.ts
│       │   └── seeds/
│       │       └── seed-data.ts
│       ├── env.validation.ts
│       ├── nest-cli.json
│       ├── package.json
│       ├── rest-client.http
│       ├── src/
│       │   ├── app.controller.spec.ts
│       │   ├── app.controller.ts
│       │   ├── app.module.ts
│       │   ├── app.service.ts
│       │   ├── artists/
│       │   │   ├── artist.entity.ts
│       │   │   ├── artists.controller.spec.ts
│       │   │   ├── artists.controller.ts
│       │   │   ├── artists.module.ts
│       │   │   ├── artists.service.spec.ts
│       │   │   └── artists.service.ts
│       │   ├── auth/
│       │   │   ├── api-key-strategy.ts
│       │   │   ├── artists-jwt-guard.ts
│       │   │   ├── auth.constants.ts
│       │   │   ├── auth.controller.spec.ts
│       │   │   ├── auth.controller.ts
│       │   │   ├── auth.module.ts
│       │   │   ├── auth.service.spec.ts
│       │   │   ├── auth.service.ts
│       │   │   ├── dto/
│       │   │   │   ├── login.dto.ts
│       │   │   │   └── validate-token.dto.ts
│       │   │   ├── jwt-guard.ts
│       │   │   ├── jwt-strategy.ts
│       │   │   └── types.ts
│       │   ├── common/
│       │   │   ├── constatnts/
│       │   │   │   └── connection.ts
│       │   │   ├── middleware/
│       │   │   │   └── logger.middleware.ts
│       │   │   └── providers/
│       │   │       └── DevConfigService.ts
│       │   ├── config/
│       │   │   └── configuration.ts
│       │   ├── main.ts
│       │   ├── playlists/
│       │   │   ├── dto/
│       │   │   │   └── create-playlist.dto.ts
│       │   │   ├── playlist.entity.ts
│       │   │   ├── playlists.controller.ts
│       │   │   ├── playlists.module.ts
│       │   │   └── playlists.service.ts
│       │   ├── seed/
│       │   │   ├── seed.module.ts
│       │   │   └── seed.service.ts
│       │   ├── songs/
│       │   │   ├── dto/
│       │   │   │   ├── create-song-dto.ts
│       │   │   │   └── update-song-dto.ts
│       │   │   ├── song.entity.ts
│       │   │   ├── songs.controller.spec.ts
│       │   │   ├── songs.controller.ts
│       │   │   ├── songs.module.ts
│       │   │   ├── songs.service.spec.ts
│       │   │   └── songs.service.ts
│       │   └── users/
│       │       ├── dto/
│       │       │   └── create-user.dto.ts
│       │       ├── user.entity.ts
│       │       ├── users.module.ts
│       │       ├── users.service.spec.ts
│       │       └── users.service.ts
│       ├── test/
│       │   ├── app.e2e-spec.ts
│       │   └── jest-e2e.json
│       ├── tsconfig.build.json
│       ├── tsconfig.json
│       └── webpack-hmr.config.js
├── module-11-mongodb/
│   ├── lesson-01/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── docker-compose.yml
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   └── main.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   ├── lesson-02-and-03/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── docker-compose.yml
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── main.ts
│   │   │   └── songs/
│   │   │       └── schemas/
│   │   │           └── song.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   ├── lesson-04/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── api.http
│   │   ├── docker-compose.yml
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── main.ts
│   │   │   └── songs/
│   │   │       ├── dto/
│   │   │       │   └── create-song-dto.ts
│   │   │       ├── schemas/
│   │   │       │   └── song.ts
│   │   │       ├── songs.controller.spec.ts
│   │   │       ├── songs.controller.ts
│   │   │       ├── songs.module.ts
│   │   │       ├── songs.service.spec.ts
│   │   │       └── songs.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   ├── lesson-05/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── api.http
│   │   ├── docker-compose.yml
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── main.ts
│   │   │   └── songs/
│   │   │       ├── dto/
│   │   │       │   └── create-song-dto.ts
│   │   │       ├── schemas/
│   │   │       │   └── song.ts
│   │   │       ├── songs.controller.spec.ts
│   │   │       ├── songs.controller.ts
│   │   │       ├── songs.module.ts
│   │   │       ├── songs.service.spec.ts
│   │   │       └── songs.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   └── lesson-06/
│       ├── .eslintrc.js
│       ├── .gitignore
│       ├── .prettierrc
│       ├── README.md
│       ├── api.http
│       ├── docker-compose.yml
│       ├── nest-cli.json
│       ├── package.json
│       ├── src/
│       │   ├── albums/
│       │   │   ├── albums.controller.ts
│       │   │   ├── albums.module.ts
│       │   │   ├── albums.service.ts
│       │   │   ├── dto/
│       │   │   │   └── create-album-dto.ts
│       │   │   └── schemas/
│       │   │       └── album.schema.ts
│       │   ├── app.controller.spec.ts
│       │   ├── app.controller.ts
│       │   ├── app.module.ts
│       │   ├── app.service.ts
│       │   ├── main.ts
│       │   └── songs/
│       │       ├── dto/
│       │       │   └── create-song-dto.ts
│       │       ├── schemas/
│       │       │   └── song.ts
│       │       ├── songs.controller.spec.ts
│       │       ├── songs.controller.ts
│       │       ├── songs.module.ts
│       │       ├── songs.service.spec.ts
│       │       └── songs.service.ts
│       ├── test/
│       │   ├── app.e2e-spec.ts
│       │   └── jest-e2e.json
│       ├── tsconfig.build.json
│       └── tsconfig.json
├── module-12-deploy-nestjs/
│   ├── deployment-finish/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── .vscode/
│   │   │   └── launch.json
│   │   ├── README.md
│   │   ├── db/
│   │   │   ├── data-source.ts
│   │   │   ├── migrations/
│   │   │   │   └── 1686309549613-init.ts
│   │   │   └── seeds/
│   │   │       └── seed-data.ts
│   │   ├── env.validation.ts
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── rest-client.http
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── artists/
│   │   │   │   ├── artist.entity.ts
│   │   │   │   ├── artists.controller.spec.ts
│   │   │   │   ├── artists.controller.ts
│   │   │   │   ├── artists.module.ts
│   │   │   │   ├── artists.service.spec.ts
│   │   │   │   └── artists.service.ts
│   │   │   ├── auth/
│   │   │   │   ├── api-key-strategy.ts
│   │   │   │   ├── artists-jwt-guard.ts
│   │   │   │   ├── auth.constants.ts
│   │   │   │   ├── auth.controller.spec.ts
│   │   │   │   ├── auth.controller.ts
│   │   │   │   ├── auth.module.ts
│   │   │   │   ├── auth.service.spec.ts
│   │   │   │   ├── auth.service.ts
│   │   │   │   ├── dto/
│   │   │   │   │   ├── login.dto.ts
│   │   │   │   │   └── validate-token.dto.ts
│   │   │   │   ├── jwt-guard.ts
│   │   │   │   ├── jwt-strategy.ts
│   │   │   │   └── types.ts
│   │   │   ├── common/
│   │   │   │   ├── constatnts/
│   │   │   │   │   └── connection.ts
│   │   │   │   ├── middleware/
│   │   │   │   │   └── logger.middleware.ts
│   │   │   │   └── providers/
│   │   │   │       └── DevConfigService.ts
│   │   │   ├── config/
│   │   │   │   └── configuration.ts
│   │   │   ├── main.ts
│   │   │   ├── playlists/
│   │   │   │   ├── dto/
│   │   │   │   │   └── create-playlist.dto.ts
│   │   │   │   ├── playlist.entity.ts
│   │   │   │   ├── playlists.controller.ts
│   │   │   │   ├── playlists.module.ts
│   │   │   │   └── playlists.service.ts
│   │   │   ├── seed/
│   │   │   │   ├── seed.module.ts
│   │   │   │   └── seed.service.ts
│   │   │   ├── songs/
│   │   │   │   ├── dto/
│   │   │   │   │   ├── create-song-dto.ts
│   │   │   │   │   └── update-song-dto.ts
│   │   │   │   ├── song.entity.ts
│   │   │   │   ├── songs.controller.spec.ts
│   │   │   │   ├── songs.controller.ts
│   │   │   │   ├── songs.module.ts
│   │   │   │   ├── songs.service.spec.ts
│   │   │   │   └── songs.service.ts
│   │   │   └── users/
│   │   │       ├── dto/
│   │   │       │   └── create-user.dto.ts
│   │   │       ├── user.entity.ts
│   │   │       ├── users.module.ts
│   │   │       ├── users.service.spec.ts
│   │   │       └── users.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   ├── tsconfig.json
│   │   └── webpack-hmr.config.js
│   └── deployment-starter/
│       ├── .eslintrc.js
│       ├── .gitignore
│       ├── .prettierrc
│       ├── .vscode/
│       │   └── launch.json
│       ├── README.md
│       ├── db/
│       │   ├── data-source.ts
│       │   ├── migrations/
│       │   │   ├── 1685010320827-my-migrations.ts
│       │   │   └── 1685010456982-removed-phone.ts
│       │   └── seeds/
│       │       └── seed-data.ts
│       ├── env.validation.ts
│       ├── nest-cli.json
│       ├── package.json
│       ├── rest-client.http
│       ├── src/
│       │   ├── app.controller.spec.ts
│       │   ├── app.controller.ts
│       │   ├── app.module.ts
│       │   ├── app.service.ts
│       │   ├── artists/
│       │   │   ├── artist.entity.ts
│       │   │   ├── artists.controller.spec.ts
│       │   │   ├── artists.controller.ts
│       │   │   ├── artists.module.ts
│       │   │   ├── artists.service.spec.ts
│       │   │   └── artists.service.ts
│       │   ├── auth/
│       │   │   ├── api-key-strategy.ts
│       │   │   ├── artists-jwt-guard.ts
│       │   │   ├── auth.constants.ts
│       │   │   ├── auth.controller.spec.ts
│       │   │   ├── auth.controller.ts
│       │   │   ├── auth.module.ts
│       │   │   ├── auth.service.spec.ts
│       │   │   ├── auth.service.ts
│       │   │   ├── dto/
│       │   │   │   ├── login.dto.ts
│       │   │   │   └── validate-token.dto.ts
│       │   │   ├── jwt-guard.ts
│       │   │   ├── jwt-strategy.ts
│       │   │   └── types.ts
│       │   ├── common/
│       │   │   ├── constatnts/
│       │   │   │   └── connection.ts
│       │   │   ├── middleware/
│       │   │   │   └── logger.middleware.ts
│       │   │   └── providers/
│       │   │       └── DevConfigService.ts
│       │   ├── config/
│       │   │   └── configuration.ts
│       │   ├── main.ts
│       │   ├── playlists/
│       │   │   ├── dto/
│       │   │   │   └── create-playlist.dto.ts
│       │   │   ├── playlist.entity.ts
│       │   │   ├── playlists.controller.ts
│       │   │   ├── playlists.module.ts
│       │   │   └── playlists.service.ts
│       │   ├── seed/
│       │   │   ├── seed.module.ts
│       │   │   └── seed.service.ts
│       │   ├── songs/
│       │   │   ├── dto/
│       │   │   │   ├── create-song-dto.ts
│       │   │   │   └── update-song-dto.ts
│       │   │   ├── song.entity.ts
│       │   │   ├── songs.controller.spec.ts
│       │   │   ├── songs.controller.ts
│       │   │   ├── songs.module.ts
│       │   │   ├── songs.service.spec.ts
│       │   │   └── songs.service.ts
│       │   └── users/
│       │       ├── dto/
│       │       │   └── create-user.dto.ts
│       │       ├── user.entity.ts
│       │       ├── users.module.ts
│       │       ├── users.service.spec.ts
│       │       └── users.service.ts
│       ├── test/
│       │   ├── app.e2e-spec.ts
│       │   └── jest-e2e.json
│       ├── tsconfig.build.json
│       ├── tsconfig.json
│       └── webpack-hmr.config.js
├── module-13-testing/
│   ├── end-to-end-testing/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── main.ts
│   │   │   └── song/
│   │   │       ├── dto/
│   │   │       │   ├── create-song-dto.ts
│   │   │       │   └── update-song-dto.ts
│   │   │       ├── song.controller.spec.ts
│   │   │       ├── song.controller.ts
│   │   │       ├── song.entity.ts
│   │   │       ├── song.module.ts
│   │   │       ├── song.service.spec.ts
│   │   │       └── song.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   ├── jest-e2e.json
│   │   │   └── songs/
│   │   │       └── songs.e2e-spec.ts
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   ├── jest-basics/
│   │   ├── .prettierrc
│   │   ├── mock-function.spec.js
│   │   ├── package.json
│   │   ├── spyon-demon.spec.js
│   │   ├── sum.js
│   │   └── sum.test.js
│   ├── unit-test-controller-and-service/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── main.ts
│   │   │   └── song/
│   │   │       ├── dto/
│   │   │       │   ├── create-song-dto.ts
│   │   │       │   └── update-song-dto.ts
│   │   │       ├── song.controller.spec.ts
│   │   │       ├── song.controller.ts
│   │   │       ├── song.entity.ts
│   │   │       ├── song.module.ts
│   │   │       ├── song.service.spec.ts
│   │   │       └── song.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   └── unit-test-setup/
│       ├── .eslintrc.js
│       ├── .gitignore
│       ├── .prettierrc
│       ├── README.md
│       ├── nest-cli.json
│       ├── package.json
│       ├── src/
│       │   ├── app.controller.spec.ts
│       │   ├── app.controller.ts
│       │   ├── app.module.ts
│       │   ├── app.service.ts
│       │   ├── main.ts
│       │   └── song/
│       │       ├── dto/
│       │       │   ├── create-song-dto.ts
│       │       │   └── update-song-dto.ts
│       │       ├── song.controller.spec.ts
│       │       ├── song.controller.ts
│       │       ├── song.entity.ts
│       │       ├── song.module.ts
│       │       ├── song.service.spec.ts
│       │       └── song.service.ts
│       ├── test/
│       │   ├── app.e2e-spec.ts
│       │   └── jest-e2e.json
│       ├── tsconfig.build.json
│       └── tsconfig.json
├── module-14-websocket/
│   ├── lesson-01/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   └── main.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   ├── lesson-02/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── lesson-01/
│   │   │   ├── .eslintrc.js
│   │   │   ├── .gitignore
│   │   │   ├── .prettierrc
│   │   │   ├── README.md
│   │   │   ├── nest-cli.json
│   │   │   ├── package.json
│   │   │   ├── src/
│   │   │   │   ├── app.controller.spec.ts
│   │   │   │   ├── app.controller.ts
│   │   │   │   ├── app.module.ts
│   │   │   │   ├── app.service.ts
│   │   │   │   └── main.ts
│   │   │   ├── test/
│   │   │   │   ├── app.e2e-spec.ts
│   │   │   │   └── jest-e2e.json
│   │   │   ├── tsconfig.build.json
│   │   │   └── tsconfig.json
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── events/
│   │   │   │   ├── events.gateway.spec.ts
│   │   │   │   ├── events.gateway.ts
│   │   │   │   └── events.module.ts
│   │   │   └── main.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   └── lesson-03/
│       ├── .eslintrc.js
│       ├── .gitignore
│       ├── .prettierrc
│       ├── .vscode/
│       │   └── settings.json
│       ├── README.md
│       ├── client/
│       │   └── index.html
│       ├── nest-cli.json
│       ├── package.json
│       ├── src/
│       │   ├── app.controller.spec.ts
│       │   ├── app.controller.ts
│       │   ├── app.module.ts
│       │   ├── app.service.ts
│       │   ├── events/
│       │   │   ├── events.gateway.spec.ts
│       │   │   ├── events.gateway.ts
│       │   │   └── events.module.ts
│       │   └── main.ts
│       ├── test/
│       │   ├── app.e2e-spec.ts
│       │   └── jest-e2e.json
│       ├── tsconfig.build.json
│       └── tsconfig.json
├── module-15-build-graphql-apis/
│   ├── lesson-01/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── generate-typings.ts
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── graphql.ts
│   │   │   ├── main.ts
│   │   │   └── song/
│   │   │       ├── dto/
│   │   │       │   ├── create-song-dto.ts
│   │   │       │   └── update-song-dto.ts
│   │   │       ├── song.controller.spec.ts
│   │   │       ├── song.controller.ts
│   │   │       ├── song.entity.ts
│   │   │       ├── song.graphql
│   │   │       ├── song.module.ts
│   │   │       ├── song.service.spec.ts
│   │   │       └── song.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   ├── lesson-02/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── generate-typings.ts
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── graphql.ts
│   │   │   ├── main.ts
│   │   │   └── song/
│   │   │       ├── dto/
│   │   │       │   ├── create-song-dto.ts
│   │   │       │   └── update-song-dto.ts
│   │   │       ├── song.controller.spec.ts
│   │   │       ├── song.controller.ts
│   │   │       ├── song.entity.ts
│   │   │       ├── song.graphql
│   │   │       ├── song.module.ts
│   │   │       ├── song.service.spec.ts
│   │   │       └── song.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   ├── lesson-03-and-04/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── generate-typings.ts
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── graphql.ts
│   │   │   ├── main.ts
│   │   │   └── song/
│   │   │       ├── dto/
│   │   │       │   ├── create-song-dto.ts
│   │   │       │   └── update-song-dto.ts
│   │   │       ├── song.controller.spec.ts
│   │   │       ├── song.controller.ts
│   │   │       ├── song.entity.ts
│   │   │       ├── song.graphql
│   │   │       ├── song.module.ts
│   │   │       ├── song.resolver.spec.ts
│   │   │       ├── song.resolver.ts
│   │   │       ├── song.service.spec.ts
│   │   │       └── song.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   └── lesson-05/
│       ├── .eslintrc.js
│       ├── .gitignore
│       ├── .prettierrc
│       ├── README.md
│       ├── generate-typings.ts
│       ├── nest-cli.json
│       ├── package.json
│       ├── src/
│       │   ├── app.controller.spec.ts
│       │   ├── app.controller.ts
│       │   ├── app.module.ts
│       │   ├── app.service.ts
│       │   ├── graphql.ts
│       │   ├── main.ts
│       │   └── song/
│       │       ├── dto/
│       │       │   ├── create-song-dto.ts
│       │       │   └── update-song-dto.ts
│       │       ├── song.controller.spec.ts
│       │       ├── song.controller.ts
│       │       ├── song.entity.ts
│       │       ├── song.graphql
│       │       ├── song.module.ts
│       │       ├── song.resolver.spec.ts
│       │       ├── song.resolver.ts
│       │       ├── song.service.spec.ts
│       │       └── song.service.ts
│       ├── test/
│       │   ├── app.e2e-spec.ts
│       │   └── jest-e2e.json
│       ├── tsconfig.build.json
│       └── tsconfig.json
├── module-16-authenticate-graphql-apis/
│   ├── lesson-01/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── .vscode/
│   │   │   └── launch.json
│   │   ├── README.md
│   │   ├── generate-typings.ts
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── rest-client.http
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── artists/
│   │   │   │   └── artist.entity.ts
│   │   │   ├── auth/
│   │   │   │   ├── auth.constants.ts
│   │   │   │   ├── auth.controller.spec.ts
│   │   │   │   ├── auth.controller.ts
│   │   │   │   ├── auth.graphql
│   │   │   │   ├── auth.module.ts
│   │   │   │   ├── auth.service.spec.ts
│   │   │   │   ├── auth.service.ts
│   │   │   │   ├── dto/
│   │   │   │   │   └── login.dto.ts
│   │   │   │   ├── jwt-guard.ts
│   │   │   │   └── jwt-strategy.ts
│   │   │   ├── common/
│   │   │   │   ├── constatnts/
│   │   │   │   │   └── connection.ts
│   │   │   │   ├── middleware/
│   │   │   │   │   └── logger.middleware.ts
│   │   │   │   └── providers/
│   │   │   │       └── DevConfigService.ts
│   │   │   ├── graphql.ts
│   │   │   ├── main.ts
│   │   │   ├── playlists/
│   │   │   │   ├── dto/
│   │   │   │   │   └── create-playlist.dto.ts
│   │   │   │   ├── playlist.entity.ts
│   │   │   │   ├── playlists.controller.ts
│   │   │   │   ├── playlists.module.ts
│   │   │   │   └── playlists.service.ts
│   │   │   ├── songs/
│   │   │   │   ├── dto/
│   │   │   │   │   ├── create-song-dto.ts
│   │   │   │   │   └── update-song-dto.ts
│   │   │   │   ├── song.entity.ts
│   │   │   │   ├── songs.controller.spec.ts
│   │   │   │   ├── songs.controller.ts
│   │   │   │   ├── songs.module.ts
│   │   │   │   ├── songs.service.spec.ts
│   │   │   │   └── songs.service.ts
│   │   │   └── users/
│   │   │       ├── dto/
│   │   │       │   └── create-user.dto.ts
│   │   │       ├── user.entity.ts
│   │   │       ├── users.module.ts
│   │   │       ├── users.service.spec.ts
│   │   │       └── users.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   ├── lesson-02/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── .vscode/
│   │   │   └── launch.json
│   │   ├── README.md
│   │   ├── generate-typings.ts
│   │   ├── lesson-01/
│   │   │   ├── .eslintrc.js
│   │   │   ├── .gitignore
│   │   │   ├── .prettierrc
│   │   │   ├── .vscode/
│   │   │   │   └── launch.json
│   │   │   ├── README.md
│   │   │   ├── generate-typings.ts
│   │   │   ├── nest-cli.json
│   │   │   ├── package.json
│   │   │   ├── rest-client.http
│   │   │   ├── src/
│   │   │   │   ├── app.controller.spec.ts
│   │   │   │   ├── app.controller.ts
│   │   │   │   ├── app.module.ts
│   │   │   │   ├── app.service.ts
│   │   │   │   ├── artists/
│   │   │   │   │   └── artist.entity.ts
│   │   │   │   ├── auth/
│   │   │   │   │   ├── auth.constants.ts
│   │   │   │   │   ├── auth.controller.spec.ts
│   │   │   │   │   ├── auth.controller.ts
│   │   │   │   │   ├── auth.graphql
│   │   │   │   │   ├── auth.module.ts
│   │   │   │   │   ├── auth.service.spec.ts
│   │   │   │   │   ├── auth.service.ts
│   │   │   │   │   ├── dto/
│   │   │   │   │   │   └── login.dto.ts
│   │   │   │   │   ├── jwt-guard.ts
│   │   │   │   │   └── jwt-strategy.ts
│   │   │   │   ├── common/
│   │   │   │   │   ├── constatnts/
│   │   │   │   │   │   └── connection.ts
│   │   │   │   │   ├── middleware/
│   │   │   │   │   │   └── logger.middleware.ts
│   │   │   │   │   └── providers/
│   │   │   │   │       └── DevConfigService.ts
│   │   │   │   ├── graphql.ts
│   │   │   │   ├── main.ts
│   │   │   │   ├── playlists/
│   │   │   │   │   ├── dto/
│   │   │   │   │   │   └── create-playlist.dto.ts
│   │   │   │   │   ├── playlist.entity.ts
│   │   │   │   │   ├── playlists.controller.ts
│   │   │   │   │   ├── playlists.module.ts
│   │   │   │   │   └── playlists.service.ts
│   │   │   │   ├── songs/
│   │   │   │   │   ├── dto/
│   │   │   │   │   │   ├── create-song-dto.ts
│   │   │   │   │   │   └── update-song-dto.ts
│   │   │   │   │   ├── song.entity.ts
│   │   │   │   │   ├── songs.controller.spec.ts
│   │   │   │   │   ├── songs.controller.ts
│   │   │   │   │   ├── songs.module.ts
│   │   │   │   │   ├── songs.service.spec.ts
│   │   │   │   │   └── songs.service.ts
│   │   │   │   └── users/
│   │   │   │       ├── dto/
│   │   │   │       │   └── create-user.dto.ts
│   │   │   │       ├── user.entity.ts
│   │   │   │       ├── users.module.ts
│   │   │   │       ├── users.service.spec.ts
│   │   │   │       └── users.service.ts
│   │   │   ├── test/
│   │   │   │   ├── app.e2e-spec.ts
│   │   │   │   └── jest-e2e.json
│   │   │   ├── tsconfig.build.json
│   │   │   └── tsconfig.json
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── rest-client.http
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── artists/
│   │   │   │   └── artist.entity.ts
│   │   │   ├── auth/
│   │   │   │   ├── auth.constants.ts
│   │   │   │   ├── auth.controller.spec.ts
│   │   │   │   ├── auth.controller.ts
│   │   │   │   ├── auth.graphql
│   │   │   │   ├── auth.module.ts
│   │   │   │   ├── auth.resolver.spec.ts
│   │   │   │   ├── auth.resolver.ts
│   │   │   │   ├── auth.service.spec.ts
│   │   │   │   ├── auth.service.ts
│   │   │   │   ├── dto/
│   │   │   │   │   └── login.dto.ts
│   │   │   │   ├── jwt-guard.ts
│   │   │   │   └── jwt-strategy.ts
│   │   │   ├── common/
│   │   │   │   ├── constatnts/
│   │   │   │   │   └── connection.ts
│   │   │   │   ├── middleware/
│   │   │   │   │   └── logger.middleware.ts
│   │   │   │   └── providers/
│   │   │   │       └── DevConfigService.ts
│   │   │   ├── graphql.ts
│   │   │   ├── main.ts
│   │   │   ├── playlists/
│   │   │   │   ├── dto/
│   │   │   │   │   └── create-playlist.dto.ts
│   │   │   │   ├── playlist.entity.ts
│   │   │   │   ├── playlists.controller.ts
│   │   │   │   ├── playlists.module.ts
│   │   │   │   └── playlists.service.ts
│   │   │   ├── songs/
│   │   │   │   ├── dto/
│   │   │   │   │   ├── create-song-dto.ts
│   │   │   │   │   └── update-song-dto.ts
│   │   │   │   ├── song.entity.ts
│   │   │   │   ├── songs.controller.spec.ts
│   │   │   │   ├── songs.controller.ts
│   │   │   │   ├── songs.module.ts
│   │   │   │   ├── songs.service.spec.ts
│   │   │   │   └── songs.service.ts
│   │   │   └── users/
│   │   │       ├── dto/
│   │   │       │   └── create-user.dto.ts
│   │   │       ├── user.entity.ts
│   │   │       ├── users.module.ts
│   │   │       ├── users.service.spec.ts
│   │   │       └── users.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   └── lesson-03/
│       ├── .eslintrc.js
│       ├── .gitignore
│       ├── .prettierrc
│       ├── .vscode/
│       │   └── launch.json
│       ├── README.md
│       ├── generate-typings.ts
│       ├── lesson-02/
│       │   ├── .eslintrc.js
│       │   ├── .gitignore
│       │   ├── .prettierrc
│       │   ├── .vscode/
│       │   │   └── launch.json
│       │   ├── README.md
│       │   ├── generate-typings.ts
│       │   ├── lesson-01/
│       │   │   ├── .eslintrc.js
│       │   │   ├── .gitignore
│       │   │   ├── .prettierrc
│       │   │   ├── .vscode/
│       │   │   │   └── launch.json
│       │   │   ├── README.md
│       │   │   ├── generate-typings.ts
│       │   │   ├── nest-cli.json
│       │   │   ├── package.json
│       │   │   ├── rest-client.http
│       │   │   ├── src/
│       │   │   │   ├── app.controller.spec.ts
│       │   │   │   ├── app.controller.ts
│       │   │   │   ├── app.module.ts
│       │   │   │   ├── app.service.ts
│       │   │   │   ├── artists/
│       │   │   │   │   └── artist.entity.ts
│       │   │   │   ├── auth/
│       │   │   │   │   ├── auth.constants.ts
│       │   │   │   │   ├── auth.controller.spec.ts
│       │   │   │   │   ├── auth.controller.ts
│       │   │   │   │   ├── auth.graphql
│       │   │   │   │   ├── auth.module.ts
│       │   │   │   │   ├── auth.service.spec.ts
│       │   │   │   │   ├── auth.service.ts
│       │   │   │   │   ├── dto/
│       │   │   │   │   │   └── login.dto.ts
│       │   │   │   │   ├── jwt-guard.ts
│       │   │   │   │   └── jwt-strategy.ts
│       │   │   │   ├── common/
│       │   │   │   │   ├── constatnts/
│       │   │   │   │   │   └── connection.ts
│       │   │   │   │   ├── middleware/
│       │   │   │   │   │   └── logger.middleware.ts
│       │   │   │   │   └── providers/
│       │   │   │   │       └── DevConfigService.ts
│       │   │   │   ├── graphql.ts
│       │   │   │   ├── main.ts
│       │   │   │   ├── playlists/
│       │   │   │   │   ├── dto/
│       │   │   │   │   │   └── create-playlist.dto.ts
│       │   │   │   │   ├── playlist.entity.ts
│       │   │   │   │   ├── playlists.controller.ts
│       │   │   │   │   ├── playlists.module.ts
│       │   │   │   │   └── playlists.service.ts
│       │   │   │   ├── songs/
│       │   │   │   │   ├── dto/
│       │   │   │   │   │   ├── create-song-dto.ts
│       │   │   │   │   │   └── update-song-dto.ts
│       │   │   │   │   ├── song.entity.ts
│       │   │   │   │   ├── songs.controller.spec.ts
│       │   │   │   │   ├── songs.controller.ts
│       │   │   │   │   ├── songs.module.ts
│       │   │   │   │   ├── songs.service.spec.ts
│       │   │   │   │   └── songs.service.ts
│       │   │   │   └── users/
│       │   │   │       ├── dto/
│       │   │   │       │   └── create-user.dto.ts
│       │   │   │       ├── user.entity.ts
│       │   │   │       ├── users.module.ts
│       │   │   │       ├── users.service.spec.ts
│       │   │   │       └── users.service.ts
│       │   │   ├── test/
│       │   │   │   ├── app.e2e-spec.ts
│       │   │   │   └── jest-e2e.json
│       │   │   ├── tsconfig.build.json
│       │   │   └── tsconfig.json
│       │   ├── nest-cli.json
│       │   ├── package.json
│       │   ├── rest-client.http
│       │   ├── src/
│       │   │   ├── app.controller.spec.ts
│       │   │   ├── app.controller.ts
│       │   │   ├── app.module.ts
│       │   │   ├── app.service.ts
│       │   │   ├── artists/
│       │   │   │   └── artist.entity.ts
│       │   │   ├── auth/
│       │   │   │   ├── auth.constants.ts
│       │   │   │   ├── auth.controller.spec.ts
│       │   │   │   ├── auth.controller.ts
│       │   │   │   ├── auth.graphql
│       │   │   │   ├── auth.module.ts
│       │   │   │   ├── auth.resolver.spec.ts
│       │   │   │   ├── auth.resolver.ts
│       │   │   │   ├── auth.service.spec.ts
│       │   │   │   ├── auth.service.ts
│       │   │   │   ├── dto/
│       │   │   │   │   └── login.dto.ts
│       │   │   │   ├── jwt-guard.ts
│       │   │   │   └── jwt-strategy.ts
│       │   │   ├── common/
│       │   │   │   ├── constatnts/
│       │   │   │   │   └── connection.ts
│       │   │   │   ├── middleware/
│       │   │   │   │   └── logger.middleware.ts
│       │   │   │   └── providers/
│       │   │   │       └── DevConfigService.ts
│       │   │   ├── graphql.ts
│       │   │   ├── main.ts
│       │   │   ├── playlists/
│       │   │   │   ├── dto/
│       │   │   │   │   └── create-playlist.dto.ts
│       │   │   │   ├── playlist.entity.ts
│       │   │   │   ├── playlists.controller.ts
│       │   │   │   ├── playlists.module.ts
│       │   │   │   └── playlists.service.ts
│       │   │   ├── songs/
│       │   │   │   ├── dto/
│       │   │   │   │   ├── create-song-dto.ts
│       │   │   │   │   └── update-song-dto.ts
│       │   │   │   ├── song.entity.ts
│       │   │   │   ├── songs.controller.spec.ts
│       │   │   │   ├── songs.controller.ts
│       │   │   │   ├── songs.module.ts
│       │   │   │   ├── songs.service.spec.ts
│       │   │   │   └── songs.service.ts
│       │   │   └── users/
│       │   │       ├── dto/
│       │   │       │   └── create-user.dto.ts
│       │   │       ├── user.entity.ts
│       │   │       ├── users.module.ts
│       │   │       ├── users.service.spec.ts
│       │   │       └── users.service.ts
│       │   ├── test/
│       │   │   ├── app.e2e-spec.ts
│       │   │   └── jest-e2e.json
│       │   ├── tsconfig.build.json
│       │   └── tsconfig.json
│       ├── nest-cli.json
│       ├── package.json
│       ├── rest-client.http
│       ├── src/
│       │   ├── app.controller.spec.ts
│       │   ├── app.controller.ts
│       │   ├── app.module.ts
│       │   ├── app.service.ts
│       │   ├── artists/
│       │   │   └── artist.entity.ts
│       │   ├── auth/
│       │   │   ├── auth.constants.ts
│       │   │   ├── auth.controller.spec.ts
│       │   │   ├── auth.controller.ts
│       │   │   ├── auth.graphql
│       │   │   ├── auth.module.ts
│       │   │   ├── auth.resolver.spec.ts
│       │   │   ├── auth.resolver.ts
│       │   │   ├── auth.service.spec.ts
│       │   │   ├── auth.service.ts
│       │   │   ├── dto/
│       │   │   │   └── login.dto.ts
│       │   │   ├── gql-auth-guard.ts
│       │   │   ├── jwt-guard.ts
│       │   │   └── jwt-strategy.ts
│       │   ├── common/
│       │   │   ├── constatnts/
│       │   │   │   └── connection.ts
│       │   │   ├── middleware/
│       │   │   │   └── logger.middleware.ts
│       │   │   └── providers/
│       │   │       └── DevConfigService.ts
│       │   ├── graphql.ts
│       │   ├── main.ts
│       │   ├── playlists/
│       │   │   ├── dto/
│       │   │   │   └── create-playlist.dto.ts
│       │   │   ├── playlist.entity.ts
│       │   │   ├── playlists.controller.ts
│       │   │   ├── playlists.module.ts
│       │   │   └── playlists.service.ts
│       │   ├── songs/
│       │   │   ├── dto/
│       │   │   │   ├── create-song-dto.ts
│       │   │   │   └── update-song-dto.ts
│       │   │   ├── song.entity.ts
│       │   │   ├── songs.controller.spec.ts
│       │   │   ├── songs.controller.ts
│       │   │   ├── songs.module.ts
│       │   │   ├── songs.service.spec.ts
│       │   │   └── songs.service.ts
│       │   └── users/
│       │       ├── dto/
│       │       │   └── create-user.dto.ts
│       │       ├── user.entity.ts
│       │       ├── users.module.ts
│       │       ├── users.service.spec.ts
│       │       └── users.service.ts
│       ├── test/
│       │   ├── app.e2e-spec.ts
│       │   └── jest-e2e.json
│       ├── tsconfig.build.json
│       └── tsconfig.json
├── module-17-subscription/
│   ├── subscription-finish/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── generate-typings.ts
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── graphql.ts
│   │   │   ├── main.ts
│   │   │   └── song/
│   │   │       ├── dto/
│   │   │       │   ├── create-song-dto.ts
│   │   │       │   └── update-song-dto.ts
│   │   │       ├── song.controller.spec.ts
│   │   │       ├── song.controller.ts
│   │   │       ├── song.entity.ts
│   │   │       ├── song.graphql
│   │   │       ├── song.module.ts
│   │   │       ├── song.resolver.spec.ts
│   │   │       ├── song.resolver.ts
│   │   │       ├── song.service.spec.ts
│   │   │       └── song.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   └── subscription-starter/
│       ├── .eslintrc.js
│       ├── .gitignore
│       ├── .prettierrc
│       ├── README.md
│       ├── generate-typings.ts
│       ├── nest-cli.json
│       ├── package.json
│       ├── src/
│       │   ├── app.controller.spec.ts
│       │   ├── app.controller.ts
│       │   ├── app.module.ts
│       │   ├── app.service.ts
│       │   ├── graphql.ts
│       │   ├── main.ts
│       │   └── song/
│       │       ├── dto/
│       │       │   ├── create-song-dto.ts
│       │       │   └── update-song-dto.ts
│       │       ├── song.controller.spec.ts
│       │       ├── song.controller.ts
│       │       ├── song.entity.ts
│       │       ├── song.graphql
│       │       ├── song.module.ts
│       │       ├── song.resolver.spec.ts
│       │       ├── song.resolver.ts
│       │       ├── song.service.spec.ts
│       │       └── song.service.ts
│       ├── test/
│       │   ├── app.e2e-spec.ts
│       │   └── jest-e2e.json
│       ├── tsconfig.build.json
│       └── tsconfig.json
├── module-18-testing-graphql-apis/
│   ├── lesson-01/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── generate-typings.ts
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── graphql.ts
│   │   │   ├── main.ts
│   │   │   └── song/
│   │   │       ├── dto/
│   │   │       │   ├── create-song-dto.ts
│   │   │       │   └── update-song-dto.ts
│   │   │       ├── song.controller.spec.ts
│   │   │       ├── song.controller.ts
│   │   │       ├── song.entity.ts
│   │   │       ├── song.graphql
│   │   │       ├── song.module.ts
│   │   │       ├── song.resolver.spec.ts
│   │   │       ├── song.resolver.ts
│   │   │       ├── song.service.spec.ts
│   │   │       └── song.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   └── lesson-02/
│       ├── .eslintrc.js
│       ├── .gitignore
│       ├── .prettierrc
│       ├── README.md
│       ├── generate-typings.ts
│       ├── nest-cli.json
│       ├── package.json
│       ├── src/
│       │   ├── app.controller.spec.ts
│       │   ├── app.controller.ts
│       │   ├── app.module.ts
│       │   ├── app.service.ts
│       │   ├── graphql.ts
│       │   ├── main.ts
│       │   └── song/
│       │       ├── dto/
│       │       │   ├── create-song-dto.ts
│       │       │   └── update-song-dto.ts
│       │       ├── song.controller.spec.ts
│       │       ├── song.controller.ts
│       │       ├── song.entity.ts
│       │       ├── song.graphql
│       │       ├── song.module.ts
│       │       ├── song.resolver.spec.ts
│       │       ├── song.resolver.ts
│       │       ├── song.service.spec.ts
│       │       └── song.service.ts
│       ├── test/
│       │   ├── app.e2e-spec.ts
│       │   ├── jest-e2e.json
│       │   └── song/
│       │       └── song.e2e-spec.ts
│       ├── tsconfig.build.json
│       └── tsconfig.json
├── module-19-graphql-advanced-concepts/
│   ├── lesson-01/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── generate-typings.ts
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── graphql.ts
│   │   │   ├── main.ts
│   │   │   └── song/
│   │   │       ├── dto/
│   │   │       │   ├── create-song-dto.ts
│   │   │       │   └── update-song-dto.ts
│   │   │       ├── song.controller.spec.ts
│   │   │       ├── song.controller.ts
│   │   │       ├── song.entity.ts
│   │   │       ├── song.graphql
│   │   │       ├── song.module.ts
│   │   │       ├── song.resolver.spec.ts
│   │   │       ├── song.resolver.ts
│   │   │       ├── song.service.spec.ts
│   │   │       └── song.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   ├── jest-e2e.json
│   │   │   └── song/
│   │   │       └── song.e2e-spec.ts
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   ├── lesson-02-dataloaders/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── app.module.ts
│   │   │   ├── main.ts
│   │   │   ├── posts/
│   │   │   │   ├── post.entity.ts
│   │   │   │   ├── posts.module.ts
│   │   │   │   ├── posts.resolver.ts
│   │   │   │   └── posts.service.ts
│   │   │   ├── schema.gql
│   │   │   ├── users/
│   │   │   │   ├── user.entity.ts
│   │   │   │   ├── users.loader.ts
│   │   │   │   ├── users.module.ts
│   │   │   │   ├── users.resolver.ts
│   │   │   │   └── users.service.ts
│   │   │   └── util.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   └── jest-e2e.json
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   └── lesson-03-fetching-external-api/
│       ├── .eslintrc.js
│       ├── .gitignore
│       ├── .prettierrc
│       ├── README.md
│       ├── api.http
│       ├── docker-compose.yml
│       ├── generate-typings.ts
│       ├── nest-cli.json
│       ├── package.json
│       ├── src/
│       │   ├── album/
│       │   │   ├── album.controller.ts
│       │   │   ├── album.module.ts
│       │   │   ├── album.service.ts
│       │   │   ├── dto/
│       │   │   │   └── create-album-dto.ts
│       │   │   └── schemas/
│       │   │       └── album.schema.ts
│       │   ├── app.controller.spec.ts
│       │   ├── app.controller.ts
│       │   ├── app.module.ts
│       │   ├── app.service.ts
│       │   ├── graphql.ts
│       │   ├── main.ts
│       │   ├── product/
│       │   │   ├── product-owner.resolver.ts
│       │   │   ├── product.graphql
│       │   │   ├── product.module.ts
│       │   │   ├── product.resolver.spec.ts
│       │   │   ├── product.resolver.ts
│       │   │   ├── product.service.spec.ts
│       │   │   ├── product.service.ts
│       │   │   └── schemas/
│       │   │       └── product.schema.ts
│       │   ├── songs/
│       │   │   ├── dto/
│       │   │   │   └── create-song-dto.ts
│       │   │   ├── schemas/
│       │   │   │   └── song.schema.ts
│       │   │   ├── songs.controller.spec.ts
│       │   │   ├── songs.controller.ts
│       │   │   ├── songs.module.ts
│       │   │   ├── songs.service.spec.ts
│       │   │   └── songs.service.ts
│       │   ├── todo/
│       │   │   ├── todo.graphql
│       │   │   ├── todo.module.ts
│       │   │   ├── todo.resolver.spec.ts
│       │   │   ├── todo.resolver.ts
│       │   │   ├── todo.service.spec.ts
│       │   │   └── todo.service.ts
│       │   └── user/
│       │       ├── schemas/
│       │       │   └── user.schema.ts
│       │       ├── user.module.ts
│       │       └── user.service.ts
│       ├── test/
│       │   ├── app.e2e-spec.ts
│       │   └── jest-e2e.json
│       ├── tsconfig.build.json
│       └── tsconfig.json
├── module-20-prisma-integration/
│   ├── lesson-01/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── prisma/
│   │   │   └── schema.prisma
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   └── main.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   ├── jest-e2e.json
│   │   │   └── song/
│   │   │       └── song.e2e-spec.ts
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   ├── lesson-02/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── prisma/
│   │   │   ├── migrations/
│   │   │   │   ├── 20230730081110_init/
│   │   │   │   │   └── migration.sql
│   │   │   │   └── migration_lock.toml
│   │   │   └── schema.prisma
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   └── main.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   ├── jest-e2e.json
│   │   │   └── song/
│   │   │       └── song.e2e-spec.ts
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   ├── lesson-03/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── prisma/
│   │   │   ├── migrations/
│   │   │   │   ├── 20230730081110_init/
│   │   │   │   │   └── migration.sql
│   │   │   │   └── migration_lock.toml
│   │   │   └── schema.prisma
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── main.ts
│   │   │   └── prisma.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   ├── jest-e2e.json
│   │   │   └── song/
│   │   │       └── song.e2e-spec.ts
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   ├── lesson-04-and-05/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── http-client.http
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── prisma/
│   │   │   ├── migrations/
│   │   │   │   ├── 20230730081110_init/
│   │   │   │   │   └── migration.sql
│   │   │   │   └── migration_lock.toml
│   │   │   └── schema.prisma
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── main.ts
│   │   │   ├── prisma.service.ts
│   │   │   └── songs/
│   │   │       ├── dto/
│   │   │       │   ├── create-song.dto.ts
│   │   │       │   └── update-song.dto.ts
│   │   │       ├── entities/
│   │   │       │   └── song.entity.ts
│   │   │       ├── songs.controller.spec.ts
│   │   │       ├── songs.controller.ts
│   │   │       ├── songs.module.ts
│   │   │       ├── songs.service.spec.ts
│   │   │       └── songs.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   ├── jest-e2e.json
│   │   │   └── song/
│   │   │       └── song.e2e-spec.ts
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   ├── lesson-06/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── http-client.http
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── prisma/
│   │   │   ├── migrations/
│   │   │   │   ├── 20230730081110_init/
│   │   │   │   │   └── migration.sql
│   │   │   │   ├── 20230801082432_add_artists/
│   │   │   │   │   └── migration.sql
│   │   │   │   └── migration_lock.toml
│   │   │   └── schema.prisma
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── artists/
│   │   │   │   ├── artists.controller.spec.ts
│   │   │   │   ├── artists.controller.ts
│   │   │   │   ├── artists.module.ts
│   │   │   │   ├── artists.service.spec.ts
│   │   │   │   ├── artists.service.ts
│   │   │   │   └── dto/
│   │   │   │       ├── create-artist.dto.ts
│   │   │   │       └── update-artist.dto.ts
│   │   │   ├── main.ts
│   │   │   ├── prisma.service.ts
│   │   │   └── songs/
│   │   │       ├── dto/
│   │   │       │   ├── create-song.dto.ts
│   │   │       │   └── update-song.dto.ts
│   │   │       ├── songs.controller.spec.ts
│   │   │       ├── songs.controller.ts
│   │   │       ├── songs.module.ts
│   │   │       ├── songs.service.spec.ts
│   │   │       └── songs.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   ├── jest-e2e.json
│   │   │   └── song/
│   │   │       └── song.e2e-spec.ts
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   ├── lesson-07/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── http-client.http
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── prisma/
│   │   │   ├── migrations/
│   │   │   │   ├── 20230730081110_init/
│   │   │   │   │   └── migration.sql
│   │   │   │   ├── 20230801082432_add_artists/
│   │   │   │   │   └── migration.sql
│   │   │   │   ├── 20230801091013_one_to_one/
│   │   │   │   │   └── migration.sql
│   │   │   │   └── migration_lock.toml
│   │   │   └── schema.prisma
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── artists/
│   │   │   │   ├── artists.controller.spec.ts
│   │   │   │   ├── artists.controller.ts
│   │   │   │   ├── artists.module.ts
│   │   │   │   ├── artists.service.spec.ts
│   │   │   │   ├── artists.service.ts
│   │   │   │   └── dto/
│   │   │   │       ├── create-artist.dto.ts
│   │   │   │       └── update-artist.dto.ts
│   │   │   ├── main.ts
│   │   │   ├── prisma.service.ts
│   │   │   ├── songs/
│   │   │   │   ├── dto/
│   │   │   │   │   ├── create-song.dto.ts
│   │   │   │   │   └── update-song.dto.ts
│   │   │   │   ├── songs.controller.spec.ts
│   │   │   │   ├── songs.controller.ts
│   │   │   │   ├── songs.module.ts
│   │   │   │   ├── songs.service.spec.ts
│   │   │   │   └── songs.service.ts
│   │   │   └── users/
│   │   │       ├── dto/
│   │   │       │   ├── create-user.dto.ts
│   │   │       │   └── update-user.dto.ts
│   │   │       ├── users.controller.spec.ts
│   │   │       ├── users.controller.ts
│   │   │       ├── users.module.ts
│   │   │       ├── users.service.spec.ts
│   │   │       └── users.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   ├── jest-e2e.json
│   │   │   └── song/
│   │   │       └── song.e2e-spec.ts
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   ├── lesson-08/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── http-client.http
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── prisma/
│   │   │   ├── migrations/
│   │   │   │   ├── 20230730081110_init/
│   │   │   │   │   └── migration.sql
│   │   │   │   ├── 20230801082432_add_artists/
│   │   │   │   │   └── migration.sql
│   │   │   │   ├── 20230801091013_one_to_one/
│   │   │   │   │   └── migration.sql
│   │   │   │   ├── 20230802074328_many_to_many/
│   │   │   │   │   └── migration.sql
│   │   │   │   ├── 20230802081727_nested_queries/
│   │   │   │   │   └── migration.sql
│   │   │   │   ├── 20230802083400_default_value_for_type/
│   │   │   │   │   └── migration.sql
│   │   │   │   └── migration_lock.toml
│   │   │   └── schema.prisma
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── applications/
│   │   │   │   ├── applications.controller.spec.ts
│   │   │   │   ├── applications.controller.ts
│   │   │   │   ├── applications.module.ts
│   │   │   │   ├── applications.service.spec.ts
│   │   │   │   ├── applications.service.ts
│   │   │   │   └── dto/
│   │   │   │       ├── create-application.dto.ts
│   │   │   │       └── update-application.dto.ts
│   │   │   ├── artists/
│   │   │   │   ├── artists.controller.spec.ts
│   │   │   │   ├── artists.controller.ts
│   │   │   │   ├── artists.module.ts
│   │   │   │   ├── artists.service.spec.ts
│   │   │   │   ├── artists.service.ts
│   │   │   │   └── dto/
│   │   │   │       ├── create-artist.dto.ts
│   │   │   │       └── update-artist.dto.ts
│   │   │   ├── main.ts
│   │   │   ├── posts/
│   │   │   │   ├── dto/
│   │   │   │   │   ├── create-post.dto.ts
│   │   │   │   │   └── update-post.dto.ts
│   │   │   │   ├── posts.controller.spec.ts
│   │   │   │   ├── posts.controller.ts
│   │   │   │   ├── posts.module.ts
│   │   │   │   ├── posts.service.spec.ts
│   │   │   │   └── posts.service.ts
│   │   │   ├── prisma.service.ts
│   │   │   ├── songs/
│   │   │   │   ├── dto/
│   │   │   │   │   ├── create-song.dto.ts
│   │   │   │   │   └── update-song.dto.ts
│   │   │   │   ├── songs.controller.spec.ts
│   │   │   │   ├── songs.controller.ts
│   │   │   │   ├── songs.module.ts
│   │   │   │   ├── songs.service.spec.ts
│   │   │   │   └── songs.service.ts
│   │   │   └── users/
│   │   │       ├── dto/
│   │   │       │   ├── create-user.dto.ts
│   │   │       │   └── update-user.dto.ts
│   │   │       ├── users.controller.spec.ts
│   │   │       ├── users.controller.ts
│   │   │       ├── users.module.ts
│   │   │       ├── users.service.spec.ts
│   │   │       └── users.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   ├── jest-e2e.json
│   │   │   └── song/
│   │   │       └── song.e2e-spec.ts
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   ├── lesson-09/
│   │   ├── .eslintrc.js
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── http-client.http
│   │   ├── nest-cli.json
│   │   ├── package.json
│   │   ├── prisma/
│   │   │   ├── migrations/
│   │   │   │   ├── 20230730081110_init/
│   │   │   │   │   └── migration.sql
│   │   │   │   ├── 20230801082432_add_artists/
│   │   │   │   │   └── migration.sql
│   │   │   │   ├── 20230801091013_one_to_one/
│   │   │   │   │   └── migration.sql
│   │   │   │   ├── 20230802074328_many_to_many/
│   │   │   │   │   └── migration.sql
│   │   │   │   ├── 20230802081727_nested_queries/
│   │   │   │   │   └── migration.sql
│   │   │   │   ├── 20230802083400_default_value_for_type/
│   │   │   │   │   └── migration.sql
│   │   │   │   └── migration_lock.toml
│   │   │   └── schema.prisma
│   │   ├── src/
│   │   │   ├── app.controller.spec.ts
│   │   │   ├── app.controller.ts
│   │   │   ├── app.module.ts
│   │   │   ├── app.service.ts
│   │   │   ├── applications/
│   │   │   │   ├── applications.controller.spec.ts
│   │   │   │   ├── applications.controller.ts
│   │   │   │   ├── applications.module.ts
│   │   │   │   ├── applications.service.spec.ts
│   │   │   │   ├── applications.service.ts
│   │   │   │   └── dto/
│   │   │   │       ├── create-application.dto.ts
│   │   │   │       └── update-application.dto.ts
│   │   │   ├── artists/
│   │   │   │   ├── artists.controller.spec.ts
│   │   │   │   ├── artists.controller.ts
│   │   │   │   ├── artists.module.ts
│   │   │   │   ├── artists.service.spec.ts
│   │   │   │   ├── artists.service.ts
│   │   │   │   └── dto/
│   │   │   │       ├── create-artist.dto.ts
│   │   │   │       └── update-artist.dto.ts
│   │   │   ├── main.ts
│   │   │   ├── posts/
│   │   │   │   ├── dto/
│   │   │   │   │   ├── create-post.dto.ts
│   │   │   │   │   └── update-post.dto.ts
│   │   │   │   ├── posts.controller.spec.ts
│   │   │   │   ├── posts.controller.ts
│   │   │   │   ├── posts.module.ts
│   │   │   │   ├── posts.service.spec.ts
│   │   │   │   └── posts.service.ts
│   │   │   ├── prisma.service.ts
│   │   │   ├── songs/
│   │   │   │   ├── dto/
│   │   │   │   │   ├── create-song.dto.ts
│   │   │   │   │   └── update-song.dto.ts
│   │   │   │   ├── songs.controller.spec.ts
│   │   │   │   ├── songs.controller.ts
│   │   │   │   ├── songs.module.ts
│   │   │   │   ├── songs.service.spec.ts
│   │   │   │   └── songs.service.ts
│   │   │   └── users/
│   │   │       ├── dto/
│   │   │       │   ├── create-user.dto.ts
│   │   │       │   └── update-user.dto.ts
│   │   │       ├── users.controller.spec.ts
│   │   │       ├── users.controller.ts
│   │   │       ├── users.module.ts
│   │   │       ├── users.service.spec.ts
│   │   │       └── users.service.ts
│   │   ├── test/
│   │   │   ├── app.e2e-spec.ts
│   │   │   ├── jest-e2e.json
│   │   │   └── song/
│   │   │       └── song.e2e-spec.ts
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   └── lesson-11-interactive-transactions/
│       ├── .eslintrc.js
│       ├── .gitignore
│       ├── .prettierrc
│       ├── README.md
│       ├── http-client.http
│       ├── nest-cli.json
│       ├── package.json
│       ├── prisma/
│       │   ├── migrations/
│       │   │   ├── 20230730081110_init/
│       │   │   │   └── migration.sql
│       │   │   ├── 20230801082432_add_artists/
│       │   │   │   └── migration.sql
│       │   │   ├── 20230801091013_one_to_one/
│       │   │   │   └── migration.sql
│       │   │   ├── 20230802074328_many_to_many/
│       │   │   │   └── migration.sql
│       │   │   ├── 20230802081727_nested_queries/
│       │   │   │   └── migration.sql
│       │   │   ├── 20230802083400_default_value_for_type/
│       │   │   │   └── migration.sql
│       │   │   ├── 20230804090722_add_account/
│       │   │   │   └── migration.sql
│       │   │   └── migration_lock.toml
│       │   └── schema.prisma
│       ├── src/
│       │   ├── accounts/
│       │   │   ├── accounts.controller.spec.ts
│       │   │   ├── accounts.controller.ts
│       │   │   ├── accounts.module.ts
│       │   │   ├── accounts.service.spec.ts
│       │   │   ├── accounts.service.ts
│       │   │   └── dto/
│       │   │       ├── create-account.dto.ts
│       │   │       ├── transfer-account.dto.ts
│       │   │       └── update-account.dto.ts
│       │   ├── app.controller.spec.ts
│       │   ├── app.controller.ts
│       │   ├── app.module.ts
│       │   ├── app.service.ts
│       │   ├── applications/
│       │   │   ├── applications.controller.spec.ts
│       │   │   ├── applications.controller.ts
│       │   │   ├── applications.module.ts
│       │   │   ├── applications.service.spec.ts
│       │   │   ├── applications.service.ts
│       │   │   └── dto/
│       │   │       ├── create-application.dto.ts
│       │   │       └── update-application.dto.ts
│       │   ├── artists/
│       │   │   ├── artists.controller.spec.ts
│       │   │   ├── artists.controller.ts
│       │   │   ├── artists.module.ts
│       │   │   ├── artists.service.spec.ts
│       │   │   ├── artists.service.ts
│       │   │   └── dto/
│       │   │       ├── create-artist.dto.ts
│       │   │       └── update-artist.dto.ts
│       │   ├── main.ts
│       │   ├── posts/
│       │   │   ├── dto/
│       │   │   │   ├── create-post.dto.ts
│       │   │   │   └── update-post.dto.ts
│       │   │   ├── posts.controller.spec.ts
│       │   │   ├── posts.controller.ts
│       │   │   ├── posts.module.ts
│       │   │   ├── posts.service.spec.ts
│       │   │   └── posts.service.ts
│       │   ├── prisma.service.ts
│       │   ├── songs/
│       │   │   ├── dto/
│       │   │   │   ├── create-song.dto.ts
│       │   │   │   └── update-song.dto.ts
│       │   │   ├── songs.controller.spec.ts
│       │   │   ├── songs.controller.ts
│       │   │   ├── songs.module.ts
│       │   │   ├── songs.service.spec.ts
│       │   │   └── songs.service.ts
│       │   └── users/
│       │       ├── dto/
│       │       │   ├── create-user.dto.ts
│       │       │   └── update-user.dto.ts
│       │       ├── users.controller.spec.ts
│       │       ├── users.controller.ts
│       │       ├── users.module.ts
│       │       ├── users.service.spec.ts
│       │       └── users.service.ts
│       ├── test/
│       │   ├── app.e2e-spec.ts
│       │   ├── jest-e2e.json
│       │   └── song/
│       │       └── song.e2e-spec.ts
│       ├── tsconfig.build.json
│       └── tsconfig.json
└── module-21-nestjs-advanced-concepts/
    ├── 0-starter/
    │   ├── .eslintrc.js
    │   ├── .gitignore
    │   ├── .prettierrc
    │   ├── README.md
    │   ├── nest-cli.json
    │   ├── package.json
    │   ├── src/
    │   │   ├── app.controller.spec.ts
    │   │   ├── app.controller.ts
    │   │   ├── app.module.ts
    │   │   ├── app.service.ts
    │   │   └── main.ts
    │   ├── test/
    │   │   ├── app.e2e-spec.ts
    │   │   └── jest-e2e.json
    │   ├── tsconfig.build.json
    │   └── tsconfig.json
    ├── lesson-01-file-upload/
    │   ├── .eslintrc.js
    │   ├── .gitignore
    │   ├── .prettierrc
    │   ├── README.md
    │   ├── nest-cli.json
    │   ├── package.json
    │   ├── src/
    │   │   ├── app.controller.spec.ts
    │   │   ├── app.controller.ts
    │   │   ├── app.module.ts
    │   │   ├── app.service.ts
    │   │   └── main.ts
    │   ├── test/
    │   │   ├── app.e2e-spec.ts
    │   │   └── jest-e2e.json
    │   ├── tsconfig.build.json
    │   └── tsconfig.json
    ├── lesson-02-custom-decorator/
    │   ├── .eslintrc.js
    │   ├── .gitignore
    │   ├── .prettierrc
    │   ├── README.md
    │   ├── http-client.http
    │   ├── nest-cli.json
    │   ├── package.json
    │   ├── src/
    │   │   ├── app.controller.spec.ts
    │   │   ├── app.controller.ts
    │   │   ├── app.module.ts
    │   │   ├── app.service.ts
    │   │   ├── main.ts
    │   │   ├── user.decorator.ts
    │   │   └── user.entity.ts
    │   ├── test/
    │   │   ├── app.e2e-spec.ts
    │   │   └── jest-e2e.json
    │   ├── tsconfig.build.json
    │   └── tsconfig.json
    ├── lesson-03-Task-scheduling/
    │   ├── .eslintrc.js
    │   ├── .gitignore
    │   ├── .prettierrc
    │   ├── README.md
    │   ├── http-client.http
    │   ├── nest-cli.json
    │   ├── package.json
    │   ├── src/
    │   │   ├── app.controller.spec.ts
    │   │   ├── app.controller.ts
    │   │   ├── app.module.ts
    │   │   ├── app.service.ts
    │   │   ├── main.ts
    │   │   ├── task/
    │   │   │   ├── task.service.spec.ts
    │   │   │   └── task.service.ts
    │   │   ├── user.decorator.ts
    │   │   └── user.entity.ts
    │   ├── test/
    │   │   ├── app.e2e-spec.ts
    │   │   └── jest-e2e.json
    │   ├── tsconfig.build.json
    │   └── tsconfig.json
    ├── lesson-04-cookies/
    │   ├── .eslintrc.js
    │   ├── .gitignore
    │   ├── .prettierrc
    │   ├── README.md
    │   ├── http-client.http
    │   ├── nest-cli.json
    │   ├── package.json
    │   ├── src/
    │   │   ├── app.controller.spec.ts
    │   │   ├── app.controller.ts
    │   │   ├── app.module.ts
    │   │   ├── app.service.ts
    │   │   ├── main.ts
    │   │   ├── task/
    │   │   │   ├── task.service.spec.ts
    │   │   │   └── task.service.ts
    │   │   ├── user.decorator.ts
    │   │   └── user.entity.ts
    │   ├── test/
    │   │   ├── app.e2e-spec.ts
    │   │   └── jest-e2e.json
    │   ├── tsconfig.build.json
    │   └── tsconfig.json
    ├── lesson-05-queues/
    │   ├── .eslintrc.js
    │   ├── .gitignore
    │   ├── .prettierrc
    │   ├── README.md
    │   ├── http-client.http
    │   ├── nest-cli.json
    │   ├── package.json
    │   ├── src/
    │   │   ├── app.controller.spec.ts
    │   │   ├── app.controller.ts
    │   │   ├── app.module.ts
    │   │   ├── app.service.ts
    │   │   ├── main.ts
    │   │   ├── task/
    │   │   │   ├── task.service.spec.ts
    │   │   │   └── task.service.ts
    │   │   ├── user.decorator.ts
    │   │   └── user.entity.ts
    │   ├── test/
    │   │   ├── app.e2e-spec.ts
    │   │   └── jest-e2e.json
    │   ├── tsconfig.build.json
    │   └── tsconfig.json
    ├── lesson-06-event-emitter/
    │   ├── .eslintrc.js
    │   ├── .gitignore
    │   ├── .prettierrc
    │   ├── README.md
    │   ├── docker-compose.yml
    │   ├── http-client.http
    │   ├── nest-cli.json
    │   ├── package.json
    │   ├── src/
    │   │   ├── app.controller.spec.ts
    │   │   ├── app.controller.ts
    │   │   ├── app.module.ts
    │   │   ├── app.service.ts
    │   │   ├── audio/
    │   │   │   ├── audio-converted-listener.ts
    │   │   │   ├── audio.controller.spec.ts
    │   │   │   ├── audio.controller.ts
    │   │   │   ├── audio.module.ts
    │   │   │   ├── audio.processor.ts
    │   │   │   └── events/
    │   │   │       └── audio-converted-event.ts
    │   │   ├── main.ts
    │   │   ├── task/
    │   │   │   ├── task.service.spec.ts
    │   │   │   └── task.service.ts
    │   │   ├── user.decorator.ts
    │   │   └── user.entity.ts
    │   ├── test/
    │   │   ├── app.e2e-spec.ts
    │   │   └── jest-e2e.json
    │   ├── tsconfig.build.json
    │   └── tsconfig.json
    ├── lesson-07-streaming/
    │   ├── .eslintrc.js
    │   ├── .gitignore
    │   ├── .prettierrc
    │   ├── README.md
    │   ├── docker-compose.yml
    │   ├── http-client.http
    │   ├── nest-cli.json
    │   ├── package.json
    │   ├── src/
    │   │   ├── app.controller.spec.ts
    │   │   ├── app.controller.ts
    │   │   ├── app.module.ts
    │   │   ├── app.service.ts
    │   │   ├── audio/
    │   │   │   ├── audio-converted-listener.ts
    │   │   │   ├── audio.controller.spec.ts
    │   │   │   ├── audio.controller.ts
    │   │   │   ├── audio.module.ts
    │   │   │   ├── audio.processor.ts
    │   │   │   └── events/
    │   │   │       └── audio-converted-event.ts
    │   │   ├── file/
    │   │   │   ├── file.controller.spec.ts
    │   │   │   └── file.controller.ts
    │   │   ├── main.ts
    │   │   ├── task/
    │   │   │   ├── task.service.spec.ts
    │   │   │   └── task.service.ts
    │   │   ├── user.decorator.ts
    │   │   └── user.entity.ts
    │   ├── test/
    │   │   ├── app.e2e-spec.ts
    │   │   └── jest-e2e.json
    │   ├── tsconfig.build.json
    │   └── tsconfig.json
    └── lesson-08-session/
        ├── .eslintrc.js
        ├── .gitignore
        ├── .prettierrc
        ├── README.md
        ├── docker-compose.yml
        ├── http-client.http
        ├── nest-cli.json
        ├── package.json
        ├── src/
        │   ├── app.controller.spec.ts
        │   ├── app.controller.ts
        │   ├── app.module.ts
        │   ├── app.service.ts
        │   ├── audio/
        │   │   ├── audio-converted-listener.ts
        │   │   ├── audio.controller.spec.ts
        │   │   ├── audio.controller.ts
        │   │   ├── audio.module.ts
        │   │   ├── audio.processor.ts
        │   │   └── events/
        │   │       └── audio-converted-event.ts
        │   ├── file/
        │   │   ├── file.controller.spec.ts
        │   │   └── file.controller.ts
        │   ├── main.ts
        │   ├── task/
        │   │   ├── task.service.spec.ts
        │   │   └── task.service.ts
        │   ├── user.decorator.ts
        │   └── user.entity.ts
        ├── test/
        │   ├── app.e2e-spec.ts
        │   └── jest-e2e.json
        ├── tsconfig.build.json
        └── tsconfig.json
Download .txt
Showing preview only (359K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (3754 symbols across 1501 files)

FILE: module-02-Creating-REST-APIS/01-Lesson-01/src/app.controller.ts
  class AppController (line 5) | class AppController {
    method constructor (line 6) | constructor(private readonly appService: AppService) {}
    method getHello (line 9) | getHello(): string {

FILE: module-02-Creating-REST-APIS/01-Lesson-01/src/app.module.ts
  class AppModule (line 11) | class AppModule {}

FILE: module-02-Creating-REST-APIS/01-Lesson-01/src/app.service.ts
  class AppService (line 4) | class AppService {
    method getHello (line 5) | getHello(): string {

FILE: module-02-Creating-REST-APIS/01-Lesson-01/src/main.ts
  function bootstrap (line 4) | async function bootstrap() {

FILE: module-02-Creating-REST-APIS/01-Lesson-01/src/songs/songs.module.ts
  class SongsModule (line 4) | class SongsModule {}

FILE: module-02-Creating-REST-APIS/02-Lesson-02/src/app.controller.ts
  class AppController (line 5) | class AppController {
    method constructor (line 6) | constructor(private readonly appService: AppService) {}
    method getHello (line 9) | getHello(): string {

FILE: module-02-Creating-REST-APIS/02-Lesson-02/src/app.module.ts
  class AppModule (line 11) | class AppModule {}

FILE: module-02-Creating-REST-APIS/02-Lesson-02/src/app.service.ts
  class AppService (line 4) | class AppService {
    method getHello (line 5) | getHello(): string {

FILE: module-02-Creating-REST-APIS/02-Lesson-02/src/main.ts
  function bootstrap (line 4) | async function bootstrap() {

FILE: module-02-Creating-REST-APIS/02-Lesson-02/src/songs/songs.controller.ts
  class SongsController (line 4) | class SongsController {
    method create (line 6) | create() {
    method findAll (line 10) | findAll() {
    method findOne (line 14) | findOne() {
    method update (line 19) | update() {
    method delete (line 24) | delete() {

FILE: module-02-Creating-REST-APIS/02-Lesson-02/src/songs/songs.module.ts
  class SongsModule (line 7) | class SongsModule {}

FILE: module-02-Creating-REST-APIS/03-Lesson-03/src/app.controller.ts
  class AppController (line 5) | class AppController {
    method constructor (line 6) | constructor(private readonly appService: AppService) {}
    method getHello (line 9) | getHello(): string {

FILE: module-02-Creating-REST-APIS/03-Lesson-03/src/app.module.ts
  class AppModule (line 11) | class AppModule {}

FILE: module-02-Creating-REST-APIS/03-Lesson-03/src/app.service.ts
  class AppService (line 4) | class AppService {
    method getHello (line 5) | getHello(): string {

FILE: module-02-Creating-REST-APIS/03-Lesson-03/src/main.ts
  function bootstrap (line 4) | async function bootstrap() {

FILE: module-02-Creating-REST-APIS/03-Lesson-03/src/songs/songs.controller.ts
  class SongsController (line 5) | class SongsController {
    method constructor (line 6) | constructor(private songsService: SongsService) {}
    method create (line 8) | create() {
    method findAll (line 12) | findAll() {
    method findOne (line 16) | findOne() {
    method update (line 21) | update() {
    method delete (line 26) | delete() {

FILE: module-02-Creating-REST-APIS/03-Lesson-03/src/songs/songs.module.ts
  class SongsModule (line 9) | class SongsModule {}

FILE: module-02-Creating-REST-APIS/03-Lesson-03/src/songs/songs.service.ts
  class SongsService (line 4) | class SongsService {
    method create (line 10) | create(song) {
    method findAll (line 16) | findAll() {

FILE: module-03-middlewares-exception-filters-pipes/lesson-01/src/app.controller.ts
  class AppController (line 5) | class AppController {
    method constructor (line 6) | constructor(private readonly appService: AppService) {}
    method getHello (line 9) | getHello(): string {

FILE: module-03-middlewares-exception-filters-pipes/lesson-01/src/app.module.ts
  class AppModule (line 18) | class AppModule implements NestModule {
    method configure (line 19) | configure(consumer: MiddlewareConsumer) {

FILE: module-03-middlewares-exception-filters-pipes/lesson-01/src/app.service.ts
  class AppService (line 4) | class AppService {
    method getHello (line 5) | getHello(): string {

FILE: module-03-middlewares-exception-filters-pipes/lesson-01/src/common/middleware/logger.middleware.ts
  class LoggerMiddleware (line 4) | class LoggerMiddleware implements NestMiddleware {
    method use (line 5) | use(req: any, res: any, next: () => void) {

FILE: module-03-middlewares-exception-filters-pipes/lesson-01/src/main.ts
  function bootstrap (line 4) | async function bootstrap() {

FILE: module-03-middlewares-exception-filters-pipes/lesson-01/src/songs/songs.controller.ts
  class SongsController (line 5) | class SongsController {
    method constructor (line 6) | constructor(private songsService: SongsService) {}
    method create (line 8) | create() {
    method findAll (line 12) | findAll() {
    method findOne (line 16) | findOne() {
    method update (line 21) | update() {
    method delete (line 26) | delete() {

FILE: module-03-middlewares-exception-filters-pipes/lesson-01/src/songs/songs.module.ts
  class SongsModule (line 9) | class SongsModule {}

FILE: module-03-middlewares-exception-filters-pipes/lesson-01/src/songs/songs.service.ts
  class SongsService (line 4) | class SongsService {
    method create (line 10) | create(song) {
    method findAll (line 16) | findAll() {

FILE: module-03-middlewares-exception-filters-pipes/lesson-02/src/app.controller.ts
  class AppController (line 5) | class AppController {
    method constructor (line 6) | constructor(private readonly appService: AppService) {}
    method getHello (line 9) | getHello(): string {

FILE: module-03-middlewares-exception-filters-pipes/lesson-02/src/app.module.ts
  class AppModule (line 18) | class AppModule implements NestModule {
    method configure (line 19) | configure(consumer: MiddlewareConsumer) {

FILE: module-03-middlewares-exception-filters-pipes/lesson-02/src/app.service.ts
  class AppService (line 4) | class AppService {
    method getHello (line 5) | getHello(): string {

FILE: module-03-middlewares-exception-filters-pipes/lesson-02/src/common/middleware/logger.middleware.ts
  class LoggerMiddleware (line 4) | class LoggerMiddleware implements NestMiddleware {
    method use (line 5) | use(req: any, res: any, next: () => void) {

FILE: module-03-middlewares-exception-filters-pipes/lesson-02/src/main.ts
  function bootstrap (line 4) | async function bootstrap() {

FILE: module-03-middlewares-exception-filters-pipes/lesson-02/src/songs/songs.controller.ts
  class SongsController (line 13) | class SongsController {
    method constructor (line 14) | constructor(private songsService: SongsService) {}
    method create (line 16) | create() {
    method findAll (line 20) | findAll() {
    method findOne (line 34) | findOne() {
    method update (line 39) | update() {
    method delete (line 44) | delete() {

FILE: module-03-middlewares-exception-filters-pipes/lesson-02/src/songs/songs.module.ts
  class SongsModule (line 9) | class SongsModule {}

FILE: module-03-middlewares-exception-filters-pipes/lesson-02/src/songs/songs.service.ts
  class SongsService (line 4) | class SongsService {
    method create (line 10) | create(song) {
    method findAll (line 16) | findAll() {

FILE: module-03-middlewares-exception-filters-pipes/lesson-03/src/app.controller.ts
  class AppController (line 5) | class AppController {
    method constructor (line 6) | constructor(private readonly appService: AppService) {}
    method getHello (line 9) | getHello(): string {

FILE: module-03-middlewares-exception-filters-pipes/lesson-03/src/app.module.ts
  class AppModule (line 18) | class AppModule implements NestModule {
    method configure (line 19) | configure(consumer: MiddlewareConsumer) {

FILE: module-03-middlewares-exception-filters-pipes/lesson-03/src/app.service.ts
  class AppService (line 4) | class AppService {
    method getHello (line 5) | getHello(): string {

FILE: module-03-middlewares-exception-filters-pipes/lesson-03/src/common/middleware/logger.middleware.ts
  class LoggerMiddleware (line 4) | class LoggerMiddleware implements NestMiddleware {
    method use (line 5) | use(req: any, res: any, next: () => void) {

FILE: module-03-middlewares-exception-filters-pipes/lesson-03/src/main.ts
  function bootstrap (line 4) | async function bootstrap() {

FILE: module-03-middlewares-exception-filters-pipes/lesson-03/src/songs/songs.controller.ts
  class SongsController (line 15) | class SongsController {
    method constructor (line 16) | constructor(private songsService: SongsService) {}
    method create (line 18) | create() {
    method findAll (line 22) | findAll() {
    method findOne (line 36) | findOne(
    method update (line 47) | update() {
    method delete (line 52) | delete() {

FILE: module-03-middlewares-exception-filters-pipes/lesson-03/src/songs/songs.module.ts
  class SongsModule (line 9) | class SongsModule {}

FILE: module-03-middlewares-exception-filters-pipes/lesson-03/src/songs/songs.service.ts
  class SongsService (line 4) | class SongsService {
    method create (line 10) | create(song) {
    method findAll (line 16) | findAll() {

FILE: module-03-middlewares-exception-filters-pipes/lesson-04/src/app.controller.ts
  class AppController (line 5) | class AppController {
    method constructor (line 6) | constructor(private readonly appService: AppService) {}
    method getHello (line 9) | getHello(): string {

FILE: module-03-middlewares-exception-filters-pipes/lesson-04/src/app.module.ts
  class AppModule (line 18) | class AppModule implements NestModule {
    method configure (line 19) | configure(consumer: MiddlewareConsumer) {

FILE: module-03-middlewares-exception-filters-pipes/lesson-04/src/app.service.ts
  class AppService (line 4) | class AppService {
    method getHello (line 5) | getHello(): string {

FILE: module-03-middlewares-exception-filters-pipes/lesson-04/src/common/middleware/logger.middleware.ts
  class LoggerMiddleware (line 4) | class LoggerMiddleware implements NestMiddleware {
    method use (line 5) | use(req: any, res: any, next: () => void) {

FILE: module-03-middlewares-exception-filters-pipes/lesson-04/src/main.ts
  function bootstrap (line 5) | async function bootstrap() {

FILE: module-03-middlewares-exception-filters-pipes/lesson-04/src/songs/dto/create-song-dto.ts
  class CreateSongDTO (line 9) | class CreateSongDTO {

FILE: module-03-middlewares-exception-filters-pipes/lesson-04/src/songs/songs.controller.ts
  class SongsController (line 17) | class SongsController {
    method constructor (line 18) | constructor(private songsService: SongsService) {}
    method create (line 20) | create(@Body() createSongDTO: CreateSongDTO) {
    method findAll (line 24) | findAll() {
    method findOne (line 38) | findOne(
    method update (line 49) | update() {
    method delete (line 54) | delete() {

FILE: module-03-middlewares-exception-filters-pipes/lesson-04/src/songs/songs.module.ts
  class SongsModule (line 9) | class SongsModule {}

FILE: module-03-middlewares-exception-filters-pipes/lesson-04/src/songs/songs.service.ts
  class SongsService (line 4) | class SongsService {
    method create (line 10) | create(song) {
    method findAll (line 16) | findAll() {

FILE: module-04-dependency-injection/lesson-01/src/app.controller.ts
  class AppController (line 5) | class AppController {
    method constructor (line 6) | constructor(private readonly appService: AppService) {}
    method getHello (line 9) | getHello(): string {

FILE: module-04-dependency-injection/lesson-01/src/app.module.ts
  class AppModule (line 29) | class AppModule implements NestModule {
    method configure (line 30) | configure(consumer: MiddlewareConsumer) {

FILE: module-04-dependency-injection/lesson-01/src/app.service.ts
  class AppService (line 5) | class AppService {
    method constructor (line 6) | constructor(
    method getHello (line 11) | getHello(): string {

FILE: module-04-dependency-injection/lesson-01/src/common/constatnts/connection.ts
  type Connection (line 6) | type Connection = {

FILE: module-04-dependency-injection/lesson-01/src/common/middleware/logger.middleware.ts
  class LoggerMiddleware (line 4) | class LoggerMiddleware implements NestMiddleware {
    method use (line 5) | use(req: any, res: any, next: () => void) {

FILE: module-04-dependency-injection/lesson-01/src/common/providers/DevConfigService.ts
  class DevConfigService (line 4) | class DevConfigService {
    method getDBHOST (line 6) | getDBHOST() {

FILE: module-04-dependency-injection/lesson-01/src/main.ts
  function bootstrap (line 5) | async function bootstrap() {

FILE: module-04-dependency-injection/lesson-01/src/songs/dto/create-song-dto.ts
  class CreateSongDTO (line 9) | class CreateSongDTO {

FILE: module-04-dependency-injection/lesson-01/src/songs/songs.controller.ts
  class SongsController (line 19) | class SongsController {
    method constructor (line 20) | constructor(
    method create (line 30) | create(@Body() createSongDTO: CreateSongDTO) {
    method findAll (line 34) | findAll() {
    method findOne (line 48) | findOne(
    method update (line 59) | update() {
    method delete (line 64) | delete() {

FILE: module-04-dependency-injection/lesson-01/src/songs/songs.module.ts
  method findAll (line 7) | findAll() {
  class SongsModule (line 30) | class SongsModule {}

FILE: module-04-dependency-injection/lesson-01/src/songs/songs.service.ts
  class SongsService (line 4) | class SongsService {
    method create (line 10) | create(song) {
    method findAll (line 16) | findAll() {

FILE: module-04-dependency-injection/lesson-02/src/app.controller.ts
  class AppController (line 5) | class AppController {
    method constructor (line 6) | constructor(private readonly appService: AppService) {}
    method getHello (line 9) | getHello(): string {

FILE: module-04-dependency-injection/lesson-02/src/app.module.ts
  class AppModule (line 29) | class AppModule implements NestModule {
    method configure (line 30) | configure(consumer: MiddlewareConsumer) {

FILE: module-04-dependency-injection/lesson-02/src/app.service.ts
  class AppService (line 5) | class AppService {
    method constructor (line 6) | constructor(
    method getHello (line 11) | getHello(): string {

FILE: module-04-dependency-injection/lesson-02/src/common/constatnts/connection.ts
  type Connection (line 6) | type Connection = {

FILE: module-04-dependency-injection/lesson-02/src/common/middleware/logger.middleware.ts
  class LoggerMiddleware (line 4) | class LoggerMiddleware implements NestMiddleware {
    method use (line 5) | use(req: any, res: any, next: () => void) {

FILE: module-04-dependency-injection/lesson-02/src/common/providers/DevConfigService.ts
  class DevConfigService (line 4) | class DevConfigService {
    method getDBHOST (line 6) | getDBHOST() {

FILE: module-04-dependency-injection/lesson-02/src/main.ts
  function bootstrap (line 5) | async function bootstrap() {

FILE: module-04-dependency-injection/lesson-02/src/songs/dto/create-song-dto.ts
  class CreateSongDTO (line 9) | class CreateSongDTO {

FILE: module-04-dependency-injection/lesson-02/src/songs/songs.controller.ts
  class SongsController (line 20) | class SongsController {
    method constructor (line 21) | constructor(
    method create (line 31) | create(@Body() createSongDTO: CreateSongDTO) {
    method findAll (line 35) | findAll() {
    method findOne (line 49) | findOne(
    method update (line 60) | update() {
    method delete (line 65) | delete() {

FILE: module-04-dependency-injection/lesson-02/src/songs/songs.module.ts
  method findAll (line 7) | findAll() {
  class SongsModule (line 30) | class SongsModule {}

FILE: module-04-dependency-injection/lesson-02/src/songs/songs.service.ts
  class SongsService (line 6) | class SongsService {
    method create (line 12) | create(song) {
    method findAll (line 18) | findAll() {

FILE: module-05-connect-nestjs-to-postgress/lesson-01/src/app.controller.ts
  class AppController (line 5) | class AppController {
    method constructor (line 6) | constructor(private readonly appService: AppService) {}
    method getHello (line 9) | getHello(): string {

FILE: module-05-connect-nestjs-to-postgress/lesson-01/src/app.module.ts
  class AppModule (line 27) | class AppModule implements NestModule {
    method constructor (line 28) | constructor(private dataSource: DataSource) {
    method configure (line 31) | configure(consumer: MiddlewareConsumer) {

FILE: module-05-connect-nestjs-to-postgress/lesson-01/src/app.service.ts
  class AppService (line 5) | class AppService {
    method getHello (line 6) | getHello(): string {

FILE: module-05-connect-nestjs-to-postgress/lesson-01/src/common/constatnts/connection.ts
  type Connection (line 6) | type Connection = {

FILE: module-05-connect-nestjs-to-postgress/lesson-01/src/common/middleware/logger.middleware.ts
  class LoggerMiddleware (line 4) | class LoggerMiddleware implements NestMiddleware {
    method use (line 5) | use(req: any, res: any, next: () => void) {

FILE: module-05-connect-nestjs-to-postgress/lesson-01/src/common/providers/DevConfigService.ts
  class DevConfigService (line 4) | class DevConfigService {
    method getDBHOST (line 6) | getDBHOST() {

FILE: module-05-connect-nestjs-to-postgress/lesson-01/src/main.ts
  function bootstrap (line 5) | async function bootstrap() {

FILE: module-05-connect-nestjs-to-postgress/lesson-01/src/songs/dto/create-song-dto.ts
  class CreateSongDTO (line 9) | class CreateSongDTO {

FILE: module-05-connect-nestjs-to-postgress/lesson-01/src/songs/songs.controller.ts
  class SongsController (line 19) | class SongsController {
    method constructor (line 20) | constructor(private songsService: SongsService) {}
    method create (line 22) | create(@Body() createSongDTO: CreateSongDTO) {
    method findAll (line 26) | findAll() {
    method findOne (line 40) | findOne(
    method update (line 51) | update() {
    method delete (line 56) | delete() {

FILE: module-05-connect-nestjs-to-postgress/lesson-01/src/songs/songs.module.ts
  class SongsModule (line 9) | class SongsModule {}

FILE: module-05-connect-nestjs-to-postgress/lesson-01/src/songs/songs.service.ts
  class SongsService (line 4) | class SongsService {
    method create (line 10) | create(song) {
    method findAll (line 16) | findAll() {

FILE: module-05-connect-nestjs-to-postgress/lesson-02/src/app.controller.ts
  class AppController (line 5) | class AppController {
    method constructor (line 6) | constructor(private readonly appService: AppService) {}
    method getHello (line 9) | getHello(): string {

FILE: module-05-connect-nestjs-to-postgress/lesson-02/src/app.module.ts
  class AppModule (line 28) | class AppModule implements NestModule {
    method constructor (line 29) | constructor(/*private dataSource: DataSource*/) {
    method configure (line 32) | configure(consumer: MiddlewareConsumer) {

FILE: module-05-connect-nestjs-to-postgress/lesson-02/src/app.service.ts
  class AppService (line 5) | class AppService {
    method getHello (line 6) | getHello(): string {

FILE: module-05-connect-nestjs-to-postgress/lesson-02/src/common/constatnts/connection.ts
  type Connection (line 6) | type Connection = {

FILE: module-05-connect-nestjs-to-postgress/lesson-02/src/common/middleware/logger.middleware.ts
  class LoggerMiddleware (line 4) | class LoggerMiddleware implements NestMiddleware {
    method use (line 5) | use(req: any, res: any, next: () => void) {

FILE: module-05-connect-nestjs-to-postgress/lesson-02/src/common/providers/DevConfigService.ts
  class DevConfigService (line 4) | class DevConfigService {
    method getDBHOST (line 6) | getDBHOST() {

FILE: module-05-connect-nestjs-to-postgress/lesson-02/src/main.ts
  function bootstrap (line 5) | async function bootstrap() {

FILE: module-05-connect-nestjs-to-postgress/lesson-02/src/songs/dto/create-song-dto.ts
  class CreateSongDTO (line 10) | class CreateSongDTO {

FILE: module-05-connect-nestjs-to-postgress/lesson-02/src/songs/song.entity.ts
  class Song (line 4) | class Song {

FILE: module-05-connect-nestjs-to-postgress/lesson-02/src/songs/songs.controller.ts
  class SongsController (line 19) | class SongsController {
    method constructor (line 20) | constructor(private songsService: SongsService) {}
    method create (line 22) | create(@Body() createSongDTO: CreateSongDTO) {
    method findAll (line 26) | findAll() {
    method findOne (line 40) | findOne(
    method update (line 51) | update() {
    method delete (line 56) | delete() {

FILE: module-05-connect-nestjs-to-postgress/lesson-02/src/songs/songs.module.ts
  class SongsModule (line 9) | class SongsModule {}

FILE: module-05-connect-nestjs-to-postgress/lesson-02/src/songs/songs.service.ts
  class SongsService (line 4) | class SongsService {
    method create (line 10) | create(song) {
    method findAll (line 16) | findAll() {

FILE: module-05-connect-nestjs-to-postgress/lesson-03/src/app.controller.ts
  class AppController (line 5) | class AppController {
    method constructor (line 6) | constructor(private readonly appService: AppService) {}
    method getHello (line 9) | getHello(): string {

FILE: module-05-connect-nestjs-to-postgress/lesson-03/src/app.module.ts
  class AppModule (line 28) | class AppModule implements NestModule {
    method constructor (line 29) | constructor(/*private dataSource: DataSource*/) {
    method configure (line 32) | configure(consumer: MiddlewareConsumer) {

FILE: module-05-connect-nestjs-to-postgress/lesson-03/src/app.service.ts
  class AppService (line 5) | class AppService {
    method getHello (line 6) | getHello(): string {

FILE: module-05-connect-nestjs-to-postgress/lesson-03/src/common/constatnts/connection.ts
  type Connection (line 6) | type Connection = {

FILE: module-05-connect-nestjs-to-postgress/lesson-03/src/common/middleware/logger.middleware.ts
  class LoggerMiddleware (line 4) | class LoggerMiddleware implements NestMiddleware {
    method use (line 5) | use(req: any, res: any, next: () => void) {

FILE: module-05-connect-nestjs-to-postgress/lesson-03/src/common/providers/DevConfigService.ts
  class DevConfigService (line 4) | class DevConfigService {
    method getDBHOST (line 6) | getDBHOST() {

FILE: module-05-connect-nestjs-to-postgress/lesson-03/src/main.ts
  function bootstrap (line 5) | async function bootstrap() {

FILE: module-05-connect-nestjs-to-postgress/lesson-03/src/songs/dto/create-song-dto.ts
  class CreateSongDTO (line 10) | class CreateSongDTO {

FILE: module-05-connect-nestjs-to-postgress/lesson-03/src/songs/dto/update-song-dto.ts
  class UpdateSongDto (line 9) | class UpdateSongDto {

FILE: module-05-connect-nestjs-to-postgress/lesson-03/src/songs/song.entity.ts
  class Song (line 4) | class Song {

FILE: module-05-connect-nestjs-to-postgress/lesson-03/src/songs/songs.controller.ts
  class SongsController (line 22) | class SongsController {
    method constructor (line 23) | constructor(private songsService: SongsService) {}
    method create (line 25) | create(@Body() createSongDTO: CreateSongDTO): Promise<Song> {
    method findAll (line 29) | findAll(): Promise<Song[]> {
    method findOne (line 43) | findOne(
    method update (line 54) | update(
    method delete (line 62) | delete(@Param('id', ParseIntPipe) id: number): Promise<DeleteResult> {

FILE: module-05-connect-nestjs-to-postgress/lesson-03/src/songs/songs.module.ts
  class SongsModule (line 12) | class SongsModule {}

FILE: module-05-connect-nestjs-to-postgress/lesson-03/src/songs/songs.service.ts
  class SongsService (line 9) | class SongsService {
    method constructor (line 10) | constructor(
    method create (line 15) | create(songDTO: CreateSongDTO): Promise<Song> {
    method findAll (line 26) | findAll(): Promise<Song[]> {
    method findOne (line 30) | findOne(id: number): Promise<Song> {
    method remove (line 34) | remove(id: number): Promise<DeleteResult> {
    method update (line 38) | update(id: number, recordToUpdate: UpdateSongDto): Promise<UpdateResul...

FILE: module-05-connect-nestjs-to-postgress/lesson-04/src/app.controller.ts
  class AppController (line 5) | class AppController {
    method constructor (line 6) | constructor(private readonly appService: AppService) {}
    method getHello (line 9) | getHello(): string {

FILE: module-05-connect-nestjs-to-postgress/lesson-04/src/app.module.ts
  class AppModule (line 28) | class AppModule implements NestModule {
    method constructor (line 29) | constructor(/*private dataSource: DataSource*/) {
    method configure (line 32) | configure(consumer: MiddlewareConsumer) {

FILE: module-05-connect-nestjs-to-postgress/lesson-04/src/app.service.ts
  class AppService (line 5) | class AppService {
    method getHello (line 6) | getHello(): string {

FILE: module-05-connect-nestjs-to-postgress/lesson-04/src/common/constatnts/connection.ts
  type Connection (line 6) | type Connection = {

FILE: module-05-connect-nestjs-to-postgress/lesson-04/src/common/middleware/logger.middleware.ts
  class LoggerMiddleware (line 4) | class LoggerMiddleware implements NestMiddleware {
    method use (line 5) | use(req: any, res: any, next: () => void) {

FILE: module-05-connect-nestjs-to-postgress/lesson-04/src/common/providers/DevConfigService.ts
  class DevConfigService (line 4) | class DevConfigService {
    method getDBHOST (line 6) | getDBHOST() {

FILE: module-05-connect-nestjs-to-postgress/lesson-04/src/main.ts
  function bootstrap (line 5) | async function bootstrap() {

FILE: module-05-connect-nestjs-to-postgress/lesson-04/src/songs/dto/create-song-dto.ts
  class CreateSongDTO (line 10) | class CreateSongDTO {

FILE: module-05-connect-nestjs-to-postgress/lesson-04/src/songs/dto/update-song-dto.ts
  class UpdateSongDto (line 9) | class UpdateSongDto {

FILE: module-05-connect-nestjs-to-postgress/lesson-04/src/songs/song.entity.ts
  class Song (line 4) | class Song {

FILE: module-05-connect-nestjs-to-postgress/lesson-04/src/songs/songs.controller.ts
  class SongsController (line 25) | class SongsController {
    method constructor (line 26) | constructor(private songsService: SongsService) {}
    method create (line 28) | create(@Body() createSongDTO: CreateSongDTO): Promise<Song> {
    method findAll (line 32) | findAll(
    method findOne (line 46) | findOne(
    method update (line 57) | update(
    method delete (line 65) | delete(@Param('id', ParseIntPipe) id: number): Promise<DeleteResult> {

FILE: module-05-connect-nestjs-to-postgress/lesson-04/src/songs/songs.module.ts
  class SongsModule (line 12) | class SongsModule {}

FILE: module-05-connect-nestjs-to-postgress/lesson-04/src/songs/songs.service.ts
  class SongsService (line 15) | class SongsService {
    method constructor (line 16) | constructor(
    method create (line 21) | create(songDTO: CreateSongDTO): Promise<Song> {
    method findAll (line 32) | findAll(): Promise<Song[]> {
    method findOne (line 36) | findOne(id: number): Promise<Song> {
    method remove (line 40) | remove(id: number): Promise<DeleteResult> {
    method update (line 44) | update(id: number, recordToUpdate: UpdateSongDto): Promise<UpdateResul...
    method paginate (line 48) | async paginate(options: IPaginationOptions): Promise<Pagination<Song>> {

FILE: module-06-relations/lesson-01/src/app.controller.ts
  class AppController (line 5) | class AppController {
    method constructor (line 6) | constructor(private readonly appService: AppService) {}
    method getHello (line 9) | getHello(): string {

FILE: module-06-relations/lesson-01/src/app.module.ts
  class AppModule (line 30) | class AppModule implements NestModule {
    method constructor (line 31) | constructor(/*private dataSource: DataSource*/) {
    method configure (line 34) | configure(consumer: MiddlewareConsumer) {

FILE: module-06-relations/lesson-01/src/app.service.ts
  class AppService (line 5) | class AppService {
    method getHello (line 6) | getHello(): string {

FILE: module-06-relations/lesson-01/src/artists/artist.entity.ts
  class Artist (line 5) | class Artist {

FILE: module-06-relations/lesson-01/src/common/constatnts/connection.ts
  type Connection (line 6) | type Connection = {

FILE: module-06-relations/lesson-01/src/common/middleware/logger.middleware.ts
  class LoggerMiddleware (line 4) | class LoggerMiddleware implements NestMiddleware {
    method use (line 5) | use(req: any, res: any, next: () => void) {

FILE: module-06-relations/lesson-01/src/common/providers/DevConfigService.ts
  class DevConfigService (line 4) | class DevConfigService {
    method getDBHOST (line 6) | getDBHOST() {

FILE: module-06-relations/lesson-01/src/main.ts
  function bootstrap (line 5) | async function bootstrap() {

FILE: module-06-relations/lesson-01/src/songs/dto/create-song-dto.ts
  class CreateSongDTO (line 10) | class CreateSongDTO {

FILE: module-06-relations/lesson-01/src/songs/dto/update-song-dto.ts
  class UpdateSongDto (line 9) | class UpdateSongDto {

FILE: module-06-relations/lesson-01/src/songs/song.entity.ts
  class Song (line 4) | class Song {

FILE: module-06-relations/lesson-01/src/songs/songs.controller.ts
  class SongsController (line 25) | class SongsController {
    method constructor (line 26) | constructor(private songsService: SongsService) {}
    method create (line 28) | create(@Body() createSongDTO: CreateSongDTO): Promise<Song> {
    method findAll (line 32) | findAll(
    method findOne (line 46) | findOne(
    method update (line 57) | update(
    method delete (line 65) | delete(@Param('id', ParseIntPipe) id: number): Promise<DeleteResult> {

FILE: module-06-relations/lesson-01/src/songs/songs.module.ts
  class SongsModule (line 12) | class SongsModule {}

FILE: module-06-relations/lesson-01/src/songs/songs.service.ts
  class SongsService (line 15) | class SongsService {
    method constructor (line 16) | constructor(
    method create (line 21) | create(songDTO: CreateSongDTO): Promise<Song> {
    method findAll (line 32) | findAll(): Promise<Song[]> {
    method findOne (line 36) | findOne(id: number): Promise<Song> {
    method remove (line 40) | remove(id: number): Promise<DeleteResult> {
    method update (line 44) | update(id: number, recordToUpdate: UpdateSongDto): Promise<UpdateResul...
    method paginate (line 48) | async paginate(options: IPaginationOptions): Promise<Pagination<Song>> {

FILE: module-06-relations/lesson-01/src/users/user.entity.ts
  class User (line 4) | class User {

FILE: module-06-relations/lesson-02-and-lesson-03/src/app.controller.ts
  class AppController (line 5) | class AppController {
    method constructor (line 6) | constructor(private readonly appService: AppService) {}
    method getHello (line 9) | getHello(): string {

FILE: module-06-relations/lesson-02-and-lesson-03/src/app.module.ts
  class AppModule (line 33) | class AppModule implements NestModule {
    method constructor (line 34) | constructor(/*private dataSource: DataSource*/) {
    method configure (line 37) | configure(consumer: MiddlewareConsumer) {

FILE: module-06-relations/lesson-02-and-lesson-03/src/app.service.ts
  class AppService (line 5) | class AppService {
    method getHello (line 6) | getHello(): string {

FILE: module-06-relations/lesson-02-and-lesson-03/src/artists/artist.entity.ts
  class Artist (line 12) | class Artist {

FILE: module-06-relations/lesson-02-and-lesson-03/src/common/constatnts/connection.ts
  type Connection (line 6) | type Connection = {

FILE: module-06-relations/lesson-02-and-lesson-03/src/common/middleware/logger.middleware.ts
  class LoggerMiddleware (line 4) | class LoggerMiddleware implements NestMiddleware {
    method use (line 5) | use(req: any, res: any, next: () => void) {

FILE: module-06-relations/lesson-02-and-lesson-03/src/common/providers/DevConfigService.ts
  class DevConfigService (line 4) | class DevConfigService {
    method getDBHOST (line 6) | getDBHOST() {

FILE: module-06-relations/lesson-02-and-lesson-03/src/main.ts
  function bootstrap (line 5) | async function bootstrap() {

FILE: module-06-relations/lesson-02-and-lesson-03/src/playlists/dto/create-playlist.dto.ts
  class CreatePlayListDto (line 3) | class CreatePlayListDto {

FILE: module-06-relations/lesson-02-and-lesson-03/src/playlists/playlist.entity.ts
  class Playlist (line 12) | class Playlist {

FILE: module-06-relations/lesson-02-and-lesson-03/src/playlists/playlists.controller.ts
  class PlayListsController (line 7) | class PlayListsController {
    method constructor (line 8) | constructor(private playListService: PlayListsService) {}
    method create (line 10) | create(

FILE: module-06-relations/lesson-02-and-lesson-03/src/playlists/playlists.module.ts
  class PlayListModule (line 14) | class PlayListModule {}

FILE: module-06-relations/lesson-02-and-lesson-03/src/playlists/playlists.service.ts
  class PlayListsService (line 10) | class PlayListsService {
    method constructor (line 11) | constructor(
    method create (line 22) | async create(playListDTO: CreatePlayListDto): Promise<Playlist> {

FILE: module-06-relations/lesson-02-and-lesson-03/src/songs/dto/create-song-dto.ts
  class CreateSongDTO (line 11) | class CreateSongDTO {

FILE: module-06-relations/lesson-02-and-lesson-03/src/songs/dto/update-song-dto.ts
  class UpdateSongDto (line 10) | class UpdateSongDto {

FILE: module-06-relations/lesson-02-and-lesson-03/src/songs/song.entity.ts
  class Song (line 13) | class Song {

FILE: module-06-relations/lesson-02-and-lesson-03/src/songs/songs.controller.ts
  class SongsController (line 25) | class SongsController {
    method constructor (line 26) | constructor(private songsService: SongsService) {}
    method create (line 28) | create(@Body() createSongDTO: CreateSongDTO): Promise<Song> {
    method findAll (line 32) | findAll(
    method findOne (line 46) | findOne(
    method update (line 57) | update(
    method delete (line 65) | delete(@Param('id', ParseIntPipe) id: number): Promise<DeleteResult> {

FILE: module-06-relations/lesson-02-and-lesson-03/src/songs/songs.module.ts
  class SongsModule (line 13) | class SongsModule {}

FILE: module-06-relations/lesson-02-and-lesson-03/src/songs/songs.service.ts
  class SongsService (line 16) | class SongsService {
    method constructor (line 17) | constructor(
    method create (line 24) | async create(songDTO: CreateSongDTO): Promise<Song> {
    method findAll (line 43) | findAll(): Promise<Song[]> {
    method findOne (line 47) | findOne(id: number): Promise<Song> {
    method remove (line 51) | remove(id: number): Promise<DeleteResult> {
    method update (line 55) | update(id: number, recordToUpdate: UpdateSongDto): Promise<UpdateResul...
    method paginate (line 59) | async paginate(options: IPaginationOptions): Promise<Pagination<Song>> {

FILE: module-06-relations/lesson-02-and-lesson-03/src/users/user.entity.ts
  class User (line 5) | class User {

FILE: module-07-authetication-and-authorization/lesson-01/src/app.controller.ts
  class AppController (line 5) | class AppController {
    method constructor (line 6) | constructor(private readonly appService: AppService) {}
    method getHello (line 9) | getHello(): string {

FILE: module-07-authetication-and-authorization/lesson-01/src/app.module.ts
  class AppModule (line 37) | class AppModule implements NestModule {
    method constructor (line 38) | constructor(/*private dataSource: DataSource*/) {
    method configure (line 41) | configure(consumer: MiddlewareConsumer) {

FILE: module-07-authetication-and-authorization/lesson-01/src/app.service.ts
  class AppService (line 5) | class AppService {
    method getHello (line 6) | getHello(): string {

FILE: module-07-authetication-and-authorization/lesson-01/src/artists/artist.entity.ts
  class Artist (line 12) | class Artist {

FILE: module-07-authetication-and-authorization/lesson-01/src/auth/auth.controller.ts
  class AuthController (line 7) | class AuthController {
    method constructor (line 8) | constructor(private userService: UsersService) {}
    method signup (line 10) | signup(

FILE: module-07-authetication-and-authorization/lesson-01/src/auth/auth.module.ts
  class AuthModule (line 12) | class AuthModule {}

FILE: module-07-authetication-and-authorization/lesson-01/src/auth/auth.service.ts
  class AuthService (line 4) | class AuthService {}

FILE: module-07-authetication-and-authorization/lesson-01/src/common/constatnts/connection.ts
  type Connection (line 6) | type Connection = {

FILE: module-07-authetication-and-authorization/lesson-01/src/common/middleware/logger.middleware.ts
  class LoggerMiddleware (line 4) | class LoggerMiddleware implements NestMiddleware {
    method use (line 5) | use(req: any, res: any, next: () => void) {

FILE: module-07-authetication-and-authorization/lesson-01/src/common/providers/DevConfigService.ts
  class DevConfigService (line 4) | class DevConfigService {
    method getDBHOST (line 6) | getDBHOST() {

FILE: module-07-authetication-and-authorization/lesson-01/src/main.ts
  function bootstrap (line 5) | async function bootstrap() {

FILE: module-07-authetication-and-authorization/lesson-01/src/playlists/dto/create-playlist.dto.ts
  class CreatePlayListDto (line 3) | class CreatePlayListDto {

FILE: module-07-authetication-and-authorization/lesson-01/src/playlists/playlist.entity.ts
  class Playlist (line 12) | class Playlist {

FILE: module-07-authetication-and-authorization/lesson-01/src/playlists/playlists.controller.ts
  class PlayListsController (line 7) | class PlayListsController {
    method constructor (line 8) | constructor(private playListService: PlayListsService) {}
    method create (line 10) | create(

FILE: module-07-authetication-and-authorization/lesson-01/src/playlists/playlists.module.ts
  class PlayListModule (line 14) | class PlayListModule {}

FILE: module-07-authetication-and-authorization/lesson-01/src/playlists/playlists.service.ts
  class PlayListsService (line 10) | class PlayListsService {
    method constructor (line 11) | constructor(
    method create (line 22) | async create(playListDTO: CreatePlayListDto): Promise<Playlist> {

FILE: module-07-authetication-and-authorization/lesson-01/src/songs/dto/create-song-dto.ts
  class CreateSongDTO (line 11) | class CreateSongDTO {

FILE: module-07-authetication-and-authorization/lesson-01/src/songs/dto/update-song-dto.ts
  class UpdateSongDto (line 10) | class UpdateSongDto {

FILE: module-07-authetication-and-authorization/lesson-01/src/songs/song.entity.ts
  class Song (line 13) | class Song {

FILE: module-07-authetication-and-authorization/lesson-01/src/songs/songs.controller.ts
  class SongsController (line 25) | class SongsController {
    method constructor (line 26) | constructor(private songsService: SongsService) {}
    method create (line 28) | create(@Body() createSongDTO: CreateSongDTO): Promise<Song> {
    method findAll (line 32) | findAll(
    method findOne (line 46) | findOne(
    method update (line 57) | update(
    method delete (line 65) | delete(@Param('id', ParseIntPipe) id: number): Promise<DeleteResult> {

FILE: module-07-authetication-and-authorization/lesson-01/src/songs/songs.module.ts
  class SongsModule (line 13) | class SongsModule {}

FILE: module-07-authetication-and-authorization/lesson-01/src/songs/songs.service.ts
  class SongsService (line 16) | class SongsService {
    method constructor (line 17) | constructor(
    method create (line 24) | async create(songDTO: CreateSongDTO): Promise<Song> {
    method findAll (line 43) | findAll(): Promise<Song[]> {
    method findOne (line 47) | findOne(id: number): Promise<Song> {
    method remove (line 51) | remove(id: number): Promise<DeleteResult> {
    method update (line 55) | update(id: number, recordToUpdate: UpdateSongDto): Promise<UpdateResul...
    method paginate (line 59) | async paginate(options: IPaginationOptions): Promise<Pagination<Song>> {

FILE: module-07-authetication-and-authorization/lesson-01/src/users/dto/create-user.dto.ts
  class CreateUserDTO (line 3) | class CreateUserDTO {

FILE: module-07-authetication-and-authorization/lesson-01/src/users/user.entity.ts
  class User (line 6) | class User {

FILE: module-07-authetication-and-authorization/lesson-01/src/users/users.module.ts
  class UsersModule (line 11) | class UsersModule {}

FILE: module-07-authetication-and-authorization/lesson-01/src/users/users.service.ts
  class UsersService (line 9) | class UsersService {
    method constructor (line 10) | constructor(
    method create (line 15) | async create(userDTO: CreateUserDTO): Promise<User> {

FILE: module-07-authetication-and-authorization/lesson-02/src/app.controller.ts
  class AppController (line 5) | class AppController {
    method constructor (line 6) | constructor(private readonly appService: AppService) {}
    method getHello (line 9) | getHello(): string {

FILE: module-07-authetication-and-authorization/lesson-02/src/app.module.ts
  class AppModule (line 37) | class AppModule implements NestModule {
    method constructor (line 38) | constructor(/*private dataSource: DataSource*/) {
    method configure (line 41) | configure(consumer: MiddlewareConsumer) {

FILE: module-07-authetication-and-authorization/lesson-02/src/app.service.ts
  class AppService (line 5) | class AppService {
    method getHello (line 6) | getHello(): string {

FILE: module-07-authetication-and-authorization/lesson-02/src/artists/artist.entity.ts
  class Artist (line 12) | class Artist {

FILE: module-07-authetication-and-authorization/lesson-02/src/auth/auth.controller.ts
  class AuthController (line 9) | class AuthController {
    method constructor (line 10) | constructor(
    method signup (line 15) | signup(
    method login (line 23) | login(

FILE: module-07-authetication-and-authorization/lesson-02/src/auth/auth.module.ts
  class AuthModule (line 12) | class AuthModule {}

FILE: module-07-authetication-and-authorization/lesson-02/src/auth/auth.service.ts
  class AuthService (line 8) | class AuthService {
    method constructor (line 9) | constructor(private userService: UsersService) {}
    method login (line 11) | async login(loginDTO: LoginDTO): Promise<User> {

FILE: module-07-authetication-and-authorization/lesson-02/src/auth/dto/login.dto.ts
  class LoginDTO (line 3) | class LoginDTO {

FILE: module-07-authetication-and-authorization/lesson-02/src/common/constatnts/connection.ts
  type Connection (line 6) | type Connection = {

FILE: module-07-authetication-and-authorization/lesson-02/src/common/middleware/logger.middleware.ts
  class LoggerMiddleware (line 4) | class LoggerMiddleware implements NestMiddleware {
    method use (line 5) | use(req: any, res: any, next: () => void) {

FILE: module-07-authetication-and-authorization/lesson-02/src/common/providers/DevConfigService.ts
  class DevConfigService (line 4) | class DevConfigService {
    method getDBHOST (line 6) | getDBHOST() {

FILE: module-07-authetication-and-authorization/lesson-02/src/main.ts
  function bootstrap (line 5) | async function bootstrap() {

FILE: module-07-authetication-and-authorization/lesson-02/src/playlists/dto/create-playlist.dto.ts
  class CreatePlayListDto (line 3) | class CreatePlayListDto {

FILE: module-07-authetication-and-authorization/lesson-02/src/playlists/playlist.entity.ts
  class Playlist (line 12) | class Playlist {

FILE: module-07-authetication-and-authorization/lesson-02/src/playlists/playlists.controller.ts
  class PlayListsController (line 7) | class PlayListsController {
    method constructor (line 8) | constructor(private playListService: PlayListsService) {}
    method create (line 10) | create(

FILE: module-07-authetication-and-authorization/lesson-02/src/playlists/playlists.module.ts
  class PlayListModule (line 14) | class PlayListModule {}

FILE: module-07-authetication-and-authorization/lesson-02/src/playlists/playlists.service.ts
  class PlayListsService (line 10) | class PlayListsService {
    method constructor (line 11) | constructor(
    method create (line 22) | async create(playListDTO: CreatePlayListDto): Promise<Playlist> {

FILE: module-07-authetication-and-authorization/lesson-02/src/songs/dto/create-song-dto.ts
  class CreateSongDTO (line 11) | class CreateSongDTO {

FILE: module-07-authetication-and-authorization/lesson-02/src/songs/dto/update-song-dto.ts
  class UpdateSongDto (line 10) | class UpdateSongDto {

FILE: module-07-authetication-and-authorization/lesson-02/src/songs/song.entity.ts
  class Song (line 13) | class Song {

FILE: module-07-authetication-and-authorization/lesson-02/src/songs/songs.controller.ts
  class SongsController (line 25) | class SongsController {
    method constructor (line 26) | constructor(private songsService: SongsService) {}
    method create (line 28) | create(@Body() createSongDTO: CreateSongDTO): Promise<Song> {
    method findAll (line 32) | findAll(
    method findOne (line 46) | findOne(
    method update (line 57) | update(
    method delete (line 65) | delete(@Param('id', ParseIntPipe) id: number): Promise<DeleteResult> {

FILE: module-07-authetication-and-authorization/lesson-02/src/songs/songs.module.ts
  class SongsModule (line 13) | class SongsModule {}

FILE: module-07-authetication-and-authorization/lesson-02/src/songs/songs.service.ts
  class SongsService (line 16) | class SongsService {
    method constructor (line 17) | constructor(
    method create (line 24) | async create(songDTO: CreateSongDTO): Promise<Song> {
    method findAll (line 43) | findAll(): Promise<Song[]> {
    method findOne (line 47) | findOne(id: number): Promise<Song> {
    method remove (line 51) | remove(id: number): Promise<DeleteResult> {
    method update (line 55) | update(id: number, recordToUpdate: UpdateSongDto): Promise<UpdateResul...
    method paginate (line 59) | async paginate(options: IPaginationOptions): Promise<Pagination<Song>> {

FILE: module-07-authetication-and-authorization/lesson-02/src/users/dto/create-user.dto.ts
  class CreateUserDTO (line 3) | class CreateUserDTO {

FILE: module-07-authetication-and-authorization/lesson-02/src/users/user.entity.ts
  class User (line 6) | class User {

FILE: module-07-authetication-and-authorization/lesson-02/src/users/users.module.ts
  class UsersModule (line 11) | class UsersModule {}

FILE: module-07-authetication-and-authorization/lesson-02/src/users/users.service.ts
  class UsersService (line 10) | class UsersService {
    method constructor (line 11) | constructor(
    method create (line 16) | async create(userDTO: CreateUserDTO): Promise<User> {
    method findOne (line 24) | async findOne(data: LoginDTO): Promise<User> {

FILE: module-07-authetication-and-authorization/lesson-03/src/app.controller.ts
  class AppController (line 6) | class AppController {
    method constructor (line 7) | constructor(private readonly appService: AppService) {}
    method getHello (line 10) | getHello(): string {
    method getProfile (line 16) | getProfile(

FILE: module-07-authetication-and-authorization/lesson-03/src/app.module.ts
  class AppModule (line 37) | class AppModule implements NestModule {
    method constructor (line 38) | constructor(/*private dataSource: DataSource*/) {
    method configure (line 41) | configure(consumer: MiddlewareConsumer) {

FILE: module-07-authetication-and-authorization/lesson-03/src/app.service.ts
  class AppService (line 5) | class AppService {
    method getHello (line 6) | getHello(): string {

FILE: module-07-authetication-and-authorization/lesson-03/src/artists/artist.entity.ts
  class Artist (line 12) | class Artist {

FILE: module-07-authetication-and-authorization/lesson-03/src/auth/auth.controller.ts
  class AuthController (line 9) | class AuthController {
    method constructor (line 10) | constructor(
    method signup (line 15) | signup(
    method login (line 23) | login(

FILE: module-07-authetication-and-authorization/lesson-03/src/auth/auth.module.ts
  class AuthModule (line 23) | class AuthModule {}

FILE: module-07-authetication-and-authorization/lesson-03/src/auth/auth.service.ts
  class AuthService (line 9) | class AuthService {
    method constructor (line 10) | constructor(
    method login (line 15) | async login(loginDTO: LoginDTO): Promise<{ accessToken: string }> {

FILE: module-07-authetication-and-authorization/lesson-03/src/auth/dto/login.dto.ts
  class LoginDTO (line 3) | class LoginDTO {

FILE: module-07-authetication-and-authorization/lesson-03/src/auth/jwt-guard.ts
  class JwtAuthGaurd (line 5) | class JwtAuthGaurd extends AuthGuard('jwt') {}

FILE: module-07-authetication-and-authorization/lesson-03/src/auth/jwt-strategy.ts
  class JwtStrategy (line 7) | class JwtStrategy extends PassportStrategy(Strategy) {
    method constructor (line 8) | constructor() {
    method validate (line 16) | async validate(payload: any) {

FILE: module-07-authetication-and-authorization/lesson-03/src/common/constatnts/connection.ts
  type Connection (line 6) | type Connection = {

FILE: module-07-authetication-and-authorization/lesson-03/src/common/middleware/logger.middleware.ts
  class LoggerMiddleware (line 4) | class LoggerMiddleware implements NestMiddleware {
    method use (line 5) | use(req: any, res: any, next: () => void) {

FILE: module-07-authetication-and-authorization/lesson-03/src/common/providers/DevConfigService.ts
  class DevConfigService (line 4) | class DevConfigService {
    method getDBHOST (line 6) | getDBHOST() {

FILE: module-07-authetication-and-authorization/lesson-03/src/main.ts
  function bootstrap (line 5) | async function bootstrap() {

FILE: module-07-authetication-and-authorization/lesson-03/src/playlists/dto/create-playlist.dto.ts
  class CreatePlayListDto (line 3) | class CreatePlayListDto {

FILE: module-07-authetication-and-authorization/lesson-03/src/playlists/playlist.entity.ts
  class Playlist (line 12) | class Playlist {

FILE: module-07-authetication-and-authorization/lesson-03/src/playlists/playlists.controller.ts
  class PlayListsController (line 7) | class PlayListsController {
    method constructor (line 8) | constructor(private playListService: PlayListsService) {}
    method create (line 10) | create(

FILE: module-07-authetication-and-authorization/lesson-03/src/playlists/playlists.module.ts
  class PlayListModule (line 14) | class PlayListModule {}

FILE: module-07-authetication-and-authorization/lesson-03/src/playlists/playlists.service.ts
  class PlayListsService (line 10) | class PlayListsService {
    method constructor (line 11) | constructor(
    method create (line 22) | async create(playListDTO: CreatePlayListDto): Promise<Playlist> {

FILE: module-07-authetication-and-authorization/lesson-03/src/songs/dto/create-song-dto.ts
  class CreateSongDTO (line 11) | class CreateSongDTO {

FILE: module-07-authetication-and-authorization/lesson-03/src/songs/dto/update-song-dto.ts
  class UpdateSongDto (line 10) | class UpdateSongDto {

FILE: module-07-authetication-and-authorization/lesson-03/src/songs/song.entity.ts
  class Song (line 13) | class Song {

FILE: module-07-authetication-and-authorization/lesson-03/src/songs/songs.controller.ts
  class SongsController (line 25) | class SongsController {
    method constructor (line 26) | constructor(private songsService: SongsService) {}
    method create (line 28) | create(@Body() createSongDTO: CreateSongDTO): Promise<Song> {
    method findAll (line 32) | findAll(
    method findOne (line 46) | findOne(
    method update (line 57) | update(
    method delete (line 65) | delete(@Param('id', ParseIntPipe) id: number): Promise<DeleteResult> {

FILE: module-07-authetication-and-authorization/lesson-03/src/songs/songs.module.ts
  class SongsModule (line 13) | class SongsModule {}

FILE: module-07-authetication-and-authorization/lesson-03/src/songs/songs.service.ts
  class SongsService (line 16) | class SongsService {
    method constructor (line 17) | constructor(
    method create (line 24) | async create(songDTO: CreateSongDTO): Promise<Song> {
    method findAll (line 43) | findAll(): Promise<Song[]> {
    method findOne (line 47) | findOne(id: number): Promise<Song> {
    method remove (line 51) | remove(id: number): Promise<DeleteResult> {
    method update (line 55) | update(id: number, recordToUpdate: UpdateSongDto): Promise<UpdateResul...
    method paginate (line 59) | async paginate(options: IPaginationOptions): Promise<Pagination<Song>> {

FILE: module-07-authetication-and-authorization/lesson-03/src/users/dto/create-user.dto.ts
  class CreateUserDTO (line 3) | class CreateUserDTO {

FILE: module-07-authetication-and-authorization/lesson-03/src/users/user.entity.ts
  class User (line 6) | class User {

FILE: module-07-authetication-and-authorization/lesson-03/src/users/users.module.ts
  class UsersModule (line 11) | class UsersModule {}

FILE: module-07-authetication-and-authorization/lesson-03/src/users/users.service.ts
  class UsersService (line 10) | class UsersService {
    method constructor (line 11) | constructor(
    method create (line 16) | async create(userDTO: CreateUserDTO): Promise<User> {
    method findOne (line 24) | async findOne(data: LoginDTO): Promise<User> {

FILE: module-07-authetication-and-authorization/lesson-04/src/app.controller.ts
  class AppController (line 6) | class AppController {
    method constructor (line 7) | constructor(private readonly appService: AppService) {}
    method getHello (line 10) | getHello(): string {
    method getProfile (line 16) | getProfile(

FILE: module-07-authetication-and-authorization/lesson-04/src/app.module.ts
  class AppModule (line 39) | class AppModule implements NestModule {
    method constructor (line 40) | constructor(/*private dataSource: DataSource*/) {
    method configure (line 43) | configure(consumer: MiddlewareConsumer) {

FILE: module-07-authetication-and-authorization/lesson-04/src/app.service.ts
  class AppService (line 5) | class AppService {
    method getHello (line 6) | getHello(): string {

FILE: module-07-authetication-and-authorization/lesson-04/src/artists/artist.entity.ts
  class Artist (line 12) | class Artist {

FILE: module-07-authetication-and-authorization/lesson-04/src/artists/artists.controller.ts
  class ArtistsController (line 4) | class ArtistsController {}

FILE: module-07-authetication-and-authorization/lesson-04/src/artists/artists.module.ts
  class ArtistsModule (line 13) | class ArtistsModule {}

FILE: module-07-authetication-and-authorization/lesson-04/src/artists/artists.service.ts
  class ArtistsService (line 7) | class ArtistsService {
    method constructor (line 8) | constructor(
    method findArtist (line 13) | findArtist(userId: number): Promise<Artist> {

FILE: module-07-authetication-and-authorization/lesson-04/src/auth/artists-jwt-guard.ts
  class ArtistJwtGuard (line 10) | class ArtistJwtGuard extends AuthGuard('jwt') {
    method canActivate (line 11) | canActivate(
    method handleRequest (line 16) | handleRequest<TUser = any>(err: any, user: any): TUser {

FILE: module-07-authetication-and-authorization/lesson-04/src/auth/auth.controller.ts
  class AuthController (line 9) | class AuthController {
    method constructor (line 10) | constructor(
    method signup (line 15) | signup(
    method login (line 23) | login(

FILE: module-07-authetication-and-authorization/lesson-04/src/auth/auth.module.ts
  class AuthModule (line 25) | class AuthModule {}

FILE: module-07-authetication-and-authorization/lesson-04/src/auth/auth.service.ts
  class AuthService (line 11) | class AuthService {
    method constructor (line 12) | constructor(
    method login (line 18) | async login(loginDTO: LoginDTO): Promise<{ accessToken: string }> {

FILE: module-07-authetication-and-authorization/lesson-04/src/auth/dto/login.dto.ts
  class LoginDTO (line 3) | class LoginDTO {

FILE: module-07-authetication-and-authorization/lesson-04/src/auth/jwt-guard.ts
  class JwtAuthGaurd (line 5) | class JwtAuthGaurd extends AuthGuard('jwt') {}

FILE: module-07-authetication-and-authorization/lesson-04/src/auth/jwt-strategy.ts
  class JwtStrategy (line 8) | class JwtStrategy extends PassportStrategy(Strategy) {
    method constructor (line 9) | constructor() {
    method validate (line 17) | async validate(payload: PayloadType) {

FILE: module-07-authetication-and-authorization/lesson-04/src/auth/types.ts
  type PayloadType (line 1) | interface PayloadType {

FILE: module-07-authetication-and-authorization/lesson-04/src/common/constatnts/connection.ts
  type Connection (line 6) | type Connection = {

FILE: module-07-authetication-and-authorization/lesson-04/src/common/middleware/logger.middleware.ts
  class LoggerMiddleware (line 4) | class LoggerMiddleware implements NestMiddleware {
    method use (line 5) | use(req: any, res: any, next: () => void) {

FILE: module-07-authetication-and-authorization/lesson-04/src/common/providers/DevConfigService.ts
  class DevConfigService (line 4) | class DevConfigService {
    method getDBHOST (line 6) | getDBHOST() {

FILE: module-07-authetication-and-authorization/lesson-04/src/main.ts
  function bootstrap (line 5) | async function bootstrap() {

FILE: module-07-authetication-and-authorization/lesson-04/src/playlists/dto/create-playlist.dto.ts
  class CreatePlayListDto (line 3) | class CreatePlayListDto {

FILE: module-07-authetication-and-authorization/lesson-04/src/playlists/playlist.entity.ts
  class Playlist (line 12) | class Playlist {

FILE: module-07-authetication-and-authorization/lesson-04/src/playlists/playlists.controller.ts
  class PlayListsController (line 7) | class PlayListsController {
    method constructor (line 8) | constructor(private playListService: PlayListsService) {}
    method create (line 10) | create(

FILE: module-07-authetication-and-authorization/lesson-04/src/playlists/playlists.module.ts
  class PlayListModule (line 14) | class PlayListModule {}

FILE: module-07-authetication-and-authorization/lesson-04/src/playlists/playlists.service.ts
  class PlayListsService (line 10) | class PlayListsService {
    method constructor (line 11) | constructor(
    method create (line 22) | async create(playListDTO: CreatePlayListDto): Promise<Playlist> {

FILE: module-07-authetication-and-authorization/lesson-04/src/songs/dto/create-song-dto.ts
  class CreateSongDTO (line 11) | class CreateSongDTO {

FILE: module-07-authetication-and-authorization/lesson-04/src/songs/dto/update-song-dto.ts
  class UpdateSongDto (line 10) | class UpdateSongDto {

FILE: module-07-authetication-and-authorization/lesson-04/src/songs/song.entity.ts
  class Song (line 13) | class Song {

FILE: module-07-authetication-and-authorization/lesson-04/src/songs/songs.controller.ts
  class SongsController (line 28) | class SongsController {
    method constructor (line 29) | constructor(private songsService: SongsService) {}
    method create (line 32) | create(
    method findAll (line 41) | findAll(
    method findOne (line 55) | findOne(
    method update (line 66) | update(
    method delete (line 74) | delete(@Param('id', ParseIntPipe) id: number): Promise<DeleteResult> {

FILE: module-07-authetication-and-authorization/lesson-04/src/songs/songs.module.ts
  class SongsModule (line 13) | class SongsModule {}

FILE: module-07-authetication-and-authorization/lesson-04/src/songs/songs.service.ts
  class SongsService (line 16) | class SongsService {
    method constructor (line 17) | constructor(
    method create (line 24) | async create(songDTO: CreateSongDTO): Promise<Song> {
    method findAll (line 43) | findAll(): Promise<Song[]> {
    method findOne (line 47) | findOne(id: number): Promise<Song> {
    method remove (line 51) | remove(id: number): Promise<DeleteResult> {
    method update (line 55) | update(id: number, recordToUpdate: UpdateSongDto): Promise<UpdateResul...
    method paginate (line 59) | async paginate(options: IPaginationOptions): Promise<Pagination<Song>> {

FILE: module-07-authetication-and-authorization/lesson-04/src/users/dto/create-user.dto.ts
  class CreateUserDTO (line 3) | class CreateUserDTO {

FILE: module-07-authetication-and-authorization/lesson-04/src/users/user.entity.ts
  class User (line 6) | class User {

FILE: module-07-authetication-and-authorization/lesson-04/src/users/users.module.ts
  class UsersModule (line 11) | class UsersModule {}

FILE: module-07-authetication-and-authorization/lesson-04/src/users/users.service.ts
  class UsersService (line 10) | class UsersService {
    method constructor (line 11) | constructor(
    method create (line 16) | async create(userDTO: CreateUserDTO): Promise<User> {
    method findOne (line 24) | async findOne(data: LoginDTO): Promise<User> {

FILE: module-07-authetication-and-authorization/lesson-05/src/app.controller.ts
  class AppController (line 6) | class AppController {
    method constructor (line 7) | constructor(private readonly appService: AppService) {}
    method getHello (line 10) | getHello(): string {
    method getProfile (line 16) | getProfile(

FILE: module-07-authetication-and-authorization/lesson-05/src/app.module.ts
  class AppModule (line 39) | class AppModule implements NestModule {
    method constructor (line 40) | constructor(/*private dataSource: DataSource*/) {
    method configure (line 43) | configure(consumer: MiddlewareConsumer) {

FILE: module-07-authetication-and-authorization/lesson-05/src/app.service.ts
  class AppService (line 5) | class AppService {
    method getHello (line 6) | getHello(): string {

FILE: module-07-authetication-and-authorization/lesson-05/src/artists/artist.entity.ts
  class Artist (line 12) | class Artist {

FILE: module-07-authetication-and-authorization/lesson-05/src/artists/artists.controller.ts
  class ArtistsController (line 4) | class ArtistsController {}

FILE: module-07-authetication-and-authorization/lesson-05/src/artists/artists.module.ts
  class ArtistsModule (line 13) | class ArtistsModule {}

FILE: module-07-authetication-and-authorization/lesson-05/src/artists/artists.service.ts
  class ArtistsService (line 7) | class ArtistsService {
    method constructor (line 8) | constructor(
    method findArtist (line 13) | findArtist(userId: number): Promise<Artist> {

FILE: module-07-authetication-and-authorization/lesson-05/src/auth/artists-jwt-guard.ts
  class ArtistJwtGuard (line 10) | class ArtistJwtGuard extends AuthGuard('jwt') {
    method canActivate (line 11) | canActivate(
    method handleRequest (line 16) | handleRequest<TUser = any>(err: any, user: any): TUser {

FILE: module-07-authetication-and-authorization/lesson-05/src/auth/auth.controller.ts
  class AuthController (line 20) | class AuthController {
    method constructor (line 21) | constructor(
    method signup (line 26) | signup(
    method login (line 34) | login(
    method enable2FA (line 43) | enable2FA(
    method validate2FA (line 53) | validate2FA(
    method disable2FA (line 66) | disable2FA(

FILE: module-07-authetication-and-authorization/lesson-05/src/auth/auth.module.ts
  class AuthModule (line 25) | class AuthModule {}

FILE: module-07-authetication-and-authorization/lesson-05/src/auth/auth.service.ts
  class AuthService (line 14) | class AuthService {
    method constructor (line 15) | constructor(
    method login (line 21) | async login(
    method enable2FA (line 58) | async enable2FA(userId: number): Promise<Enable2FAType> {
    method validate2FAToken (line 71) | async validate2FAToken(
    method disable2FA (line 98) | async disable2FA(userId: number): Promise<UpdateResult> {

FILE: module-07-authetication-and-authorization/lesson-05/src/auth/dto/login.dto.ts
  class LoginDTO (line 3) | class LoginDTO {

FILE: module-07-authetication-and-authorization/lesson-05/src/auth/dto/validate-token.dto.ts
  class ValidateTokenDTO (line 3) | class ValidateTokenDTO {

FILE: module-07-authetication-and-authorization/lesson-05/src/auth/jwt-guard.ts
  class JwtAuthGuard (line 5) | class JwtAuthGuard extends AuthGuard('jwt') {}

FILE: module-07-authetication-and-authorization/lesson-05/src/auth/jwt-strategy.ts
  class JwtStrategy (line 8) | class JwtStrategy extends PassportStrategy(Strategy) {
    method constructor (line 9) | constructor() {
    method validate (line 17) | async validate(payload: PayloadType) {

FILE: module-07-authetication-and-authorization/lesson-05/src/auth/types.ts
  type PayloadType (line 1) | interface PayloadType {
  type Enable2FAType (line 7) | type Enable2FAType = {

FILE: module-07-authetication-and-authorization/lesson-05/src/common/constatnts/connection.ts
  type Connection (line 6) | type Connection = {

FILE: module-07-authetication-and-authorization/lesson-05/src/common/middleware/logger.middleware.ts
  class LoggerMiddleware (line 4) | class LoggerMiddleware implements NestMiddleware {
    method use (line 5) | use(req: any, res: any, next: () => void) {

FILE: module-07-authetication-and-authorization/lesson-05/src/common/providers/DevConfigService.ts
  class DevConfigService (line 4) | class DevConfigService {
    method getDBHOST (line 6) | getDBHOST() {

FILE: module-07-authetication-and-authorization/lesson-05/src/main.ts
  function bootstrap (line 5) | async function bootstrap() {

FILE: module-07-authetication-and-authorization/lesson-05/src/playlists/dto/create-playlist.dto.ts
  class CreatePlayListDto (line 3) | class CreatePlayListDto {

FILE: module-07-authetication-and-authorization/lesson-05/src/playlists/playlist.entity.ts
  class Playlist (line 12) | class Playlist {

FILE: module-07-authetication-and-authorization/lesson-05/src/playlists/playlists.controller.ts
  class PlayListsController (line 7) | class PlayListsController {
    method constructor (line 8) | constructor(private playListService: PlayListsService) {}
    method create (line 10) | create(

FILE: module-07-authetication-and-authorization/lesson-05/src/playlists/playlists.module.ts
  class PlayListModule (line 14) | class PlayListModule {}

FILE: module-07-authetication-and-authorization/lesson-05/src/playlists/playlists.service.ts
  class PlayListsService (line 10) | class PlayListsService {
    method constructor (line 11) | constructor(
    method create (line 22) | async create(playListDTO: CreatePlayListDto): Promise<Playlist> {

FILE: module-07-authetication-and-authorization/lesson-05/src/songs/dto/create-song-dto.ts
  class CreateSongDTO (line 11) | class CreateSongDTO {

FILE: module-07-authetication-and-authorization/lesson-05/src/songs/dto/update-song-dto.ts
  class UpdateSongDto (line 10) | class UpdateSongDto {

FILE: module-07-authetication-and-authorization/lesson-05/src/songs/song.entity.ts
  class Song (line 13) | class Song {

FILE: module-07-authetication-and-authorization/lesson-05/src/songs/songs.controller.ts
  class SongsController (line 28) | class SongsController {
    method constructor (line 29) | constructor(private songsService: SongsService) {}
    method create (line 32) | create(
    method findAll (line 41) | findAll(
    method findOne (line 55) | findOne(
    method update (line 66) | update(
    method delete (line 74) | delete(@Param('id', ParseIntPipe) id: number): Promise<DeleteResult> {

FILE: module-07-authetication-and-authorization/lesson-05/src/songs/songs.module.ts
  class SongsModule (line 13) | class SongsModule {}

FILE: module-07-authetication-and-authorization/lesson-05/src/songs/songs.service.ts
  class SongsService (line 16) | class SongsService {
    method constructor (line 17) | constructor(
    method create (line 24) | async create(songDTO: CreateSongDTO): Promise<Song> {
    method findAll (line 43) | findAll(): Promise<Song[]> {
    method findOne (line 47) | findOne(id: number): Promise<Song> {
    method remove (line 51) | remove(id: number): Promise<DeleteResult> {
    method update (line 55) | update(id: number, recordToUpdate: UpdateSongDto): Promise<UpdateResul...
    method paginate (line 59) | async paginate(options: IPaginationOptions): Promise<Pagination<Song>> {

FILE: module-07-authetication-and-authorization/lesson-05/src/users/dto/create-user.dto.ts
  class CreateUserDTO (line 3) | class CreateUserDTO {

FILE: module-07-authetication-and-authorization/lesson-05/src/users/user.entity.ts
  class User (line 6) | class User {

FILE: module-07-authetication-and-authorization/lesson-05/src/users/users.module.ts
  class UsersModule (line 11) | class UsersModule {}

FILE: module-07-authetication-and-authorization/lesson-05/src/users/users.service.ts
  class UsersService (line 10) | class UsersService {
    method constructor (line 11) | constructor(
    method create (line 16) | async create(userDTO: CreateUserDTO): Promise<User> {
    method findOne (line 24) | async findOne(data: LoginDTO): Promise<User> {
    method findById (line 31) | async findById(id: number): Promise<User> {
    method updateSecretKey (line 34) | async updateSecretKey(userId, secret: string): Promise<UpdateResult> {
    method disable2FA (line 43) | async disable2FA(userId: number): Promise<UpdateResult> {

FILE: module-07-authetication-and-authorization/lesson-06/src/app.controller.ts
  class AppController (line 6) | class AppController {
    method constructor (line 7) | constructor(private readonly appService: AppService) {}
    method getHello (line 10) | getHello(): string {
    method getProfile (line 16) | getProfile(

FILE: module-07-authetication-and-authorization/lesson-06/src/app.module.ts
  class AppModule (line 39) | class AppModule implements NestModule {
    method constructor (line 40) | constructor(/*private dataSource: DataSource*/) {
    method configure (line 43) | configure(consumer: MiddlewareConsumer) {

FILE: module-07-authetication-and-authorization/lesson-06/src/app.service.ts
  class AppService (line 5) | class AppService {
    method getHello (line 6) | getHello(): string {

FILE: module-07-authetication-and-authorization/lesson-06/src/artists/artist.entity.ts
  class Artist (line 12) | class Artist {

FILE: module-07-authetication-and-authorization/lesson-06/src/artists/artists.controller.ts
  class ArtistsController (line 4) | class ArtistsController {}

FILE: module-07-authetication-and-authorization/lesson-06/src/artists/artists.module.ts
  class ArtistsModule (line 13) | class ArtistsModule {}

FILE: module-07-authetication-and-authorization/lesson-06/src/artists/artists.service.ts
  class ArtistsService (line 7) | class ArtistsService {
    method constructor (line 8) | constructor(
    method findArtist (line 13) | findArtist(userId: number): Promise<Artist> {

FILE: module-07-authetication-and-authorization/lesson-06/src/auth/api-key-strategy.ts
  class ApiKeyStrategy (line 7) | class ApiKeyStrategy extends PassportStrategy(Strategy) {
    method constructor (line 8) | constructor(private authService: AuthService) {
    method validate (line 11) | async validate(apiKey: string) {

FILE: module-07-authetication-and-authorization/lesson-06/src/auth/artists-jwt-guard.ts
  class ArtistJwtGuard (line 10) | class ArtistJwtGuard extends AuthGuard('jwt') {
    method canActivate (line 11) | canActivate(
    method handleRequest (line 16) | handleRequest<TUser = any>(err: any, user: any): TUser {

FILE: module-07-authetication-and-authorization/lesson-06/src/auth/auth.controller.ts
  class AuthController (line 21) | class AuthController {
    method constructor (line 22) | constructor(
    method signup (line 27) | signup(
    method login (line 35) | login(
    method enable2FA (line 44) | enable2FA(
    method validate2FA (line 54) | validate2FA(
    method disable2FA (line 67) | disable2FA(
    method getProfile (line 75) | getProfile(

FILE: module-07-authetication-and-authorization/lesson-06/src/auth/auth.module.ts
  class AuthModule (line 26) | class AuthModule {}

FILE: module-07-authetication-and-authorization/lesson-06/src/auth/auth.service.ts
  class AuthService (line 14) | class AuthService {
    method constructor (line 15) | constructor(
    method login (line 21) | async login(
    method enable2FA (line 58) | async enable2FA(userId: number): Promise<Enable2FAType> {
    method validate2FAToken (line 71) | async validate2FAToken(
    method disable2FA (line 98) | async disable2FA(userId: number): Promise<UpdateResult> {
    method validateUserByApiKey (line 102) | async validateUserByApiKey(apiKey: string): Promise<User> {

FILE: module-07-authetication-and-authorization/lesson-06/src/auth/dto/login.dto.ts
  class LoginDTO (line 3) | class LoginDTO {

FILE: module-07-authetication-and-authorization/lesson-06/src/auth/dto/validate-token.dto.ts
  class ValidateTokenDTO (line 3) | class ValidateTokenDTO {

FILE: module-07-authetication-and-authorization/lesson-06/src/auth/jwt-guard.ts
  class JwtAuthGuard (line 5) | class JwtAuthGuard extends AuthGuard('jwt') {}

FILE: module-07-authetication-and-authorization/lesson-06/src/auth/jwt-strategy.ts
  class JwtStrategy (line 8) | class JwtStrategy extends PassportStrategy(Strategy) {
    method constructor (line 9) | constructor() {
    method validate (line 17) | async validate(payload: PayloadType) {

FILE: module-07-authetication-and-authorization/lesson-06/src/auth/types.ts
  type PayloadType (line 1) | interface PayloadType {
  type Enable2FAType (line 7) | type Enable2FAType = {

FILE: module-07-authetication-and-authorization/lesson-06/src/common/constatnts/connection.ts
  type Connection (line 6) | type Connection = {

FILE: module-07-authetication-and-authorization/lesson-06/src/common/middleware/logger.middleware.ts
  class LoggerMiddleware (line 4) | class LoggerMiddleware implements NestMiddleware {
    method use (line 5) | use(req: any, res: any, next: () => void) {

FILE: module-07-authetication-and-authorization/lesson-06/src/common/providers/DevConfigService.ts
  class DevConfigService (line 4) | class DevConfigService {
    method getDBHOST (line 6) | getDBHOST() {

FILE: module-07-authetication-and-authorization/lesson-06/src/main.ts
  function bootstrap (line 5) | async function bootstrap() {

FILE: module-07-authetication-and-authorization/lesson-06/src/playlists/dto/create-playlist.dto.ts
  class CreatePlayListDto (line 3) | class CreatePlayListDto {

FILE: module-07-authetication-and-authorization/lesson-06/src/playlists/playlist.entity.ts
  class Playlist (line 12) | class Playlist {

FILE: module-07-authetication-and-authorization/lesson-06/src/playlists/playlists.controller.ts
  class PlayListsController (line 7) | class PlayListsController {
    method constructor (line 8) | constructor(private playListService: PlayListsService) {}
    method create (line 10) | create(

FILE: module-07-authetication-and-authorization/lesson-06/src/playlists/playlists.module.ts
  class PlayListModule (line 14) | class PlayListModule {}

FILE: module-07-authetication-and-authorization/lesson-06/src/playlists/playlists.service.ts
  class PlayListsService (line 10) | class PlayListsService {
    method constructor (line 11) | constructor(
    method create (line 22) | async create(playListDTO: CreatePlayListDto): Promise<Playlist> {

FILE: module-07-authetication-and-authorization/lesson-06/src/songs/dto/create-song-dto.ts
  class CreateSongDTO (line 11) | class CreateSongDTO {

FILE: module-07-authetication-and-authorization/lesson-06/src/songs/dto/update-song-dto.ts
  class UpdateSongDto (line 10) | class UpdateSongDto {

FILE: module-07-authetication-and-authorization/lesson-06/src/songs/song.entity.ts
  class Song (line 13) | class Song {

FILE: module-07-authetication-and-authorization/lesson-06/src/songs/songs.controller.ts
  class SongsController (line 28) | class SongsController {
    method constructor (line 29) | constructor(private songsService: SongsService) {}
    method create (line 32) | create(
    method findAll (line 41) | findAll(
    method findOne (line 55) | findOne(
    method update (line 66) | update(
    method delete (line 74) | delete(@Param('id', ParseIntPipe) id: number): Promise<DeleteResult> {

FILE: module-07-authetication-and-authorization/lesson-06/src/songs/songs.module.ts
  class SongsModule (line 13) | class SongsModule {}

FILE: module-07-authetication-and-authorization/lesson-06/src/songs/songs.service.ts
  class SongsService (line 16) | class SongsService {
    method constructor (line 17) | constructor(
    method create (line 24) | async create(songDTO: CreateSongDTO): Promise<Song> {
    method findAll (line 43) | findAll(): Promise<Song[]> {
    method findOne (line 47) | findOne(id: number): Promise<Song> {
    method remove (line 51) | remove(id: number): Promise<DeleteResult> {
    method update (line 55) | update(id: number, recordToUpdate: UpdateSongDto): Promise<UpdateResul...
    method paginate (line 59) | async paginate(options: IPaginationOptions): Promise<Pagination<Song>> {

FILE: module-07-authetication-and-authorization/lesson-06/src/users/dto/create-user.dto.ts
  class CreateUserDTO (line 3) | class CreateUserDTO {

FILE: module-07-authetication-and-authorization/lesson-06/src/users/user.entity.ts
  class User (line 6) | class User {

FILE: module-07-authetication-and-authorization/lesson-06/src/users/users.module.ts
  class UsersModule (line 11) | class UsersModule {}

FILE: module-07-authetication-and-authorization/lesson-06/src/users/users.service.ts
  class UsersService (line 11) | class UsersService {
    method constructor (line 12) | constructor(
    method create (line 17) | async create(userDTO: CreateUserDTO): Promise<User> {
    method findOne (line 32) | async findOne(data: LoginDTO): Promise<User> {
    method findById (line 39) | async findById(id: number): Promise<User> {
    method updateSecretKey (line 42) | async updateSecretKey(userId, secret: string): Promise<UpdateResult> {
    method disable2FA (line 51) | async disable2FA(userId: number): Promise<UpdateResult> {
    method findByApiKey (line 60) | async findByApiKey(apiKey: string): Promise<User> {

FILE: module-08-migrations-seeds-debugging/lesson-01/src/app.controller.ts
  class AppController (line 6) | class AppController {
    method constructor (line 7) | constructor(private readonly appService: AppService) {}
    method getHello (line 10) | getHello(): string {
    method getProfile (line 16) | getProfile(

FILE: module-08-migrations-seeds-debugging/lesson-01/src/app.module.ts
  class AppModule (line 39) | class AppModule implements NestModule {
    method constructor (line 40) | constructor(/*private dataSource: DataSource*/) {
    method configure (line 43) | configure(consumer: MiddlewareConsumer) {

FILE: module-08-migrations-seeds-debugging/lesson-01/src/app.service.ts
  class AppService (line 5) | class AppService {
    method getHello (line 6) | getHello(): string {

FILE: module-08-migrations-seeds-debugging/lesson-01/src/artists/artist.entity.ts
  class Artist (line 12) | class Artist {

FILE: module-08-migrations-seeds-debugging/lesson-01/src/artists/artists.controller.ts
  class ArtistsController (line 4) | class ArtistsController {}

FILE: module-08-migrations-seeds-debugging/lesson-01/src/artists/artists.module.ts
  class ArtistsModule (line 13) | class ArtistsModule {}

FILE: module-08-migrations-seeds-debugging/lesson-01/src/artists/artists.service.ts
  class ArtistsService (line 7) | class ArtistsService {
    method constructor (line 8) | constructor(
    method findArtist (line 13) | findArtist(userId: number): Promise<Artist> {

FILE: module-08-migrations-seeds-debugging/lesson-01/src/auth/api-key-strategy.ts
  class ApiKeyStrategy (line 7) | class ApiKeyStrategy extends PassportStrategy(Strategy) {
    method constructor (line 8) | constructor(private authService: AuthService) {
    method validate (line 11) | async validate(apiKey: string) {

FILE: module-08-migrations-seeds-debugging/lesson-01/src/auth/artists-jwt-guard.ts
  class ArtistJwtGuard (line 10) | class ArtistJwtGuard extends AuthGuard('jwt') {
    method canActivate (line 11) | canActivate(
    method handleRequest (line 16) | handleRequest<TUser = any>(err: any, user: any): TUser {

FILE: module-08-migrations-seeds-debugging/lesson-01/src/auth/auth.controller.ts
  class AuthController (line 21) | class AuthController {
    method constructor (line 22) | constructor(
    method signup (line 27) | signup(
    method login (line 35) | login(
    method enable2FA (line 44) | enable2FA(
    method validate2FA (line 54) | validate2FA(
    method disable2FA (line 67) | disable2FA(
    method getProfile (line 75) | getProfile(

FILE: module-08-migrations-seeds-debugging/lesson-01/src/auth/auth.module.ts
  class AuthModule (line 26) | class AuthModule {}

FILE: module-08-migrations-seeds-debugging/lesson-01/src/auth/auth.service.ts
  class AuthService (line 14) | class AuthService {
    method constructor (line 15) | constructor(
    method login (line 21) | async login(
    method enable2FA (line 58) | async enable2FA(userId: number): Promise<Enable2FAType> {
    method validate2FAToken (line 71) | async validate2FAToken(
    method disable2FA (line 98) | async disable2FA(userId: number): Promise<UpdateResult> {
    method validateUserByApiKey (line 102) | async validateUserByApiKey(apiKey: string): Promise<User> {

FILE: module-08-migrations-seeds-debugging/lesson-01/src/auth/dto/login.dto.ts
  class LoginDTO (line 3) | class LoginDTO {

FILE: module-08-migrations-seeds-debugging/lesson-01/src/auth/dto/validate-token.dto.ts
  class ValidateTokenDTO (line 3) | class ValidateTokenDTO {

FILE: module-08-migrations-seeds-debugging/lesson-01/src/auth/jwt-guard.ts
  class JwtAuthGuard (line 5) | class JwtAuthGuard extends AuthGuard('jwt') {}

FILE: module-08-migrations-seeds-debugging/lesson-01/src/auth/jwt-strategy.ts
  class JwtStrategy (line 8) | class JwtStrategy extends PassportStrategy(Strategy) {
    method constructor (line 9) | constructor() {
    method validate (line 17) | async validate(payload: PayloadType) {

FILE: module-08-migrations-seeds-debugging/lesson-01/src/auth/types.ts
  type PayloadType (line 1) | interface PayloadType {
  type Enable2FAType (line 7) | type Enable2FAType = {

FILE: module-08-migrations-seeds-debugging/lesson-01/src/common/constatnts/connection.ts
  type Connection (line 6) | type Connection = {

FILE: module-08-migrations-seeds-debugging/lesson-01/src/common/middleware/logger.middleware.ts
  class LoggerMiddleware (line 4) | class LoggerMiddleware implements NestMiddleware {
    method use (line 5) | use(req: any, res: any, next: () => void) {

FILE: module-08-migrations-seeds-debugging/lesson-01/src/common/providers/DevConfigService.ts
  class DevConfigService (line 4) | class DevConfigService {
    method getDBHOST (line 6) | getDBHOST() {

FILE: module-08-migrations-seeds-debugging/lesson-01/src/main.ts
  function bootstrap (line 5) | async function bootstrap() {

FILE: module-08-migrations-seeds-debugging/lesson-01/src/playlists/dto/create-playlist.dto.ts
  class CreatePlayListDto (line 3) | class CreatePlayListDto {

FILE: module-08-migrations-seeds-debugging/lesson-01/src/playlists/playlist.entity.ts
  class Playlist (line 12) | class Playlist {

FILE: module-08-migrations-seeds-debugging/lesson-01/src/playlists/playlists.controller.ts
  class PlayListsController (line 7) | class PlayListsController {
    method constructor (line 8) | constructor(private playListService: PlayListsService) {}
    method create (line 10) | create(

FILE: module-08-migrations-seeds-debugging/lesson-01/src/playlists/playlists.module.ts
  class PlayListModule (line 14) | class PlayListModule {}

FILE: module-08-migrations-seeds-debugging/lesson-01/src/playlists/playlists.service.ts
  class PlayListsService (line 10) | class PlayListsService {
    method constructor (line 11) | constructor(
    method create (line 22) | async create(playListDTO: CreatePlayListDto): Promise<Playlist> {

FILE: module-08-migrations-seeds-debugging/lesson-01/src/songs/dto/create-song-dto.ts
  class CreateSongDTO (line 11) | class CreateSongDTO {

FILE: module-08-migrations-seeds-debugging/lesson-01/src/songs/dto/update-song-dto.ts
  class UpdateSongDto (line 10) | class UpdateSongDto {

FILE: module-08-migrations-seeds-debugging/lesson-01/src/songs/song.entity.ts
  class Song (line 13) | class Song {

FILE: module-08-migrations-seeds-debugging/lesson-01/src/songs/songs.controller.ts
  class SongsController (line 28) | class SongsController {
    method constructor (line 29) | constructor(private songsService: SongsService) {}
    method create (line 32) | create(
    method findAll (line 41) | findAll(
    method findOne (line 55) | findOne(
    method update (line 66) | update(
    method delete (line 74) | delete(@Param('id', ParseIntPipe) id: number): Promise<DeleteResult> {

FILE: module-08-migrations-seeds-debugging/lesson-01/src/songs/songs.module.ts
  class SongsModule (line 13) | class SongsModule {}

FILE: module-08-migrations-seeds-debugging/lesson-01/src/songs/songs.service.ts
  class SongsService (line 16) | class SongsService {
    method constructor (line 17) | constructor(
    method create (line 24) | async create(songDTO: CreateSongDTO): Promise<Song> {
    method findAll (line 43) | findAll(): Promise<Song[]> {
    method findOne (line 47) | findOne(id: number): Promise<Song> {
    method remove (line 51) | remove(id: number): Promise<DeleteResult> {
    method update (line 55) | update(id: number, recordToUpdate: UpdateSongDto): Promise<UpdateResul...
    method paginate (line 59) | async paginate(options: IPaginationOptions): Promise<Pagination<Song>> {

FILE: module-08-migrations-seeds-debugging/lesson-01/src/users/dto/create-user.dto.ts
  class CreateUserDTO (line 3) | class CreateUserDTO {

FILE: module-08-migrations-seeds-debugging/lesson-01/src/users/user.entity.ts
  class User (line 6) | class User {

FILE: module-08-migrations-seeds-debugging/lesson-01/src/users/users.module.ts
  class UsersModule (line 11) | class UsersModule {}

FILE: module-08-migrations-seeds-debugging/lesson-01/src/users/users.service.ts
  class UsersService (line 11) | class UsersService {
    method constructor (line 12) | constructor(
    method create (line 17) | async create(userDTO: CreateUserDTO): Promise<User> {
    method findOne (line 32) | async findOne(data: LoginDTO): Promise<User> {
    method findById (line 39) | async findById(id: number): Promise<User> {
    method updateSecretKey (line 42) | async updateSecretKey(userId, secret: string): Promise<UpdateResult> {
    method disable2FA (line 51) | async disable2FA(userId: number): Promise<UpdateResult> {
    method findByApiKey (line 60) | async findByApiKey(apiKey: string): Promise<User> {

FILE: module-08-migrations-seeds-debugging/lesson-02/db/migrations/1685010320827-my-migrations.ts
  class MyMigrations1685010320827 (line 3) | class MyMigrations1685010320827 implements MigrationInterface {
    method up (line 6) | public async up(queryRunner: QueryRunner): Promise<void> {
    method down (line 21) | public async down(queryRunner: QueryRunner): Promise<void> {

FILE: module-08-migrations-seeds-debugging/lesson-02/db/migrations/1685010456982-removed-phone.ts
  class RemovedPhone1685010456982 (line 3) | class RemovedPhone1685010456982 implements MigrationInterface {
    method up (line 6) | public async up(queryRunner: QueryRunner): Promise<void> {
    method down (line 10) | public async down(queryRunner: QueryRunner): Promise<void> {

FILE: module-08-migrations-seeds-debugging/lesson-02/src/app.controller.ts
  class AppController (line 6) | class AppController {
    method constructor (line 7) | constructor(private readonly appService: AppService) {}
    method getHello (line 10) | getHello(): string {
    method getProfile (line 16) | getProfile(

FILE: module-08-migrations-seeds-debugging/lesson-02/src/app.module.ts
  class AppModule (line 31) | class AppModule implements NestModule {
    method constructor (line 32) | constructor(/*private dataSource: DataSource*/) {
    method configure (line 35) | configure(consumer: MiddlewareConsumer) {

FILE: module-08-migrations-seeds-debugging/lesson-02/src/app.service.ts
  class AppService (line 5) | class AppService {
    method getHello (line 6) | getHello(): string {

FILE: module-08-migrations-seeds-debugging/lesson-02/src/artists/artist.entity.ts
  class Artist (line 12) | class Artist {

FILE: module-08-migrations-seeds-debugging/lesson-02/src/artists/artists.controller.ts
  class ArtistsController (line 4) | class ArtistsController {}

FILE: module-08-migrations-seeds-debugging/lesson-02/src/artists/artists.module.ts
  class ArtistsModule (line 13) | class ArtistsModule {}

FILE: module-08-migrations-seeds-debugging/lesson-02/src/artists/artists.service.ts
  class ArtistsService (line 7) | class ArtistsService {
    method constructor (line 8) | constructor(
    method findArtist (line 13) | findArtist(userId: number): Promise<Artist> {

FILE: module-08-migrations-seeds-debugging/lesson-02/src/auth/api-key-strategy.ts
  class ApiKeyStrategy (line 7) | class ApiKeyStrategy extends PassportStrategy(Strategy) {
    method constructor (line 8) | constructor(private authService: AuthService) {
    method validate (line 11) | async validate(apiKey: string) {

FILE: module-08-migrations-seeds-debugging/lesson-02/src/auth/artists-jwt-guard.ts
  class ArtistJwtGuard (line 10) | class ArtistJwtGuard extends AuthGuard('jwt') {
    method canActivate (line 11) | canActivate(
    method handleRequest (line 16) | handleRequest<TUser = any>(err: any, user: any): TUser {

FILE: module-08-migrations-seeds-debugging/lesson-02/src/auth/auth.controller.ts
  class AuthController (line 21) | class AuthController {
    method constructor (line 22) | constructor(
    method signup (line 27) | signup(
    method login (line 35) | login(
    method enable2FA (line 44) | enable2FA(
    method validate2FA (line 54) | validate2FA(
    method disable2FA (line 67) | disable2FA(
    method getProfile (line 75) | getProfile(

FILE: module-08-migrations-seeds-debugging/lesson-02/src/auth/auth.module.ts
  class AuthModule (line 26) | class AuthModule {}

FILE: module-08-migrations-seeds-debugging/lesson-02/src/auth/auth.service.ts
  class AuthService (line 14) | class AuthService {
    method constructor (line 15) | constructor(
    method login (line 21) | async login(
    method enable2FA (line 58) | async enable2FA(userId: number): Promise<Enable2FAType> {
    method validate2FAToken (line 71) | async validate2FAToken(
    method disable2FA (line 98) | async disable2FA(userId: number): Promise<UpdateResult> {
    method validateUserByApiKey (line 102) | async validateUserByApiKey(apiKey: string): Promise<User> {

FILE: module-08-migrations-seeds-debugging/lesson-02/src/auth/dto/login.dto.ts
  class LoginDTO (line 3) | class LoginDTO {

FILE: module-08-migrations-seeds-debugging/lesson-02/src/auth/dto/validate-token.dto.ts
  class ValidateTokenDTO (line 3) | class ValidateTokenDTO {

FILE: module-08-migrations-seeds-debugging/lesson-02/src/auth/jwt-guard.ts
  class JwtAuthGuard (line 5) | class JwtAuthGuard extends AuthGuard('jwt') {}

FILE: module-08-migrations-seeds-debugging/lesson-02/src/auth/jwt-strategy.ts
  class JwtStrategy (line 8) | class JwtStrategy extends PassportStrategy(Strategy) {
    method constructor (line 9) | constructor() {
    method validate (line 17) | async validate(payload: PayloadType) {

FILE: module-08-migrations-seeds-debugging/lesson-02/src/auth/types.ts
  type PayloadType (line 1) | interface PayloadType {
  type Enable2FAType (line 7) | type Enable2FAType = {

FILE: module-08-migrations-seeds-debugging/lesson-02/src/common/constatnts/connection.ts
  type Connection (line 6) | type Connection = {

FILE: module-08-migrations-seeds-debugging/lesson-02/src/common/middleware/logger.middleware.ts
  class LoggerMiddleware (line 4) | class LoggerMiddleware implements NestMiddleware {
    method use (line 5) | use(req: any, res: any, next: () => void) {

FILE: module-08-migrations-seeds-debugging/lesson-02/src/common/providers/DevConfigService.ts
  class DevConfigService (line 4) | class DevConfigService {
    method getDBHOST (line 6) | getDBHOST() {

FILE: module-08-migrations-seeds-debugging/lesson-02/src/main.ts
  function bootstrap (line 5) | async function bootstrap() {

FILE: module-08-migrations-seeds-debugging/lesson-02/src/playlists/dto/create-playlist.dto.ts
  class CreatePlayListDto (line 3) | class CreatePlayListDto {

FILE: module-08-migrations-seeds-debugging/lesson-02/src/playlists/playlist.entity.ts
  class Playlist (line 12) | class Playlist {

FILE: module-08-migrations-seeds-debugging/lesson-02/src/playlists/playlists.controller.ts
  class PlayListsController (line 7) | class PlayListsController {
    method constructor (line 8) | constructor(private playListService: PlayListsService) {}
    method create (line 10) | create(

FILE: module-08-migrations-seeds-debugging/lesson-02/src/playlists/playlists.module.ts
  class PlayListModule (line 14) | class PlayListModule {}

FILE: module-08-migrations-seeds-debugging/lesson-02/src/playlists/playlists.service.ts
  class PlayListsService (line 10) | class PlayListsService {
    method constructor (line 11) | constructor(
    method create (line 22) | async create(playListDTO: CreatePlayListDto): Promise<Playlist> {

FILE: module-08-migrations-seeds-debugging/lesson-02/src/songs/dto/create-song-dto.ts
  class CreateSongDTO (line 11) | class CreateSongDTO {

FILE: module-08-migrations-seeds-debugging/lesson-02/src/songs/dto/update-song-dto.ts
  class UpdateSongDto (line 10) | class UpdateSongDto {

FILE: module-08-migrations-seeds-debugging/lesson-02/src/songs/song.entity.ts
  class Song (line 13) | class Song {

FILE: module-08-migrations-seeds-debugging/lesson-02/src/songs/songs.controller.ts
  class SongsController (line 28) | class SongsController {
    method constructor (line 29) | constructor(private songsService: SongsService) {}
    method create (line 32) | create(
    method findAll (line 41) | findAll(
    method findOne (line 55) | findOne(
    method update (line 66) | update(
    method delete (line 74) | delete(@Param('id', ParseIntPipe) id: number): Promise<DeleteResult> {

FILE: module-08-migrations-seeds-debugging/lesson-02/src/songs/songs.module.ts
  class SongsModule (line 13) | class SongsModule {}

FILE: module-08-migrations-seeds-debugging/lesson-02/src/songs/songs.service.ts
  class SongsService (line 16) | class SongsService {
    method constructor (line 17) | constructor(
    method create (line 24) | async create(songDTO: CreateSongDTO): Promise<Song> {
    method findAll (line 43) | findAll(): Promise<Song[]> {
    method findOne (line 47) | findOne(id: number): Promise<Song> {
    method remove (line 51) | remove(id: number): Promise<DeleteResult> {
    method update (line 55) | update(id: number, recordToUpdate: UpdateSongDto): Promise<UpdateResul...
    method paginate (line 59) | async paginate(options: IPaginationOptions): Promise<Pagination<Song>> {

FILE: module-08-migrations-seeds-debugging/lesson-02/src/users/dto/create-user.dto.ts
  class CreateUserDTO (line 3) | class CreateUserDTO {

FILE: module-08-migrations-seeds-debugging/lesson-02/src/users/user.entity.ts
  class User (line 6) | class User {

FILE: module-08-migrations-seeds-debugging/lesson-02/src/users/users.module.ts
  class UsersModule (line 11) | class UsersModule {}

FILE: module-08-migrations-seeds-debugging/lesson-02/src/users/users.service.ts
  class UsersService (line 11) | class UsersService {
    method constructor (line 12) | constructor(
    method create (line 17) | async create(userDTO: CreateUserDTO): Promise<User> {
    method findOne (line 32) | async findOne(data: LoginDTO): Promise<User> {
    method findById (line 39) | async findById(id: number): Promise<User> {
    method updateSecretKey (line 42) | async updateSecretKey(userId, secret: string): Promise<UpdateResult> {
    method disable2FA (line 51) | async disable2FA(userId: number): Promise<UpdateResult> {
    method findByApiKey (line 60) | async findByApiKey(apiKey: string): Promise<User> {

FILE: module-08-migrations-seeds-debugging/lesson-03/db/migrations/1685010320827-my-migrations.ts
  class MyMigrations1685010320827 (line 3) | class MyMigrations1685010320827 implements MigrationInterface {
    method up (line 6) | public async up(queryRunner: QueryRunner): Promise<void> {
    method down (line 21) | public async down(queryRunner: QueryRunner): Promise<void> {

FILE: module-08-migrations-seeds-debugging/lesson-03/db/migrations/1685010456982-removed-phone.ts
  class RemovedPhone1685010456982 (line 3) | class RemovedPhone1685010456982 implements MigrationInterface {
    method up (line 6) | public async up(queryRunner: QueryRunner): Promise<void> {
    method down (line 10) | public async down(queryRunner: QueryRunner): Promise<void> {

FILE: module-08-migrations-seeds-debugging/lesson-03/db/seeds/seed-data.ts
  function seedUser (line 18) | async function seedUser() {
  function seedArtist (line 33) | async function seedArtist() {
  function seedPlayLists (line 50) | async function seedPlayLists() {

FILE: module-08-migrations-seeds-debugging/lesson-03/src/app.controller.ts
  class AppController (line 6) | class AppController {
    method constructor (line 7) | constructor(private readonly appService: AppService) {}
    method getHello (line 10) | getHello(): string {
    method getProfile (line 16) | getProfile(

FILE: module-08-migrations-seeds-debugging/lesson-03/src/app.module.ts
  class AppModule (line 33) | class AppModule implements NestModule {
    method constructor (line 34) | constructor(/*private dataSource: DataSource*/) {
    method configure (line 37) | configure(consumer: MiddlewareConsumer) {

FILE: module-08-migrations-seeds-debugging/lesson-03/src/app.service.ts
  class AppService (line 5) | class AppService {
    method getHello (line 6) | getHello(): string {

FILE: module-08-migrations-seeds-debugging/lesson-03/src/artists/artist.entity.ts
  class Artist (line 12) | class Artist {

FILE: module-08-migrations-seeds-debugging/lesson-03/src/artists/artists.controller.ts
  class ArtistsController (line 4) | class ArtistsController {}

FILE: module-08-migrations-seeds-debugging/lesson-03/src/artists/artists.module.ts
  class ArtistsModule (line 13) | class ArtistsModule {}

FILE: module-08-migrations-seeds-debugging/lesson-03/src/artists/artists.service.ts
  class ArtistsService (line 7) | class ArtistsService {
    method constructor (line 8) | constructor(
    method findArtist (line 13) | findArtist(userId: number): Promise<Artist> {

FILE: module-08-migrations-seeds-debugging/lesson-03/src/auth/api-key-strategy.ts
  class ApiKeyStrategy (line 7) | class ApiKeyStrategy extends PassportStrategy(Strategy) {
    method constructor (line 8) | constructor(private authService: AuthService) {
    method validate (line 11) | async validate(apiKey: string) {

FILE: module-08-migrations-seeds-debugging/lesson-03/src/auth/artists-jwt-guard.ts
  class ArtistJwtGuard (line 10) | class ArtistJwtGuard extends AuthGuard('jwt') {
    method canActivate (line 11) | canActivate(
    method handleRequest (line 16) | handleRequest<TUser = any>(err: any, user: any): TUser {

FILE: module-08-migrations-seeds-debugging/lesson-03/src/auth/auth.controller.ts
  class AuthController (line 21) | class AuthController {
    method constructor (line 22) | constructor(
    method signup (line 27) | signup(
    method login (line 35) | login(
    method enable2FA (line 44) | enable2FA(
    method validate2FA (line 54) | validate2FA(
    method disable2FA (line 67) | disable2FA(
    method getProfile (line 75) | getProfile(

FILE: module-08-migrations-seeds-debugging/lesson-03/src/auth/auth.module.ts
  class AuthModule (line 26) | class AuthModule {}

FILE: module-08-migrations-seeds-debugging/lesson-03/src/auth/auth.service.ts
  class AuthService (line 14) | class AuthService {
    method constructor (line 15) | constructor(
    method login (line 21) | async login(
    method enable2FA (line 58) | async enable2FA(userId: number): Promise<Enable2FAType> {
    method validate2FAToken (line 71) | async validate2FAToken(
    method disable2FA (line 98) | async disable2FA(userId: number): Promise<UpdateResult> {
    method validateUserByApiKey (line 102) | async validateUserByApiKey(apiKey: string): Promise<User> {

FILE: module-08-migrations-seeds-debugging/lesson-03/src/auth/dto/login.dto.ts
  class LoginDTO (line 3) | class LoginDTO {

FILE: module-08-migrations-seeds-debugging/lesson-03/src/auth/dto/validate-token.dto.ts
  class ValidateTokenDTO (line 3) | class ValidateTokenDTO {

FILE: module-08-migrations-seeds-debugging/lesson-03/src/auth/jwt-guard.ts
  class JwtAuthGuard (line 5) | class JwtAuthGuard extends AuthGuard('jwt') {}

FILE: module-08-migrations-seeds-debugging/lesson-03/src/auth/jwt-strategy.ts
  class JwtStrategy (line 8) | class JwtStrategy extends PassportStrategy(Strategy) {
    method constructor (line 9) | constructor() {
    method validate (line 17) | async validate(payload: PayloadType) {

FILE: module-08-migrations-seeds-debugging/lesson-03/src/auth/types.ts
  type PayloadType (line 1) | interface PayloadType {
  type Enable2FAType (line 7) | type Enable2FAType = {

FILE: module-08-migrations-seeds-debugging/lesson-03/src/common/constatnts/connection.ts
  type Connection (line 6) | type Connection = {

FILE: module-08-migrations-seeds-debugging/lesson-03/src/common/middleware/logger.middleware.ts
  class LoggerMiddleware (line 4) | class LoggerMiddleware implements NestMiddleware {
    method use (line 5) | use(req: any, res: any, next: () => void) {

FILE: module-08-migrations-seeds-debugging/lesson-03/src/common/providers/DevConfigService.ts
  class DevConfigService (line 4) | class DevConfigService {
    method getDBHOST (line 6) | getDBHOST() {

FILE: module-08-migrations-seeds-debugging/lesson-03/src/main.ts
  function bootstrap (line 6) | async function bootstrap() {

FILE: module-08-migrations-seeds-debugging/lesson-03/src/playlists/dto/create-playlist.dto.ts
  class CreatePlayListDto (line 3) | class CreatePlayListDto {

FILE: module-08-migrations-seeds-debugging/lesson-03/src/playlists/playlist.entity.ts
  class Playlist (line 12) | class Playlist {

FILE: module-08-migrations-seeds-debugging/lesson-03/src/playlists/playlists.controller.ts
  class PlayListsController (line 7) | class PlayListsController {
    method constructor (line 8) | constructor(private playListService: PlayListsService) {}
    method create (line 10) | create(

FILE: module-08-migrations-seeds-debugging/lesson-03/src/playlists/playlists.module.ts
  class PlayListModule (line 14) | class PlayListModule {}

FILE: module-08-migrations-seeds-debugging/lesson-03/src/playlists/playlists.service.ts
  class PlayListsService (line 10) | class PlayListsService {
    method constructor (line 11) | constructor(
    method create (line 22) | async create(playListDTO: CreatePlayListDto): Promise<Playlist> {

FILE: module-08-migrations-seeds-debugging/lesson-03/src/seed/seed.module.ts
  class SeedModule (line 7) | class SeedModule {}

FILE: module-08-migrations-seeds-debugging/lesson-03/src/seed/seed.service.ts
  class SeedService (line 6) | class SeedService {
    method constructor (line 7) | constructor(private readonly connection: DataSource) {}
    method seed (line 9) | async seed(): Promise<void> {

FILE: module-08-migrations-seeds-debugging/lesson-03/src/songs/dto/create-song-dto.ts
  class CreateSongDTO (line 11) | class CreateSongDTO {

FILE: module-08-migrations-seeds-debugging/lesson-03/src/songs/dto/update-song-dto.ts
  class UpdateSongDto (line 10) | class UpdateSongDto {

FILE: module-08-migrations-seeds-debugging/lesson-03/src/songs/song.entity.ts
  class Song (line 13) | class Song {

FILE: module-08-migrations-seeds-debugging/lesson-03/src/songs/songs.controller.ts
  class SongsController (line 28) | class SongsController {
    method constructor (line 29) | constructor(private songsService: SongsService) {}
    method create (line 32) | create(
    method findAll (line 41) | findAll(
    method findOne (line 55) | findOne(
    method update (line 66) | update(
    method delete (line 74) | delete(@Param('id', ParseIntPipe) id: number): Promise<DeleteResult> {

FILE: module-08-migrations-seeds-debugging/lesson-03/src/songs/songs.module.ts
  class SongsModule (line 13) | class SongsModule {}

FILE: module-08-migrations-seeds-debugging/lesson-03/src/songs/songs.service.ts
  class SongsService (line 16) | class SongsService {
    method constructor (line 17) | constructor(
    method create (line 24) | async create(songDTO: CreateSongDTO): Promise<Song> {
    method findAll (line 43) | findAll(): Promise<Song[]> {
    method findOne (line 47) | findOne(id: number): Promise<Song> {
    method remove (line 51) | remove(id: number): Promise<DeleteResult> {
    method update (line 55) | update(id: number, recordToUpdate: UpdateSongDto): Promise<UpdateResul...
    method paginate (line 59) | async paginate(options: IPaginationOptions): Promise<Pagination<Song>> {

FILE: module-08-migrations-seeds-debugging/lesson-03/src/users/dto/create-user.dto.ts
  class CreateUserDTO (line 3) | class CreateUserDTO {

FILE: module-08-migrations-seeds-debugging/lesson-03/src/users/user.entity.ts
  class User (line 6) | class User {

FILE: module-08-migrations-seeds-debugging/lesson-03/src/users/users.module.ts
  class UsersModule (line 11) | class UsersModule {}

FILE: module-08-migrations-seeds-debugging/lesson-03/src/users/users.service.ts
  class UsersService (line 11) | class UsersService {
    method constructor (line 12) | constructor(
    method create (line 17) | async create(userDTO: CreateUserDTO): Promise<User> {
    method findOne (line 32) | async findOne(data: LoginDTO): Promise<User> {
    method findById (line 39) | async findById(id: number): Promise<User> {
    method updateSecretKey (line 42) | async updateSecretKey(userId, secret: string): Promise<UpdateResult> {
    method disable2FA (line 51) | async disable2FA(userId: number): Promise<UpdateResult> {
    method findByApiKey (line 60) | async findByApiKey(apiKey: string): Promise<User> {

FILE: module-09-application-configurations/lesson-01/db/migrations/1685010320827-my-migrations.ts
  class MyMigrations1685010320827 (line 3) | class MyMigrations1685010320827 implements MigrationInterface {
    method up (line 6) | public async up(queryRunner: QueryRunner): Promise<void> {
    method down (line 21) | public async down(queryRunner: QueryRunner): Promise<void> {

FILE: module-09-application-configurations/lesson-01/db/migrations/1685010456982-removed-phone.ts
  class RemovedPhone1685010456982 (line 3) | class RemovedPhone1685010456982 implements MigrationInterface {
    method up (line 6) | public async up(queryRunner: QueryRunner): Promise<void> {
    method down (line 10) | public async down(queryRunner: QueryRunner): Promise<void> {

FILE: module-09-application-configurations/lesson-01/db/seeds/seed-data.ts
  function seedUser (line 18) | async function seedUser() {
  function seedArtist (line 33) | async function seedArtist() {
  function seedPlayLists (line 50) | async function seedPlayLists() {

FILE: module-09-application-configurations/lesson-01/src/app.controller.ts
  class AppController (line 6) | class AppController {
    method constructor (line 7) | constructor(private readonly appService: AppService) {}
    method getHello (line 10) | getHello(): string {
    method getProfile (line 16) | getProfile(

FILE: module-09-application-configurations/lesson-01/src/app.module.ts
  class AppModule (line 36) | class AppModule implements NestModule {
    method constructor (line 37) | constructor(/*private dataSource: DataSource*/) {
    method configure (line 40) | configure(consumer: MiddlewareConsumer) {

FILE: module-09-application-configurations/lesson-01/src/app.service.ts
  class AppService (line 5) | class AppService {
    method getHello (line 6) | getHello(): string {

FILE: module-09-application-configurations/lesson-01/src/artists/artist.entity.ts
  class Artist (line 12) | class Artist {

FILE: module-09-application-configurations/lesson-01/src/artists/artists.controller.ts
  class ArtistsController (line 4) | class ArtistsController {}

FILE: module-09-application-configurations/lesson-01/src/artists/artists.module.ts
  class ArtistsModule (line 13) | class ArtistsModule {}

FILE: module-09-application-configurations/lesson-01/src/artists/artists.service.ts
  class ArtistsService (line 7) | class ArtistsService {
    method constructor (line 8) | constructor(
    method findArtist (line 13) | findArtist(userId: number): Promise<Artist> {

FILE: module-09-application-configurations/lesson-01/src/auth/api-key-strategy.ts
  class ApiKeyStrategy (line 7) | class ApiKeyStrategy extends PassportStrategy(Strategy) {
    method constructor (line 8) | constructor(private authService: AuthService) {
    method validate (line 11) | async validate(apiKey: string) {

FILE: module-09-application-configurations/lesson-01/src/auth/artists-jwt-guard.ts
  class ArtistJwtGuard (line 10) | class ArtistJwtGuard extends AuthGuard('jwt') {
    method canActivate (line 11) | canActivate(
    method handleRequest (line 16) | handleRequest<TUser = any>(err: any, user: any): TUser {

FILE: module-09-application-configurations/lesson-01/src/auth/auth.controller.ts
  class AuthController (line 21) | class AuthController {
    method constructor (line 22) | constructor(
    method signup (line 27) | signup(
    method login (line 35) | login(
    method enable2FA (line 44) | enable2FA(
    method validate2FA (line 54) | validate2FA(
    method disable2FA (line 67) | disable2FA(
    method getProfile (line 75) | getProfile(
    method testEnvVariable (line 87) | testEnvVariable() {

FILE: module-09-application-configurations/lesson-01/src/auth/auth.module.ts
  class AuthModule (line 30) | class AuthModule {}

FILE: module-09-application-configurations/lesson-01/src/auth/auth.service.ts
  class AuthService (line 15) | class AuthService {
    method constructor (line 16) | constructor(
    method login (line 23) | async login(
    method enable2FA (line 60) | async enable2FA(userId: number): Promise<Enable2FAType> {
    method validate2FAToken (line 73) | async validate2FAToken(
    method disable2FA (line 100) | async disable2FA(userId: number): Promise<UpdateResult> {
    method validateUserByApiKey (line 104) | async validateUserByApiKey(apiKey: string): Promise<User> {
    method getEnvVariable (line 108) | getEnvVariable() {

FILE: module-09-application-configurations/lesson-01/src/auth/dto/login.dto.ts
  class LoginDTO (line 3) | class LoginDTO {

FILE: module-09-application-configurations/lesson-01/src/auth/dto/validate-token.dto.ts
  class ValidateTokenDTO (line 3) | class ValidateTokenDTO {

FILE: module-09-application-configurations/lesson-01/src/auth/jwt-guard.ts
  class JwtAuthGuard (line 5) | class JwtAuthGuard extends AuthGuard('jwt') {}

FILE: module-09-application-configurations/lesson-01/src/auth/jwt-strategy.ts
  class JwtStrategy (line 8) | class JwtStrategy extends PassportStrategy(Strategy) {
    method constructor (line 9) | constructor() {
    method validate (line 17) | async validate(payload: PayloadType) {

FILE: module-09-application-configurations/lesson-01/src/auth/types.ts
  type PayloadType (line 1) | interface PayloadType {
  type Enable2FAType (line 7) | type Enable2FAType = {

FILE: module-09-application-configurations/lesson-01/src/common/constatnts/connection.ts
  type Connection (line 6) | type Connection = {

FILE: module-09-application-configurations/lesson-01/src/common/middleware/logger.middleware.ts
  class LoggerMiddleware (line 4) | class LoggerMiddleware implements NestMiddleware {
    method use (line 5) | use(req: any, res: any, next: () => void) {

FILE: module-09-application-configurations/lesson-01/src/common/providers/DevConfigService.ts
  class DevConfigService (line 4) | class DevConfigService {
    method getDBHOST (line 6) | getDBHOST() {

FILE: module-09-application-configurations/lesson-01/src/main.ts
  function bootstrap (line 7) | async function bootstrap() {

FILE: module-09-application-configurations/lesson-01/src/playlists/dto/create-playlist.dto.ts
  class CreatePlayListDto (line 3) | class CreatePlayListDto {

FILE: module-09-application-configurations/lesson-01/src/playlists/playlist.entity.ts
  class Playlist (line 12) | class Playlist {

FILE: module-09-application-configurations/lesson-01/src/playlists/playlists.controller.ts
  class PlayListsController (line 7) | class PlayListsController {
    method constructor (line 8) | constructor(private playListService: PlayListsService) {}
    method create (line 10) | create(

FILE: module-09-application-configurations/lesson-01/src/playlists/playlists.module.ts
  class PlayListModule (line 14) | class PlayListModule {}

FILE: module-09-application-configurations/lesson-01/src/playlists/playlists.service.ts
  class PlayListsService (line 10) | class PlayListsService {
    method constructor (line 11) | constructor(
    method create (line 22) | async create(playListDTO: CreatePlayListDto): Promise<Playlist> {

FILE: module-09-application-configurations/lesson-01/src/seed/seed.module.ts
  class SeedModule (line 7) | class SeedModule {}

FILE: module-09-application-configurations/lesson-01/src/seed/seed.service.ts
  class SeedService (line 6) | class SeedService {
    method constructor (line 7) | constructor(private readonly connection: DataSource) {}
    method seed (line 9) | async seed(): Promise<void> {

FILE: module-09-application-configurations/lesson-01/src/songs/dto/create-song-dto.ts
  class CreateSongDTO (line 11) | class CreateSongDTO {

FILE: module-09-application-configurations/lesson-01/src/songs/dto/update-song-dto.ts
  class UpdateSongDto (line 10) | class UpdateSongDto {

FILE: module-09-application-configurations/lesson-01/src/songs/song.entity.ts
  class Song (line 13) | class Song {

FILE: module-09-application-configurations/lesson-01/src/songs/songs.controller.ts
  class SongsController (line 28) | class SongsController {
    method constructor (line 29) | constructor(private songsService: SongsService) {}
    method create (line 32) | create(
    method findAll (line 41) | findAll(
    method findOne (line 55) | findOne(
    method update (line 66) | update(
    method delete (line 74) | delete(@Param('id', ParseIntPipe) id: number): Promise<DeleteResult> {

FILE: module-09-application-configurations/lesson-01/src/songs/songs.module.ts
  class SongsModule (line 13) | class SongsModule {}

FILE: module-09-application-configurations/lesson-01/src/songs/songs.service.ts
  class SongsService (line 16) | class SongsService {
    method constructor (line 17) | constructor(
    method create (line 24) | async create(songDTO: CreateSongDTO): Promise<Song> {
    method findAll (line 43) | findAll(): Promise<Song[]> {
    method findOne (line 47) | findOne(id: number): Promise<Song> {
    method remove (line 51) | remove(id: number): Promise<DeleteResult> {
    method update (line 55) | update(id: number, recordToUpdate: UpdateSongDto): Promise<UpdateResul...
    method paginate (line 59) | async paginate(options: IPaginationOptions): Promise<Pagination<Song>> {

FILE: module-09-application-configurations/lesson-01/src/users/dto/create-user.dto.ts
  class CreateUserDTO (line 3) | class CreateUserDTO {

FILE: module-09-application-configurations/lesson-01/src/users/user.entity.ts
  class User (line 6) | class User {

FILE: module-09-application-configurations/lesson-01/src/users/users.module.ts
  class UsersModule (line 11) | class UsersModule {}

FILE: module-09-application-configurations/lesson-01/src/users/users.service.ts
  class UsersService (line 11) | class UsersService {
    method constructor (line 12) | constructor(
    method create (line 17) | async create(userDTO: CreateUserDTO): Promise<User> {
    method findOne (line 32) | async findOne(data: LoginDTO): Promise<User> {
    method findById (line 39) | async findById(id: number): Promise<User> {
    method updateSecretKey (line 42) | async updateSecretKey(userId, secret: string): Promise<UpdateResult> {
    method disable2FA (line 51) | async disable2FA(userId: number): Promise<UpdateResult> {
    method findByApiKey (line 60) | async findByApiKey(apiKey: string): Promise<User> {

FILE: module-09-application-configurations/lesson-02/db/migrations/1685010320827-my-migrations.ts
  class MyMigrations1685010320827 (line 3) | class MyMigrations1685010320827 implements MigrationInterface {
    method up (line 6) | public async up(queryRunner: QueryRunner): Promise<void> {
    method down (line 21) | public async down(queryRunner: QueryRunner): Promise<void> {

FILE: module-09-application-configurations/lesson-02/db/migrations/1685010456982-removed-phone.ts
  class RemovedPhone1685010456982 (line 3) | class RemovedPhone1685010456982 implements MigrationInterface {
    method up (line 6) | public async up(queryRunner: QueryRunner): Promise<void> {
    method down (line 10) | public async down(queryRunner: QueryRunner): Promise<void> {

FILE: module-09-application-configurations/lesson-02/db/seeds/seed-data.ts
  function seedUser (line 18) | async function seedUser() {
  function seedArtist (line 33) | async function seedArtist() {
  function seedPlayLists (line 50) | async function seedPlayLists() {

FILE: module-09-application-configurations/lesson-02/env.validation.ts
  type Environment (line 4) | enum Environment {
  class EnvironmentVariables (line 11) | class EnvironmentVariables {
  function validate (line 37) | function validate(config: Record<string, unknown>) {

FILE: module-09-application-configurations/lesson-02/src/app.controller.ts
  class AppController (line 6) | class AppController {
    method constructor (line 7) | constructor(private readonly appService: AppService) {}
    method getHello (line 10) | getHello(): string {
    method getProfile (line 16) | getProfile(

FILE: module-09-application-configurations/lesson-02/src/app.module.ts
  class AppModule (line 38) | class AppModule implements NestModule {
    method constructor (line 39) | constructor(/*private dataSource: DataSource*/) {
    method configure (line 42) | configure(consumer: MiddlewareConsumer) {

FILE: module-09-application-configurations/lesson-02/src/app.service.ts
  class AppService (line 5) | class AppService {
    method getHello (line 6) | getHello(): string {

FILE: module-09-application-configurations/lesson-02/src/artists/artist.entity.ts
  class Artist (line 12) | class Artist {

FILE: module-09-application-configurations/lesson-02/src/artists/artists.controller.ts
  class ArtistsController (line 4) | class ArtistsController {}

FILE: module-09-application-configurations/lesson-02/src/artists/artists.module.ts
  class ArtistsModule (line 13) | class ArtistsModule {}

FILE: module-09-application-configurations/lesson-02/src/artists/artists.service.ts
  class ArtistsService (line 7) | class ArtistsService {
    method constructor (line 8) | constructor(
    method findArtist (line 13) | findArtist(userId: number): Promise<Artist> {

FILE: module-09-application-configurations/lesson-02/src/auth/api-key-strategy.ts
  class ApiKeyStrategy (line 7) | class ApiKeyStrategy extends PassportStrategy(Strategy) {
    method constructor (line 8) | constructor(private authService: AuthService) {
    method validate (line 11) | async validate(apiKey: string) {

FILE: module-09-application-configurations/lesson-02/src/auth/artists-jwt-guard.ts
  class ArtistJwtGuard (line 10) | class ArtistJwtGuard extends AuthGuard('jwt') {
    method canActivate (line 11) | canActivate(
    method handleRequest (line 16) | handleRequest<TUser = any>(err: any, user: any): TUser {

FILE: module-09-application-configurations/lesson-02/src/auth/auth.controller.ts
  class AuthController (line 21) | class AuthController {
    method constructor (line 22) | constructor(
    method signup (line 27) | signup(
    method login (line 35) | login(
    method enable2FA (line 44) | enable2FA(
    method validate2FA (line 54) | validate2FA(
    method disable2FA (line 67) | disable2FA(
    method getProfile (line 75) | getProfile(
    method testEnvVariable (line 87) | testEnvVariable() {

FILE: module-09-application-configurations/lesson-02/src/auth/auth.module.ts
  class AuthModule (line 30) | class AuthModule {}

FILE: module-09-application-configurations/lesson-02/src/auth/auth.service.ts
  class AuthService (line 15) | class AuthService {
    method constructor (line 16) | constructor(
    method login (line 23) | async login(
    method enable2FA (line 60) | async enable2FA(userId: number): Promise<Enable2FAType> {
    method validate2FAToken (line 73) | async validate2FAToken(
    method disable2FA (line 100) | async disable2FA(userId: number): Promise<UpdateResult> {
    method validateUserByApiKey (line 104) | async validateUserByApiKey(apiKey: string): Promise<User> {
    method getEnvVariable (line 108) | getEnvVariable() {

FILE: module-09-application-configurations/lesson-02/src/auth/dto/login.dto.ts
  class LoginDTO (line 3) | class LoginDTO {

FILE: module-09-application-configurations/lesson-02/src/auth/dto/validate-token.dto.ts
  class ValidateTokenDTO (line 3) | class ValidateTokenDTO {

FILE: module-09-application-configurations/lesson-02/src/auth/jwt-guard.ts
  class JwtAuthGuard (line 5) | class JwtAuthGuard extends AuthGuard('jwt') {}

FILE: module-09-application-configurations/lesson-02/src/auth/jwt-strategy.ts
  class JwtStrategy (line 8) | class JwtStrategy extends PassportStrategy(Strategy) {
    method constructor (line 9) | constructor() {
    method validate (line 17) | async validate(payload: PayloadType) {

FILE: module-09-application-configurations/lesson-02/src/auth/types.ts
  type PayloadType (line 1) | interface PayloadType {
  type Enable2FAType (line 7) | type Enable2FAType = {

FILE: module-09-application-configurations/lesson-02/src/common/constatnts/connection.ts
  type Connection (line 6) | type Connection = {

FILE: module-09-application-configurations/lesson-02/src/common/middleware/logger.middleware.ts
  class LoggerMiddleware (line 4) | class LoggerMiddleware implements NestMiddleware {
    method use (line 5) | use(req: any, res: any, next: () => void) {

FILE: module-09-application-configurations/lesson-02/src/common/providers/DevConfigService.ts
  class DevConfigService (line 4) | class DevConfigService {
    method getDBHOST (line 6) | getDBHOST() {

FILE: module-09-application-configurations/lesson-02/src/main.ts
  function bootstrap (line 7) | async function bootstrap() {

FILE: module-09-application-configurations/lesson-02/src/playlists/dto/create-playlist.dto.ts
  class CreatePlayListDto (line 3) | class CreatePlayListDto {

FILE: module-09-application-configurations/lesson-02/src/playlists/playlist.entity.ts
  class Playlist (line 12) | class Playlist {

FILE: module-09-application-configurations/lesson-02/src/playlists/playlists.controller.ts
  class PlayListsController (line 7) | class PlayListsController {
    method constructor (line 8) | constructor(private playListService: PlayListsService) {}
    method create (line 10) | create(

FILE: module-09-application-configurations/lesson-02/src/playlists/playlists.module.ts
  class PlayListModule (line 14) | class PlayListModule {}

FILE: module-09-application-configurations/lesson-02/src/playlists/playlists.service.ts
  class PlayListsService (line 10) | class PlayListsService {
    method constructor (line 11) | constructor(
    method create (line 22) | async create(playListDTO: CreatePlayListDto): Promise<Playlist> {

FILE: module-09-application-configurations/lesson-02/src/seed/seed.module.ts
  class SeedModule (line 7) | class SeedModule {}

FILE: module-09-application-configurations/lesson-02/src/seed/seed.service.ts
  class SeedService (line 6) | class SeedService {
    method constructor (line 7) | constructor(private readonly connection: DataSource) {}
    method seed (line 9) | async seed(): Promise<void> {

FILE: module-09-application-configurations/lesson-02/src/songs/dto/create-song-dto.ts
  class CreateSongDTO (line 11) | class CreateSongDTO {

FILE: module-09-application-configurations/lesson-02/src/songs/dto/update-song-dto.ts
  class UpdateSongDto (line 10) | class UpdateSongDto {

FILE: module-09-application-configurations/lesson-02/src/songs/song.entity.ts
  class Song (line 13) | class Song {

FILE: module-09-application-configurations/lesson-02/src/songs/songs.controller.ts
  class SongsController (line 28) | class SongsController {
    method constructor (line 29) | constructor(private songsService: SongsService) {}
    method create (line 32) | create(
    method findAll (line 41) | findAll(
    method findOne (line 55) | findOne(
    method update (line 66) | update(
    method delete (line 74) | delete(@Param('id', ParseIntPipe) id: number): Promise<DeleteResult> {

FILE: module-09-application-configurations/lesson-02/src/songs/songs.module.ts
  class SongsModule (line 13) | class SongsModule {}

FILE: module-09-application-configurations/lesson-02/src/songs/songs.service.ts
  class SongsService (line 16) | class SongsService {
    method constructor (line 17) | constructor(
    method create (line 24) | async create(songDTO: CreateSongDTO): Promise<Song> {
    method findAll (line 43) | findAll(): Promise<Song[]> {
    method findOne (line 47) | findOne(id: number): Promise<Song> {
    method remove (line 51) | remove(id: number): Promise<DeleteResult> {
    method update (line 55) | update(id: number, recordToUpdate: UpdateSongDto): Promise<UpdateResul...
    method paginate (line 59) | async paginate(options: IPaginationOptions): Promise<Pagination<Song>> {

FILE: module-09-application-configurations/lesson-02/src/users/dto/create-user.dto.ts
  class CreateUserDTO (line 3) | class CreateUserDTO {

FILE: module-09-application-configurations/lesson-02/src/users/user.entity.ts
  class User (line 6) | class User {

FILE: module-09-application-configurations/lesson-02/src/users/users.module.ts
  class UsersModule (line 11) | class UsersModule {}

FILE: module-09-application-configurations/lesson-02/src/users/users.service.ts
  class UsersService (line 11) | class UsersService {
    method constructor (line 12) | constructor(
    method create (line 17) | async create(userDTO: CreateUserDTO): Promise<User> {
    method findOne (line 32) | async findOne(data: LoginDTO): Promise<User> {
    method findById (line 39) | async findById(id: number): Promise<User> {
    method updateSecretKey (line 42) | async updateSecretKey(userId, secret: string): Promise<UpdateResult> {
    method disable2FA (line 51) | async disable2FA(userId: number): Promise<UpdateResult> {
    method findByApiKey (line 60) | async findByApiKey(apiKey: string): Promise<User> {

FILE: module-09-application-configurations/lesson-03/db/migrations/1685010320827-my-migrations.ts
  class MyMigrations1685010320827 (line 3) | class MyMigrations1685010320827 implements MigrationInterface {
    method up (line 6) | public async up(queryRunner: QueryRunner): Promise<void> {
    method down (line 21) | public async down(queryRunner: QueryRunner): Promise<void> {

FILE: module-09-application-configurations/lesson-03/db/migrations/1685010456982-removed-phone.ts
  class RemovedPhone1685010456982 (line 3) | class RemovedPhone1685010456982 implements MigrationInterface {
    method up (line 6) | public async up(queryRunner: QueryRunner): Promise<void> {
    method down (line 10) | public async down(queryRunner: QueryRunner): Promise<void> {

FILE: module-09-application-configurations/lesson-03/db/seeds/seed-data.ts
  function seedUser (line 18) | async function seedUser() {
  function seedArtist (line 33) | async function seedArtist() {
  function seedPlayLists (line 50) | async function seedPlayLists() {

FILE: module-09-application-configurations/lesson-03/env.validation.ts
  type Environment (line 4) | enum Environment {
  class EnvironmentVariables (line 11) | class EnvironmentVariables {
  function validate (line 37) | function validate(config: Record<string, unknown>) {

FILE: module-09-application-configurations/lesson-03/src/app.controller.ts
  class AppController (line 6) | class AppController {
    method constructor (line 7) | constructor(private readonly appService: AppService) {}
    method getHello (line 10) | getHello(): string {
    method getProfile (line 16) | getProfile(

FILE: module-09-application-configurations/lesson-03/src/app.module.ts
  class AppModule (line 38) | class AppModule implements NestModule {
    method constructor (line 39) | constructor(/*private dataSource: DataSource*/) {
    method configure (line 42) | configure(consumer: MiddlewareConsumer) {

FILE: module-09-application-configurations/lesson-03/src/app.service.ts
  class AppService (line 5) | class AppService {
    method getHello (line 6) | getHello(): string {

FILE: module-09-application-configurations/lesson-03/src/artists/artist.entity.ts
  class Artist (line 12) | class Artist {

FILE: module-09-application-configurations/lesson-03/src/artists/artists.controller.ts
  class ArtistsController (line 4) | class ArtistsController {}

FILE: module-09-application-configurations/lesson-03/src/artists/artists.module.ts
  class ArtistsModule (line 13) | class ArtistsModule {}

FILE: module-09-application-configurations/lesson-03/src/artists/artists.service.ts
  class ArtistsService (line 7) | class ArtistsService {
    method constructor (line 8) | constructor(
    method findArtist (line 13) | findArtist(userId: number): Promise<Artist> {

FILE: module-09-application-configurations/lesson-03/src/auth/api-key-strategy.ts
  class ApiKeyStrategy (line 7) | class ApiKeyStrategy extends PassportStrategy(Strategy) {
    method constructor (line 8) | constructor(private authService: AuthService) {
    method validate (line 11) | async validate(apiKey: string) {

FILE: module-09-application-configurations/lesson-03/src/auth/artists-jwt-guard.ts
  class ArtistJwtGuard (line 10) | class ArtistJwtGuard extends AuthGuard('jwt') {
    method canActivate (line 11) | canActivate(
    method handleRequest (line 16) | handleRequest<TUser = any>(err: any, user: any): TUser {

FILE: module-09-application-configurations/lesson-03/src/auth/auth.controller.ts
  class AuthController (line 21) | class AuthController {
    method constructor (line 22) | constructor(
    method signup (line 27) | signup(
    method login (line 35) | login(
    method enable2FA (line 44) | enable2FA(
    method validate2FA (line 54) | validate2FA(
    method disable2FA (line 67) | disable2FA(
    method getProfile (line 75) | getProfile(
    method testEnvVariable (line 87) | testEnvVariable() {

FILE: module-09-application-configurations/lesson-03/src/auth/auth.module.ts
  class AuthModule (line 30) | class AuthModule {}

FILE: module-09-application-configurations/lesson-03/src/auth/auth.service.ts
  class AuthService (line 15) | class AuthService {
    method constructor (line 16) | constructor(
    method login (line 23) | async login(
    method enable2FA (line 60) | async enable2FA(userId: number): Promise<Enable2FAType> {
    method validate2FAToken (line 73) | async validate2FAToken(
    method disable2FA (line 100) | async disable2FA(userId: number): Promise<UpdateResult> {
    method validateUserByApiKey (line 104) | async validateUserByApiKey(apiKey: string): Promise<User> {
    method getEnvVariable (line 108) | getEnvVariable() {

FILE: module-09-application-configurations/lesson-03/src/auth/dto/login.dto.ts
  class LoginDTO (line 3) | class LoginDTO {

FILE: module-09-application-configurations/lesson-03/src/auth/dto/validate-token.dto.ts
  class ValidateTokenDTO (line 3) | class ValidateTokenDTO {

FILE: module-09-application-configurations/lesson-03/src/auth/jwt-guard.ts
  class JwtAuthGuard (line 5) | class JwtAuthGuard extends AuthGuard('jwt') {}

FILE: module-09-application-configurations/lesson-03/src/auth/jwt-strategy.ts
  class JwtStrategy (line 8) | class JwtStrategy extends PassportStrategy(Strategy) {
    method constructor (line 9) | constructor() {
    method validate (line 17) | async validate(payload: PayloadType) {

FILE: module-09-application-configurations/lesson-03/src/auth/types.ts
  type PayloadType (line 1) | interface PayloadType {
  type Enable2FAType (line 7) | type Enable2FAType = {

FILE: module-09-application-configurations/lesson-03/src/common/constatnts/connection.ts
  type Connection (line 6) | type Connection = {

FILE: module-09-application-configurations/lesson-03/src/common/middleware/logger.middleware.ts
  class LoggerMiddleware (line 4) | class LoggerMiddleware implements NestMiddleware {
    method use (line 5) | use(req: any, res: any, next: () => void) {

FILE: module-09-application-configurations/lesson-03/src/common/providers/DevConfigService.ts
  class DevConfigService (line 4) | class DevConfigService {
    method getDBHOST (line 6) | getDBHOST() {

FILE: module-09-application-configurations/lesson-03/src/main.ts
  function bootstrap (line 9) | async function bootstrap() {

FILE: module-09-application-configurations/lesson-03/src/playlists/dto/create-playlist.dto.ts
  class CreatePlayListDto (line 3) | class CreatePlayListDto {

FILE: module-09-application-configurations/lesson-03/src/playlists/playlist.entity.ts
  class Playlist (line 12) | class Playlist {

FILE: module-09-application-configurations/lesson-03/src/playlists/playlists.controller.ts
  class PlayListsController (line 7) | class PlayListsController {
    method constructor (line 8) | constructor(private playListService: PlayListsService) {}
    method create (line 10) | create(

FILE: module-09-application-configurations/lesson-03/src/playlists/playlists.module.ts
  class PlayListModule (line 14) | class PlayListModule {}

FILE: module-09-application-configurations/lesson-03/src/playlists/playlists.service.ts
  class PlayListsService (line 10) | class PlayListsService {
    method constructor (line 11) | constructor(
    method create (line 22) | async create(playListDTO: CreatePlayListDto): Promise<Playlist> {

FILE: module-09-application-configurations/lesson-03/src/seed/seed.module.ts
  class SeedModule (line 7) | class SeedModule {}

FILE: module-09-application-configurations/lesson-03/src/seed/seed.service.ts
  class SeedService (line 6) | class SeedService {
    method constructor (line 7) | constructor(private readonly connection: DataSource) {}
    method seed (line 9) | async seed(): Promise<void> {

FILE: module-09-application-configurations/lesson-03/src/songs/dto/create-song-dto.ts
  class CreateSongDTO (line 11) | class CreateSongDTO {

FILE: module-09-application-configurations/lesson-03/src/songs/dto/update-song-dto.ts
  class UpdateSongDto (line 10) | class UpdateSongDto {

FILE: module-09-application-configurations/lesson-03/src/songs/song.entity.ts
  class Song (line 13) | class Song {

FILE: module-09-application-configurations/lesson-03/src/songs/songs.controller.ts
  class SongsController (line 28) | class SongsController {
    method constructor (line 29) | constructor(private songsService: SongsService) {}
    method create (line 32) | create(
    method findAll (line 41) | findAll(
    method findOne (line 55) | findOne(
    method update (line 66) | update(
    method delete (line 74) | delete(@Param('id', ParseIntPipe) id: number): Promise<DeleteResult> {

FILE: module-09-application-configurations/lesson-03/src/songs/songs.module.ts
  class SongsModule (line 13) | class SongsModule {}

FILE: module-09-application-configurations/lesson-03/src/songs/songs.service.ts
  class SongsService (line 16) | class SongsService {
    method constructor (line 17) | constructor(
    method create (line 24) | async create(songDTO: CreateSongDTO): Promise<Song> {
    method findAll (line 43) | findAll(): Promise<Song[]> {
    method findOne (line 47) | findOne(id: number): Promise<Song> {
    method remove (line 51) | remove(id: number): Promise<DeleteResult> {
    method update (line 55) | update(id: number, recordToUpdate: UpdateSongDto): Promise<UpdateResul...
    method paginate (line 59) | async paginate(options: IPaginationOptions): Promise<Pagination<Song>> {

FILE: module-09-application-configurations/lesson-03/src/users/dto/create-user.dto.ts
  class CreateUserDTO (line 3) | class CreateUserDTO {

FILE: module-09-application-configurations/lesson-03/src/users/user.entity.ts
  class User (line 6) | class User {

FILE: module-09-application-configurations/lesson-03/src/users/users.module.ts
  class UsersModule (line 11) | class UsersModule {}

FILE: module-09-application-configurations/lesson-03/src/users/users.service.ts
  class UsersService (line 11) | class UsersService {
    method constructor (line 12) | constructor(
    method create (line 17) | async create(userDTO: CreateUserDTO): Promise<User> {
    method findOne (line 32) | async findOne(data: LoginDTO): Promise<User> {
    method findById (line 39) | async findById(id: number): Promise<User> {
    method updateSecretKey (line 42) | async updateSecretKey(userId, secret: string): Promise<UpdateResult> {
    method disable2FA (line 51) | async disable2FA(userId: number): Promise<UpdateResult> {
    method findByApiKey (line 60) | async findByApiKey(apiKey: string): Promise<User> {

FILE: module-10-api-documentation-with-swagger/lesson-01/db/migrations/1685010320827-my-migrations.ts
  class MyMigrations1685010320827 (line 3) | class MyMigrations1685010320827 implements MigrationInterface {
    method up (line 6) | public async up(queryRunner: QueryRunner): Promise<void> {
    method down (line 21) | public async down(queryRunner: QueryRunner): Promise<void> {

FILE: module-10-api-documentation-with-swagger/lesson-01/db/migrations/1685010456982-removed-phone.ts
  class RemovedPhone1685010456982 (line 3) | class RemovedPhone1685010456982 implements MigrationInterface {
    method up (line 6) | public async up(queryRunner: QueryRunner): Promise<void> {
    method down (line 10) | public async down(queryRunner: QueryRunner): Promise<void> {

FILE: module-10-api-documentation-with-swagger/lesson-01/db/seeds/seed-data.ts
  function seedUser (line 18) | async function seedUser() {
  function seedArtist (line 33) | async function seedArtist() {
  function seedPlayLists (line 50) | async function seedPlayLists() {

FILE: module-10-api-documentation-with-swagger/lesson-01/env.validation.ts
  type Environment (line 4) | enum Environment {
  class EnvironmentVariables (line 11) | class EnvironmentVariables {
  function validate (line 37) | function validate(config: Record<string, unknown>) {

FILE: module-10-api-documentation-with-swagger/lesson-01/src/app.controller.ts
  class AppController (line 6) | class AppController {
    method constructor (line 7) | constructor(private readonly appService: AppService) {}
    method getHello (line 10) | getHello(): string {
    method getProfile (line 16) | getProfile(

FILE: module-10-api-documentation-with-swagger/lesson-01/src/app.module.ts
  class AppModule (line 38) | class AppModule implements NestModule {
    method constructor (line 39) | constructor(/*private dataSource: DataSource*/) {
    method configure (line 42) | configure(consumer: MiddlewareConsumer) {

FILE: module-10-api-documentation-with-swagger/lesson-01/src/app.service.ts
  class AppService (line 5) | class AppService {
    method getHello (line 6) | getHello(): string {

FILE: module-10-api-documentation-with-swagger/lesson-01/src/artists/artist.entity.ts
  class Artist (line 12) | class Artist {

FILE: module-10-api-documentation-with-swagger/lesson-01/src/artists/artists.controller.ts
  class ArtistsController (line 4) | class ArtistsController {}

FILE: module-10-api-documentation-with-swagger/lesson-01/src/artists/artists.module.ts
  class ArtistsModule (line 13) | class ArtistsModule {}

FILE: module-10-api-documentation-with-swagger/lesson-01/src/artists/artists.service.ts
  class ArtistsService (line 7) | class ArtistsService {
    method constructor (line 8) | constructor(
    method findArtist (line 13) | findArtist(userId: number): Promise<Artist> {

FILE: module-10-api-documentation-with-swagger/lesson-01/src/auth/api-key-strategy.ts
  class ApiKeyStrategy (line 7) | class ApiKeyStrategy extends PassportStrategy(Strategy) {
    method constructor (line 8) | constructor(private authService: AuthService) {
    method validate (line 11) | async validate(apiKey: string) {

FILE: module-10-api-documentation-with-swagger/lesson-01/src/auth/artists-jwt-guard.ts
  class ArtistJwtGuard (line 10) | class ArtistJwtGuard extends AuthGuard('jwt') {
    method canActivate (line 11) | canActivate(
    method handleRequest (line 16) | handleRequest<TUser = any>(err: any, user: any): TUser {

FILE: module-10-api-documentation-with-swagger/lesson-01/src/auth/auth.controller.ts
  class AuthController (line 21) | class AuthController {
    method constructor (line 22) | constructor(
    method signup (line 27) | signup(
    method login (line 35) | login(
    method enable2FA (line 44) | enable2FA(
    method validate2FA (line 54) | validate2FA(
    method disable2FA (line 67) | disable2FA(
    method getProfile (line 75) | getProfile(
    method testEnvVariable (line 87) | testEnvVariable() {

FILE: module-10-api-documentation-with-swagger/lesson-01/src/auth/auth.module.ts
  class AuthModule (line 30) | class AuthModule {}

FILE: module-10-api-documentation-with-swagger/lesson-01/src/auth/auth.service.ts
  class AuthService (line 15) | class AuthService {
    method constructor (line 16) | constructor(
    method login (line 23) | async login(
    method enable2FA (line 60) | async enable2FA(userId: number): Promise<Enable2FAType> {
    method validate2FAToken (line 73) | async validate2FAToken(
    method disable2FA (line 100) | async disable2FA(userId: number): Promise<UpdateResult> {
    method validateUserByApiKey (line 104) | async validateUserByApiKey(apiKey: string): Promise<User> {
    method getEnvVariable (line 108) | getEnvVariable() {

FILE: module-10-api-documentation-with-swagger/lesson-01/src/auth/dto/login.dto.ts
  class LoginDTO (line 3) | class LoginDTO {

FILE: module-10-api-documentation-with-swagger/lesson-01/src/auth/dto/validate-token.dto.ts
  class ValidateTokenDTO (line 3) | class ValidateTokenDTO {

FILE: module-10-api-documentation-with-swagger/lesson-01/src/auth/jwt-guard.ts
  class JwtAuthGuard (line 5) | class JwtAuthGuard extends AuthGuard('jwt') {}

FILE: module-10-api-documentation-with-swagger/lesson-01/src/auth/jwt-strategy.ts
  class JwtStrategy (line 8) | class JwtStrategy extends PassportStrategy(Strategy) {
    method constructor (line 9) | constructor() {
    method validate (line 17) | async validate(payload: PayloadType) {

FILE: module-10-api-documentation-with-swagger/lesson-01/src/auth/types.ts
  type PayloadType (line 1) | interface PayloadType {
  type Enable2FAType (line 7) | type Enable2FAType = {

FILE: module-10-api-documentation-with-swagger/lesson-01/src/common/constatnts/connection.ts
  type Connection (line 6) | type Connection = {

FILE: module-10-api-documentation-with-swagger/lesson-01/src/common/middleware/logger.middleware.ts
  class LoggerMiddleware (line 4) | class LoggerMiddleware implements NestMiddleware {
    method use (line 5) | use(req: any, res: any, next: () => void) {

FILE: module-10-api-documentation-with-swagger/lesson-01/src/common/providers/DevConfigService.ts
  class DevConfigService (line 4) | class DevConfigService {
    method getDBHOST (line 6) | getDBHOST() {

FILE: module-10-api-documentation-with-swagger/lesson-01/src/main.ts
  function bootstrap (line 10) | async function bootstrap() {

FILE: module-10-api-documentation-with-swagger/lesson-01/src/playlists/dto/create-playlist.dto.ts
  class CreatePlayListDto (line 3) | class CreatePlayListDto {

FILE: module-10-api-documentation-with-swagger/lesson-01/src/playlists/playlist.entity.ts
  class Playlist (line 12) | class Playlist {

FILE: module-10-api-documentation-with-swagger/lesson-01/src/playlists/playlists.controller.ts
  class PlayListsController (line 7) | class PlayListsController {
    method constructor (line 8) | constructor(private playListService: PlayListsService) {}
    method create (line 10) | create(

FILE: module-10-api-documentation-with-swagger/lesson-01/src/playlists/playlists.module.ts
  class PlayListModule (line 14) | class PlayListModule {}

FILE: module-10-api-documentation-with-swagger/lesson-01/src/playlists/playlists.service.ts
  class PlayListsService (line 10) | class PlayListsService {
    method constructor (line 11) | constructor(
    method create (line 22) | async create(playListDTO: CreatePlayListDto): Promise<Playlist> {

FILE: module-10-api-documentation-with-swagger/lesson-01/src/seed/seed.module.ts
  class SeedModule (line 7) | class SeedModule {}

FILE: module-10-api-documentation-with-swagger/lesson-01/src/seed/seed.service.ts
  class SeedService (line 6) | class SeedService {
    method constructor (line 7) | constructor(private readonly connection: DataSource) {}
    method seed (line 9) | async seed(): Promise<void> {

FILE: module-10-api-documentation-with-swagger/lesson-01/src/songs/dto/create-song-dto.ts
  class CreateSongDTO (line 11) | class CreateSongDTO {

FILE: module-10-api-documentation-with-swagger/lesson-01/src/songs/dto/update-song-dto.ts
  class UpdateSongDto (line 10) | class UpdateSongDto {

FILE: module-10-api-documentation-with-swagger/lesson-01/src/songs/song.entity.ts
  class Song (line 13) | class Song {

FILE: module-10-api-documentation-with-swagger/lesson-01/src/songs/songs.controller.ts
  class SongsController (line 28) | class SongsController {
    method constructor (line 29) | constructor(private songsService: SongsService) {}
    method create (line 32) | create(
    method findAll (line 41) | findAll(
    method findOne (line 55) | findOne(
    method update (line 66) | update(
    method delete (line 74) | delete(@Param('id', ParseIntPipe) id: number): Promise<DeleteResult> {

FILE: module-10-api-documentation-with-swagger/lesson-01/src/songs/songs.module.ts
  class SongsModule (line 13) | class SongsModule {}

FILE: module-10-api-documentation-with-swagger/lesson-01/src/songs/songs.service.ts
  class SongsService (line 16) | class SongsService {
    method constructor (line 17) | constructor(
    method create (line 24) | async create(songDTO: CreateSongDTO): Promise<Song> {
    method findAll (line 43) | findAll(): Promise<Song[]> {
    method findOne (line 47) | findOne(id: number): Promise<Song> {
    method remove (line 51) | remove(id: number): Promise<DeleteResult> {
    method update (line 55) | update(id: number, recordToUpdate: UpdateSongDto): Promise<UpdateResul...
    method paginate (line 59) | async paginate(options: IPaginationOptions): Promise<Pagination<Song>> {

FILE: module-10-api-documentation-with-swagger/lesson-01/src/users/dto/create-user.dto.ts
  class CreateUserDTO (line 3) | class CreateUserDTO {

FILE: module-10-api-documentation-with-swagger/lesson-01/src/users/user.entity.ts
  class User (line 6) | class User {

FILE: module-10-api-documentation-with-swagger/lesson-01/src/users/users.module.ts
  class UsersModule (line 11) | class UsersModule {}

FILE: module-10-api-documentation-with-swagger/lesson-01/src/users/users.service.ts
  class UsersService (line 11) | class UsersService {
    method constructor (line 12) | constructor(
    method create (line 17) | async create(userDTO: CreateUserDTO): Promise<User> {
    method findOne (line 32) | async findOne(data: LoginDTO): Promise<User> {
    method findById (line 39) | async findById(id: number): Promise<User> {
    method updateSecretKey (line 42) | async updateSecretKey(userId, secret: string): Promise<UpdateResult> {
    method disable2FA (line 51) | async disable2FA(userId: number): Promise<UpdateResult> {
    method findByApiKey (line 60) | async findByApiKey(apiKey: string): Promise<User> {

FILE: module-10-api-documentation-with-swagger/lesson-02/db/migrations/1685010320827-my-migrations.ts
  class MyMigrations1685010320827 (line 3) | class MyMigrations1685010320827 implements MigrationInterface {
    method up (line 6) | public async up(queryRunner: QueryRunner): Promise<void> {
    method down (line 21) | public async down(queryRunner: QueryRunner): Promise<void> {

FILE: module-10-api-documentation-with-swagger/lesson-02/db/migrations/1685010456982-removed-phone.ts
  class RemovedPhone1685010456982 (line 3) | class RemovedPhone1685010456982 implements MigrationInterface {
    method up (line 6) | public async up(queryRunner: QueryRunner): Promise<void> {
    method down (line 10) | public async down(queryRunner: QueryRunner): Promise<void> {

FILE: module-10-api-documentation-with-swagger/lesson-02/db/seeds/seed-data.ts
  function seedUser (line 18) | async function seedUser() {
  function seedArtist (line 33) | async function seedArtist() {
  function seedPlayLists (line 50) | async function seedPlayLists() {

FILE: module-10-api-documentation-with-swagger/lesson-02/env.validation.ts
  type Environment (line 4) | enum Environment {
  class EnvironmentVariables (line 11) | class EnvironmentVariables {
  function validate (line 37) | function validate(config: Record<string, unknown>) {

FILE: module-10-api-documentation-with-swagger/lesson-02/src/app.controller.ts
  class AppController (line 6) | class AppController {
    method constructor (line 7) | constructor(private readonly appService: AppService) {}
    method getHello (line 10) | getHello(): string {
    method getProfile (line 16) | getProfile(

FILE: module-10-api-documentation-with-swagger/lesson-02/src/app.module.ts
  class AppModule (line 38) | class AppModule implements NestModule {
    method constructor (line 39) | constructor(/*private dataSource: DataSource*/) {
    method configure (line 42) | configure(consumer: MiddlewareConsumer) {

FILE: module-10-api-documentation-with-swagger/lesson-02/src/app.service.ts
  class AppService (line 5) | class AppService {
    method getHello (line 6) | getHello(): string {

FILE: module-10-api-documentation-with-swagger/lesson-02/src/artists/artist.entity.ts
  class Artist (line 12) | class Artist {

FILE: module-10-api-documentation-with-swagger/lesson-02/src/artists/artists.controller.ts
  class ArtistsController (line 4) | class ArtistsController {}

FILE: module-10-api-documentation-with-swagger/lesson-02/src/artists/artists.module.ts
  class ArtistsModule (line 13) | class ArtistsModule {}

FILE: module-10-api-documentation-with-swagger/lesson-02/src/artists/artists.service.ts
  class ArtistsService (line 7) | class ArtistsService {
    method constructor (line 8) | constructor(
    method findArtist (line 13) | findArtist(userId: number): Promise<Artist> {

FILE: module-10-api-documentation-with-swagger/lesson-02/src/auth/api-key-strategy.ts
  class ApiKeyStrategy (line 7) | class ApiKeyStrategy extends PassportStrategy(Strategy) {
    method constructor (line 8) | constructor(private authService: AuthService) {
    method validate (line 11) | async validate(apiKey: string) {

FILE: module-10-api-documentation-with-swagger/lesson-02/src/auth/artists-jwt-guard.ts
  class ArtistJwtGuard (line 10) | class ArtistJwtGuard extends AuthGuard('jwt') {
    method canActivate (line 11) | canActivate(
    method handleRequest (line 16) | handleRequest<TUser = any>(err: any, user: any): TUser {

FILE: module-10-api-documentation-with-swagger/lesson-02/src/auth/auth.controller.ts
  class AuthController (line 23) | class AuthController {
    method constructor (line 24) | constructor(
    method signup (line 34) | signup(
    method login (line 42) | login(
    method enable2FA (line 51) | enable2FA(
    method validate2FA (line 61) | validate2FA(
    method disable2FA (line 74) | disable2FA(
    method getProfile (line 82) | getProfile(
    method testEnvVariable (line 94) | testEnvVariable() {

FILE: module-10-api-documentation-with-swagger/lesson-02/src/auth/auth.module.ts
  class AuthModule (line 30) | class AuthModule {}

FILE: module-10-api-documentation-with-swagger/lesson-02/src/auth/auth.service.ts
  class AuthService (line 15) | class AuthService {
    method constructor (line 16) | constructor(
    method login (line 23) | async login(
    method enable2FA (line 60) | async enable2FA(userId: number): Promise<Enable2FAType> {
    method validate2FAToken (line 73) | async validate2FAToken(
    method disable2FA (line 100) | async disable2FA(userId: number): Promise<UpdateResult> {
    method validateUserByApiKey (line 104) | async validateUserByApiKey(apiKey: string): Promise<User> {
    method getEnvVariable (line 108) | getEnvVariable() {

FILE: module-10-api-documentation-with-swagger/lesson-02/src/auth/dto/login.dto.ts
  class LoginDTO (line 3) | class LoginDTO {

FILE: module-10-api-documentation-with-swagger/lesson-02/src/auth/dto/validate-token.dto.ts
  class ValidateTokenDTO (line 3) | class ValidateTokenDTO {

FILE: module-10-api-documentation-with-swagger/lesson-02/src/auth/jwt-guard.ts
  class JwtAuthGuard (line 5) | class JwtAuthGuard extends AuthGuard('jwt') {}

FILE: module-10-api-documentation-with-swagger/lesson-02/src/auth/jwt-strategy.ts
  class JwtStrategy (line 8) | class JwtStrategy extends PassportStrategy(Strategy) {
    method constructor (line 9) | constructor() {
    method validate (line 17) | async validate(payload: PayloadType) {

FILE: module-10-api-documentation-with-swagger/lesson-02/src/auth/types.ts
  type PayloadType (line 1) | interface PayloadType {
  type Enable2FAType (line 7) | type Enable2FAType = {

FILE: module-10-api-documentation-with-swagger/lesson-02/src/common/constatnts/connection.ts
  type Connection (line 6) | type Connection = {

FILE: module-10-api-documentation-with-swagger/lesson-02/src/common/middleware/logger.middleware.ts
  class LoggerMiddleware (line 4) | class LoggerMiddleware implements NestMiddleware {
    method use (line 5) | use(req: any, res: any, next: () => void) {

FILE: module-10-api-documentation-with-swagger/lesson-02/src/common/providers/DevConfigService.ts
  class DevConfigService (line 4) | class DevConfigService {
    method getDBHOST (line 6) | getDBHOST() {

FILE: module-10-api-documentation-with-swagger/lesson-02/src/main.ts
  function bootstrap (line 10) | async function bootstrap() {

FILE: module-10-api-documentation-with-swagger/lesson-02/src/playlists/dto/create-playlist.dto.ts
  class CreatePlayListDto (line 3) | class CreatePlayListDto {

FILE: module-10-api-documentation-with-swagger/lesson-02/src/playlists/playlist.entity.ts
  class Playlist (line 12) | class Playlist {

FILE: module-10-api-documentation-with-swagger/lesson-02/src/playlists/playlists.controller.ts
  class PlayListsController (line 7) | class PlayListsController {
    method constructor (line 8) | constructor(private playListService: PlayListsService) {}
    method create (line 10) | create(

FILE: module-10-api-documentation-with-swagger/lesson-02/src/playlists/playlists.module.ts
  class PlayListModule (line 14) | class PlayListModule {}

FILE: module-10-api-documentation-with-swagger/lesson-02/src/playlists/playlists.service.ts
  class PlayListsService (line 10) | class PlayListsService {
    method constructor (line 11) | constructor(
    method create (line 22) | async create(playListDTO: CreatePlayListDto): Promise<Playlist> {

FILE: module-10-api-documentation-with-swagger/lesson-02/src/seed/seed.module.ts
  class SeedModule (line 7) | class SeedModule {}

FILE: module-10-api-documentation-with-swagger/lesson-02/src/seed/seed.service.ts
  class SeedService (line 6) | class SeedService {
    method constructor (line 7) | constructor(private readonly connection: DataSource) {}
    method seed (line 9) | async seed(): Promise<void> {

FILE: module-10-api-documentation-with-swagger/lesson-02/src/songs/dto/create-song-dto.ts
  class CreateSongDTO (line 11) | class CreateSongDTO {

FILE: module-10-api-documentation-with-swagger/lesson-02/src/songs/dto/update-song-dto.ts
  class UpdateSongDto (line 10) | class UpdateSongDto {

FILE: module-10-api-documentation-with-swagger/lesson-02/src/songs/song.entity.ts
  class Song (line 13) | class Song {

FILE: module-10-api-documentation-with-swagger/lesson-02/src/songs/songs.controller.ts
  class SongsController (line 28) | class SongsController {
    method constructor (line 29) | constructor(private songsService: SongsService) {}
    method create (line 32) | create(
    method findAll (line 41) | findAll(
    method findOne (line 55) | findOne(
    method update (line 66) | update(
    method delete (line 74) | delete(@Param('id', ParseIntPipe) id: number): Promise<DeleteResult> {

FILE: module-10-api-documentation-with-swagger/lesson-02/src/songs/songs.module.ts
  class SongsModule (line 13) | class SongsModule {}

FILE: module-10-api-documentation-with-swagger/lesson-02/src/songs/songs.service.ts
  class SongsService (line 16) | class SongsService {
    method constructor (line 17) | constructor(
    method create (line 24) | async create(songDTO: CreateSongDTO): Promise<Song> {
    method findAll (line 43) | findAll(): Promise<Song[]> {
    method findOne (line 47) | findOne(id: number): Promise<Song> {
    method remove (line 51) | remove(id: number): Promise<DeleteResult> {
    method update (line 55) | update(id: number, recordToUpdate: UpdateSongDto): Promise<UpdateResul...
    method paginate (line 59) | async paginate(options: IPaginationOptions): Promise<Pagination<Song>> {

FILE: module-10-api-documentation-with-swagger/lesson-02/src/users/dto/create-user.dto.ts
  class CreateUserDTO (line 3) | class CreateUserDTO {

FILE: module-10-api-documentation-with-swagger/lesson-02/src/users/user.entity.ts
  class User (line 6) | class User {

FILE: module-10-api-documentation-with-swagger/lesson-02/src/users/users.module.ts
  class UsersModule (line 11) | class UsersModule {}

FILE: module-10-api-documentation-with-swagger/lesson-02/src/users/users.service.ts
  class UsersService (line 11) | class UsersService {
    method constructor (line 12) | constructor(
    method create (line 17) | async create(userDTO: CreateUserDTO): Promise<User> {
    method findOne (line 32) | async findOne(data: LoginDTO): Promise<User> {
    method findById (line 39) | async findById(id: number): Promise<User> {
    method updateSecretKey (line 42) | async updateSecretKey(userId, secret: string): Promise<UpdateResult> {
    method disable2FA (line 51) | async disable2FA(userId: number): Promise<UpdateResult> {
    method findByApiKey (line 60) | async findByApiKey(apiKey: string): Promise<User> {

FILE: module-10-api-documentation-with-swagger/lesson-03/db/migrations/1685010320827-my-migrations.ts
  class MyMigrations1685010320827 (line 3) | class MyMigrations1685010320827 implements MigrationInterface {
    method up (line 6) | public async up(queryRunner: QueryRunner): Promise<void> {
    method down (line 21) | public async down(queryRunner: QueryRunner): Promise<void> {

FILE: module-10-api-documentation-with-swagger/lesson-03/db/migrations/1685010456982-removed-phone.ts
  class RemovedPhone1685010456982 (line 3) | class RemovedPhone1685010456982 implements MigrationInterface {
    method up (line 6) | public async up(queryRunner: QueryRunner): Promise<void> {
    method down (line 10) | public async down(queryRunner: QueryRunner): Promise<void> {

FILE: module-10-api-documentation-with-swagger/lesson-03/db/seeds/seed-data.ts
  function seedUser (line 18) | async function seedUser() {
  function seedArtist (line 33) | async function seedArtist() {
  function seedPlayLists (line 50) | async function seedPlayLists() {

FILE: module-10-api-documentation-with-swagger/lesson-03/env.validation.ts
  type Environment (line 4) | enum Environment {
  class EnvironmentVariables (line 11) | class EnvironmentVariables {
  function validate (line 37) | function validate(config: Record<string, unknown>) {

FILE: module-10-api-documentation-with-swagger/lesson-03/src/app.controller.ts
  class AppController (line 6) | class AppController {
    method constructor (line 7) | constructor(private readonly appService: AppService) {}
    method getHello (line 10) | getHello(): string {
    method getProfile (line 16) | getProfile(

FILE: module-10-api-documentation-with-swagger/lesson-03/src/app.module.ts
  class AppModule (line 38) | class AppModule implements NestModule {
    method constructor (line 39) | constructor(/*private dataSource: DataSource*/) {
    method configure (line 42) | configure(consumer: MiddlewareConsumer) {

FILE: module-10-api-documentation-with-swagger/lesson-03/src/app.service.ts
  class AppService (line 5) | class AppService {
    method getHello (line 6) | getHello(): string {

FILE: module-10-api-documentation-with-swagger/lesson-03/src/artists/artist.entity.ts
  class Artist (line 12) | class Artist {

FILE: module-10-api-documentation-with-swagger/lesson-03/src/artists/artists.controller.ts
  class ArtistsController (line 4) | class ArtistsController {}

FILE: module-10-api-documentation-with-swagger/lesson-03/src/artists/artists.module.ts
  class ArtistsModule (line 13) | class ArtistsModule {}

FILE: module-10-api-documentation-with-swagger/lesson-03/src/artists/artists.service.ts
  class ArtistsService (line 7) | class ArtistsService {
    method constructor (line 8) | constructor(
    method findArtist (line 13) | findArtist(userId: number): Promise<Artist> {

FILE: module-10-api-documentation-with-swagger/lesson-03/src/auth/api-key-strategy.ts
  class ApiKeyStrategy (line 7) | class ApiKeyStrategy extends PassportStrategy(Strategy) {
    method constructor (line 8) | constructor(private authService: AuthService) {
    method validate (line 11) | async validate(apiKey: string) {

FILE: module-10-api-documentation-with-swagger/lesson-03/src/auth/artists-jwt-guard.ts
  class ArtistJwtGuard (line 10) | class ArtistJwtGuard extends AuthGuard('jwt') {
    method canActivate (line 11) | canActivate(
    method handleRequest (line 16) | handleRequest<TUser = any>(err: any, user: any): TUser {

FILE: module-10-api-documentation-with-swagger/lesson-03/src/auth/auth.controller.ts
  class AuthController (line 23) | class AuthController {
    method constructor (line 24) | constructor(
    method signup (line 34) | signup(
    method login (line 42) | login(
    method enable2FA (line 51) | enable2FA(
    method validate2FA (line 61) | validate2FA(
    method disable2FA (line 74) | disable2FA(
    method getProfile (line 82) | getProfile(
    method testEnvVariable (line 94) | testEnvVariable() {

FILE: module-10-api-documentation-with-swagger/lesson-03/src/auth/auth.module.ts
  class AuthModule (line 30) | class AuthModule {}

FILE: module-10-api-documentation-with-swagger/lesson-03/src/auth/auth.service.ts
  class AuthService (line 15) | class AuthService {
    method constructor (line 16) | constructor(
    method login (line 23) | async login(
    method enable2FA (line 60) | async enable2FA(userId: number): Promise<Enable2FAType> {
    method validate2FAToken (line 73) | async validate2FAToken(
    method disable2FA (line 100) | async disable2FA(userId: number): Promise<UpdateResult> {
    method validateUserByApiKey (line 104) | async validateUserByApiKey(apiKey: string): Promise<User> {
    method getEnvVariable (line 108) | getEnvVariable() {

FILE: module-10-api-documentation-with-swagger/lesson-03/src/auth/dto/login.dto.ts
  class LoginDTO (line 3) | class LoginDTO {

FILE: module-10-api-documentation-with-swagger/lesson-03/src/auth/dto/validate-token.dto.ts
  class ValidateTokenDTO (line 3) | class ValidateTokenDTO {

FILE: module-10-api-documentation-with-swagger/lesson-03/src/auth/jwt-guard.ts
  class JwtAuthGuard (line 5) | class JwtAuthGuard extends AuthGuard('jwt') {}

FILE: module-10-api-documentation-with-swagger/lesson-03/src/auth/jwt-strategy.ts
  class JwtStrategy (line 8) | class JwtStrategy extends PassportStrategy(Strategy) {
    method constructor (line 9) | constructor() {
    method validate (line 17) | async validate(payload: PayloadType) {

FILE: module-10-api-documentation-with-swagger/lesson-03/src/auth/types.ts
  type PayloadType (line 1) | interface PayloadType {
  type Enable2FAType (line 7) | type Enable2FAType = {

FILE: module-10-api-documentation-with-swagger/lesson-03/src/common/constatnts/connection.ts
  type Connection (line 6) | type Connection = {

FILE: module-10-api-documentation-with-swagger/lesson-03/src/common/middleware/logger.middleware.ts
  class LoggerMiddleware (line 4) | class LoggerMiddleware implements NestMiddleware {
    method use (line 5) | use(req: any, res: any, next: () => void) {

FILE: module-10-api-documentation-with-swagger/lesson-03/src/common/providers/DevConfigService.ts
  class DevConfigService (line 4) | class DevConfigService {
    method getDBHOST (line 6) | getDBHOST() {

FILE: module-10-api-documentation-with-swagger/lesson-03/src/main.ts
  function bootstrap (line 10) | async function bootstrap() {

FILE: module-10-api-documentation-with-swagger/lesson-03/src/playlists/dto/create-playlist.dto.ts
  class CreatePlayListDto (line 3) | class CreatePlayListDto {

FILE: module-10-api-documentation-with-swagger/lesson-03/src/playlists/playlist.entity.ts
  class Playlist (line 12) | class Playlist {

FILE: module-10-api-documentation-with-swagger/lesson-03/src/playlists/playlists.controller.ts
  class PlayListsController (line 7) | class PlayListsController {
    method constructor (line 8) | constructor(private playListService: PlayListsService) {}
    method create (line 10) | create(

FILE: module-10-api-documentation-with-swagger/lesson-03/src/playlists/playlists.module.ts
  class PlayListModule (line 14) | class PlayListModule {}

FILE: module-10-api-documentation-with-swagger/lesson-03/src/playlists/playlists.service.ts
  class PlayListsService (line 10) | class PlayListsService {
    method constructor (line 11) | constructor(
    method create (line 22) | async create(playListDTO: CreatePlayListDto): Promise<Playlist> {

FILE: module-10-api-documentation-with-swagger/lesson-03/src/seed/seed.module.ts
  class SeedModule (line 7) | class SeedModule {}

FILE: module-10-api-documentation-with-swagger/lesson-03/src/seed/seed.service.ts
  class SeedService (line 6) | class SeedService {
    method constructor (line 7) | constructor(private readonly connection: DataSource) {}
    method seed (line 9) | async seed(): Promise<void> {

FILE: module-10-api-documentation-with-swagger/lesson-03/src/songs/dto/create-song-dto.ts
  class CreateSongDTO (line 11) | class CreateSongDTO {

FILE: module-10-api-documentation-with-swagger/lesson-03/src/songs/dto/update-song-dto.ts
  class UpdateSongDto (line 10) | class UpdateSongDto {

FILE: module-10-api-documentation-with-swagger/lesson-03/src/songs/song.entity.ts
  class Song (line 13) | class Song {

FILE: module-10-api-documentation-with-swagger/lesson-03/src/songs/songs.controller.ts
  class SongsController (line 28) | class SongsController {
    method constructor (line 29) | constructor(private songsService: SongsService) {}
    method create (line 32) | create(
    method findAll (line 41) | findAll(
    method findOne (line 55) | findOne(
    method update (line 66) | update(
    method delete (line 74) | delete(@Param('id', ParseIntPipe) id: number): Promise<DeleteResult> {

FILE: module-10-api-documentation-with-swagger/lesson-03/src/songs/songs.module.ts
  class SongsModule (line 13) | class SongsModule {}

FILE: module-10-api-documentation-with-swagger/lesson-03/src/songs/songs.service.ts
  class SongsService (line 16) | class SongsService {
    method constructor (line 17) | constructor(
    method create (line 24) | async create(songDTO: CreateSongDTO): Promise<Song> {
    method findAll (line 43) | findAll(): Promise<Song[]> {
    method findOne (line 47) | findOne(id: number): Promise<Song> {
    method remove (line 51) | remove(id: number): Promise<DeleteResult> {
    method update (line 55) | update(id: number, recordToUpdate: UpdateSongDto): Promise<UpdateResul...
    method paginate (line 59) | async paginate(options: IPaginationOptions): Promise<Pagination<Song>> {

FILE: module-10-api-documentation-with-swagger/lesson-03/src/users/dto/create-user.dto.ts
  class CreateUserDTO (line 3) | class CreateUserDTO {

FILE: module-10-api-documentation-with-swagger/lesson-03/src/users/user.entity.ts
  class User (line 7) | class User {

FILE: module-10-api-documentation-with-swagger/lesson-03/src/users/users.module.ts
  class UsersModule (line 11) | class UsersModule {}

FILE: module-10-api-documentation-with-swagger/lesson-03/src/users/users.service.ts
  class UsersService (line 11) | class UsersService {
    method constructor (line 12) | constructor(
    method create (line 17) | async create(userDTO: CreateUserDTO): Promise<User> {
    method findOne (line 32) | async findOne(data: LoginDTO): Promise<User> {
    method findById (line 39) | async findById(id: number): Promise<User> {
    method updateSecretKey (line 42) | async updateSecretKey(userId, secret: string): Promise<UpdateResult> {
    method disable2FA (line 51) | async disable2FA(userId: number): Promise<UpdateResult> {
    method findByApiKey (line 60) | async findByApiKey(apiKey: string): Promise<User> {

FILE: module-10-api-documentation-with-swagger/lesson-04/db/migrations/1685010320827-my-migrations.ts
  class MyMigrations1685010320827 (line 3) | class MyMigrations1685010320827 implements MigrationInterface {
    method up (line 6) | public async up(queryRunner: QueryRunner): Promise<void> {
    method down (line 21) | public async down(queryRunner: QueryRunner): Promise<void> {

FILE: module-10-api-documentation-with-swagger/lesson-04/db/migrations/1685010456982-removed-phone.ts
  class RemovedPhone1685010456982 (line 3) | class RemovedPhone1685010456982 implements MigrationInterface {
    method up (line 6) | public async up(queryRunner: QueryRunner): Promise<void> {
    method down (line 10) | public async down(queryRunner: QueryRunner): Promise<void> {

FILE: module-10-api-documentation-with-swagger/lesson-04/db/seeds/seed-data.ts
  function seedUser (line 18) | async function seedUser() {
  function seedArtist (line 33) | async function seedArtist() {
  function seedPlayLists (line 50) | async function seedPlayLists() {

FILE: module-10-api-documentation-with-swagger/lesson-04/env.validation.ts
  type Environment (line 4) | enum Environment {
  class EnvironmentVariables (line 11) | class EnvironmentVariables {
  function validate (line 37) | function validate(config: Record<string, unknown>) {

FILE: module-10-api-documentation-with-swagger/lesson-04/src/app.controller.ts
  class AppController (line 7) | class AppController {
    method constructor (line 8) | constructor(private readonly appService: AppService) {}
    method getHello (line 11) | getHello(): string {
    method getProfile (line 18) | getProfile(

FILE: module-10-api-documentation-with-swagger/lesson-04/src/app.module.ts
  class AppModule (line 38) | class AppModule implements NestModule {
    method constructor (line 39) | constructor(/*private dataSource: DataSource*/) {
    method configure (line 42) | configure(consumer: MiddlewareConsumer) {

FILE: module-10-api-documentation-with-swagger/lesson-04/src/app.service.ts
  class AppService (line 5) | class AppService {
    method getHello (line 6) | getHello(): string {

FILE: module-10-api-documentation-with-swagger/lesson-04/src/artists/artist.entity.ts
  class Artist (line 12) | class Artist {

FILE: module-10-api-documentation-with-swagger/lesson-04/src/artists/artists.controller.ts
  class ArtistsController (line 4) | class ArtistsController {}

FILE: module-10-api-documentation-with-swagger/lesson-04/src/artists/artists.module.ts
  class ArtistsModule (line 13) | class ArtistsModule {}

FILE: module-10-api-documentation-with-swagger/lesson-04/src/artists/artists.service.ts
  class ArtistsService (line 7) | class ArtistsService {
    method constructor (line 8) | constructor(
    method findArtist (line 13) | findArtist(userId: number): Promise<Artist> {

FILE: module-10-api-documentation-with-swagger/lesson-04/src/auth/api-key-strategy.ts
  class ApiKeyStrategy (line 7) | class ApiKeyStrategy extends PassportStrategy(Strategy) {
    method constructor (line 8) | constructor(private authService: AuthService) {
    method validate (line 11) | async validate(apiKey: string) {

FILE: module-10-api-documentation-with-swagger/lesson-04/src/auth/artists-jwt-guard.ts
  class ArtistJwtGuard (line 10) | class ArtistJwtGuard extends AuthGuard('jwt') {
    method canActivate (line 11) | canActivate(
    method handleRequest (line 16) | handleRequest<TUser = any>(err: any, user: any): TUser {

FILE: module-10-api-documentation-with-swagger/lesson-04/src/auth/auth.controller.ts
  class AuthController (line 23) | class AuthController {
    method constructor (line 24) | constructor(
    method signup (line 34) | signup(
    method login (line 47) | login(
    method enable2FA (line 56) | enable2FA(
    method validate2FA (line 66) | validate2FA(
    method disable2FA (line 79) | disable2FA(
    method getProfile (line 87) | getProfile(
    method testEnvVariable (line 99) | testEnvVariable() {

FILE: module-10-api-documentation-with-swagger/lesson-04/src/auth/auth.module.ts
  class AuthModule (line 30) | class AuthModule {}

FILE: module-10-api-documentation-with-swagger/lesson-04/src/auth/auth.service.ts
  class AuthService (line 15) | class AuthService {
    method constructor (line 16) | constructor(
    method login (line 23) | async login(
    method enable2FA (line 60) | async enable2FA(userId: number): Promise<Enable2FAType> {
    method validate2FAToken (line 73) | async validate2FAToken(
    method disable2FA (line 100) | async disable2FA(userId: number): Promise<UpdateResult> {
    method validateUserByApiKey (line 104) | async validateUserByApiKey(apiKey: string): Promise<User> {
    method getEnvVariable (line 108) | getEnvVariable() {

FILE: module-10-api-documentation-with-swagger/lesson-04/src/auth/dto/login.dto.ts
  class LoginDTO (line 3) | class LoginDTO {

FILE: module-10-api-documentation-with-swagger/lesson-04/src/auth/dto/validate-token.dto.ts
  class ValidateTokenDTO (line 3) | class ValidateTokenDTO {

FILE: module-10-api-documentation-with-swagger/lesson-04/src/auth/jwt-guard.ts
  class JwtAuthGuard (line 5) | class JwtAuthGuard extends AuthGuard('jwt') {}

FILE: module-10-api-documentation-with-swagger/lesson-04/src/auth/jwt-strategy.ts
  class JwtStrategy (line 7) | class JwtStrategy extends PassportStrategy(Strategy) {
    method constructor (line 8) | constructor() {
    method validate (line 16) | async validate(payload: PayloadType) {

FILE: module-10-api-documentation-with-swagger/lesson-04/src/auth/types.ts
  type PayloadType (line 1) | interface PayloadType {
  type Enable2FAType (line 7) | type Enable2FAType = {

FILE: module-10-api-documentation-with-swagger/lesson-04/src/common/constatnts/connection.ts
  type Connection (line 6) | type Connection = {

FILE: module-10-api-documentation-with-swagger/lesson-04/src/common/middleware/logger.middleware.ts
  class LoggerMiddleware (line 4) | class LoggerMiddleware implements NestMiddleware {
    method use (line 5) | use(req: any, res: any, next: () => void) {

FILE: module-10-api-documentation-with-swagger/lesson-04/src/common/providers/DevConfigService.ts
  class DevConfigService (line 4) | class DevConfigService {
    method getDBHOST (line 6) | getDBHOST() {

FILE: module-10-api-documentation-with-swagger/lesson-04/src/main.ts
  function bootstrap (line 10) | async function bootstrap() {

FILE: module-10-api-documentation-with-swagger/lesson-04/src/playlists/dto/create-playlist.dto.ts
  class CreatePlayListDto (line 3) | class CreatePlayListDto {

FILE: module-10-api-documentation-with-swagger/lesson-04/src/playlists/playlist.entity.ts
  class Playlist (line 12) | class Playlist {

FILE: module-10-api-documentation-with-swagger/lesson-04/src/playlists/playlists.controller.ts
  class PlayListsController (line 9) | class PlayListsController {
    method constructor (line 10) | constructor(private playListService: PlayListsService) {}
    method create (line 12) | create(

FILE: module-10-api-documentation-with-swagger/lesson-04/src/playlists/playlists.module.ts
  class PlayListModule (line 14) | class PlayListModule {}

FILE: module-10-api-documentation-with-swagger/lesson-04/src/playlists/playlists.service.ts
  class PlayListsService (line 10) | class PlayListsService {
    method constructor (line 11) | constructor(
    method create (line 22) | async create(playListDTO: CreatePlayListDto): Promise<Playlist> {

FILE: module-10-api-documentation-with-swagger/lesson-04/src/seed/seed.module.ts
  class SeedModule (line 7) | class SeedModule {}

FILE: module-10-api-documentation-with-swagger/lesson-04/src/seed/seed.service.ts
  class SeedService (line 6) | class SeedService {
    method constructor (line 7) | constructor(private readonly connection: DataSource) {}
    method seed (line 9) | async seed(): Promise<void> {

FILE: module-10-api-documentation-with-swagger/lesson-04/src/songs/dto/create-song-dto.ts
  class CreateSongDTO (line 11) | class CreateSongDTO {

FILE: module-10-api-documentation-with-swagger/lesson-04/src/songs/dto/update-song-dto.ts
  class UpdateSongDto (line 10) | class UpdateSongDto {

FILE: module-10-api-documentation-with-swagger/lesson-04/src/songs/song.entity.ts
  class Song (line 13) | class Song {

FILE: module-10-api-documentation-with-swagger/lesson-04/src/songs/songs.controller.ts
  class SongsController (line 30) | class SongsController {
    method constructor (line 31) | constructor(private songsService: SongsService) {}
    method create (line 34) | create(
    method findAll (line 43) | findAll(
    method findOne (line 57) | findOne(
    method update (line 68) | update(
    method delete (line 76) | delete(@Param('id', ParseIntPipe) id: number): Promise<DeleteResult> {

FILE: module-10-api-documentation-with-swagger/lesson-04/src/songs/songs.module.ts
  class SongsModule (line 13) | class SongsModule {}

FILE: module-10-api-documentation-with-swagger/lesson-04/src/songs/songs.service.ts
  class SongsService (line 16) | class SongsService {
    method constructor (line 17) | constructor(
    method create (line 24) | async create(songDTO: CreateSongDTO): Promise<Song> {
    method findAll (line 43) | findAll(): Promise<Song[]> {
    method findOne (line 47) | findOne(id: number): Promise<Song> {
    method remove (line 51) | remove(id: number): Promise<DeleteResult> {
    method update (line 55) | update(id: number, recordToUpdate: UpdateSongDto): Promise<UpdateResul...
    method paginate (line 59) | async paginate(options: IPaginationOptions): Promise<Pagination<Song>> {

FILE: module-10-api-documentation-with-swagger/lesson-04/src/users/dto/create-user.dto.ts
  class CreateUserDTO (line 3) | class CreateUserDTO {

FILE: module-10-api-documentation-with-swagger/lesson-04/src/users/user.entity.ts
  class User (line 7) | class User {

FILE: module-10-api-documentation-with-swagger/lesson-04/src/users/users.module.ts
  class UsersModule (line 11) | class UsersModule {}

FILE: module-10-api-documentation-with-swagger/lesson-04/src/users/users.service.ts
  class UsersService (line 11) | class UsersService {
    method constructor (line 12) | constructor(
    method create (line 17) | async create(userDTO: CreateUserDTO): Promise<User> {
    method findOne (line 32) | async findOne(data: LoginDTO): Promise<User> {
    method findById (line 39) | async findById(id: number): Promise<User> {
    method updateSecretKey (line 42) | async updateSecretKey(userId, secret: string): Promise<UpdateResult> {
    method disable2FA (line 51) | async disable2FA(userId: number): Promise<UpdateResult> {
    method findByApiKey (line 60) | async findByApiKey(apiKey: string): Promise<User> {

FILE: module-11-mongodb/lesson-01/src/app.controller.ts
  class AppController (line 5) | class AppController {
    method constructor (line 6) | constructor(private readonly appService: AppService) {}
    method getHello (line 9) | getHello(): string {

FILE: module-11-mongodb/lesson-01/src/app.module.ts
  class AppModule (line 11) | class AppModule {}

FILE: module-11-mongodb/lesson-01/src/app.service.ts
  class AppService (line 4) | class AppService {
    method getHello (line 5) | getHello(): string {

FILE: module-11-mongodb/lesson-01/src/main.ts
  function bootstrap (line 4) | async function bootstrap() {

FILE: module-11-mongodb/lesson-02-and-03/src/app.controller.ts
  class AppController (line 5) | class AppController {
    method constructor (line 6) | constructor(private readonly appService: AppService) {}
    method getHello (line 9) | getHello(): string {

FILE: module-11-mongodb/lesson-02-and-03/src/app.module.ts
  class AppModule (line 11) | class AppModule {}

FILE: module-11-mongodb/lesson-02-and-03/src/app.service.ts
  class AppService (line 4) | class AppService {
    method getHello (line 5) | getHello(): string {

FILE: module-11-mongodb/lesson-02-and-03/src/main.ts
  function bootstrap (line 4) | async function bootstrap() {

FILE: module-11-mongodb/lesson-02-and-03/src/songs/schemas/song.ts
  type SongDocument (line 4) | type SongDocument = HydratedDocument<Song>;
  class Song (line 7) | class Song {

FILE: module-11-mongodb/lesson-04/src/app.controller.ts
  class AppController (line 5) | class AppController {
    method constructor (line 6) | constructor(private readonly appService: AppService) {}
    method getHello (line 9) | getHello(): string {

FILE: module-11-mongodb/lesson-04/src/app.module.ts
  class AppModule (line 15) | class AppModule {}

FILE: module-11-mongodb/lesson-04/src/app.service.ts
  class AppService (line 4) | class AppService {
    method getHello (line 5) | getHello(): string {

FILE: module-11-mongodb/lesson-04/src/main.ts
  function bootstrap (line 4) | async function bootstrap() {

FILE: module-11-mongodb/lesson-04/src/songs/dto/create-song-dto.ts
  class CreateSongDTO (line 1) | class CreateSongDTO {

FILE: module-11-mongodb/lesson-04/src/songs/schemas/song.ts
  type SongDocument (line 4) | type SongDocument = HydratedDocument<Song>;
  class Song (line 7) | class Song {

FILE: module-11-mongodb/lesson-04/src/songs/songs.controller.ts
  class SongsController (line 6) | class SongsController {
    method constructor (line 7) | constructor(private songService: SongsService) {}
    method create (line 9) | create(

FILE: module-11-mongodb/lesson-04/src/songs/songs.module.ts
  class SongsModule (line 14) | class SongsModule {}

FILE: module-11-mongodb/lesson-04/src/songs/songs.service.ts
  class SongsService (line 8) | class SongsService {
    method constructor (line 9) | constructor(
    method create (line 14) | async create(createSongDTO: CreateSongDTO): Promise<Song> {

FILE: module-11-mongodb/lesson-05/src/app.controller.ts
  class AppController (line 5) | class AppController {
    method constructor (line 6) | constructor(private readonly appService: AppService) {}
    method getHello (line 9) | getHello(): string {

FILE: module-11-mongodb/lesson-05/src/app.module.ts
  class AppModule (line 15) | class AppModule {}

FILE: module-11-mongodb/lesson-05/src/app.service.ts
  class AppService (line 4) | class AppService {
    method getHello (line 5) | getHello(): string {

FILE: module-11-mongodb/lesson-05/src/main.ts
  function bootstrap (line 4) | async function bootstrap() {

FILE: module-11-mongodb/lesson-05/src/songs/dto/create-song-dto.ts
  class CreateSongDTO (line 1) | class CreateSongDTO {

FILE: module-11-mongodb/lesson-05/src/songs/schemas/song.ts
  type SongDocument (line 4) | type SongDocument = HydratedDocument<Song>;
  class Song (line 7) | class Song {

FILE: module-11-mongodb/lesson-05/src/songs/songs.controller.ts
  class SongsController (line 7) | class SongsController {
    method constructor (line 8) | constructor(private songService: SongsService) {}
    method create (line 10) | create(
    method find (line 18) | find(): Promise<Song[]> {
    method findOne (line 23) | findOne(
    method delete (line 31) | delete(

FILE: module-11-mongodb/lesson-05/src/songs/songs.module.ts
  class SongsModule (line 14) | class SongsModule {}

FILE: module-11-mongodb/lesson-05/src/songs/songs.service.ts
  class SongsService (line 8) | class SongsService {
    method constructor (line 9) | constructor(
    method create (line 14) | async create(createSongDTO: CreateSongDTO): Promise<Song> {
    method find (line 19) | async find(): Promise<Song[]> {
    method findById (line 23) | async findById(id: string): Promise<Song> {
    method delete (line 26) | async delete(id: string) {

FILE: module-11-mongodb/lesson-06/src/albums/albums.controller.ts
  class AlbumsController (line 7) | class AlbumsController {
    method constructor (line 8) | constructor(private albumService: AlbumsService) {}
    method create (line 10) | create(
    method find (line 18) | find(): Promise<Album[]> {

FILE: module-11-mongodb/lesson-06/src/albums/albums.module.ts
  class AlbumsModule (line 14) | class AlbumsModule {}

FILE: module-11-mongodb/lesson-06/src/albums/albums.service.ts
  class AlbumsService (line 9) | class AlbumsService {
    method constructor (line 10) | constructor(
    method createAlbum (line 14) | async createAlbum(createAlbumDTO: CreateAlbumDTO): Promise<Album> {
    method findAlbums (line 18) | async findAlbums() {

FILE: module-11-mongodb/lesson-06/src/albums/dto/create-album-dto.ts
  class CreateAlbumDTO (line 1) | class CreateAlbumDTO {

FILE: module-11-mongodb/lesson-06/src/albums/schemas/album.schema.ts
  type AlbumDocument (line 5) | type AlbumDocument = HydratedDocument<Album>;
  class Album (line 8) | class Album {

FILE: module-11-mongodb/lesson-06/src/app.controller.ts
  class AppController (line 5) | class AppController {
    method constructor (line 6) | constructor(private readonly appService: AppService) {}
    method getHello (line 9) | getHello(): string {

FILE: module-11-mongodb/lesson-06/src/app.module.ts
  class AppModule (line 17) | class AppModule {}

FILE: module-11-mongodb/lesson-06/src/app.service.ts
  class AppService (line 4) | class AppService {
    method getHello (line 5) | getHello(): string {

FILE: module-11-mongodb/lesson-06/src/main.ts
  function bootstrap (line 4) | async function bootstrap() {

FILE: module-11-mongodb/lesson-06/src/songs/dto/create-song-dto.ts
  class CreateSongDTO (line 1) | class CreateSongDTO {

FILE: module-11-mongodb/lesson-06/src/songs/schemas/song.ts
  type SongDocument (line 5) | type SongDocument = HydratedDocument<Song>;
  class Song (line 8) | class Song {

FILE: module-11-mongodb/lesson-06/src/songs/songs.controller.ts
  class SongsController (line 7) | class SongsController {
    method constructor (line 8) | constructor(private songService: SongsService) {}
    method create (line 10) | create(
    method find (line 18) | find(): Promise<Song[]> {
    method findOne (line 23) | findOne(
    method delete (line 31) | delete(

FILE: module-11-mongodb/lesson-06/src/songs/songs.module.ts
  class SongsModule (line 14) | class SongsModule {}

FILE: module-11-mongodb/lesson-06/src/songs/songs.service.ts
  class SongsService (line 8) | class SongsService {
    method constructor (line 9) | constructor(
    method create (line 14) | async create(createSongDTO: CreateSongDTO): Promise<Song> {
    method find (line 19) | async find(): Promise<Song[]> {
    method findById (line 23) | async findById(id: string): Promise<Song> {
    method delete (line 26) | async delete(id: string) {

FILE: module-12-deploy-nestjs/deployment-finish/db/migrations/1686309549613-init.ts
  class Init1686309549613 (line 3) | class Init1686309549613 implements MigrationInterface {
    method up (line 6) | public async up(queryRunner: QueryRunner): Promise<void> {
    method down (line 21) | public async down(queryRunner: QueryRunner): Promise<void> {

FILE: module-12-deploy-nestjs/deployment-finish/db/seeds/seed-data.ts
  function seedUser (line 18) | async function seedUser() {
  function seedArtist (line 33) | async function seedArtist() {
  function seedPlayLists (line 50) | async function seedPlayLists() {

FILE: module-12-deploy-nestjs/deployment-finish/env.validation.ts
  type Environment (line 4) | enum Environment {
  class EnvironmentVariables (line 11) | class EnvironmentVariables {
  function validate (line 37) | function validate(config: Record<string, unknown>) {

FILE: module-12-deploy-nestjs/deployment-finish/src/app.controller.ts
  class AppController (line 7) | class AppController {
    method constructor (line 8) | constructor(private readonly appService: AppService) {}
    method getHello (line 11) | getHello(): string {
    method getProfile (line 18) | getProfile(

FILE: module-12-deploy-nestjs/deployment-finish/src/app.module.ts
  class AppModule (line 38) | class AppModule {}

FILE: module-12-deploy-nestjs/deployment-finish/src/app.service.ts
  class AppService (line 5) | class AppService {
    method getHello (line 6) | getHello(): string {

FILE: module-12-deploy-nestjs/deployment-finish/src/artists/artist.entity.ts
  class Artist (line 12) | class Artist {

FILE: module-12-deploy-nestjs/deployment-finish/src/artists/artists.controller.ts
  class ArtistsController (line 4) | class ArtistsController {}

FILE: module-12-deploy-nestjs/deployment-finish/src/artists/artists.module.ts
  class ArtistsModule (line 13) | class ArtistsModule {}

FILE: module-12-deploy-nestjs/deployment-finish/src/artists/artists.service.ts
  class ArtistsService (line 7) | class ArtistsService {
    method constructor (line 8) | constructor(
    method findArtist (line 13) | findArtist(userId: number): Promise<Artist> {

FILE: module-12-deploy-nestjs/deployment-finish/src/auth/api-key-strategy.ts
  class ApiKeyStrategy (line 7) | class ApiKeyStrategy extends PassportStrategy(Strategy) {
    method constructor (line 8) | constructor(private authService: AuthService) {
    method validate (line 11) | async validate(apiKey: string) {

FILE: module-12-deploy-nestjs/deployment-finish/src/auth/artists-jwt-guard.ts
  class ArtistJwtGuard (line 10) | class ArtistJwtGuard extends AuthGuard('jwt') {
    method canActivate (line 11) | canActivate(
    method handleRequest (line 16) | handleRequest<TUser = any>(err: any, user: any): TUser {

FILE: module-12-deploy-nestjs/deployment-finish/src/auth/auth.controller.ts
  class AuthController (line 23) | class AuthController {
    method constructor (line 24) | constructor(
    method signup (line 34) | signup(
    method login (line 47) | login(
    method enable2FA (line 56) | enable2FA(
    method validate2FA (line 66) | validate2FA(
    method disable2FA (line 79) | disable2FA(
    method getProfile (line 87) | getProfile(
    method testEnvVariable (line 99) | testEnvVariable() {

FILE: module-12-deploy-nestjs/deployment-finish/src/auth/auth.module.ts
  class AuthModule (line 30) | class AuthModule {}

FILE: module-12-deploy-nestjs/deployment-finish/src/auth/auth.service.ts
  class AuthService (line 15) | class AuthService {
    method constructor (line 16) | constructor(
    method login (line 23) | async login(
    method enable2FA (line 60) | async enable2FA(userId: number): Promise<Enable2FAType> {
    method validate2FAToken (line 73) | async validate2FAToken(
    method disable2FA (line 100) | async disable2FA(userId: number): Promise<UpdateResult> {
    method validateUserByApiKey (line 104) | async validateUserByApiKey(apiKey: string): Promise<User> {
    method getEnvVariable (line 108) | getEnvVariable() {

FILE: module-12-deploy-nestjs/deployment-finish/src/auth/dto/login.dto.ts
  class LoginDTO (line 3) | class LoginDTO {

FILE: module-12-deploy-nestjs/deployment-finish/src/auth/dto/validate-token.dto.ts
  class ValidateTokenDTO (line 3) | class ValidateTokenDTO {

FILE: module-12-deploy-nestjs/deployment-finish/src/auth/jwt-guard.ts
  class JwtAuthGuard (line 5) | class JwtAuthGuard extends AuthGuard('jwt') {}

FILE: module-12-deploy-nestjs/deployment-finish/src/auth/jwt-strategy.ts
  class JwtStrategy (line 7) | class JwtStrategy extends PassportStrategy(Strategy) {
    method constructor (line 8) | constructor() {
    method validate (line 16) | async validate(payload: PayloadType) {

FILE: module-12-deploy-nestjs/deployment-finish/src/auth/types.ts
  type PayloadType (line 1) | interface PayloadType {
  type Enable2FAType (line 7) | type Enable2FAType = {

FILE: module-12-deploy-nestjs/deployment-finish/src/common/constatnts/connection.ts
  type Connection (line 6) | type Connection = {

FILE: module-12-deploy-nestjs/deployment-finish/src/common/middleware/logger.middleware.ts
  class LoggerMiddleware (line 4) | class LoggerMiddleware implements NestMiddleware {
    method use (line 5) | use(req: any, res: any, next: () => void) {

FILE: module-12-deploy-nestjs/deployment-finish/src/common/providers/DevConfigService.ts
  class DevConfigService (line 4) | class DevConfigService {
    method getDBHOST (line 6) | getDBHOST() {

FILE: module-12-deploy-nestjs/deployment-finish/src/main.ts
  function bootstrap (line 10) | async function bootstrap() {

FILE: module-12-deploy-nestjs/deployment-finish/src/playlists/dto/create-playlist.dto.ts
  class CreatePlayListDto (line 3) | class CreatePlayListDto {

FILE: module-12-deploy-nestjs/deployment-finish/src/playlists/playlist.entity.ts
  class Playlist (line 12) | class Playlist {

FILE: module-12-deploy-nestjs/deployment-finish/src/playlists/playlists.controller.ts
  class PlayListsController (line 9) | class PlayListsController {
    method constructor (line 10) | constructor(private playListService: PlayListsService) {}
    method create (line 12) | create(

FILE: module-12-deploy-nestjs/deployment-finish/src/playlists/playlists.module.ts
  class PlayListModule (line 14) | class PlayListModule {}

FILE: module-12-deploy-nestjs/deployment-finish/src/playlists/playlists.service.ts
  class PlayListsService (line 10) | class PlayListsService {
    method constructor (line 11) | constructor(
    method create (line 22) | async create(playListDTO: CreatePlayListDto): Promise<Playlist> {

FILE: module-12-deploy-nestjs/deployment-finish/src/seed/seed.module.ts
  class SeedModule (line 7) | class SeedModule {}

FILE: module-12-deploy-nestjs/deployment-finish/src/seed/seed.service.ts
  class SeedService (line 6) | class SeedService {
    method constructor (line 7) | constructor(private readonly connection: DataSource) {}
    method seed (line 9) | async seed(): Promise<void> {

FILE: module-12-deploy-nestjs/deployment-finish/src/songs/dto/create-song-dto.ts
  class CreateSongDTO (line 11) | class CreateSongDTO {

FILE: module-12-deploy-nestjs/deployment-finish/src/songs/dto/update-song-dto.ts
  class UpdateSongDto (line 10) | class UpdateSongDto {

FILE: module-12-deploy-nestjs/deployment-finish/src/songs/song.entity.ts
  class Song (line 13) | class Song {

FILE: module-12-deploy-nestjs/deployment-finish/src/songs/songs.controller.ts
  class SongsController (line 30) | class SongsController {
    method constructor (line 31) | constructor(private songsService: SongsService) {}
    method create (line 34) | create(
    method findAll (line 43) | findAll(
    method findOne (line 57) | findOne(
    method update (line 68) | update(
    method delete (line 76) | delete(@Param('id', ParseIntPipe) id: number): Promise<DeleteResult> {

FILE: module-12-deploy-nestjs/deployment-finish/src/songs/songs.module.ts
  class SongsModule (line 13) | class SongsModule {}

FILE: module-12-deploy-nestjs/deployment-finish/src/songs/songs.service.ts
  class SongsService (line 16) | class SongsService {
    method constructor (line 17) | constructor(
    method create (line 24) | async create(songDTO: CreateSongDTO): Promise<Song> {
    method findAll (line 43) | findAll(): Promise<Song[]> {
    method findOne (line 47) | findOne(id: number): Promise<Song> {
    method remove (line 51) | remove(id: number): Promise<DeleteResult> {
    method update (line 55) | update(id: number, recordToUpdate: UpdateSongDto): Promise<UpdateResul...
    method paginate (line 59) | async paginate(options: IPaginationOptions): Promise<Pagination<Song>> {

FILE: module-12-deploy-nestjs/deployment-finish/src/users/dto/create-user.dto.ts
  class CreateUserDTO (line 3) | class CreateUserDTO {

FILE: module-12-deploy-nestjs/deployment-finish/src/users/user.entity.ts
  class User (line 7) | class User {

FILE: module-12-deploy-nestjs/deployment-finish/src/users/users.module.ts
  class UsersModule (line 11) | class UsersModule {}

FILE: module-12-deploy-nestjs/deployment-finish/src/users/users.service.ts
  class UsersService (line 11) | class UsersService {
    method constructor (line 12) | constructor(
    method create (line 17) | async create(userDTO: CreateUserDTO): Promise<User> {
    method findOne (line 32) | async findOne(data: LoginDTO): Promise<User> {
    method findById (line 39) | async findById(id: number): Promise<User> {
    method updateSecretKey (line 42) | async updateSecretKey(userId, secret: string): Promise<UpdateResult> {
    method disable2FA (line 51) | async disable2FA(userId: number): Promise<UpdateResult> {
    method findByApiKey (line 60) | async findByApiKey(apiKey: string): Promise<User> {

FILE: module-12-deploy-nestjs/deployment-starter/db/migrations/1685010320827-my-migrations.ts
  class MyMigrations1685010320827 (line 3) | class MyMigrations1685010320827 implements MigrationInterface {
    method up (line 6) | public async up(queryRunner: QueryRunner): Promise<void> {
    method down (line 21) | public async down(queryRunner: QueryRunner): Promise<void> {

FILE: module-12-deploy-nestjs/deployment-starter/db/migrations/1685010456982-removed-phone.ts
  class RemovedPhone1685010456982 (line 3) | class RemovedPhone1685010456982 implements MigrationInterface {
    method up (line 6) | public async up(queryRunner: QueryRunner): Promise<void> {
    method down (line 10) | public async down(queryRunner: QueryRunner): Promise<void> {

FILE: module-12-deploy-nestjs/deployment-starter/db/seeds/seed-data.ts
  function seedUser (line 18) | async function seedUser() {
  function seedArtist (line 33) | async function seedArtist() {
  function seedPlayLists (line 50) | async function seedPlayLists() {

FILE: module-12-deploy-nestjs/deployment-starter/env.validation.ts
  type Environment (line 4) | enum Environment {
  class EnvironmentVariables (line 11) | class EnvironmentVariables {
  function validate (line 37) | function validate(config: Record<string, unknown>) {

FILE: module-12-deploy-nestjs/deployment-starter/src/app.controller.ts
  class AppController (line 7) | class AppController {
    method constructor (line 8) | constructor(private readonly appService: AppService) {}
    method getHello (line 11) | getHello(): string {
    method getProfile (line 18) | getProfile(

FILE: module-12-deploy-nestjs/deployment-starter/src/app.module.ts
  class AppModule (line 38) | class AppModule implements NestModule {
    method constructor (line 39) | constructor(/*private dataSource: DataSource*/) {
    method configure (line 42) | configure(consumer: MiddlewareConsumer) {

FILE: module-12-deploy-nestjs/deployment-starter/src/app.service.ts
  class AppService (line 5) | class AppService {
    method getHello (line 6) | getHello(): string {

FILE: module-12-deploy-nestjs/de
Condensed preview — 2870 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,500K chars).
[
  {
    "path": "module-02-Creating-REST-APIS/01-Lesson-01/.eslintrc.js",
    "chars": 663,
    "preview": "module.exports = {\n  parser: '@typescript-eslint/parser',\n  parserOptions: {\n    project: 'tsconfig.json',\n    tsconfigR"
  },
  {
    "path": "module-02-Creating-REST-APIS/01-Lesson-01/.gitignore",
    "chars": 391,
    "preview": "# compiled output\n/dist\n/node_modules\n\n# Logs\nlogs\n*.log\nnpm-debug.log*\npnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n"
  },
  {
    "path": "module-02-Creating-REST-APIS/01-Lesson-01/.prettierrc",
    "chars": 51,
    "preview": "{\n  \"singleQuote\": true,\n  \"trailingComma\": \"all\"\n}"
  },
  {
    "path": "module-02-Creating-REST-APIS/01-Lesson-01/README.md",
    "chars": 3339,
    "preview": "<p align=\"center\">\n  <a href=\"http://nestjs.com/\" target=\"blank\"><img src=\"https://nestjs.com/img/logo-small.svg\" width="
  },
  {
    "path": "module-02-Creating-REST-APIS/01-Lesson-01/nest-cli.json",
    "chars": 171,
    "preview": "{\n  \"$schema\": \"https://json.schemastore.org/nest-cli\",\n  \"collection\": \"@nestjs/schematics\",\n  \"sourceRoot\": \"src\",\n  \""
  },
  {
    "path": "module-02-Creating-REST-APIS/01-Lesson-01/package.json",
    "chars": 1949,
    "preview": "{\n  \"name\": \"n-fundamentals-pro\",\n  \"version\": \"0.0.1\",\n  \"description\": \"\",\n  \"author\": \"\",\n  \"private\": true,\n  \"licen"
  },
  {
    "path": "module-02-Creating-REST-APIS/01-Lesson-01/src/app.controller.spec.ts",
    "chars": 617,
    "preview": "import { Test, TestingModule } from '@nestjs/testing';\nimport { AppController } from './app.controller';\nimport { AppSer"
  },
  {
    "path": "module-02-Creating-REST-APIS/01-Lesson-01/src/app.controller.ts",
    "chars": 274,
    "preview": "import { Controller, Get } from '@nestjs/common';\nimport { AppService } from './app.service';\n\n@Controller()\nexport clas"
  },
  {
    "path": "module-02-Creating-REST-APIS/01-Lesson-01/src/app.module.ts",
    "chars": 312,
    "preview": "import { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\nimport { AppService } from '."
  },
  {
    "path": "module-02-Creating-REST-APIS/01-Lesson-01/src/app.service.ts",
    "chars": 170,
    "preview": "import { Injectable } from '@nestjs/common';\n\n@Injectable()\nexport class AppService {\n  getHello(): string {\n    return "
  },
  {
    "path": "module-02-Creating-REST-APIS/01-Lesson-01/src/main.ts",
    "chars": 208,
    "preview": "import { NestFactory } from '@nestjs/core';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  co"
  },
  {
    "path": "module-02-Creating-REST-APIS/01-Lesson-01/src/songs/songs.module.ts",
    "chars": 82,
    "preview": "import { Module } from '@nestjs/common';\n\n@Module({})\nexport class SongsModule {}\n"
  },
  {
    "path": "module-02-Creating-REST-APIS/01-Lesson-01/test/app.e2e-spec.ts",
    "chars": 630,
    "preview": "import { Test, TestingModule } from '@nestjs/testing';\nimport { INestApplication } from '@nestjs/common';\nimport * as re"
  },
  {
    "path": "module-02-Creating-REST-APIS/01-Lesson-01/test/jest-e2e.json",
    "chars": 183,
    "preview": "{\n  \"moduleFileExtensions\": [\"js\", \"json\", \"ts\"],\n  \"rootDir\": \".\",\n  \"testEnvironment\": \"node\",\n  \"testRegex\": \".e2e-sp"
  },
  {
    "path": "module-02-Creating-REST-APIS/01-Lesson-01/tsconfig.build.json",
    "chars": 97,
    "preview": "{\n  \"extends\": \"./tsconfig.json\",\n  \"exclude\": [\"node_modules\", \"test\", \"dist\", \"**/*spec.ts\"]\n}\n"
  },
  {
    "path": "module-02-Creating-REST-APIS/01-Lesson-01/tsconfig.json",
    "chars": 546,
    "preview": "{\n  \"compilerOptions\": {\n    \"module\": \"commonjs\",\n    \"declaration\": true,\n    \"removeComments\": true,\n    \"emitDecorat"
  },
  {
    "path": "module-02-Creating-REST-APIS/02-Lesson-02/.eslintrc.js",
    "chars": 663,
    "preview": "module.exports = {\n  parser: '@typescript-eslint/parser',\n  parserOptions: {\n    project: 'tsconfig.json',\n    tsconfigR"
  },
  {
    "path": "module-02-Creating-REST-APIS/02-Lesson-02/.gitignore",
    "chars": 391,
    "preview": "# compiled output\n/dist\n/node_modules\n\n# Logs\nlogs\n*.log\nnpm-debug.log*\npnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n"
  },
  {
    "path": "module-02-Creating-REST-APIS/02-Lesson-02/.prettierrc",
    "chars": 51,
    "preview": "{\n  \"singleQuote\": true,\n  \"trailingComma\": \"all\"\n}"
  },
  {
    "path": "module-02-Creating-REST-APIS/02-Lesson-02/README.md",
    "chars": 3339,
    "preview": "<p align=\"center\">\n  <a href=\"http://nestjs.com/\" target=\"blank\"><img src=\"https://nestjs.com/img/logo-small.svg\" width="
  },
  {
    "path": "module-02-Creating-REST-APIS/02-Lesson-02/nest-cli.json",
    "chars": 171,
    "preview": "{\n  \"$schema\": \"https://json.schemastore.org/nest-cli\",\n  \"collection\": \"@nestjs/schematics\",\n  \"sourceRoot\": \"src\",\n  \""
  },
  {
    "path": "module-02-Creating-REST-APIS/02-Lesson-02/package.json",
    "chars": 1949,
    "preview": "{\n  \"name\": \"n-fundamentals-pro\",\n  \"version\": \"0.0.1\",\n  \"description\": \"\",\n  \"author\": \"\",\n  \"private\": true,\n  \"licen"
  },
  {
    "path": "module-02-Creating-REST-APIS/02-Lesson-02/rest-client.http",
    "chars": 332,
    "preview": "GET http://localhost:3000\n\n### SEND FETCH SONGS REQUEST\nGET http://localhost:3000/songs\n\n### Find SONGS REQUEST\nGET http"
  },
  {
    "path": "module-02-Creating-REST-APIS/02-Lesson-02/src/app.controller.spec.ts",
    "chars": 617,
    "preview": "import { Test, TestingModule } from '@nestjs/testing';\nimport { AppController } from './app.controller';\nimport { AppSer"
  },
  {
    "path": "module-02-Creating-REST-APIS/02-Lesson-02/src/app.controller.ts",
    "chars": 274,
    "preview": "import { Controller, Get } from '@nestjs/common';\nimport { AppService } from './app.service';\n\n@Controller()\nexport clas"
  },
  {
    "path": "module-02-Creating-REST-APIS/02-Lesson-02/src/app.module.ts",
    "chars": 312,
    "preview": "import { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\nimport { AppService } from '."
  },
  {
    "path": "module-02-Creating-REST-APIS/02-Lesson-02/src/app.service.ts",
    "chars": 170,
    "preview": "import { Injectable } from '@nestjs/common';\n\n@Injectable()\nexport class AppService {\n  getHello(): string {\n    return "
  },
  {
    "path": "module-02-Creating-REST-APIS/02-Lesson-02/src/main.ts",
    "chars": 208,
    "preview": "import { NestFactory } from '@nestjs/core';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  co"
  },
  {
    "path": "module-02-Creating-REST-APIS/02-Lesson-02/src/songs/songs.controller.spec.ts",
    "chars": 485,
    "preview": "import { Test, TestingModule } from '@nestjs/testing';\nimport { SongsController } from './songs.controller';\n\ndescribe('"
  },
  {
    "path": "module-02-Creating-REST-APIS/02-Lesson-02/src/songs/songs.controller.ts",
    "chars": 490,
    "preview": "import { Controller, Get, Put, Delete, Post } from '@nestjs/common';\n\n@Controller('songs')\nexport class SongsController "
  },
  {
    "path": "module-02-Creating-REST-APIS/02-Lesson-02/src/songs/songs.module.ts",
    "chars": 170,
    "preview": "import { Module } from '@nestjs/common';\nimport { SongsController } from './songs.controller';\n\n@Module({\n  controllers:"
  },
  {
    "path": "module-02-Creating-REST-APIS/02-Lesson-02/test/app.e2e-spec.ts",
    "chars": 630,
    "preview": "import { Test, TestingModule } from '@nestjs/testing';\nimport { INestApplication } from '@nestjs/common';\nimport * as re"
  },
  {
    "path": "module-02-Creating-REST-APIS/02-Lesson-02/test/jest-e2e.json",
    "chars": 183,
    "preview": "{\n  \"moduleFileExtensions\": [\"js\", \"json\", \"ts\"],\n  \"rootDir\": \".\",\n  \"testEnvironment\": \"node\",\n  \"testRegex\": \".e2e-sp"
  },
  {
    "path": "module-02-Creating-REST-APIS/02-Lesson-02/tsconfig.build.json",
    "chars": 97,
    "preview": "{\n  \"extends\": \"./tsconfig.json\",\n  \"exclude\": [\"node_modules\", \"test\", \"dist\", \"**/*spec.ts\"]\n}\n"
  },
  {
    "path": "module-02-Creating-REST-APIS/02-Lesson-02/tsconfig.json",
    "chars": 546,
    "preview": "{\n  \"compilerOptions\": {\n    \"module\": \"commonjs\",\n    \"declaration\": true,\n    \"removeComments\": true,\n    \"emitDecorat"
  },
  {
    "path": "module-02-Creating-REST-APIS/03-Lesson-03/.eslintrc.js",
    "chars": 663,
    "preview": "module.exports = {\n  parser: '@typescript-eslint/parser',\n  parserOptions: {\n    project: 'tsconfig.json',\n    tsconfigR"
  },
  {
    "path": "module-02-Creating-REST-APIS/03-Lesson-03/.gitignore",
    "chars": 391,
    "preview": "# compiled output\n/dist\n/node_modules\n\n# Logs\nlogs\n*.log\nnpm-debug.log*\npnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n"
  },
  {
    "path": "module-02-Creating-REST-APIS/03-Lesson-03/.prettierrc",
    "chars": 51,
    "preview": "{\n  \"singleQuote\": true,\n  \"trailingComma\": \"all\"\n}"
  },
  {
    "path": "module-02-Creating-REST-APIS/03-Lesson-03/README.md",
    "chars": 3339,
    "preview": "<p align=\"center\">\n  <a href=\"http://nestjs.com/\" target=\"blank\"><img src=\"https://nestjs.com/img/logo-small.svg\" width="
  },
  {
    "path": "module-02-Creating-REST-APIS/03-Lesson-03/nest-cli.json",
    "chars": 171,
    "preview": "{\n  \"$schema\": \"https://json.schemastore.org/nest-cli\",\n  \"collection\": \"@nestjs/schematics\",\n  \"sourceRoot\": \"src\",\n  \""
  },
  {
    "path": "module-02-Creating-REST-APIS/03-Lesson-03/package.json",
    "chars": 1949,
    "preview": "{\n  \"name\": \"n-fundamentals-pro\",\n  \"version\": \"0.0.1\",\n  \"description\": \"\",\n  \"author\": \"\",\n  \"private\": true,\n  \"licen"
  },
  {
    "path": "module-02-Creating-REST-APIS/03-Lesson-03/rest-client.http",
    "chars": 332,
    "preview": "GET http://localhost:3000\n\n### SEND FETCH SONGS REQUEST\nGET http://localhost:3000/songs\n\n### Find SONGS REQUEST\nGET http"
  },
  {
    "path": "module-02-Creating-REST-APIS/03-Lesson-03/src/app.controller.spec.ts",
    "chars": 617,
    "preview": "import { Test, TestingModule } from '@nestjs/testing';\nimport { AppController } from './app.controller';\nimport { AppSer"
  },
  {
    "path": "module-02-Creating-REST-APIS/03-Lesson-03/src/app.controller.ts",
    "chars": 274,
    "preview": "import { Controller, Get } from '@nestjs/common';\nimport { AppService } from './app.service';\n\n@Controller()\nexport clas"
  },
  {
    "path": "module-02-Creating-REST-APIS/03-Lesson-03/src/app.module.ts",
    "chars": 312,
    "preview": "import { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\nimport { AppService } from '."
  },
  {
    "path": "module-02-Creating-REST-APIS/03-Lesson-03/src/app.service.ts",
    "chars": 170,
    "preview": "import { Injectable } from '@nestjs/common';\n\n@Injectable()\nexport class AppService {\n  getHello(): string {\n    return "
  },
  {
    "path": "module-02-Creating-REST-APIS/03-Lesson-03/src/main.ts",
    "chars": 208,
    "preview": "import { NestFactory } from '@nestjs/core';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  co"
  },
  {
    "path": "module-02-Creating-REST-APIS/03-Lesson-03/src/songs/songs.controller.spec.ts",
    "chars": 485,
    "preview": "import { Test, TestingModule } from '@nestjs/testing';\nimport { SongsController } from './songs.controller';\n\ndescribe('"
  },
  {
    "path": "module-02-Creating-REST-APIS/03-Lesson-03/src/songs/songs.controller.ts",
    "chars": 617,
    "preview": "import { Controller, Get, Put, Delete, Post } from '@nestjs/common';\nimport { SongsService } from './songs.service';\n\n@C"
  },
  {
    "path": "module-02-Creating-REST-APIS/03-Lesson-03/src/songs/songs.module.ts",
    "chars": 247,
    "preview": "import { Module } from '@nestjs/common';\nimport { SongsController } from './songs.controller';\nimport { SongsService } f"
  },
  {
    "path": "module-02-Creating-REST-APIS/03-Lesson-03/src/songs/songs.service.spec.ts",
    "chars": 453,
    "preview": "import { Test, TestingModule } from '@nestjs/testing';\nimport { SongsService } from './songs.service';\n\ndescribe('SongsS"
  },
  {
    "path": "module-02-Creating-REST-APIS/03-Lesson-03/src/songs/songs.service.ts",
    "chars": 339,
    "preview": "import { Injectable } from '@nestjs/common';\n\n@Injectable()\nexport class SongsService {\n  // local db\n  // local array\n\n"
  },
  {
    "path": "module-02-Creating-REST-APIS/03-Lesson-03/test/app.e2e-spec.ts",
    "chars": 630,
    "preview": "import { Test, TestingModule } from '@nestjs/testing';\nimport { INestApplication } from '@nestjs/common';\nimport * as re"
  },
  {
    "path": "module-02-Creating-REST-APIS/03-Lesson-03/test/jest-e2e.json",
    "chars": 183,
    "preview": "{\n  \"moduleFileExtensions\": [\"js\", \"json\", \"ts\"],\n  \"rootDir\": \".\",\n  \"testEnvironment\": \"node\",\n  \"testRegex\": \".e2e-sp"
  },
  {
    "path": "module-02-Creating-REST-APIS/03-Lesson-03/tsconfig.build.json",
    "chars": 97,
    "preview": "{\n  \"extends\": \"./tsconfig.json\",\n  \"exclude\": [\"node_modules\", \"test\", \"dist\", \"**/*spec.ts\"]\n}\n"
  },
  {
    "path": "module-02-Creating-REST-APIS/03-Lesson-03/tsconfig.json",
    "chars": 546,
    "preview": "{\n  \"compilerOptions\": {\n    \"module\": \"commonjs\",\n    \"declaration\": true,\n    \"removeComments\": true,\n    \"emitDecorat"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-01/.eslintrc.js",
    "chars": 663,
    "preview": "module.exports = {\n  parser: '@typescript-eslint/parser',\n  parserOptions: {\n    project: 'tsconfig.json',\n    tsconfigR"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-01/.gitignore",
    "chars": 391,
    "preview": "# compiled output\n/dist\n/node_modules\n\n# Logs\nlogs\n*.log\nnpm-debug.log*\npnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-01/.prettierrc",
    "chars": 51,
    "preview": "{\n  \"singleQuote\": true,\n  \"trailingComma\": \"all\"\n}"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-01/README.md",
    "chars": 3339,
    "preview": "<p align=\"center\">\n  <a href=\"http://nestjs.com/\" target=\"blank\"><img src=\"https://nestjs.com/img/logo-small.svg\" width="
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-01/nest-cli.json",
    "chars": 171,
    "preview": "{\n  \"$schema\": \"https://json.schemastore.org/nest-cli\",\n  \"collection\": \"@nestjs/schematics\",\n  \"sourceRoot\": \"src\",\n  \""
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-01/package.json",
    "chars": 1949,
    "preview": "{\n  \"name\": \"n-fundamentals-pro\",\n  \"version\": \"0.0.1\",\n  \"description\": \"\",\n  \"author\": \"\",\n  \"private\": true,\n  \"licen"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-01/rest-client.http",
    "chars": 332,
    "preview": "GET http://localhost:3000\n\n### SEND FETCH SONGS REQUEST\nGET http://localhost:3000/songs\n\n### Find SONGS REQUEST\nGET http"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-01/src/app.controller.spec.ts",
    "chars": 617,
    "preview": "import { Test, TestingModule } from '@nestjs/testing';\nimport { AppController } from './app.controller';\nimport { AppSer"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-01/src/app.controller.ts",
    "chars": 274,
    "preview": "import { Controller, Get } from '@nestjs/common';\nimport { AppService } from './app.service';\n\n@Controller()\nexport clas"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-01/src/app.module.ts",
    "chars": 860,
    "preview": "import {\n  MiddlewareConsumer,\n  Module,\n  NestModule,\n  RequestMethod,\n} from '@nestjs/common';\nimport { AppController "
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-01/src/app.service.ts",
    "chars": 170,
    "preview": "import { Injectable } from '@nestjs/common';\n\n@Injectable()\nexport class AppService {\n  getHello(): string {\n    return "
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-01/src/common/middleware/logger.middleware.ts",
    "chars": 258,
    "preview": "import { Injectable, NestMiddleware } from '@nestjs/common';\n\n@Injectable()\nexport class LoggerMiddleware implements Nes"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-01/src/main.ts",
    "chars": 208,
    "preview": "import { NestFactory } from '@nestjs/core';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  co"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-01/src/songs/songs.controller.spec.ts",
    "chars": 485,
    "preview": "import { Test, TestingModule } from '@nestjs/testing';\nimport { SongsController } from './songs.controller';\n\ndescribe('"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-01/src/songs/songs.controller.ts",
    "chars": 617,
    "preview": "import { Controller, Get, Put, Delete, Post } from '@nestjs/common';\nimport { SongsService } from './songs.service';\n\n@C"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-01/src/songs/songs.module.ts",
    "chars": 247,
    "preview": "import { Module } from '@nestjs/common';\nimport { SongsController } from './songs.controller';\nimport { SongsService } f"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-01/src/songs/songs.service.spec.ts",
    "chars": 453,
    "preview": "import { Test, TestingModule } from '@nestjs/testing';\nimport { SongsService } from './songs.service';\n\ndescribe('SongsS"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-01/src/songs/songs.service.ts",
    "chars": 339,
    "preview": "import { Injectable } from '@nestjs/common';\n\n@Injectable()\nexport class SongsService {\n  // local db\n  // local array\n\n"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-01/test/app.e2e-spec.ts",
    "chars": 630,
    "preview": "import { Test, TestingModule } from '@nestjs/testing';\nimport { INestApplication } from '@nestjs/common';\nimport * as re"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-01/test/jest-e2e.json",
    "chars": 183,
    "preview": "{\n  \"moduleFileExtensions\": [\"js\", \"json\", \"ts\"],\n  \"rootDir\": \".\",\n  \"testEnvironment\": \"node\",\n  \"testRegex\": \".e2e-sp"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-01/tsconfig.build.json",
    "chars": 97,
    "preview": "{\n  \"extends\": \"./tsconfig.json\",\n  \"exclude\": [\"node_modules\", \"test\", \"dist\", \"**/*spec.ts\"]\n}\n"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-01/tsconfig.json",
    "chars": 546,
    "preview": "{\n  \"compilerOptions\": {\n    \"module\": \"commonjs\",\n    \"declaration\": true,\n    \"removeComments\": true,\n    \"emitDecorat"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-02/.eslintrc.js",
    "chars": 663,
    "preview": "module.exports = {\n  parser: '@typescript-eslint/parser',\n  parserOptions: {\n    project: 'tsconfig.json',\n    tsconfigR"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-02/.gitignore",
    "chars": 391,
    "preview": "# compiled output\n/dist\n/node_modules\n\n# Logs\nlogs\n*.log\nnpm-debug.log*\npnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-02/.prettierrc",
    "chars": 51,
    "preview": "{\n  \"singleQuote\": true,\n  \"trailingComma\": \"all\"\n}"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-02/README.md",
    "chars": 3339,
    "preview": "<p align=\"center\">\n  <a href=\"http://nestjs.com/\" target=\"blank\"><img src=\"https://nestjs.com/img/logo-small.svg\" width="
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-02/nest-cli.json",
    "chars": 171,
    "preview": "{\n  \"$schema\": \"https://json.schemastore.org/nest-cli\",\n  \"collection\": \"@nestjs/schematics\",\n  \"sourceRoot\": \"src\",\n  \""
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-02/package.json",
    "chars": 1949,
    "preview": "{\n  \"name\": \"n-fundamentals-pro\",\n  \"version\": \"0.0.1\",\n  \"description\": \"\",\n  \"author\": \"\",\n  \"private\": true,\n  \"licen"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-02/rest-client.http",
    "chars": 332,
    "preview": "GET http://localhost:3000\n\n### SEND FETCH SONGS REQUEST\nGET http://localhost:3000/songs\n\n### Find SONGS REQUEST\nGET http"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-02/src/app.controller.spec.ts",
    "chars": 617,
    "preview": "import { Test, TestingModule } from '@nestjs/testing';\nimport { AppController } from './app.controller';\nimport { AppSer"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-02/src/app.controller.ts",
    "chars": 274,
    "preview": "import { Controller, Get } from '@nestjs/common';\nimport { AppService } from './app.service';\n\n@Controller()\nexport clas"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-02/src/app.module.ts",
    "chars": 860,
    "preview": "import {\n  MiddlewareConsumer,\n  Module,\n  NestModule,\n  RequestMethod,\n} from '@nestjs/common';\nimport { AppController "
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-02/src/app.service.ts",
    "chars": 170,
    "preview": "import { Injectable } from '@nestjs/common';\n\n@Injectable()\nexport class AppService {\n  getHello(): string {\n    return "
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-02/src/common/middleware/logger.middleware.ts",
    "chars": 258,
    "preview": "import { Injectable, NestMiddleware } from '@nestjs/common';\n\n@Injectable()\nexport class LoggerMiddleware implements Nes"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-02/src/main.ts",
    "chars": 208,
    "preview": "import { NestFactory } from '@nestjs/core';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  co"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-02/src/songs/songs.controller.spec.ts",
    "chars": 485,
    "preview": "import { Test, TestingModule } from '@nestjs/testing';\nimport { SongsController } from './songs.controller';\n\ndescribe('"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-02/src/songs/songs.controller.ts",
    "chars": 842,
    "preview": "import {\n  Controller,\n  Get,\n  Put,\n  Delete,\n  Post,\n  HttpException,\n  HttpStatus,\n} from '@nestjs/common';\nimport { "
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-02/src/songs/songs.module.ts",
    "chars": 247,
    "preview": "import { Module } from '@nestjs/common';\nimport { SongsController } from './songs.controller';\nimport { SongsService } f"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-02/src/songs/songs.service.spec.ts",
    "chars": 453,
    "preview": "import { Test, TestingModule } from '@nestjs/testing';\nimport { SongsService } from './songs.service';\n\ndescribe('SongsS"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-02/src/songs/songs.service.ts",
    "chars": 448,
    "preview": "import { Injectable } from '@nestjs/common';\n\n@Injectable()\nexport class SongsService {\n  // local db\n  // local array\n\n"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-02/test/app.e2e-spec.ts",
    "chars": 630,
    "preview": "import { Test, TestingModule } from '@nestjs/testing';\nimport { INestApplication } from '@nestjs/common';\nimport * as re"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-02/test/jest-e2e.json",
    "chars": 183,
    "preview": "{\n  \"moduleFileExtensions\": [\"js\", \"json\", \"ts\"],\n  \"rootDir\": \".\",\n  \"testEnvironment\": \"node\",\n  \"testRegex\": \".e2e-sp"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-02/tsconfig.build.json",
    "chars": 97,
    "preview": "{\n  \"extends\": \"./tsconfig.json\",\n  \"exclude\": [\"node_modules\", \"test\", \"dist\", \"**/*spec.ts\"]\n}\n"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-02/tsconfig.json",
    "chars": 546,
    "preview": "{\n  \"compilerOptions\": {\n    \"module\": \"commonjs\",\n    \"declaration\": true,\n    \"removeComments\": true,\n    \"emitDecorat"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-03/.eslintrc.js",
    "chars": 663,
    "preview": "module.exports = {\n  parser: '@typescript-eslint/parser',\n  parserOptions: {\n    project: 'tsconfig.json',\n    tsconfigR"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-03/.gitignore",
    "chars": 391,
    "preview": "# compiled output\n/dist\n/node_modules\n\n# Logs\nlogs\n*.log\nnpm-debug.log*\npnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-03/.prettierrc",
    "chars": 51,
    "preview": "{\n  \"singleQuote\": true,\n  \"trailingComma\": \"all\"\n}"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-03/README.md",
    "chars": 3339,
    "preview": "<p align=\"center\">\n  <a href=\"http://nestjs.com/\" target=\"blank\"><img src=\"https://nestjs.com/img/logo-small.svg\" width="
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-03/nest-cli.json",
    "chars": 171,
    "preview": "{\n  \"$schema\": \"https://json.schemastore.org/nest-cli\",\n  \"collection\": \"@nestjs/schematics\",\n  \"sourceRoot\": \"src\",\n  \""
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-03/package.json",
    "chars": 1949,
    "preview": "{\n  \"name\": \"n-fundamentals-pro\",\n  \"version\": \"0.0.1\",\n  \"description\": \"\",\n  \"author\": \"\",\n  \"private\": true,\n  \"licen"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-03/rest-client.http",
    "chars": 332,
    "preview": "GET http://localhost:3000\n\n### SEND FETCH SONGS REQUEST\nGET http://localhost:3000/songs\n\n### Find SONGS REQUEST\nGET http"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-03/src/app.controller.spec.ts",
    "chars": 617,
    "preview": "import { Test, TestingModule } from '@nestjs/testing';\nimport { AppController } from './app.controller';\nimport { AppSer"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-03/src/app.controller.ts",
    "chars": 274,
    "preview": "import { Controller, Get } from '@nestjs/common';\nimport { AppService } from './app.service';\n\n@Controller()\nexport clas"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-03/src/app.module.ts",
    "chars": 860,
    "preview": "import {\n  MiddlewareConsumer,\n  Module,\n  NestModule,\n  RequestMethod,\n} from '@nestjs/common';\nimport { AppController "
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-03/src/app.service.ts",
    "chars": 170,
    "preview": "import { Injectable } from '@nestjs/common';\n\n@Injectable()\nexport class AppService {\n  getHello(): string {\n    return "
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-03/src/common/middleware/logger.middleware.ts",
    "chars": 258,
    "preview": "import { Injectable, NestMiddleware } from '@nestjs/common';\n\n@Injectable()\nexport class LoggerMiddleware implements Nes"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-03/src/main.ts",
    "chars": 208,
    "preview": "import { NestFactory } from '@nestjs/core';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  co"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-03/src/songs/songs.controller.spec.ts",
    "chars": 485,
    "preview": "import { Test, TestingModule } from '@nestjs/testing';\nimport { SongsController } from './songs.controller';\n\ndescribe('"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-03/src/songs/songs.controller.ts",
    "chars": 1005,
    "preview": "import {\n  Controller,\n  Get,\n  Put,\n  Delete,\n  Post,\n  HttpException,\n  HttpStatus,\n  Param,\n  ParseIntPipe,\n} from '@"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-03/src/songs/songs.module.ts",
    "chars": 247,
    "preview": "import { Module } from '@nestjs/common';\nimport { SongsController } from './songs.controller';\nimport { SongsService } f"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-03/src/songs/songs.service.spec.ts",
    "chars": 453,
    "preview": "import { Test, TestingModule } from '@nestjs/testing';\nimport { SongsService } from './songs.service';\n\ndescribe('SongsS"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-03/src/songs/songs.service.ts",
    "chars": 448,
    "preview": "import { Injectable } from '@nestjs/common';\n\n@Injectable()\nexport class SongsService {\n  // local db\n  // local array\n\n"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-03/test/app.e2e-spec.ts",
    "chars": 630,
    "preview": "import { Test, TestingModule } from '@nestjs/testing';\nimport { INestApplication } from '@nestjs/common';\nimport * as re"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-03/test/jest-e2e.json",
    "chars": 183,
    "preview": "{\n  \"moduleFileExtensions\": [\"js\", \"json\", \"ts\"],\n  \"rootDir\": \".\",\n  \"testEnvironment\": \"node\",\n  \"testRegex\": \".e2e-sp"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-03/tsconfig.build.json",
    "chars": 97,
    "preview": "{\n  \"extends\": \"./tsconfig.json\",\n  \"exclude\": [\"node_modules\", \"test\", \"dist\", \"**/*spec.ts\"]\n}\n"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-03/tsconfig.json",
    "chars": 546,
    "preview": "{\n  \"compilerOptions\": {\n    \"module\": \"commonjs\",\n    \"declaration\": true,\n    \"removeComments\": true,\n    \"emitDecorat"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-04/.eslintrc.js",
    "chars": 663,
    "preview": "module.exports = {\n  parser: '@typescript-eslint/parser',\n  parserOptions: {\n    project: 'tsconfig.json',\n    tsconfigR"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-04/.gitignore",
    "chars": 391,
    "preview": "# compiled output\n/dist\n/node_modules\n\n# Logs\nlogs\n*.log\nnpm-debug.log*\npnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-04/.prettierrc",
    "chars": 51,
    "preview": "{\n  \"singleQuote\": true,\n  \"trailingComma\": \"all\"\n}"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-04/README.md",
    "chars": 3339,
    "preview": "<p align=\"center\">\n  <a href=\"http://nestjs.com/\" target=\"blank\"><img src=\"https://nestjs.com/img/logo-small.svg\" width="
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-04/nest-cli.json",
    "chars": 171,
    "preview": "{\n  \"$schema\": \"https://json.schemastore.org/nest-cli\",\n  \"collection\": \"@nestjs/schematics\",\n  \"sourceRoot\": \"src\",\n  \""
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-04/package.json",
    "chars": 2018,
    "preview": "{\n  \"name\": \"n-fundamentals-pro\",\n  \"version\": \"0.0.1\",\n  \"description\": \"\",\n  \"author\": \"\",\n  \"private\": true,\n  \"licen"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-04/rest-client.http",
    "chars": 476,
    "preview": "GET http://localhost:3000\n\n### SEND FETCH SONGS REQUEST\nGET http://localhost:3000/songs\n\n### Find SONGS REQUEST\nGET http"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-04/src/app.controller.spec.ts",
    "chars": 617,
    "preview": "import { Test, TestingModule } from '@nestjs/testing';\nimport { AppController } from './app.controller';\nimport { AppSer"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-04/src/app.controller.ts",
    "chars": 274,
    "preview": "import { Controller, Get } from '@nestjs/common';\nimport { AppService } from './app.service';\n\n@Controller()\nexport clas"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-04/src/app.module.ts",
    "chars": 860,
    "preview": "import {\n  MiddlewareConsumer,\n  Module,\n  NestModule,\n  RequestMethod,\n} from '@nestjs/common';\nimport { AppController "
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-04/src/app.service.ts",
    "chars": 170,
    "preview": "import { Injectable } from '@nestjs/common';\n\n@Injectable()\nexport class AppService {\n  getHello(): string {\n    return "
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-04/src/common/middleware/logger.middleware.ts",
    "chars": 258,
    "preview": "import { Injectable, NestMiddleware } from '@nestjs/common';\n\n@Injectable()\nexport class LoggerMiddleware implements Nes"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-04/src/main.ts",
    "chars": 301,
    "preview": "import { NestFactory } from '@nestjs/core';\nimport { AppModule } from './app.module';\nimport { ValidationPipe } from '@n"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-04/src/songs/dto/create-song-dto.ts",
    "chars": 398,
    "preview": "import {\n  IsArray,\n  IsDateString,\n  IsMilitaryTime,\n  IsNotEmpty,\n  IsString,\n} from 'class-validator';\n\nexport class "
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-04/src/songs/songs.controller.spec.ts",
    "chars": 485,
    "preview": "import { Test, TestingModule } from '@nestjs/testing';\nimport { SongsController } from './songs.controller';\n\ndescribe('"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-04/src/songs/songs.controller.ts",
    "chars": 1091,
    "preview": "import {\n  Controller,\n  Get,\n  Put,\n  Delete,\n  Post,\n  HttpException,\n  HttpStatus,\n  Param,\n  ParseIntPipe,\n  Body,\n}"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-04/src/songs/songs.module.ts",
    "chars": 247,
    "preview": "import { Module } from '@nestjs/common';\nimport { SongsController } from './songs.controller';\nimport { SongsService } f"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-04/src/songs/songs.service.spec.ts",
    "chars": 453,
    "preview": "import { Test, TestingModule } from '@nestjs/testing';\nimport { SongsService } from './songs.service';\n\ndescribe('SongsS"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-04/src/songs/songs.service.ts",
    "chars": 448,
    "preview": "import { Injectable } from '@nestjs/common';\n\n@Injectable()\nexport class SongsService {\n  // local db\n  // local array\n\n"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-04/test/app.e2e-spec.ts",
    "chars": 630,
    "preview": "import { Test, TestingModule } from '@nestjs/testing';\nimport { INestApplication } from '@nestjs/common';\nimport * as re"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-04/test/jest-e2e.json",
    "chars": 183,
    "preview": "{\n  \"moduleFileExtensions\": [\"js\", \"json\", \"ts\"],\n  \"rootDir\": \".\",\n  \"testEnvironment\": \"node\",\n  \"testRegex\": \".e2e-sp"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-04/tsconfig.build.json",
    "chars": 97,
    "preview": "{\n  \"extends\": \"./tsconfig.json\",\n  \"exclude\": [\"node_modules\", \"test\", \"dist\", \"**/*spec.ts\"]\n}\n"
  },
  {
    "path": "module-03-middlewares-exception-filters-pipes/lesson-04/tsconfig.json",
    "chars": 546,
    "preview": "{\n  \"compilerOptions\": {\n    \"module\": \"commonjs\",\n    \"declaration\": true,\n    \"removeComments\": true,\n    \"emitDecorat"
  },
  {
    "path": "module-04-dependency-injection/lesson-01/.eslintrc.js",
    "chars": 663,
    "preview": "module.exports = {\n  parser: '@typescript-eslint/parser',\n  parserOptions: {\n    project: 'tsconfig.json',\n    tsconfigR"
  },
  {
    "path": "module-04-dependency-injection/lesson-01/.gitignore",
    "chars": 391,
    "preview": "# compiled output\n/dist\n/node_modules\n\n# Logs\nlogs\n*.log\nnpm-debug.log*\npnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n"
  },
  {
    "path": "module-04-dependency-injection/lesson-01/.prettierrc",
    "chars": 51,
    "preview": "{\n  \"singleQuote\": true,\n  \"trailingComma\": \"all\"\n}"
  },
  {
    "path": "module-04-dependency-injection/lesson-01/README.md",
    "chars": 3339,
    "preview": "<p align=\"center\">\n  <a href=\"http://nestjs.com/\" target=\"blank\"><img src=\"https://nestjs.com/img/logo-small.svg\" width="
  },
  {
    "path": "module-04-dependency-injection/lesson-01/nest-cli.json",
    "chars": 171,
    "preview": "{\n  \"$schema\": \"https://json.schemastore.org/nest-cli\",\n  \"collection\": \"@nestjs/schematics\",\n  \"sourceRoot\": \"src\",\n  \""
  },
  {
    "path": "module-04-dependency-injection/lesson-01/package.json",
    "chars": 2018,
    "preview": "{\n  \"name\": \"n-fundamentals-pro\",\n  \"version\": \"0.0.1\",\n  \"description\": \"\",\n  \"author\": \"\",\n  \"private\": true,\n  \"licen"
  },
  {
    "path": "module-04-dependency-injection/lesson-01/rest-client.http",
    "chars": 501,
    "preview": "GET http://localhost:3000\n\n### SEND FETCH SONGS REQUEST\nGET http://localhost:3000/songs\n\n### Find SONGS REQUEST\nGET http"
  },
  {
    "path": "module-04-dependency-injection/lesson-01/src/app.controller.spec.ts",
    "chars": 617,
    "preview": "import { Test, TestingModule } from '@nestjs/testing';\nimport { AppController } from './app.controller';\nimport { AppSer"
  },
  {
    "path": "module-04-dependency-injection/lesson-01/src/app.controller.ts",
    "chars": 274,
    "preview": "import { Controller, Get } from '@nestjs/common';\nimport { AppService } from './app.service';\n\n@Controller()\nexport clas"
  },
  {
    "path": "module-04-dependency-injection/lesson-01/src/app.module.ts",
    "chars": 1218,
    "preview": "import { MiddlewareConsumer, Module, NestModule } from '@nestjs/common';\nimport { AppController } from './app.controller"
  },
  {
    "path": "module-04-dependency-injection/lesson-01/src/app.service.ts",
    "chars": 456,
    "preview": "import { Inject, Injectable } from '@nestjs/common';\nimport { DevConfigService } from './common/providers/DevConfigServi"
  },
  {
    "path": "module-04-dependency-injection/lesson-01/src/common/constatnts/connection.ts",
    "chars": 209,
    "preview": "export const connection: Connection = {\n  CONNECTION_STRING: 'MYSQL://12324/sad',\n  DB: 'MYSQL',\n  DBNAME: 'TEST',\n};\nex"
  },
  {
    "path": "module-04-dependency-injection/lesson-01/src/common/middleware/logger.middleware.ts",
    "chars": 258,
    "preview": "import { Injectable, NestMiddleware } from '@nestjs/common';\n\n@Injectable()\nexport class LoggerMiddleware implements Nes"
  },
  {
    "path": "module-04-dependency-injection/lesson-01/src/common/providers/DevConfigService.ts",
    "chars": 162,
    "preview": "import { Injectable } from '@nestjs/common';\n\n@Injectable()\nexport class DevConfigService {\n  DBHOST = 'localhost';\n  ge"
  },
  {
    "path": "module-04-dependency-injection/lesson-01/src/main.ts",
    "chars": 301,
    "preview": "import { NestFactory } from '@nestjs/core';\nimport { AppModule } from './app.module';\nimport { ValidationPipe } from '@n"
  },
  {
    "path": "module-04-dependency-injection/lesson-01/src/songs/dto/create-song-dto.ts",
    "chars": 394,
    "preview": "import {\n  IsArray,\n  IsDateString,\n  IsMilitaryTime,\n  IsNotEmpty,\n  IsString,\n} from 'class-validator';\n\nexport class "
  },
  {
    "path": "module-04-dependency-injection/lesson-01/src/songs/songs.controller.spec.ts",
    "chars": 485,
    "preview": "import { Test, TestingModule } from '@nestjs/testing';\nimport { SongsController } from './songs.controller';\n\ndescribe('"
  },
  {
    "path": "module-04-dependency-injection/lesson-01/src/songs/songs.controller.ts",
    "chars": 1334,
    "preview": "import {\n  Controller,\n  Get,\n  Put,\n  Delete,\n  Post,\n  HttpException,\n  HttpStatus,\n  Param,\n  ParseIntPipe,\n  Body,\n "
  },
  {
    "path": "module-04-dependency-injection/lesson-01/src/songs/songs.module.ts",
    "chars": 681,
    "preview": "import { Module } from '@nestjs/common';\nimport { SongsController } from './songs.controller';\nimport { SongsService } f"
  },
  {
    "path": "module-04-dependency-injection/lesson-01/src/songs/songs.service.spec.ts",
    "chars": 453,
    "preview": "import { Test, TestingModule } from '@nestjs/testing';\nimport { SongsService } from './songs.service';\n\ndescribe('SongsS"
  },
  {
    "path": "module-04-dependency-injection/lesson-01/src/songs/songs.service.ts",
    "chars": 451,
    "preview": "import { Injectable } from '@nestjs/common';\n\n@Injectable()\nexport class SongsService {\n  // local db\n  // local array\n\n"
  },
  {
    "path": "module-04-dependency-injection/lesson-01/test/app.e2e-spec.ts",
    "chars": 630,
    "preview": "import { Test, TestingModule } from '@nestjs/testing';\nimport { INestApplication } from '@nestjs/common';\nimport * as re"
  },
  {
    "path": "module-04-dependency-injection/lesson-01/test/jest-e2e.json",
    "chars": 183,
    "preview": "{\n  \"moduleFileExtensions\": [\"js\", \"json\", \"ts\"],\n  \"rootDir\": \".\",\n  \"testEnvironment\": \"node\",\n  \"testRegex\": \".e2e-sp"
  },
  {
    "path": "module-04-dependency-injection/lesson-01/tsconfig.build.json",
    "chars": 97,
    "preview": "{\n  \"extends\": \"./tsconfig.json\",\n  \"exclude\": [\"node_modules\", \"test\", \"dist\", \"**/*spec.ts\"]\n}\n"
  },
  {
    "path": "module-04-dependency-injection/lesson-01/tsconfig.json",
    "chars": 546,
    "preview": "{\n  \"compilerOptions\": {\n    \"module\": \"commonjs\",\n    \"declaration\": true,\n    \"removeComments\": true,\n    \"emitDecorat"
  },
  {
    "path": "module-04-dependency-injection/lesson-02/.eslintrc.js",
    "chars": 663,
    "preview": "module.exports = {\n  parser: '@typescript-eslint/parser',\n  parserOptions: {\n    project: 'tsconfig.json',\n    tsconfigR"
  },
  {
    "path": "module-04-dependency-injection/lesson-02/.gitignore",
    "chars": 391,
    "preview": "# compiled output\n/dist\n/node_modules\n\n# Logs\nlogs\n*.log\nnpm-debug.log*\npnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n"
  },
  {
    "path": "module-04-dependency-injection/lesson-02/.prettierrc",
    "chars": 51,
    "preview": "{\n  \"singleQuote\": true,\n  \"trailingComma\": \"all\"\n}"
  },
  {
    "path": "module-04-dependency-injection/lesson-02/README.md",
    "chars": 3339,
    "preview": "<p align=\"center\">\n  <a href=\"http://nestjs.com/\" target=\"blank\"><img src=\"https://nestjs.com/img/logo-small.svg\" width="
  },
  {
    "path": "module-04-dependency-injection/lesson-02/nest-cli.json",
    "chars": 171,
    "preview": "{\n  \"$schema\": \"https://json.schemastore.org/nest-cli\",\n  \"collection\": \"@nestjs/schematics\",\n  \"sourceRoot\": \"src\",\n  \""
  },
  {
    "path": "module-04-dependency-injection/lesson-02/package.json",
    "chars": 2018,
    "preview": "{\n  \"name\": \"n-fundamentals-pro\",\n  \"version\": \"0.0.1\",\n  \"description\": \"\",\n  \"author\": \"\",\n  \"private\": true,\n  \"licen"
  },
  {
    "path": "module-04-dependency-injection/lesson-02/rest-client.http",
    "chars": 501,
    "preview": "GET http://localhost:3000\n\n### SEND FETCH SONGS REQUEST\nGET http://localhost:3000/songs\n\n### Find SONGS REQUEST\nGET http"
  },
  {
    "path": "module-04-dependency-injection/lesson-02/src/app.controller.spec.ts",
    "chars": 617,
    "preview": "import { Test, TestingModule } from '@nestjs/testing';\nimport { AppController } from './app.controller';\nimport { AppSer"
  },
  {
    "path": "module-04-dependency-injection/lesson-02/src/app.controller.ts",
    "chars": 274,
    "preview": "import { Controller, Get } from '@nestjs/common';\nimport { AppService } from './app.service';\n\n@Controller()\nexport clas"
  },
  {
    "path": "module-04-dependency-injection/lesson-02/src/app.module.ts",
    "chars": 1218,
    "preview": "import { MiddlewareConsumer, Module, NestModule } from '@nestjs/common';\nimport { AppController } from './app.controller"
  },
  {
    "path": "module-04-dependency-injection/lesson-02/src/app.service.ts",
    "chars": 456,
    "preview": "import { Inject, Injectable } from '@nestjs/common';\nimport { DevConfigService } from './common/providers/DevConfigServi"
  },
  {
    "path": "module-04-dependency-injection/lesson-02/src/common/constatnts/connection.ts",
    "chars": 209,
    "preview": "export const connection: Connection = {\n  CONNECTION_STRING: 'MYSQL://12324/sad',\n  DB: 'MYSQL',\n  DBNAME: 'TEST',\n};\nex"
  },
  {
    "path": "module-04-dependency-injection/lesson-02/src/common/middleware/logger.middleware.ts",
    "chars": 258,
    "preview": "import { Injectable, NestMiddleware } from '@nestjs/common';\n\n@Injectable()\nexport class LoggerMiddleware implements Nes"
  },
  {
    "path": "module-04-dependency-injection/lesson-02/src/common/providers/DevConfigService.ts",
    "chars": 162,
    "preview": "import { Injectable } from '@nestjs/common';\n\n@Injectable()\nexport class DevConfigService {\n  DBHOST = 'localhost';\n  ge"
  },
  {
    "path": "module-04-dependency-injection/lesson-02/src/main.ts",
    "chars": 301,
    "preview": "import { NestFactory } from '@nestjs/core';\nimport { AppModule } from './app.module';\nimport { ValidationPipe } from '@n"
  },
  {
    "path": "module-04-dependency-injection/lesson-02/src/songs/dto/create-song-dto.ts",
    "chars": 394,
    "preview": "import {\n  IsArray,\n  IsDateString,\n  IsMilitaryTime,\n  IsNotEmpty,\n  IsString,\n} from 'class-validator';\n\nexport class "
  },
  {
    "path": "module-04-dependency-injection/lesson-02/src/songs/songs.controller.spec.ts",
    "chars": 485,
    "preview": "import { Test, TestingModule } from '@nestjs/testing';\nimport { SongsController } from './songs.controller';\n\ndescribe('"
  },
  {
    "path": "module-04-dependency-injection/lesson-02/src/songs/songs.controller.ts",
    "chars": 1375,
    "preview": "import {\n  Controller,\n  Get,\n  Put,\n  Delete,\n  Post,\n  HttpException,\n  HttpStatus,\n  Param,\n  ParseIntPipe,\n  Body,\n "
  },
  {
    "path": "module-04-dependency-injection/lesson-02/src/songs/songs.module.ts",
    "chars": 681,
    "preview": "import { Module } from '@nestjs/common';\nimport { SongsController } from './songs.controller';\nimport { SongsService } f"
  },
  {
    "path": "module-04-dependency-injection/lesson-02/src/songs/songs.service.spec.ts",
    "chars": 453,
    "preview": "import { Test, TestingModule } from '@nestjs/testing';\nimport { SongsService } from './songs.service';\n\ndescribe('SongsS"
  },
  {
    "path": "module-04-dependency-injection/lesson-02/src/songs/songs.service.ts",
    "chars": 487,
    "preview": "import { Injectable, Scope } from '@nestjs/common';\n\n@Injectable({\n  scope: Scope.TRANSIENT,\n})\nexport class SongsServic"
  },
  {
    "path": "module-04-dependency-injection/lesson-02/test/app.e2e-spec.ts",
    "chars": 630,
    "preview": "import { Test, TestingModule } from '@nestjs/testing';\nimport { INestApplication } from '@nestjs/common';\nimport * as re"
  },
  {
    "path": "module-04-dependency-injection/lesson-02/test/jest-e2e.json",
    "chars": 183,
    "preview": "{\n  \"moduleFileExtensions\": [\"js\", \"json\", \"ts\"],\n  \"rootDir\": \".\",\n  \"testEnvironment\": \"node\",\n  \"testRegex\": \".e2e-sp"
  },
  {
    "path": "module-04-dependency-injection/lesson-02/tsconfig.build.json",
    "chars": 97,
    "preview": "{\n  \"extends\": \"./tsconfig.json\",\n  \"exclude\": [\"node_modules\", \"test\", \"dist\", \"**/*spec.ts\"]\n}\n"
  },
  {
    "path": "module-04-dependency-injection/lesson-02/tsconfig.json",
    "chars": 546,
    "preview": "{\n  \"compilerOptions\": {\n    \"module\": \"commonjs\",\n    \"declaration\": true,\n    \"removeComments\": true,\n    \"emitDecorat"
  },
  {
    "path": "module-05-connect-nestjs-to-postgress/lesson-01/.eslintrc.js",
    "chars": 663,
    "preview": "module.exports = {\n  parser: '@typescript-eslint/parser',\n  parserOptions: {\n    project: 'tsconfig.json',\n    tsconfigR"
  },
  {
    "path": "module-05-connect-nestjs-to-postgress/lesson-01/.gitignore",
    "chars": 391,
    "preview": "# compiled output\n/dist\n/node_modules\n\n# Logs\nlogs\n*.log\nnpm-debug.log*\npnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n"
  },
  {
    "path": "module-05-connect-nestjs-to-postgress/lesson-01/.prettierrc",
    "chars": 51,
    "preview": "{\n  \"singleQuote\": true,\n  \"trailingComma\": \"all\"\n}"
  },
  {
    "path": "module-05-connect-nestjs-to-postgress/lesson-01/README.md",
    "chars": 3339,
    "preview": "<p align=\"center\">\n  <a href=\"http://nestjs.com/\" target=\"blank\"><img src=\"https://nestjs.com/img/logo-small.svg\" width="
  },
  {
    "path": "module-05-connect-nestjs-to-postgress/lesson-01/nest-cli.json",
    "chars": 171,
    "preview": "{\n  \"$schema\": \"https://json.schemastore.org/nest-cli\",\n  \"collection\": \"@nestjs/schematics\",\n  \"sourceRoot\": \"src\",\n  \""
  }
]

// ... and 2670 more files (download for full content)

About this extraction

This page contains the full source code of the HaiderMalik12/nestjs-fundamentals GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 2870 files (2.0 MB), approximately 698.9k tokens, and a symbol index with 3754 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!