@devstroupe/devkit-cli 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/dist/boilerplates/angular-template/node_modules/.bin/acorn +21 -0
  2. package/dist/boilerplates/angular-template/node_modules/.bin/eslint +21 -0
  3. package/dist/boilerplates/angular-template/node_modules/.bin/js-yaml +21 -0
  4. package/dist/boilerplates/angular-template/node_modules/.bin/ng +2 -2
  5. package/dist/boilerplates/angular-template/node_modules/.bin/nx +21 -0
  6. package/dist/boilerplates/angular-template/node_modules/.bin/nx-cloud +21 -0
  7. package/dist/boilerplates/angular-template/node_modules/.bin/sass +4 -4
  8. package/dist/boilerplates/angular-template/node_modules/.bin/vite +4 -4
  9. package/dist/boilerplates/angular-template/node_modules/.bin/webpack +21 -0
  10. package/dist/boilerplates/angular-template/package.json +1 -1
  11. package/dist/boilerplates/angular-template/src/app/app.config.ts +3 -0
  12. package/dist/boilerplates/angular-template/src/app/app.routes.ts +7 -0
  13. package/dist/boilerplates/angular-template/src/app/modules/role/role-permissions.component.css +38 -0
  14. package/dist/boilerplates/angular-template/src/app/modules/role/role-permissions.component.html +175 -0
  15. package/dist/boilerplates/angular-template/src/app/modules/role/role-permissions.component.ts +134 -0
  16. package/dist/boilerplates/angular-template/src/app/services/role.service.ts +12 -0
  17. package/dist/boilerplates/angular-template/src/app/shared/components/unauthorized/unauthorized.component.css +4 -0
  18. package/dist/boilerplates/angular-template/src/app/shared/components/unauthorized/unauthorized.component.html +18 -0
  19. package/dist/boilerplates/angular-template/src/app/shared/components/unauthorized/unauthorized.component.ts +18 -0
  20. package/dist/boilerplates/nest-template/node_modules/.bin/ts-node +21 -0
  21. package/dist/boilerplates/nest-template/node_modules/.bin/ts-node-cwd +21 -0
  22. package/dist/boilerplates/nest-template/node_modules/.bin/ts-node-esm +21 -0
  23. package/dist/boilerplates/nest-template/node_modules/.bin/ts-node-script +21 -0
  24. package/dist/boilerplates/nest-template/node_modules/.bin/ts-node-transpile-only +21 -0
  25. package/dist/boilerplates/nest-template/node_modules/.bin/ts-script +21 -0
  26. package/dist/boilerplates/nest-template/node_modules/.bin/typeorm +2 -2
  27. package/dist/boilerplates/nest-template/node_modules/.bin/typeorm-ts-node-commonjs +2 -2
  28. package/dist/boilerplates/nest-template/node_modules/.bin/typeorm-ts-node-esm +2 -2
  29. package/dist/boilerplates/nest-template/package.json +1 -1
  30. package/dist/boilerplates/nest-template/src/app.module.ts +2 -0
  31. package/dist/boilerplates/nest-template/src/modules/auth/auth.module.ts +2 -0
  32. package/dist/boilerplates/nest-template/src/modules/auth/auth.service.ts +10 -3
  33. package/dist/boilerplates/nest-template/src/modules/role/domain/role.repository.ts +10 -0
  34. package/dist/boilerplates/nest-template/src/modules/role/domain/role.ts +5 -0
  35. package/dist/boilerplates/nest-template/src/modules/role/infra/database/role.orm-entity.ts +13 -0
  36. package/dist/boilerplates/nest-template/src/modules/role/infra/database/role.repository.adapter.ts +54 -0
  37. package/dist/boilerplates/nest-template/src/modules/role/infra/http/role.controller.ts +51 -0
  38. package/dist/boilerplates/nest-template/src/modules/role/infra/http/role.dto.ts +17 -0
  39. package/dist/boilerplates/nest-template/src/modules/role/role.module.ts +20 -0
  40. package/dist/boilerplates/nest-template/src/modules/role/service/role.service.ts +39 -0
  41. package/dist/boilerplates/nest-template/src/modules/user/database-seed.service.ts +31 -3
  42. package/dist/boilerplates/nest-template/src/modules/user/domain/user.ts +3 -1
  43. package/dist/boilerplates/nest-template/src/modules/user/infra/database/user.orm-entity.ts +5 -3
  44. package/dist/boilerplates/nest-template/src/modules/user/user.module.ts +5 -1
  45. package/dist/templates/ui/shared/profile-component.template.js +3 -3
  46. package/package.json +1 -1
