@ftisindia/create-app 0.1.2 → 0.1.4

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 (109) hide show
  1. package/README.md +65 -0
  2. package/package.json +1 -1
  3. package/template/README.md +65 -1
  4. package/template/_package.json +0 -2
  5. package/template/docs/API_REFERENCE.md +13 -0
  6. package/template/docs/OAUTH.md +7 -3
  7. package/template/scripts/gen-module.mjs +2 -0
  8. package/template/src/app.module.ts +16 -22
  9. package/template/src/common/dto/error-response.dto.ts +3 -3
  10. package/template/src/common/dto/membership-response.dto.ts +26 -14
  11. package/template/src/common/dto/mutation-response.dto.ts +1 -1
  12. package/template/src/common/dto/pagination-query.dto.ts +37 -0
  13. package/template/src/common/dto/role-summary.dto.ts +5 -5
  14. package/template/src/common/dto/user-summary.dto.ts +6 -6
  15. package/template/src/common/filters/http-exception.filter.ts +9 -19
  16. package/template/src/common/swagger/api-error-responses.ts +12 -12
  17. package/template/src/config/app.config.ts +3 -3
  18. package/template/src/config/auth.config.ts +3 -3
  19. package/template/src/config/database.config.ts +3 -3
  20. package/template/src/config/env.validation.ts +58 -40
  21. package/template/src/config/index.ts +5 -5
  22. package/template/src/config/rbac.config.ts +3 -3
  23. package/template/src/database/prisma/prisma-transaction.ts +1 -1
  24. package/template/src/database/prisma/prisma.module.ts +2 -2
  25. package/template/src/database/prisma/prisma.service.ts +3 -6
  26. package/template/src/main.ts +11 -11
  27. package/template/src/modules/access-control/access-control.module.ts +9 -9
  28. package/template/src/modules/access-control/application/role-permission-policy.ts +71 -0
  29. package/template/src/modules/access-control/application/route-registry.validator.ts +34 -63
  30. package/template/src/modules/access-control/application/services/ability.factory.ts +5 -9
  31. package/template/src/modules/access-control/application/services/access-control.service.ts +78 -85
  32. package/template/src/modules/access-control/application/services/permission.guard.ts +16 -21
  33. package/template/src/modules/access-control/application/services/rbac-cache.service.ts +7 -9
  34. package/template/src/modules/access-control/dto/access-control-response.dto.ts +32 -20
  35. package/template/src/modules/access-control/dto/create-role.dto.ts +6 -6
  36. package/template/src/modules/access-control/dto/update-role-permissions.dto.ts +3 -10
  37. package/template/src/modules/access-control/dto/update-role.dto.ts +6 -6
  38. package/template/src/modules/access-control/presentation/access-control.controller.ts +69 -74
  39. package/template/src/modules/access-control/presentation/permissions.decorator.ts +3 -3
  40. package/template/src/modules/access-control/presentation/public.decorator.ts +2 -2
  41. package/template/src/modules/access-control/types/permission-key.ts +19 -19
  42. package/template/src/modules/access-control/types/route-permission-registry.ts +76 -76
  43. package/template/src/modules/audit/application/services/audit.service.ts +7 -7
  44. package/template/src/modules/audit/audit.module.ts +4 -4
  45. package/template/src/modules/audit/dto/audit-response.dto.ts +18 -18
  46. package/template/src/modules/audit/dto/list-audit-logs-query.dto.ts +14 -14
  47. package/template/src/modules/audit/presentation/audit.controller.ts +17 -23
  48. package/template/src/modules/auth/application/services/auth.service.ts +147 -110
  49. package/template/src/modules/auth/application/services/password.service.ts +2 -2
  50. package/template/src/modules/auth/application/services/token.service.ts +20 -21
  51. package/template/src/modules/auth/auth.module.ts +20 -47
  52. package/template/src/modules/auth/dto/auth-response.dto.ts +9 -10
  53. package/template/src/modules/auth/dto/login.dto.ts +4 -4
  54. package/template/src/modules/auth/dto/logout.dto.ts +1 -1
  55. package/template/src/modules/auth/dto/oauth-exchange.dto.ts +4 -5
  56. package/template/src/modules/auth/dto/refresh-token.dto.ts +4 -5
  57. package/template/src/modules/auth/dto/signup.dto.ts +5 -11
  58. package/template/src/modules/auth/infrastructure/passport/google-auth.guard.ts +6 -14
  59. package/template/src/modules/auth/infrastructure/passport/google-oauth-state.store.ts +98 -0
  60. package/template/src/modules/auth/infrastructure/passport/google.strategy.ts +21 -30
  61. package/template/src/modules/auth/infrastructure/passport/jwt-auth.guard.ts +3 -3
  62. package/template/src/modules/auth/infrastructure/passport/jwt.strategy.ts +11 -11
  63. package/template/src/modules/auth/presentation/auth.controller.ts +45 -45
  64. package/template/src/modules/auth/presentation/current-user.decorator.ts +3 -5
  65. package/template/src/modules/auth/presentation/google-oauth-exception.filter.ts +5 -10
  66. package/template/src/modules/health/dto/health-response.dto.ts +5 -5
  67. package/template/src/modules/health/health.module.ts +2 -2
  68. package/template/src/modules/health/presentation/health.controller.ts +13 -13
  69. package/template/src/modules/invitations/application/services/invitations.service.ts +127 -176
  70. package/template/src/modules/invitations/dto/accept-invitation.dto.ts +6 -7
  71. package/template/src/modules/invitations/dto/create-invitation.dto.ts +14 -15
  72. package/template/src/modules/invitations/dto/invitation-response.dto.ts +37 -29
  73. package/template/src/modules/invitations/dto/invitation-token.dto.ts +4 -4
  74. package/template/src/modules/invitations/invitations.module.ts +5 -5
  75. package/template/src/modules/invitations/presentation/invitations.controller.ts +61 -63
  76. package/template/src/modules/memberships/application/services/memberships.service.ts +70 -84
  77. package/template/src/modules/memberships/dto/transfer-owner.dto.ts +4 -4
  78. package/template/src/modules/memberships/dto/update-billing-contact.dto.ts +2 -2
  79. package/template/src/modules/memberships/dto/update-membership-owner.dto.ts +2 -2
  80. package/template/src/modules/memberships/dto/update-membership-role.dto.ts +4 -4
  81. package/template/src/modules/memberships/dto/update-membership-status.dto.ts +3 -3
  82. package/template/src/modules/memberships/memberships.module.ts +4 -4
  83. package/template/src/modules/memberships/presentation/memberships.controller.ts +83 -99
  84. package/template/src/modules/organisations/application/services/organisations.service.ts +21 -23
  85. package/template/src/modules/organisations/dto/create-organisation.dto.ts +6 -13
  86. package/template/src/modules/organisations/dto/organisation-response.dto.ts +14 -14
  87. package/template/src/modules/organisations/infrastructure/repositories/organisations.repository.ts +4 -7
  88. package/template/src/modules/organisations/organisations.module.ts +5 -5
  89. package/template/src/modules/organisations/presentation/organisations.controller.ts +14 -23
  90. package/template/src/modules/organisations/types/default-organisation-data.ts +3 -9
  91. package/template/src/modules/request-context/application/services/request-context.service.ts +15 -7
  92. package/template/src/modules/request-context/presentation/org-scope.guard.ts +4 -9
  93. package/template/src/modules/request-context/presentation/request-context.interceptor.ts +4 -9
  94. package/template/src/modules/request-context/presentation/request-context.middleware.ts +7 -8
  95. package/template/src/modules/request-context/request-context.module.ts +7 -7
  96. package/template/src/modules/request-context/types/request-context.ts +2 -2
  97. package/template/src/modules/sample/application/services/sample.service.ts +10 -8
  98. package/template/src/modules/sample/dto/sample-echo.dto.ts +3 -3
  99. package/template/src/modules/sample/dto/sample-response.dto.ts +12 -12
  100. package/template/src/modules/sample/presentation/sample.controller.ts +25 -42
  101. package/template/src/modules/sample/sample.module.ts +4 -4
  102. package/template/src/modules/settings/application/services/settings.service.ts +15 -27
  103. package/template/src/modules/settings/dto/setting-response.dto.ts +9 -9
  104. package/template/src/modules/settings/dto/update-setting.dto.ts +5 -5
  105. package/template/src/modules/settings/presentation/settings.controller.ts +29 -35
  106. package/template/src/modules/settings/settings.module.ts +5 -5
  107. package/template/src/modules/settings/types/setting-definitions.ts +49 -33
  108. package/template/test/auth-refresh.spec.ts +90 -0
  109. package/template/test/role-permission-policy.spec.ts +94 -0
@@ -1,10 +1,5 @@
1
- import {
2
- ArgumentsHost,
3
- Catch,
4
- ExceptionFilter,
5
- Injectable,
6
- } from "@nestjs/common";
7
- import { ConfigService } from "@nestjs/config";
1
+ import { ArgumentsHost, Catch, ExceptionFilter, Injectable } from '@nestjs/common';
2
+ import { ConfigService } from '@nestjs/config';
8
3
 
9
4
  type RedirectResponse = {
10
5
  headersSent?: boolean;
@@ -23,10 +18,10 @@ export class GoogleOAuthExceptionFilter implements ExceptionFilter {
23
18
  }
24
19
 
25
20
  const redirectUrl = new URL(
26
- this.config.get<string>("auth.google.errorRedirectUrl") ??
27
- "http://localhost:3000/auth/google/error",
21
+ this.config.get<string>('auth.google.errorRedirectUrl') ??
22
+ 'http://localhost:3000/auth/google/error',
28
23
  );
29
- redirectUrl.searchParams.set("error", "oauth_failed");
24
+ redirectUrl.searchParams.set('error', 'oauth_failed');
30
25
 
31
26
  response.redirect(302, redirectUrl.toString());
32
27
  }
@@ -1,9 +1,9 @@
1
- import { ApiProperty } from "@nestjs/swagger";
1
+ import { ApiProperty } from '@nestjs/swagger';
2
2
 