@@ -0,0 +1,18 @@
1
+ import { Component, inject } from '@angular/core';
2
+ import { Router } from '@angular/router';
3
+ import { HlmButton } from '@spartan-ng/helm/button';
4
+
5
+ @Component({
6
+ selector: 'app-unauthorized',
7
+ standalone: true,
8
+ imports: [HlmButton],
9
+ templateUrl: './unauthorized.component.html',
10
+ styleUrl: './unauthorized.component.css'
11
+ })
12
+ export class UnauthorizedComponent {
13
+ private router = inject(Router);
14
+
15
+ goHome(): void {
16
+ this.router.navigate(['/']);
17
+ }
18
+ }
@@ -0,0 +1,21 @@
1
+ #!/bin/sh
2
+ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
+
4
+ case `uname` in
5
+ *CYGWIN*|*MINGW*|*MSYS*)
6
+ if command -v cygpath > /dev/null 2>&1; then
7
+ basedir=`cygpath -w "$basedir"`
8
+ fi
9
+ ;;
10
+ esac
11
+
12
+ if [ -z "$NODE_PATH" ]; then
13
+ export NODE_PATH="/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.43_typescript@5.9.3/node_modules/ts-node/node_modules:/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.43_typescript@5.9.3/node_modules:/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/node_modules"
14
+ else
15
+ export NODE_PATH="/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.43_typescript@5.9.3/node_modules/ts-node/node_modules:/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.43_typescript@5.9.3/node_modules:/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/node_modules:$NODE_PATH"
16
+ fi
17
+ if [ -x "$basedir/node" ]; then
18
+ exec "$basedir/node" "$basedir/../ts-node/dist/bin.js" "$@"
19
+ else
20
+ exec node "$basedir/../ts-node/dist/bin.js" "$@"
21
+ fi
@@ -0,0 +1,21 @@
1
+ #!/bin/sh
2
+ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
+
4
+ case `uname` in
5
+ *CYGWIN*|*MINGW*|*MSYS*)
6
+ if command -v cygpath > /dev/null 2>&1; then
7
+ basedir=`cygpath -w "$basedir"`
8
+ fi
9
+ ;;
10
+ esac
11
+
12
+ if [ -z "$NODE_PATH" ]; then
13
+ export NODE_PATH="/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.43_typescript@5.9.3/node_modules/ts-node/node_modules:/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.43_typescript@5.9.3/node_modules:/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/node_modules"
14
+ else
15
+ export NODE_PATH="/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.43_typescript@5.9.3/node_modules/ts-node/node_modules:/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.43_typescript@5.9.3/node_modules:/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/node_modules:$NODE_PATH"
16
+ fi
17
+ if [ -x "$basedir/node" ]; then
18
+ exec "$basedir/node" "$basedir/../ts-node/dist/bin-cwd.js" "$@"
19
+ else
20
+ exec node "$basedir/../ts-node/dist/bin-cwd.js" "$@"
21
+ fi
@@ -0,0 +1,21 @@
1
+ #!/bin/sh
2
+ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
+
4
+ case `uname` in
5
+ *CYGWIN*|*MINGW*|*MSYS*)
6
+ if command -v cygpath > /dev/null 2>&1; then
7
+ basedir=`cygpath -w "$basedir"`
8
+ fi
9
+ ;;
10
+ esac
11
+
12
+ if [ -z "$NODE_PATH" ]; then
13
+ export NODE_PATH="/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.43_typescript@5.9.3/node_modules/ts-node/node_modules:/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.43_typescript@5.9.3/node_modules:/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/node_modules"
14
+ else
15
+ export NODE_PATH="/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.43_typescript@5.9.3/node_modules/ts-node/node_modules:/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.43_typescript@5.9.3/node_modules:/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/node_modules:$NODE_PATH"
16
+ fi
17
+ if [ -x "$basedir/node" ]; then
18
+ exec "$basedir/node" "$basedir/../ts-node/dist/bin-esm.js" "$@"
19
+ else
20
+ exec node "$basedir/../ts-node/dist/bin-esm.js" "$@"
21
+ fi
@@ -0,0 +1,21 @@
1
+ #!/bin/sh
2
+ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
+
4
+ case `uname` in
5
+ *CYGWIN*|*MINGW*|*MSYS*)
6
+ if command -v cygpath > /dev/null 2>&1; then
7
+ basedir=`cygpath -w "$basedir"`
8
+ fi
9
+ ;;
10
+ esac
11
+
12
+ if [ -z "$NODE_PATH" ]; then
13
+ export NODE_PATH="/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.43_typescript@5.9.3/node_modules/ts-node/node_modules:/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.43_typescript@5.9.3/node_modules:/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/node_modules"
14
+ else
15
+ export NODE_PATH="/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.43_typescript@5.9.3/node_modules/ts-node/node_modules:/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.43_typescript@5.9.3/node_modules:/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/node_modules:$NODE_PATH"
16
+ fi
17
+ if [ -x "$basedir/node" ]; then
18
+ exec "$basedir/node" "$basedir/../ts-node/dist/bin-script.js" "$@"
19
+ else
20
+ exec node "$basedir/../ts-node/dist/bin-script.js" "$@"
21
+ fi
@@ -0,0 +1,21 @@
1
+ #!/bin/sh
2
+ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
+
4
+ case `uname` in
5
+ *CYGWIN*|*MINGW*|*MSYS*)
6
+ if command -v cygpath > /dev/null 2>&1; then
7
+ basedir=`cygpath -w "$basedir"`
8
+ fi
9
+ ;;
10
+ esac
11
+
12
+ if [ -z "$NODE_PATH" ]; then
13
+ export NODE_PATH="/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.43_typescript@5.9.3/node_modules/ts-node/node_modules:/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.43_typescript@5.9.3/node_modules:/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/node_modules"
14
+ else
15
+ export NODE_PATH="/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.43_typescript@5.9.3/node_modules/ts-node/node_modules:/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.43_typescript@5.9.3/node_modules:/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/node_modules:$NODE_PATH"
16
+ fi
17
+ if [ -x "$basedir/node" ]; then
18
+ exec "$basedir/node" "$basedir/../ts-node/dist/bin-transpile.js" "$@"
19
+ else
20
+ exec node "$basedir/../ts-node/dist/bin-transpile.js" "$@"
21
+ fi
@@ -0,0 +1,21 @@
1
+ #!/bin/sh
2
+ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
+
4
+ case `uname` in
5
+ *CYGWIN*|*MINGW*|*MSYS*)
6
+ if command -v cygpath > /dev/null 2>&1; then
7
+ basedir=`cygpath -w "$basedir"`
8
+ fi
9
+ ;;
10
+ esac
11
+
12
+ if [ -z "$NODE_PATH" ]; then
13
+ export NODE_PATH="/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.43_typescript@5.9.3/node_modules/ts-node/node_modules:/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.43_typescript@5.9.3/node_modules:/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/node_modules"
14
+ else
15
+ export NODE_PATH="/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.43_typescript@5.9.3/node_modules/ts-node/node_modules:/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.43_typescript@5.9.3/node_modules:/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/node_modules:$NODE_PATH"
16
+ fi
17
+ if [ -x "$basedir/node" ]; then
18
+ exec "$basedir/node" "$basedir/../ts-node/dist/bin-script-deprecated.js" "$@"
19
+ else
20
+ exec node "$basedir/../ts-node/dist/bin-script-deprecated.js" "$@"
21
+ fi
@@ -10,9 +10,9 @@ case `uname` in
10
10
  esac
11
11
 
12
12
  if [ -z "$NODE_PATH" ]; then
13
- export NODE_PATH="/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/typeorm@0.3.30_babel-plugin-macros@3.1.0_mysql2@3.22.5_@types+node@20.19.43_/node_modules/typeorm/node_modules:/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/typeorm@0.3.30_babel-plugin-macros@3.1.0_mysql2@3.22.5_@types+node@20.19.43_/node_modules:/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/node_modules"
13
+ export NODE_PATH="/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/typeorm@0.3.30_babel-plugin-macros@3.1.0_mysql2@3.22.5_@types+node@20.19.43__ts-node@10_90b76765576173e08b071ce27852c9cf/node_modules/typeorm/node_modules:/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/typeorm@0.3.30_babel-plugin-macros@3.1.0_mysql2@3.22.5_@types+node@20.19.43__ts-node@10_90b76765576173e08b071ce27852c9cf/node_modules:/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/node_modules"
14
14
  else
15
- export NODE_PATH="/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/typeorm@0.3.30_babel-plugin-macros@3.1.0_mysql2@3.22.5_@types+node@20.19.43_/node_modules/typeorm/node_modules:/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/typeorm@0.3.30_babel-plugin-macros@3.1.0_mysql2@3.22.5_@types+node@20.19.43_/node_modules:/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/node_modules:$NODE_PATH"
15
+ export NODE_PATH="/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/typeorm@0.3.30_babel-plugin-macros@3.1.0_mysql2@3.22.5_@types+node@20.19.43__ts-node@10_90b76765576173e08b071ce27852c9cf/node_modules/typeorm/node_modules:/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/typeorm@0.3.30_babel-plugin-macros@3.1.0_mysql2@3.22.5_@types+node@20.19.43__ts-node@10_90b76765576173e08b071ce27852c9cf/node_modules:/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/node_modules:$NODE_PATH"
16
16
  fi