3
3
  export class HealthResponseDto {
4
- @ApiProperty({ example: "ok" })
5
- status!: "ok";
4
+ @ApiProperty({ example: 'ok' })
5
+ status!: 'ok';
6
6
 
7
- @ApiProperty({ example: "ok" })
8
- db!: "ok";
7
+ @ApiProperty({ example: 'ok' })
8
+ db!: 'ok';
9
9
  }
@@ -1,5 +1,5 @@
1
- import { Module } from "@nestjs/common";
2
- import { HealthController } from "./presentation/health.controller";
1
+ import { Module } from '@nestjs/common';
2
+ import { HealthController } from './presentation/health.controller';
3
3
 
4
4
  @Module({
5
5
  controllers: [HealthController],
@@ -1,20 +1,20 @@
1
- import { Controller, Get, ServiceUnavailableException } from "@nestjs/common";
2
- import { ApiOkResponse, ApiOperation, ApiTags } from "@nestjs/swagger";
3
- import { ApiErrorResponses } from "../../../common/swagger/api-error-responses";
4
- import { PrismaService } from "../../../database/prisma/prisma.service";
5
- import { Public } from "../../access-control/presentation/public.decorator";
6
- import { HealthResponseDto } from "../dto/health-response.dto";
1
+ import { Controller, Get, ServiceUnavailableException } from '@nestjs/common';
2
+ import { ApiOkResponse, ApiOperation, ApiTags } from '@nestjs/swagger';
3
+ import { ApiErrorResponses } from '../../../common/swagger/api-error-responses';
4
+ import { PrismaService } from '../../../database/prisma/prisma.service';
5
+ import { Public } from '../../access-control/presentation/public.decorator';
6
+ import { HealthResponseDto } from '../dto/health-response.dto';
7
7
 
8
- @ApiTags("Health")
9
- @Controller("health")
8
+ @ApiTags('Health')
9
+ @Controller('health')
10
10
  export class HealthController {
11
11
  constructor(private readonly prisma: PrismaService) {}
12
12
 
13
13
  @Get()
14
14
  @Public()
15
- @ApiOperation({ summary: "Check API and database health." })
15
+ @ApiOperation({ summary: 'Check API and database health.' })
16
16
  @ApiOkResponse({
17
- description: "API and database are healthy.",
17
+ description: 'API and database are healthy.',
18
18
  type: HealthResponseDto,
19
19
  })
20
20
  @ApiErrorResponses(503)
@@ -22,12 +22,12 @@ export class HealthController {
22
22
  try {
23
23
  await this.prisma.$queryRaw`SELECT 1`;
24
24
  } catch {
25
- throw new ServiceUnavailableException("Database health check failed.");
25
+ throw new ServiceUnavailableException('Database health check failed.');
26
26
  }
27
27
 
28
28
  return {
29
- status: "ok",
30
- db: "ok",
29
+ status: 'ok',
30
+ db: 'ok',
31
31
  };
32
32
  }
33
33
  }