17
17
  if [ -x "$basedir/node" ]; then
18
18
  exec "$basedir/node" "$basedir/../typeorm/cli.js" "$@"
@@ -10,9 +10,9 @@ case `uname` in
10
10
  esac
11
11
 
12
12
  if [ -z "$NODE_PATH" ]; then
13
- export NODE_PATH="/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/typeorm@0.3.30_babel-plugin-macros@3.1.0_mysql2@3.22.5_@types+node@20.19.43_/node_modules/typeorm/node_modules:/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/typeorm@0.3.30_babel-plugin-macros@3.1.0_mysql2@3.22.5_@types+node@20.19.43_/node_modules:/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/node_modules"
13
+ export NODE_PATH="/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/typeorm@0.3.30_babel-plugin-macros@3.1.0_mysql2@3.22.5_@types+node@20.19.43__ts-node@10_90b76765576173e08b071ce27852c9cf/node_modules/typeorm/node_modules:/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/typeorm@0.3.30_babel-plugin-macros@3.1.0_mysql2@3.22.5_@types+node@20.19.43__ts-node@10_90b76765576173e08b071ce27852c9cf/node_modules:/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/node_modules"
14
14
  else
15
- export NODE_PATH="/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/typeorm@0.3.30_babel-plugin-macros@3.1.0_mysql2@3.22.5_@types+node@20.19.43_/node_modules/typeorm/node_modules:/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/typeorm@0.3.30_babel-plugin-macros@3.1.0_mysql2@3.22.5_@types+node@20.19.43_/node_modules:/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/node_modules:$NODE_PATH"
15
+ export NODE_PATH="/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/typeorm@0.3.30_babel-plugin-macros@3.1.0_mysql2@3.22.5_@types+node@20.19.43__ts-node@10_90b76765576173e08b071ce27852c9cf/node_modules/typeorm/node_modules:/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/typeorm@0.3.30_babel-plugin-macros@3.1.0_mysql2@3.22.5_@types+node@20.19.43__ts-node@10_90b76765576173e08b071ce27852c9cf/node_modules:/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/node_modules:$NODE_PATH"
16
16
  fi
17
17
  if [ -x "$basedir/node" ]; then
18
18
  exec "$basedir/node" "$basedir/../typeorm/cli-ts-node-commonjs.js" "$@"
@@ -10,9 +10,9 @@ case `uname` in
10
10
  esac
11
11
 
12
12
  if [ -z "$NODE_PATH" ]; then
13
- export NODE_PATH="/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/typeorm@0.3.30_babel-plugin-macros@3.1.0_mysql2@3.22.5_@types+node@20.19.43_/node_modules/typeorm/node_modules:/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/typeorm@0.3.30_babel-plugin-macros@3.1.0_mysql2@3.22.5_@types+node@20.19.43_/node_modules:/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/node_modules"
13
+ export NODE_PATH="/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/typeorm@0.3.30_babel-plugin-macros@3.1.0_mysql2@3.22.5_@types+node@20.19.43__ts-node@10_90b76765576173e08b071ce27852c9cf/node_modules/typeorm/node_modules:/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/typeorm@0.3.30_babel-plugin-macros@3.1.0_mysql2@3.22.5_@types+node@20.19.43__ts-node@10_90b76765576173e08b071ce27852c9cf/node_modules:/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/node_modules"
14
14
  else
15
- export NODE_PATH="/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/typeorm@0.3.30_babel-plugin-macros@3.1.0_mysql2@3.22.5_@types+node@20.19.43_/node_modules/typeorm/node_modules:/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/typeorm@0.3.30_babel-plugin-macros@3.1.0_mysql2@3.22.5_@types+node@20.19.43_/node_modules:/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/node_modules:$NODE_PATH"
15
+ export NODE_PATH="/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/typeorm@0.3.30_babel-plugin-macros@3.1.0_mysql2@3.22.5_@types+node@20.19.43__ts-node@10_90b76765576173e08b071ce27852c9cf/node_modules/typeorm/node_modules:/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/typeorm@0.3.30_babel-plugin-macros@3.1.0_mysql2@3.22.5_@types+node@20.19.43__ts-node@10_90b76765576173e08b071ce27852c9cf/node_modules:/home/vitor/trabalho/devstroupe/framework/node_modules/.pnpm/node_modules:$NODE_PATH"
16
16
  fi
17
17
  if [ -x "$basedir/node" ]; then
18
18
  exec "$basedir/node" "$basedir/../typeorm/cli-ts-node-esm.js" "$@"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "devkit-nest-boilerplate",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "Boilerplate NestJS integrado ao DT-DevKit",
5
5
  "private": true,
6
6
  "scripts": {
@@ -2,6 +2,7 @@ import { Module } from '@nestjs/common';
2
2
  import { TypeOrmModule } from '@nestjs/typeorm';
3
3
  import { UserModule } from './modules/user/user.module';
4
4
  import { AuthModule } from './modules/auth/auth.module';
5
+ import { RoleModule } from './modules/role/role.module';
5
6
 
6
7
  @Module({
7
8
  imports: [
@@ -17,6 +18,7 @@ import { AuthModule } from './modules/auth/auth.module';
17
18
  }),
18
19
  UserModule,
19
20
  AuthModule,
21
+ RoleModule,
20
22
  ],
21
23
  controllers: [],
22
24
  providers: [],
@@ -1,6 +1,7 @@
1
1
  import { Module } from '@nestjs/common';
2
2
  import { JwtModule } from '@nestjs/jwt';
3
3
  import { UserModule } from '../user/user.module';
4
+ import { RoleModule } from '../role/role.module';
4
5
  import { AuthService } from './auth.service';
5
6
  import { AuthController } from './auth.controller';
6
7
  import { JwtAuthGuard } from './jwt-auth.guard';
@@ -9,6 +10,7 @@ import { RolesGuard } from './roles.guard';
9
10
  @Module({
10
11
  imports: [
11
12
  UserModule,
13
+ RoleModule,
12
14
  JwtModule.register({
13
15
  global: true,
14
16
  secret: process.env.JWT_SECRET || 'devstroupe-secret-key-12345',
@@ -3,18 +3,24 @@ import { JwtService } from '@nestjs/jwt';
3
3
  import * as bcrypt from 'bcryptjs';
4
4
  import { UserService } from '../user/service/user.service';
5
5
  import { User } from '../user/domain/user';
6
+ import { RoleService } from '../role/service/role.service';
6
7
 
7
8
  @Injectable()
8
9
  export class AuthService {
9
10
  constructor(
10
11
  private readonly userService: UserService,
11
12
  private readonly jwtService: JwtService,
13
+ private readonly roleService: RoleService,
12
14
  ) {}
13
15
 
14
16
  async register(data: Omit<User, 'id' | 'role' | 'isActive'>): Promise<User> {
17
+ const userRole = await this.roleService.findByName('Usuário Comum');
18
+ if (!userRole) {
19
+ throw new Error('Default role "Usuário Comum" not found');
20
+ }
15
21
  return this.userService.create({
16
22
  ...data,
17
- role: 'USER',
23
+ role: userRole,
18
24
  isActive: true,
19
25
  });
20
26
  }
@@ -37,8 +43,9 @@ export class AuthService {
37
43
  const payload = {
38
44
  sub: user.id,
39
45
  email: user.email,
40
- role: user.role,
41
- tenantId: user.tenantId
46
+ role: user.role?.name,
47
+ tenantId: user.tenantId,
48
+ permissions: user.role?.permissions || []
42
49
  };
43
50
 
44
51
  const { password, ...result } = user;
@@ -0,0 +1,10 @@
1
+ import { Role } from './role';
2
+
3
+ export interface IRoleRepository {
4
+ create(role: Omit<Role, 'id'>): Promise<Role>;
5
+ update(id: number, role: Partial<Role>): Promise<Role>;
6
+ findById(id: number): Promise<Role | null>;
7
+ findByName(name: string): Promise<Role | null>;
8
+ findAll(): Promise<Role[]>;
9
+ delete(id: number): Promise<void>;
10
+ }
@@ -0,0 +1,5 @@
1
+ export class Role {
2
+ id!: number;
3
+ name!: string;
4
+ permissions!: string[];
5
+ }
@@ -0,0 +1,13 @@
1
+ import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm';
2
+
3
+ @Entity('roles')
4
+ export class RoleOrmEntity {
5
+ @PrimaryGeneratedColumn()
6
+ id!: number;
7
+
8
+ @Column({ type: 'varchar', length: 255, unique: true })
9
+ name!: string;
10
+
11
+ @Column({ type: 'simple-array', nullable: true })
12
+ permissions!: string[];
13
+ }
@@ -0,0 +1,54 @@
1
+ import { Injectable } from '@nestjs/common';
2
+ import { InjectRepository } from '@nestjs/typeorm';
3
+ import { Repository } from 'typeorm';
4
+ import { IRoleRepository } from '../../domain/role.repository';
5
+ import { Role } from '../../domain/role';
6
+ import { RoleOrmEntity } from './role.orm-entity';
7
+
8
+ @Injectable()
9
+ export class RoleRepositoryAdapter implements IRoleRepository {
10
+ constructor(
11
+ @InjectRepository(RoleOrmEntity)
12
+ private readonly repo: Repository<RoleOrmEntity>,
13
+ ) {}
14
+
15
+ private toDomain(orm: RoleOrmEntity): Role {
16
+ return {
17
+ id: orm.id,
18
+ name: orm.name,
19
+ permissions: orm.permissions || [],
20
+ };
21
+ }
22
+
23
+ async create(role: Omit<Role, 'id'>): Promise<Role> {
24
+ const created = this.repo.create(role);
25
+ const saved = await this.repo.save(created);
26
+ return this.toDomain(saved);
27
+ }
28
+
29
+ async update(id: number, role: Partial<Role>): Promise<Role> {
30
+ await this.repo.update(id, role);
31
+ const updated = await this.findById(id);
32
+ if (!updated) throw new Error('Role not found after update');
33
+ return updated;
34
+ }
35
+
36
+ async findById(id: number): Promise<Role | null> {
37
+ const found = await this.repo.findOne({ where: { id } });
38
+ return found ? this.toDomain(found) : null;
39
+ }
40
+
41
+ async findByName(name: string): Promise<Role | null> {
42
+ const found = await this.repo.findOne({ where: { name } });
43
+ return found ? this.toDomain(found) : null;
44
+ }
45
+
46
+ async findAll(): Promise<Role[]> {
47
+ const found = await this.repo.find();
48
+ return found.map(orm => this.toDomain(orm));
49
+ }
50
+
51
+ async delete(id: number): Promise<void> {
52
+ await this.repo.delete(id);
53
+ }
54
+ }
@@ -0,0 +1,51 @@
1
+ import { Controller, UseGuards, Post, Body, Put, Param, Get, Query, Delete } from '@nestjs/common';
2
+ import { ApiTags, ApiOperation } from '@nestjs/swagger';
3
+ import { BaseCrudController, PermissionsGuard, Permissions } from '@devstroupe/devkit-nest';
4
+ import { RoleService } from '../../service/role.service';
5
+ import { Role } from '../../domain/role';
6
+ import { CreateRoleDto, UpdateRoleDto } from './role.dto';
7
+ import { JwtAuthGuard } from '../../../auth/jwt-auth.guard';
8
+
9
+ @UseGuards(JwtAuthGuard, PermissionsGuard)
10
+ @Controller('role')
11
+ @ApiTags('role')
12
+ export class RoleController extends BaseCrudController<Role> {
13
+ constructor(private readonly roleService: RoleService) {
14
+ super(roleService);
15
+ }
16
+
17
+ @Post()
18
+ @Permissions('create:role')
19
+ @ApiOperation({ summary: 'Criar novo perfil de acesso' })
20
+ override async create(@Body() dto: CreateRoleDto): Promise<Role> {
21
+ return super.create(dto);
22
+ }
23
+
24
+ @Put(':id')
25
+ @Permissions('update:role')
26
+ @ApiOperation({ summary: 'Atualizar perfil de acesso' })
27
+ override async update(@Param('id') id: string, @Body() dto: UpdateRoleDto): Promise<Role> {
28
+ return super.update(id, dto);
29
+ }
30
+
31
+ @Get()
32
+ @Permissions('read:role')
33
+ @ApiOperation({ summary: 'Listar perfis de acesso' })
34
+ override async findMany(@Query() query: any): Promise<any> {
35
+ return super.findMany(query);
36
+ }
37
+
38
+ @Get(':id')
39
+ @Permissions('read:role')
40
+ @ApiOperation({ summary: 'Obter perfil de acesso por ID' })
41
+ override async findById(@Param('id') id: string): Promise<Role> {
42
+ return super.findById(id);
43
+ }
44
+
45
+ @Delete(':id')
46
+ @Permissions('delete:role')
47
+ @ApiOperation({ summary: 'Excluir perfil de acesso' })
48
+ override async delete(@Param('id') id: string): Promise<void> {
49
+ return super.delete(id);
50
+ }
51
+ }
@@ -0,0 +1,17 @@
1
+ import { ApiProperty } from '@nestjs/swagger';
2
+
3
+ export class CreateRoleDto {
4
+ @ApiProperty({ description: 'Nome do Perfil de Acesso' })
5
+ name!: string;
6
+
7
+ @ApiProperty({ description: 'Lista de permissões do perfil', type: [String] })
8
+ permissions!: string[];
9
+ }
10
+
11
+ export class UpdateRoleDto {
12
+ @ApiProperty({ description: 'Nome do Perfil de Acesso', required: false })
13
+ name?: string;
14
+
15
+ @ApiProperty({ description: 'Lista de permissões do perfil', type: [String], required: false })
16
+ permissions?: string[];
17
+ }
@@ -0,0 +1,20 @@
1
+ import { Module } from '@nestjs/common';
2
+ import { TypeOrmModule } from '@nestjs/typeorm';
3
+ import { RoleOrmEntity } from './infra/database/role.orm-entity';
4
+ import { RoleController } from './infra/http/role.controller';
5
+ import { RoleService } from './service/role.service';
6
+ import { RoleRepositoryAdapter } from './infra/database/role.repository.adapter';
7
+
8
+ @Module({
9
+ imports: [TypeOrmModule.forFeature([RoleOrmEntity])],
10
+ controllers: [RoleController],
11
+ providers: [
12
+ RoleService,
13
+ {
14
+ provide: 'IRoleRepository',
15
+ useClass: RoleRepositoryAdapter,
16
+ },
17
+ ],
18
+ exports: [RoleService],
19
+ })
20
+ export class RoleModule {}
@@ -0,0 +1,39 @@
1
+ import { Injectable, Inject } from '@nestjs/common';
2
+ import { IRoleRepository } from '../domain/role.repository';
3
+ import { Role } from '../domain/role';
4
+
5
+ @Injectable()
6
+ export class RoleService {
7
+ constructor(
8
+ @Inject('IRoleRepository')
9
+ private readonly roleRepo: IRoleRepository,
10
+ ) {}
11
+
12
+ async create(role: Omit<Role, 'id'>): Promise<Role> {
13
+ const existing = await this.roleRepo.findByName(role.name);
14
+ if (existing) {
15
+ throw new Error('Role name already exists');
16
+ }
17
+ return this.roleRepo.create(role);
18
+ }
19
+
20
+ async update(id: number, role: Partial<Role>): Promise<Role> {
21
+ return this.roleRepo.update(id, role);
22
+ }
23
+
24
+ async findById(id: number): Promise<Role | null> {
25
+ return this.roleRepo.findById(id);
26
+ }
27
+
28
+ async findByName(name: string): Promise<Role | null> {
29
+ return this.roleRepo.findByName(name);
30
+ }
31
+
32
+ async findAll(): Promise<Role[]> {
33
+ return this.roleRepo.findAll();
34
+ }
35
+
36
+ async delete(id: number): Promise<void> {
37
+ await this.roleRepo.delete(id);
38
+ }
39
+ }
@@ -1,11 +1,15 @@
1
1
  import { Injectable, OnApplicationBootstrap, Logger } from '@nestjs/common';
2
2
  import { UserService } from './service/user.service';
3
+ import { RoleService } from '../role/service/role.service';
3
4
 
4
5
  @Injectable()
5
6
  export class DatabaseSeedService implements OnApplicationBootstrap {
6
7
  private readonly logger = new Logger(DatabaseSeedService.name);
7
8
 
8
- constructor(private readonly userService: UserService) {}
9
+ constructor(
10
+ private readonly userService: UserService,
11
+ private readonly roleService: RoleService,
12
+ ) {}
9
13
 
10
14
  async onApplicationBootstrap() {
11
15
  await this.seedUsers();
@@ -13,6 +17,30 @@ export class DatabaseSeedService implements OnApplicationBootstrap {
13
17
 
14
18
  private async seedUsers() {
15
19
  try {
20
+ // 1. Criar Perfil Administrador se não existir
21
+ let adminRole = await this.roleService.findByName('Administrador');
22
+ if (!adminRole) {
23
+ this.logger.log('Semente: Criando Perfil Administrador...');
24
+ adminRole = await this.roleService.create({
25
+ name: 'Administrador',
26
+ permissions: [
27
+ 'read:cabin', 'create:cabin', 'update:cabin', 'delete:cabin',
28
+ 'read:company', 'create:company', 'update:company', 'delete:company',
29
+ 'read:role', 'create:role', 'update:role', 'delete:role', 'manage:permissions'
30
+ ],
31
+ });
32
+ }
33
+
34
+ // 2. Criar Perfil Usuário Comum se não existir
35
+ let userRole = await this.roleService.findByName('Usuário Comum');
36
+ if (!userRole) {
37
+ this.logger.log('Semente: Criando Perfil Usuário Comum...');
38
+ userRole = await this.roleService.create({
39
+ name: 'Usuário Comum',
40
+ permissions: ['read:cabin', 'read:company'],
41
+ });
42
+ }
43
+
16
44
  const adminEmail = 'admin@devstroupe.com';
17
45
  const existingAdmin = await this.userService.findByEmail(adminEmail);
18
46
  if (!existingAdmin) {
@@ -21,7 +49,7 @@ export class DatabaseSeedService implements OnApplicationBootstrap {
21
49
  name: 'Administrador DevsTroupe',
22
50
  email: adminEmail,
23
51
  password: 'adminpassword123',
24
- role: 'ADMIN',
52
+ role: adminRole,
25
53
  isActive: true,
26
54
  });
27
55
  this.logger.log('Semente: Usuário administrador cadastrado com sucesso!');
@@ -35,7 +63,7 @@ export class DatabaseSeedService implements OnApplicationBootstrap {
35
63
  name: 'Usuário Comum',
36
64
  email: userEmail,
37
65
  password: 'userpassword123',
38
- role: 'USER',
66
+ role: userRole,
39
67
  isActive: true,
40
68
  });
41
69
  this.logger.log('Semente: Usuário comum cadastrado com sucesso!');
@@ -1,9 +1,11 @@
1
+ import { Role } from '../../role/domain/role';
2
+
1
3
  export class User {
2
4
  id!: number;
3
5
  name!: string;
4
6
  email!: string;
5
7
  password!: string;
6
- role!: 'ADMIN' | 'USER';
8
+ role!: Role;
7
9
  tenantId?: string;
8
10
  isActive!: boolean;
9
11
  }
@@ -1,4 +1,5 @@
1
- import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn } from 'typeorm';
1
+ import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn, ManyToOne, JoinColumn } from 'typeorm';
2
+ import { RoleOrmEntity } from '../../../role/infra/database/role.orm-entity';
2
3
 
3
4
  @Entity('users')
4
5
  export class UserOrmEntity {
@@ -14,8 +15,9 @@ export class UserOrmEntity {
14
15
  @Column({ type: 'varchar', length: 255 })
15
16
  password!: string;
16
17
 
17
- @Column({ type: 'varchar', length: 50, default: 'USER' })
18
- role!: 'ADMIN' | 'USER';
18
+ @ManyToOne(() => RoleOrmEntity, { nullable: false, eager: true })
19
+ @JoinColumn({ name: 'role_id' })
20
+ role!: RoleOrmEntity;
19
21
 
20
22
  @Column({ type: 'varchar', length: 255, nullable: true, name: 'tenant_id' })
21
23
  tenantId?: string;
@@ -4,9 +4,13 @@ import { UserOrmEntity } from './infra/database/user.orm-entity';
4
4
  import { UserRepositoryAdapter } from './infra/database/user.repository.adapter';
5
5
  import { UserService } from './service/user.service';
6
6
  import { DatabaseSeedService } from './database-seed.service';
7
+ import { RoleModule } from '../role/role.module';
7
8
 
8
9
  @Module({
9
- imports: [TypeOrmModule.forFeature([UserOrmEntity])],
10
+ imports: [
11
+ TypeOrmModule.forFeature([UserOrmEntity]),
12
+ RoleModule,
13
+ ],
10
14
  providers: [
11
15
  UserService,
12
16
  DatabaseSeedService,
@@ -10,8 +10,8 @@ import { Router } from '@angular/router';
10
10
  import { NgIconComponent } from '@ng-icons/core';
11
11
  import { HlmButton } from '@spartan-ng/helm/button';
12
12
  import { HlmInput } from '@spartan-ng/helm/input';
13
- import { AuthService } from '../../../core/services/auth.service';
14
- import { ProfileService } from '../../../core/services/profile.service';
13
+ import { AuthService } from '../../core/services/auth.service';
14
+ import { ProfileService } from '../../core/services/profile.service';
15
15
 
16
16
  @Component({
17
17
  selector: 'app-profile',
@@ -68,7 +68,7 @@ export class ProfileComponent implements OnInit {
68
68
  this.successMessage = 'Perfil atualizado com sucesso!';
69
69
  setTimeout(() => (this.successMessage = ''), 4000);
70
70
  },
71
- error: (err) => {
71
+ error: (err: any) => {
72
72
  this.isSaving = false;
73
73
  this.errorMessage = err?.error?.message || 'Erro ao salvar o perfil. Tente novamente.';
74
74
  }