@neohm/nestend 3.3.7 → 3.3.9
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.
- package/README.md +124 -71
- package/dist/admin/controllers/admin.tenant.user.controller.js +1 -1
- package/dist/admin/controllers/admin.tenant.user.controller.js.map +1 -1
- package/dist/admin/dtos/add.admin.user.dto.d.ts +2 -2
- package/dist/admin/dtos/add.admin.user.dto.d.ts.map +1 -1
- package/dist/admin/dtos/add.admin.user.dto.js +2 -2
- package/dist/admin/dtos/add.admin.user.dto.js.map +1 -1
- package/dist/admin/dtos/add.scheduled.task.dto.d.ts +2 -2
- package/dist/admin/dtos/add.scheduled.task.dto.d.ts.map +1 -1
- package/dist/admin/dtos/add.scheduled.task.dto.js +2 -2
- package/dist/admin/dtos/add.scheduled.task.dto.js.map +1 -1
- package/dist/admin/dtos/add.scope.dto.d.ts +2 -2
- package/dist/admin/dtos/add.scope.dto.d.ts.map +1 -1
- package/dist/admin/dtos/add.scope.dto.js +2 -2
- package/dist/admin/dtos/add.scope.dto.js.map +1 -1
- package/dist/admin/dtos/add.system.role.dto.d.ts +2 -2
- package/dist/admin/dtos/add.system.role.dto.d.ts.map +1 -1
- package/dist/admin/dtos/add.system.role.dto.js +2 -2
- package/dist/admin/dtos/add.system.role.dto.js.map +1 -1
- package/dist/admin/dtos/add.tenant.dto.d.ts +2 -2
- package/dist/admin/dtos/add.tenant.dto.d.ts.map +1 -1
- package/dist/admin/dtos/add.tenant.dto.js +2 -2
- package/dist/admin/dtos/add.tenant.dto.js.map +1 -1
- package/dist/admin/dtos/base.user.dto.d.ts +2 -2
- package/dist/admin/dtos/base.user.dto.d.ts.map +1 -1
- package/dist/admin/dtos/base.user.dto.js +2 -2
- package/dist/admin/dtos/base.user.dto.js.map +1 -1
- package/dist/admin/libraries/admin.user.data.processor.js +1 -1
- package/dist/admin/libraries/admin.user.data.processor.js.map +1 -1
- package/dist/admin/libraries/admin.user.delete.processor.js +2 -2
- package/dist/admin/libraries/admin.user.delete.processor.js.map +1 -1
- package/dist/admin/libraries/api.key.data.processor.js +1 -1
- package/dist/admin/libraries/api.key.data.processor.js.map +1 -1
- package/dist/admin/libraries/bulk.user.data.processor.js +2 -2
- package/dist/admin/libraries/bulk.user.data.processor.js.map +1 -1
- package/dist/admin/libraries/client.user.data.processor.js +2 -2
- package/dist/admin/libraries/client.user.data.processor.js.map +1 -1
- package/dist/admin/libraries/client.user.delete.processor.js +1 -1
- package/dist/admin/libraries/client.user.delete.processor.js.map +1 -1
- package/dist/admin/libraries/scheduled.task.data.processor.js +1 -1
- package/dist/admin/libraries/scheduled.task.data.processor.js.map +1 -1
- package/dist/admin/libraries/scheduled.task.delete.processor.js +1 -1
- package/dist/admin/libraries/scheduled.task.delete.processor.js.map +1 -1
- package/dist/admin/libraries/scope.data.processor.js +1 -1
- package/dist/admin/libraries/scope.data.processor.js.map +1 -1
- package/dist/admin/libraries/system.role.data.processor.js +1 -1
- package/dist/admin/libraries/system.role.data.processor.js.map +1 -1
- package/dist/admin/libraries/system.user.data.processor.js +1 -1
- package/dist/admin/libraries/system.user.data.processor.js.map +1 -1
- package/dist/admin/libraries/tenant.data.processor.js +1 -1
- package/dist/admin/libraries/tenant.data.processor.js.map +1 -1
- package/dist/admin/libraries/tenant.delete.processor.js +2 -2
- package/dist/admin/libraries/tenant.delete.processor.js.map +1 -1
- package/dist/auth/controllers/auth.controller.d.ts +1 -0
- package/dist/auth/controllers/auth.controller.d.ts.map +1 -1
- package/dist/auth/controllers/auth.controller.js +5 -1
- package/dist/auth/controllers/auth.controller.js.map +1 -1
- package/dist/auth/entities/user.entity.d.ts +2 -2
- package/dist/auth/entities/user.entity.d.ts.map +1 -1
- package/dist/auth/entities/user.entity.js +3 -3
- package/dist/auth/entities/user.entity.js.map +1 -1
- package/dist/auth/processors/change.password.data.processor.js +2 -2
- package/dist/auth/processors/change.password.data.processor.js.map +1 -1
- package/dist/auth/processors/register.user.data.processor.js +1 -1
- package/dist/auth/processors/register.user.data.processor.js.map +1 -1
- package/dist/auth/services/auth.service.js +2 -2
- package/dist/auth/services/auth.service.js.map +1 -1
- package/dist/auth/services/impersonation.service.d.ts.map +1 -1
- package/dist/auth/services/impersonation.service.js +5 -4
- package/dist/auth/services/impersonation.service.js.map +1 -1
- package/dist/auth/types/auth.types.d.ts +1 -0
- package/dist/auth/types/auth.types.d.ts.map +1 -1
- package/dist/common/dtos/common.data.dto.d.ts +4 -0
- package/dist/common/dtos/common.data.dto.d.ts.map +1 -0
- package/dist/common/dtos/{common.payload.dto.js → common.data.dto.js} +5 -5
- package/dist/common/dtos/common.data.dto.js.map +1 -0
- package/dist/common/dtos/common.list.filter.dto.d.ts.map +1 -1
- package/dist/common/dtos/common.list.filter.dto.js +22 -0
- package/dist/common/dtos/common.list.filter.dto.js.map +1 -1
- package/dist/common/dtos/common.params.dto.d.ts +1 -0
- package/dist/common/dtos/common.params.dto.d.ts.map +1 -1
- package/dist/common/dtos/common.params.dto.js +6 -0
- package/dist/common/dtos/common.params.dto.js.map +1 -1
- package/dist/common/dtos/filter.dto.d.ts.map +1 -1
- package/dist/common/dtos/filter.dto.js +15 -0
- package/dist/common/dtos/filter.dto.js.map +1 -1
- package/dist/common/dtos/sort.dto.d.ts.map +1 -1
- package/dist/common/dtos/sort.dto.js +8 -0
- package/dist/common/dtos/sort.dto.js.map +1 -1
- package/dist/common/entities/system.audit.log.entity.d.ts +3 -3
- package/dist/common/entities/system.audit.log.entity.d.ts.map +1 -1
- package/dist/common/entities/system.audit.log.entity.js +6 -6
- package/dist/common/entities/system.audit.log.entity.js.map +1 -1
- package/dist/common/es6.classes.d.ts +2 -2
- package/dist/common/es6.classes.d.ts.map +1 -1
- package/dist/common/es6.classes.js +2 -2
- package/dist/common/es6.classes.js.map +1 -1
- package/dist/common/libraries/common.data.processor.d.ts +1 -1
- package/dist/common/libraries/common.data.processor.d.ts.map +1 -1
- package/dist/common/libraries/common.data.processor.js +1 -1
- package/dist/common/libraries/common.data.processor.js.map +1 -1
- package/dist/common/services/audit.service.d.ts +4 -4
- package/dist/common/services/audit.service.js +15 -15
- package/dist/common/services/audit.service.js.map +1 -1
- package/dist/common/services/queue.service.d.ts +3 -2
- package/dist/common/services/queue.service.d.ts.map +1 -1
- package/dist/common/services/queue.service.js +15 -1
- package/dist/common/services/queue.service.js.map +1 -1
- package/dist/common/subscribers/common.subscriber.d.ts +3 -5
- package/dist/common/subscribers/common.subscriber.d.ts.map +1 -1
- package/dist/common/subscribers/common.subscriber.js +13 -25
- package/dist/common/subscribers/common.subscriber.js.map +1 -1
- package/dist/common/types/audit.types.d.ts +4 -4
- package/dist/common/types/audit.types.d.ts.map +1 -1
- package/dist/common/types/queue.types.d.ts +10 -0
- package/dist/common/types/queue.types.d.ts.map +1 -1
- package/dist/constants/entity.constants.d.ts +1 -0
- package/dist/constants/entity.constants.d.ts.map +1 -1
- package/dist/constants/entity.constants.js +1 -0
- package/dist/constants/entity.constants.js.map +1 -1
- package/dist/constants/entity.maps.d.ts +3 -1
- package/dist/constants/entity.maps.d.ts.map +1 -1
- package/dist/constants/entity.maps.js +3 -1
- package/dist/constants/entity.maps.js.map +1 -1
- package/dist/constants/job.constants.d.ts +1 -0
- package/dist/constants/job.constants.d.ts.map +1 -1
- package/dist/constants/job.constants.js +1 -0
- package/dist/constants/job.constants.js.map +1 -1
- package/dist/document/controllers/document.controller.d.ts +15 -0
- package/dist/document/controllers/document.controller.d.ts.map +1 -0
- package/dist/document/controllers/document.controller.js +88 -0
- package/dist/document/controllers/document.controller.js.map +1 -0
- package/dist/document/document.module.d.ts.map +1 -1
- package/dist/document/document.module.js +37 -1
- package/dist/document/document.module.js.map +1 -1
- package/dist/document/dtos/set.document.dto.d.ts +6 -0
- package/dist/document/dtos/set.document.dto.d.ts.map +1 -0
- package/dist/document/dtos/set.document.dto.js +43 -0
- package/dist/document/dtos/set.document.dto.js.map +1 -0
- package/dist/document/dtos/upload.document.dto.d.ts +4 -0
- package/dist/document/dtos/upload.document.dto.d.ts.map +1 -0
- package/dist/document/dtos/upload.document.dto.js +31 -0
- package/dist/document/dtos/upload.document.dto.js.map +1 -0
- package/dist/document/entities/document.entity.d.ts +10 -0
- package/dist/document/entities/document.entity.d.ts.map +1 -0
- package/dist/document/entities/document.entity.js +43 -0
- package/dist/document/entities/document.entity.js.map +1 -0
- package/dist/{common/entities/document.entity.d.ts → document/entities/document.upload.entity.d.ts} +6 -7
- package/dist/document/entities/document.upload.entity.d.ts.map +1 -0
- package/dist/{common/entities/document.entity.js → document/entities/document.upload.entity.js} +24 -28
- package/dist/document/entities/document.upload.entity.js.map +1 -0
- package/dist/document/enums/document.default.enum.d.ts +10 -1
- package/dist/document/enums/document.default.enum.d.ts.map +1 -1
- package/dist/document/enums/document.default.enum.js +11 -1
- package/dist/document/enums/document.default.enum.js.map +1 -1
- package/dist/document/es6.classes.d.ts +10 -4
- package/dist/document/es6.classes.d.ts.map +1 -1
- package/dist/document/es6.classes.js +10 -4
- package/dist/document/es6.classes.js.map +1 -1
- package/dist/document/jobs/clean.orphan.documents.job.d.ts +16 -0
- package/dist/document/jobs/clean.orphan.documents.job.d.ts.map +1 -0
- package/dist/document/jobs/clean.orphan.documents.job.js +63 -0
- package/dist/document/jobs/clean.orphan.documents.job.js.map +1 -0
- package/dist/document/services/document.service.d.ts +18 -11
- package/dist/document/services/document.service.d.ts.map +1 -1
- package/dist/document/services/document.service.js +96 -46
- package/dist/document/services/document.service.js.map +1 -1
- package/dist/document/subscribers/document.subscriber.d.ts +11 -0
- package/dist/document/subscribers/document.subscriber.d.ts.map +1 -0
- package/dist/document/subscribers/document.subscriber.js +44 -0
- package/dist/document/subscribers/document.subscriber.js.map +1 -0
- package/dist/document/subscribers/document.upload.subscriber.d.ts +9 -0
- package/dist/document/subscribers/document.upload.subscriber.d.ts.map +1 -0
- package/dist/document/subscribers/document.upload.subscriber.js +31 -0
- package/dist/document/subscribers/document.upload.subscriber.js.map +1 -0
- package/dist/document/types/document.types.d.ts +0 -11
- package/dist/document/types/document.types.d.ts.map +1 -1
- package/dist/index.d.ts +7 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -6
- package/dist/index.js.map +1 -1
- package/dist/migrations/1749600000012.CreateSysAuditLogsTable.d.ts.map +1 -1
- package/dist/migrations/1749600000012.CreateSysAuditLogsTable.js +4 -4
- package/dist/migrations/1749600000012.CreateSysAuditLogsTable.js.map +1 -1
- package/dist/migrations/{1749600000013.CreateSysDocumentDetailsTable.d.ts → 1749600000013.CreateSysDocumentUploadsTable.d.ts} +2 -2
- package/dist/migrations/1749600000013.CreateSysDocumentUploadsTable.d.ts.map +1 -0
- package/dist/migrations/{1749600000013.CreateSysDocumentDetailsTable.js → 1749600000013.CreateSysDocumentUploadsTable.js} +9 -10
- package/dist/migrations/1749600000013.CreateSysDocumentUploadsTable.js.map +1 -0
- package/dist/migrations/1749600000028.CreateSysDocumentsTable.d.ts +6 -0
- package/dist/migrations/1749600000028.CreateSysDocumentsTable.d.ts.map +1 -0
- package/dist/migrations/1749600000028.CreateSysDocumentsTable.js +29 -0
- package/dist/migrations/1749600000028.CreateSysDocumentsTable.js.map +1 -0
- package/dist/tenant/entities/tenant.entity.js +3 -3
- package/dist/tenant/entities/tenant.entity.js.map +1 -1
- package/package.json +1 -1
- package/dist/common/dtos/common.payload.dto.d.ts +0 -4
- package/dist/common/dtos/common.payload.dto.d.ts.map +0 -1
- package/dist/common/dtos/common.payload.dto.js.map +0 -1
- package/dist/common/entities/document.entity.d.ts.map +0 -1
- package/dist/common/entities/document.entity.js.map +0 -1
- package/dist/migrations/1749600000013.CreateSysDocumentDetailsTable.d.ts.map +0 -1
- package/dist/migrations/1749600000013.CreateSysDocumentDetailsTable.js.map +0 -1
package/README.md
CHANGED
|
@@ -101,33 +101,33 @@ these are free to change without a breaking release.
|
|
|
101
101
|
|
|
102
102
|
## Feature Map
|
|
103
103
|
|
|
104
|
-
| Area | Key exports | Notes
|
|
105
|
-
| ----------------- | ------------------------------------------------------------------------------------------------------------------------------------ |
|
|
106
|
-
| Entities | `RootEntity`, `CommonEntity`, `CommonAdminEntity`, `UserEntity`, `AdminUserEntity`, `SystemRoleEntity`, `SystemAdminRoleEntity`, ... | uuid PK, soft deletes, `created_by`/`updated_by` (+ `creator`/`updater` relations), jsonb `attributes`; entity-level `findOneOrNew`, `hardDelete`, `restore`, `paginate` statics plus a row-wise `softDelete()`
|
|
107
|
-
| Migrations | `MigrationUtility`, `SeederUtility` (the
|
|
108
|
-
| Queue | `QueueModule`, `QueueModule.withConnection()`, `QueueService`, `CommonJob`
|
|
109
|
-
| Scheduled events | `SystemScheduledTaskEntity`, `ScheduledEventEntity`, `ScheduleKind`, `ScheduleSpec`, `IsCronExpression` | schedule definitions in `sys_scheduled_tasks` → events in `sys_scheduled_events`; interval / cron / once specs with timezones, drift-free slots, horizon materialisation, catch-up + overlap policies, fire-once dispatch with backoff, cadence via `SCHEDULED_EVENT_MIN`
|
|
110
|
-
| Auth | `AuthModule`, `AuthService.validateRole()`, `RoleTier`, `TenantRole`, `Auth`, `JwtMiddleware`
|
|
111
|
-
| Admin auth | `AdminAuthService.validateRole()`, `AdminAuth`, `AdminJwtMiddleware` (endpoints at `/admin/auth`) | fully separate stack for back-office admins — own users table (`sys_admin_users`), own roles (`sys_admin_roles`/`sys_auser_roles`), own sessions/refresh tokens (shared tables, `is_admin` flag)
|
|
112
|
-
| API keys | `ApiKeyService`, `ApiKeyGuard` / `ApiKeyMiddleware`, `@ApiKeyScopes()`, `ApiKeyContext`
|
|
113
|
-
| Scopes | `ScopeService`, `AuthService.validateAccess()`, `ScopeEntity`, `TenantScopeEntity`, `ApiScopeEntity`
|
|
114
|
-
| Multi-tenancy | `TenantModule`, `TenantEntity`, `CommonTenantEntity`, `TenantContextService`, `TenantContextMiddleware` | AsyncLocalStorage tenant context; resolve by header, slug, or domain; tenants are onboarded by admins (`TenantEntity.creator` → `AdminUserEntity`)
|
|
115
|
-
| Admin | `AdminModule` (its controllers, DTOs and processors are internal — import the module and hit the endpoints), `GlobalAdminRoles` | back-office APIs: tenant onboarding, client/admin/system user registration (single + bulk), the `has_global_access` grant that enables impersonation, tenant + scheduled-task listing; 4-tier `GlobalAdminRoles` gate over `sys_admin_roles`; Swagger at `/docs` (hidden in production)
|
|
116
|
-
| Notifications | `NotificationModule`, `NotificationService`, `FcmPushNotificationService` | in-app rows + FCM push (optional `firebase-admin`); device token registry
|
|
117
|
-
| Email (SES) | `EmailNotificationService`, `ProcessEmailNotification`, `EmailTemplateEntity`, `EmailNotificationLogEntity` | templates in `sys_email_templates` rendered by a remote service, dispatched via SES per recipient (to/cc/bcc); logged to `sys_email_notification_logs` outside production; dispatch skipped when `AWS_SES_FROM_ADDRESS` unset
|
|
118
|
-
| Audit | `AuditService` | `saveAuditLog(old, new)` with changed-value diffing into `sys_audit_logs`
|
|
119
|
-
| Cache | `CacheService` | Redis, TTL objects (`{days, hours, min}`), transparent encryption
|
|
120
|
-
| Encryption | `EncryptionService` | AES-256-GCM, scrypt-derived keys
|
|
121
|
-
| System properties | `SystemPropertyModule`, `SystemPropertyService` | cached + optionally encrypted key/value settings in `sys_properties`
|
|
122
|
-
| Documents | `DocumentModule`, `DocumentService`, `S3BucketDocumentService`, `MinioBucketDocumentService` | `uploadDocument(multerFiles) → links[]`; driver chosen via `DOCUMENT_STORAGE_DRIVER`
|
|
123
|
-
| PDF generation | `PdfService`, `PdfRenderOptions` | `renderHtmlToPdf(html) → Buffer` via headless Chromium; honours the document's own `@page` rules and paginates to any length; optional peer dep `puppeteer`
|
|
124
|
-
| HTTP | `CommonController`, `GlobalExceptionFilter`, common DTOs | health endpoint base controller, uniform error envelope
|
|
125
|
-
| Raw SQL | `SqlService`, `SqlTarget` | named `:key` placeholders always bound as driver params, `:...key` array expansion; runs on the read replica (`DB_READ_*`) with transparent primary fallback; `fetchOne`/`fetchScalar`/`exists`/`count`/`paginate` helpers
|
|
126
|
-
| List endpoints | `CommonListProcessor`, `CommonListFilterDto`, `FilterDto`, `CommonListFilterConfig` | allowlisted columns, parameterised operators (`eq`…`isNull`), typed value casting (`str`/`num`/`date`/`bool`/`null`), multi-sort + paginated on the read replica
|
|
127
|
-
| Outbound HTTP | `RemoteRequestService`, `ApiRequestTypeEnum`, `ApiContentTypeEnum` | injectable `fetch` wrapper (global via `CommonModule`); `getApiResponse<T>()` parses JSON/text and throws `OperationException` on non-2xx, `getApiRawResponse()` returns the raw `Response`; JSON + form-urlencoded body serialisation
|
|
128
|
-
| Observability | `LoggingInterceptor`, `MonitoringInterceptor`, `MonitoringService` | Sentry auto-registers when `@sentry/node` + `SENTRY_DSN` present; pluggable `MonitoringAdapter`
|
|
129
|
-
| Jobs/Events | `CommonJob`, `CommonSubscriber`, `CommonDataProcessor` | dispatch/handle separation, discovery-based registration, worker-event lifecycle, column-change detection, `created_by`/`updated_by` stamped from the `Auth` context in `beforeInsert`/`beforeUpdate`, field error collection
|
|
130
|
-
| Constants & maps | `baseEntityConstants`, `baseJobConstants`, `baseEntityMaps`, `baseJobMaps` | centralised dotted identifiers (`as const`) plus identifier → class maps of every concrete entity and job (abstract bases excluded); map keys are computed from the constants, so renames propagate at compile time
|
|
104
|
+
| Area | Key exports | Notes |
|
|
105
|
+
| ----------------- | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
106
|
+
| Entities | `RootEntity`, `CommonEntity`, `CommonAdminEntity`, `UserEntity`, `AdminUserEntity`, `SystemRoleEntity`, `SystemAdminRoleEntity`, ... | uuid PK, soft deletes, `created_by`/`updated_by` (+ `creator`/`updater` relations), jsonb `attributes`; entity-level `findOneOrNew`, `hardDelete`, `restore`, `paginate` statics plus a row-wise `softDelete()` |
|
|
107
|
+
| Migrations | `MigrationUtility`, `SeederUtility` (the 28 table migrations ship in `dist/migrations` — glob them, they are not barrel exports) | fluent `this.string()`, `this.numeric()`, `addRecord()` seeding |
|
|
108
|
+
| Queue | `QueueModule`, `QueueModule.withConnection()`, `QueueService`, `CommonJob` | BullMQ `@Processor`/`WorkerHost` consumer; auto-discovered jobs, duplicate prevention, recurring schedulers, completed jobs cleared from Redis on success (1-day TTL on failures), `clearQueue()`, retries, failures persisted to `sys_failed_jobs`; connection from `BULL_REDIS_*` or supplied by the app — never register `BullModule.forRoot()` yourself, two roots race over the worker's connection |
|
|
109
|
+
| Scheduled events | `SystemScheduledTaskEntity`, `ScheduledEventEntity`, `ScheduleKind`, `ScheduleSpec`, `IsCronExpression` | schedule definitions in `sys_scheduled_tasks` → events in `sys_scheduled_events`; interval / cron / once specs with timezones, drift-free slots, horizon materialisation, catch-up + overlap policies, fire-once dispatch with backoff, cadence via `SCHEDULED_EVENT_MIN` |
|
|
110
|
+
| Auth | `AuthModule`, `AuthService.validateRole()`, `RoleTier`, `TenantRole`, `Auth`, `JwtMiddleware` | imperative auth (open by default); `<module>.<tier>` role hierarchy (manager > writer > viewer), with `global.admin` overriding every role check; JwtMiddleware resolves the user into `Auth`'s AsyncLocalStorage context per request; access + rotating refresh tokens; session-based logout invalidation (`sys_auth_sessions`); Google SSO via ID token at `POST /auth/google`; impersonation — a tenantless `has_global_access` user signs into one organization at `POST /auth/impersonation/login` |
|
|
111
|
+
| Admin auth | `AdminAuthService.validateRole()`, `AdminAuth`, `AdminJwtMiddleware` (endpoints at `/admin/auth`) | fully separate stack for back-office admins — own users table (`sys_admin_users`), own roles (`sys_admin_roles`/`sys_auser_roles`), own sessions/refresh tokens (shared tables, `is_admin` flag) |
|
|
112
|
+
| API keys | `ApiKeyService`, `ApiKeyGuard` / `ApiKeyMiddleware`, `@ApiKeyScopes()`, `ApiKeyContext` | hashed keys in `sys_api_keys` (admin-owned), one tenant per key, expiry/revocation, `x-api-key` header; `validateAccess(scope)` returns the tenant the key acts for |
|
|
113
|
+
| Scopes | `ScopeService`, `AuthService.validateAccess()`, `ScopeEntity`, `TenantScopeEntity`, `ApiScopeEntity` | one feature named once in `sys_scopes`, then granted per organization (`sys_tenant_scopes`) or per API key (`sys_api_scopes`) — never an array on the principal |
|
|
114
|
+
| Multi-tenancy | `TenantModule`, `TenantEntity`, `CommonTenantEntity`, `TenantContextService`, `TenantContextMiddleware` | AsyncLocalStorage tenant context; resolve by header, slug, or domain; tenants are onboarded by admins (`TenantEntity.creator` → `AdminUserEntity`) |
|
|
115
|
+
| Admin | `AdminModule` (its controllers, DTOs and processors are internal — import the module and hit the endpoints), `GlobalAdminRoles` | back-office APIs: tenant onboarding, client/admin/system user registration (single + bulk), the `has_global_access` grant that enables impersonation, tenant + scheduled-task listing; 4-tier `GlobalAdminRoles` gate over `sys_admin_roles`; Swagger at `/docs` (hidden in production) |
|
|
116
|
+
| Notifications | `NotificationModule`, `NotificationService`, `FcmPushNotificationService` | in-app rows + FCM push (optional `firebase-admin`); device token registry |
|
|
117
|
+
| Email (SES) | `EmailNotificationService`, `ProcessEmailNotification`, `EmailTemplateEntity`, `EmailNotificationLogEntity` | templates in `sys_email_templates` rendered by a remote service, dispatched via SES per recipient (to/cc/bcc); logged to `sys_email_notification_logs` outside production; dispatch skipped when `AWS_SES_FROM_ADDRESS` unset |
|
|
118
|
+
| Audit | `AuditService` | `saveAuditLog(old, new)` with changed-value diffing into `sys_audit_logs` |
|
|
119
|
+
| Cache | `CacheService` | Redis, TTL objects (`{days, hours, min}`), transparent encryption |
|
|
120
|
+
| Encryption | `EncryptionService` | AES-256-GCM, scrypt-derived keys |
|
|
121
|
+
| System properties | `SystemPropertyModule`, `SystemPropertyService` | cached + optionally encrypted key/value settings in `sys_properties` |
|
|
122
|
+
| Documents | `DocumentModule`, `DocumentService`, `S3BucketDocumentService`, `MinioBucketDocumentService` | `POST /api/documents/upload` (multipart) or `uploadDocument(multerFiles) → links[]`; driver chosen via `DOCUMENT_STORAGE_DRIVER` |
|
|
123
|
+
| PDF generation | `PdfService`, `PdfRenderOptions` | `renderHtmlToPdf(html) → Buffer` via headless Chromium; honours the document's own `@page` rules and paginates to any length; optional peer dep `puppeteer` |
|
|
124
|
+
| HTTP | `CommonController`, `GlobalExceptionFilter`, common DTOs | health endpoint base controller, uniform error envelope |
|
|
125
|
+
| Raw SQL | `SqlService`, `SqlTarget` | named `:key` placeholders always bound as driver params, `:...key` array expansion; runs on the read replica (`DB_READ_*`) with transparent primary fallback; `fetchOne`/`fetchScalar`/`exists`/`count`/`paginate` helpers |
|
|
126
|
+
| List endpoints | `CommonListProcessor`, `CommonListFilterDto`, `FilterDto`, `CommonListFilterConfig` | allowlisted columns, parameterised operators (`eq`…`isNull`), typed value casting (`str`/`num`/`date`/`bool`/`null`), multi-sort + paginated on the read replica |
|
|
127
|
+
| Outbound HTTP | `RemoteRequestService`, `ApiRequestTypeEnum`, `ApiContentTypeEnum` | injectable `fetch` wrapper (global via `CommonModule`); `getApiResponse<T>()` parses JSON/text and throws `OperationException` on non-2xx, `getApiRawResponse()` returns the raw `Response`; JSON + form-urlencoded body serialisation |
|
|
128
|
+
| Observability | `LoggingInterceptor`, `MonitoringInterceptor`, `MonitoringService` | Sentry auto-registers when `@sentry/node` + `SENTRY_DSN` present; pluggable `MonitoringAdapter` |
|
|
129
|
+
| Jobs/Events | `CommonJob`, `CommonSubscriber`, `CommonDataProcessor` | dispatch/handle separation, discovery-based registration, worker-event lifecycle, column-change detection, `created_by`/`updated_by` stamped from the `Auth` context in `beforeInsert`/`beforeUpdate`, field error collection |
|
|
130
|
+
| Constants & maps | `baseEntityConstants`, `baseJobConstants`, `baseEntityMaps`, `baseJobMaps` | centralised dotted identifiers (`as const`) plus identifier → class maps of every concrete entity and job (abstract bases excluded); map keys are computed from the constants, so renames propagate at compile time |
|
|
131
131
|
|
|
132
132
|
## Environment Variables
|
|
133
133
|
|
|
@@ -209,7 +209,10 @@ sold to them?" and "is this person allowed to use it?" in that order.
|
|
|
209
209
|
|
|
210
210
|
```ts
|
|
211
211
|
const { user } = await this.authService.validateAccess('billing.invoices');
|
|
212
|
-
const { user } = await this.authService.validateAccess(
|
|
212
|
+
const { user } = await this.authService.validateAccess(
|
|
213
|
+
'billing.invoices',
|
|
214
|
+
'invoice.writer',
|
|
215
|
+
);
|
|
213
216
|
```
|
|
214
217
|
|
|
215
218
|
`AuthController` (mounted at `/auth`) exposes the ready-made flows: `POST
|
|
@@ -308,8 +311,8 @@ admin with the `admin` role can grant `sys_admin_roles` to other admins via
|
|
|
308
311
|
|
|
309
312
|
### Encryption
|
|
310
313
|
|
|
311
|
-
| Variable | Default | Description
|
|
312
|
-
| ------------------- | ------- |
|
|
314
|
+
| Variable | Default | Description |
|
|
315
|
+
| ------------------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
313
316
|
| `ENCRYPTION_SECRET` | — | **Required** when `EncryptionService` is used — which now includes issuing API keys (`key_encrypted`). AES-256-GCM key material. Min 32 chars |
|
|
314
317
|
|
|
315
318
|
### Cache (Redis)
|
|
@@ -323,21 +326,21 @@ admin with the `admin` role can grant `sys_admin_roles` to other admins via
|
|
|
323
326
|
|
|
324
327
|
### Queue (BullMQ / Redis)
|
|
325
328
|
|
|
326
|
-
| Variable | Default | Description
|
|
327
|
-
| ----------------------------------- | ------------- |
|
|
328
|
-
| `BULL_REDIS_HOST` | `localhost` | Redis host for BullMQ
|
|
329
|
-
| `BULL_REDIS_PORT` | `6379` | Redis port
|
|
330
|
-
| `BULL_REDIS_PASSWORD` | _(empty)_ | Redis password
|
|
331
|
-
| `BULL_REDIS_DB` | `0` | Redis DB index
|
|
332
|
-
| `BULL_QUEUE_NAME` | `myapp-queue` | Name of the BullMQ queue
|
|
333
|
-
| `BULL_WORKERS` | `2` | Concurrent worker threads per process
|
|
334
|
-
| `BULL_QUEUE_WORKER` | `false` | Set `true` on consumer instances only — API servers should leave this `false`
|
|
329
|
+
| Variable | Default | Description |
|
|
330
|
+
| ----------------------------------- | ------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
|
|
331
|
+
| `BULL_REDIS_HOST` | `localhost` | Redis host for BullMQ |
|
|
332
|
+
| `BULL_REDIS_PORT` | `6379` | Redis port |
|
|
333
|
+
| `BULL_REDIS_PASSWORD` | _(empty)_ | Redis password |
|
|
334
|
+
| `BULL_REDIS_DB` | `0` | Redis DB index |
|
|
335
|
+
| `BULL_QUEUE_NAME` | `myapp-queue` | Name of the BullMQ queue |
|
|
336
|
+
| `BULL_WORKERS` | `2` | Concurrent worker threads per process |
|
|
337
|
+
| `BULL_QUEUE_WORKER` | `false` | Set `true` on consumer instances only — API servers should leave this `false` |
|
|
335
338
|
| `BULL_JOB_TTL_SECONDS` | `86400` | Retention (seconds) for **failed** jobs before removal from the queue + Redis (default 1 day); completed jobs are removed immediately |
|
|
336
|
-
| `MAX_JOB_RETRIES` | `3` | Max attempts per job (BullMQ `attempts` default) and the scheduled-event retry ceiling
|
|
337
|
-
| `SCHEDULED_EVENT_MIN` | `0` | `SetScheduledEventJob` cadence in minutes (every N minutes); `0`/unset disables self-scheduling
|
|
338
|
-
| `SCHEDULED_EVENT_HORIZON_MIN` | _(derived)_ | How far ahead occurrences are materialised; defaults to 2× the cadence, floored at one minute
|
|
339
|
-
| `SCHEDULED_EVENT_BATCH` | `500` | Occurrences dispatched per pass
|
|
340
|
-
| `ENABLE_SCHEDULED_EVENTS_EXECUTION` | _unset_ | Must be exactly `true` to arm scheduled-event materialisation and dispatch
|
|
339
|
+
| `MAX_JOB_RETRIES` | `3` | Max attempts per job (BullMQ `attempts` default) and the scheduled-event retry ceiling |
|
|
340
|
+
| `SCHEDULED_EVENT_MIN` | `0` | `SetScheduledEventJob` cadence in minutes (every N minutes); `0`/unset disables self-scheduling |
|
|
341
|
+
| `SCHEDULED_EVENT_HORIZON_MIN` | _(derived)_ | How far ahead occurrences are materialised; defaults to 2× the cadence, floored at one minute |
|
|
342
|
+
| `SCHEDULED_EVENT_BATCH` | `500` | Occurrences dispatched per pass |
|
|
343
|
+
| `ENABLE_SCHEDULED_EVENTS_EXECUTION` | _unset_ | Must be exactly `true` to arm scheduled-event materialisation and dispatch |
|
|
341
344
|
|
|
342
345
|
#### Jobs
|
|
343
346
|
|
|
@@ -493,7 +496,7 @@ jitter lands on the occurrence, never on the cursor, so it cannot accumulate.
|
|
|
493
496
|
##### Creating and editing a task
|
|
494
497
|
|
|
495
498
|
`POST /api/admin/scheduled-tasks` is an upsert. `AddScheduledTaskDto` extends
|
|
496
|
-
`
|
|
499
|
+
`CommonDataDto`, so it carries an optional `id`: send one to edit that task, omit
|
|
497
500
|
it to create. `identifier`, `name` and `schedule` are required by the DTO either way;
|
|
498
501
|
`identifier` uniqueness is checked in the processor, excluding the row being edited.
|
|
499
502
|
|
|
@@ -562,17 +565,21 @@ enabled/disabled and soft-deleting events when a task is removed.
|
|
|
562
565
|
own `identifier`**, so register a job in your app whose identifier matches the
|
|
563
566
|
`identifier` you gave the task — that job's `handle()` is what runs per fire time.
|
|
564
567
|
|
|
565
|
-
`SystemScheduledTaskSubscriber` is the only entity subscriber
|
|
566
|
-
|
|
568
|
+
`SystemScheduledTaskSubscriber` is the only entity subscriber registered for a job:
|
|
569
|
+
it is the only base job whose `handle()` does real work. `DocumentModule` registers
|
|
570
|
+
two more — `DocumentSubscriber` and `DocumentUploadSubscriber` — with no job at all;
|
|
571
|
+
they exist so `created_by` / `updated_by` get stamped on the document tables.
|
|
567
572
|
Subscribers for your own entities are yours to provide (see `CommonSubscriber`);
|
|
568
573
|
a subscriber only starts firing once something constructs it.
|
|
569
574
|
|
|
570
575
|
### Document Storage
|
|
571
576
|
|
|
572
|
-
| Variable | Default | Description
|
|
573
|
-
| --------------------------------------- | ------- |
|
|
574
|
-
| `DOCUMENT_STORAGE_DRIVER` | `minio` | Active driver: `s3` or `minio`
|
|
575
|
-
| `DOCUMENT_PRESIGNED_URL_EXPIRY_SECONDS` | `3600` | Presigned download URL validity in seconds
|
|
577
|
+
| Variable | Default | Description |
|
|
578
|
+
| --------------------------------------- | ------- | ---------------------------------------------- |
|
|
579
|
+
| `DOCUMENT_STORAGE_DRIVER` | `minio` | Active driver: `s3` or `minio` |
|
|
580
|
+
| `DOCUMENT_PRESIGNED_URL_EXPIRY_SECONDS` | `3600` | Presigned download URL validity in seconds |
|
|
581
|
+
| `DOCUMENT_MAX_UPLOAD_FILES` | `10` | Files per `POST /api/documents/upload` request |
|
|
582
|
+
| `DOCUMENT_MAX_UPLOAD_SIZE_MB` | `25` | Per-file size ceiling on that endpoint |
|
|
576
583
|
|
|
577
584
|
**S3 driver** (`DOCUMENT_STORAGE_DRIVER=s3`):
|
|
578
585
|
|
|
@@ -602,8 +609,8 @@ a subscriber only starts firing once something constructs it.
|
|
|
602
609
|
|
|
603
610
|
Requires the optional peer dependency `puppeteer`.
|
|
604
611
|
|
|
605
|
-
| Variable | Default | Description
|
|
606
|
-
| ------------------------- | --------- |
|
|
612
|
+
| Variable | Default | Description |
|
|
613
|
+
| ------------------------- | --------- | ----------------------------------------------------------------------------------- |
|
|
607
614
|
| `PDF_CHROMIUM_PATH` | _(empty)_ | Path to an existing Chromium/Chrome binary; falls back to puppeteer's bundled one |
|
|
608
615
|
| `PDF_CHROMIUM_NO_SANDBOX` | `false` | `true` passes `--no-sandbox`. Needed in most containers; only use with trusted HTML |
|
|
609
616
|
| `PDF_RENDER_TIMEOUT_MS` | `30000` | Per-render page load timeout in milliseconds |
|
|
@@ -630,10 +637,10 @@ Requires the optional peer dependency `puppeteer`.
|
|
|
630
637
|
|
|
631
638
|
### API Keys
|
|
632
639
|
|
|
633
|
-
| Variable | Default | Description
|
|
634
|
-
| --------------------- | ----------- |
|
|
635
|
-
| `API_KEY_HEADER_NAME` | `x-api-key` | Request header carrying the API key
|
|
636
|
-
| `ENCRYPTION_SECRET` | — | **Required to issue keys** — `key_encrypted` is AES-256-GCM
|
|
640
|
+
| Variable | Default | Description |
|
|
641
|
+
| --------------------- | ----------- | ----------------------------------------------------------- |
|
|
642
|
+
| `API_KEY_HEADER_NAME` | `x-api-key` | Request header carrying the API key |
|
|
643
|
+
| `ENCRYPTION_SECRET` | — | **Required to issue keys** — `key_encrypted` is AES-256-GCM |
|
|
637
644
|
|
|
638
645
|
A key is stored three ways: its sha256 hash in `key_hash` (what lookups match), a
|
|
639
646
|
short visible prefix in `key_prefix`, and the key itself encrypted in
|
|
@@ -684,24 +691,67 @@ Requires the optional peer dependency `firebase-admin`. Provide **one** of:
|
|
|
684
691
|
|
|
685
692
|
## Document Uploads in 10 Lines
|
|
686
693
|
|
|
694
|
+
Storage is split across two tables. `sys_document_uploads` (`DocumentUploadEntity`)
|
|
695
|
+
is the stored object — name, mime type, size, driver, path, url, `is_public` — and
|
|
696
|
+
every upload writes one row automatically. `sys_documents` (`DocumentEntity`) is just
|
|
697
|
+
the link to one of your records: `upload_id` + `source_type` + `source_id`, no file
|
|
698
|
+
metadata. So one file can hang off several records, and a file can exist before
|
|
699
|
+
anything owns it.
|
|
700
|
+
|
|
701
|
+
`DocumentModule` ships two endpoints. `POST /api/documents/upload` is multipart: it
|
|
702
|
+
takes the files in a `files` field, uploads them through the active driver and returns
|
|
703
|
+
the saved `sys_document_uploads` row of each. `POST /api/documents/set` then attaches
|
|
704
|
+
one of those uploads to a record of yours — `{ upload_id, source_type, source_id }` —
|
|
705
|
+
and returns the `sys_documents` link row, re-sending an existing link rather than
|
|
706
|
+
duplicating it. `documentService.deleteDocument(id)` soft deletes such a link —
|
|
707
|
+
no endpoint, since detaching belongs to the flow that owns the record — and leaves the
|
|
708
|
+
upload and its object alone. `DocumentSubscriber` records who did it under
|
|
709
|
+
`attributes.deleted_by`, as `sys_documents` has no such column.
|
|
710
|
+
|
|
711
|
+
Callers do not choose the folder. They send a `path_identifier` (`invoice`,
|
|
712
|
+
`avatar`, ...) which resolves through the `document.path.<path_identifier>` system
|
|
713
|
+
property to the key prefix — so the bucket layout is configuration, and an unknown
|
|
714
|
+
identifier is a 400 rather than a new folder. The `DOCUMENT_MAX_UPLOAD_*` limits bound
|
|
715
|
+
the request. Any authenticated caller may upload, so gate it in your app when uploads
|
|
716
|
+
are a restricted feature.
|
|
717
|
+
|
|
718
|
+
```ts
|
|
719
|
+
await systemPropertyService.set('document.path.invoice', {
|
|
720
|
+
name: 'Invoice uploads',
|
|
721
|
+
value: 'invoices/2026',
|
|
722
|
+
});
|
|
723
|
+
// path_identifier=invoice -> invoices/2026/<uuid>.pdf
|
|
724
|
+
```
|
|
725
|
+
|
|
726
|
+
To record the file against one of your entities — or for anything else the endpoint
|
|
727
|
+
does not cover — inject `DocumentService`:
|
|
728
|
+
|
|
687
729
|
```ts
|
|
688
730
|
@Post('attachments')
|
|
689
731
|
@UseInterceptors(FilesInterceptor('files'))
|
|
690
732
|
async upload(@UploadedFiles() files: Express.Multer.File[], @CurrentUser() user: RequestUser) {
|
|
691
|
-
|
|
733
|
+
// Rows in sys_document_uploads always; sourceType/sourceId also link them
|
|
734
|
+
// to the ticket through sys_documents.
|
|
735
|
+
return this.documentService.uploadDocuments(files, {
|
|
692
736
|
pathPrefix: 'attachments',
|
|
693
|
-
persist: true, // also records rows in sys_document_details
|
|
694
737
|
createdBy: user.userId,
|
|
695
738
|
sourceType: 'ticket',
|
|
696
739
|
sourceId: ticketUuid,
|
|
697
740
|
});
|
|
698
|
-
return { file_links: fileLinks };
|
|
699
741
|
}
|
|
700
742
|
```
|
|
701
743
|
|
|
702
744
|
Set `DOCUMENT_STORAGE_DRIVER=minio` for a local MinIO bucket (auto-created) or
|
|
703
745
|
`DOCUMENT_STORAGE_DRIVER=s3` for Amazon S3. Switching drivers requires no code change.
|
|
704
746
|
|
|
747
|
+
Because uploading and attaching are separate steps, a file can end up claimed by
|
|
748
|
+
nothing. `CleanOrphanDocumentsJob` (`clean.orphan.documents.job`) sweeps those. Run
|
|
749
|
+
with no payload it collects every upload that has no `sys_documents` row and is more
|
|
750
|
+
than a day old, then re-dispatches itself as `{ id }` per row; each of those deletes
|
|
751
|
+
that object from the bucket and soft deletes its row, so one unreachable file retries
|
|
752
|
+
alone instead of stalling the sweep. Schedule it with a `sys_scheduled_tasks` row under
|
|
753
|
+
that identifier — the module registers the handler but never dispatches it.
|
|
754
|
+
|
|
705
755
|
## PDF Generation (PdfService)
|
|
706
756
|
|
|
707
757
|
`PdfService` (exported by `DocumentModule`) turns an HTML document into PDF
|
|
@@ -727,13 +777,16 @@ const html = await this.remoteRequestService.getApiResponse<string>({
|
|
|
727
777
|
const pdf: Buffer = await this.pdfService.renderHtmlToPdf(html);
|
|
728
778
|
|
|
729
779
|
// …or go straight to bucket storage.
|
|
730
|
-
const file = await this.pdfService.renderHtmlToUploadableFile(
|
|
780
|
+
const file = await this.pdfService.renderHtmlToUploadableFile(
|
|
781
|
+
html,
|
|
782
|
+
'summary-report.pdf',
|
|
783
|
+
);
|
|
731
784
|
const [link] = await this.documentService.uploadDocument([file], {
|
|
732
785
|
pathPrefix: 'reports',
|
|
733
786
|
});
|
|
734
787
|
```
|
|
735
788
|
|
|
736
|
-
**Install puppeteer.** It is an
|
|
789
|
+
**Install puppeteer.** It is an _optional_ peer dependency — nothing imports it
|
|
737
790
|
until a PDF is actually requested, so apps that never generate one skip the
|
|
738
791
|
~170MB Chromium download entirely:
|
|
739
792
|
|
|
@@ -747,7 +800,7 @@ yarn add puppeteer
|
|
|
747
800
|
|
|
748
801
|
- **The template owns the page setup.** `preferCssPageSize` defaults to `true`,
|
|
749
802
|
so an `@page { size: A4; margin: … }` rule in the HTML wins over the `format`
|
|
750
|
-
option. Page
|
|
803
|
+
option. Page _count_ is never specified by anyone — Chromium paginates and
|
|
751
804
|
emits as many pages as the content needs, which is what lets an A4-width
|
|
752
805
|
template grow to any length.
|
|
753
806
|
- **Print media is emulated**, so `@media screen` blocks (the sheet shadow a
|
|
@@ -762,11 +815,11 @@ yarn add puppeteer
|
|
|
762
815
|
|
|
763
816
|
### Configuration
|
|
764
817
|
|
|
765
|
-
| Variable | Default | Description
|
|
766
|
-
| ------------------------- | --------- |
|
|
767
|
-
| `PDF_CHROMIUM_PATH` | _(empty)_ | Path to an existing Chromium/Chrome binary; falls back to puppeteer's bundled one
|
|
768
|
-
| `PDF_CHROMIUM_NO_SANDBOX` | `false` | `true` passes `--no-sandbox`. Needed in most containers; only use with trusted HTML
|
|
769
|
-
| `PDF_RENDER_TIMEOUT_MS` | `30000` | Per-render page load timeout
|
|
818
|
+
| Variable | Default | Description |
|
|
819
|
+
| ------------------------- | --------- | ----------------------------------------------------------------------------------- |
|
|
820
|
+
| `PDF_CHROMIUM_PATH` | _(empty)_ | Path to an existing Chromium/Chrome binary; falls back to puppeteer's bundled one |
|
|
821
|
+
| `PDF_CHROMIUM_NO_SANDBOX` | `false` | `true` passes `--no-sandbox`. Needed in most containers; only use with trusted HTML |
|
|
822
|
+
| `PDF_RENDER_TIMEOUT_MS` | `30000` | Per-render page load timeout |
|
|
770
823
|
|
|
771
824
|
## Raw SQL (SqlService)
|
|
772
825
|
|
|
@@ -954,8 +1007,8 @@ pass the actor to a processor.
|
|
|
954
1007
|
| `POST /admin/api-keys` | admin | `ApiKeyDataProcessor` — returns `{ raw_key, api_key }` |
|
|
955
1008
|
| `POST /admin/api-keys/list` | content reader | `ApiKeyListProcessor` |
|
|
956
1009
|
| `GET /admin/api-keys/:id` | content reader | the row, its `scopes`, and `key` from admin up |
|
|
957
|
-
| `POST /admin/api-keys/:id/disable` | admin | `ApiKeyService.disableApiKey` (reversible)
|
|
958
|
-
| `POST /admin/api-keys/:id/delete` | admin | `ApiKeyService.deleteApiKey` (soft, and revokes)
|
|
1010
|
+
| `POST /admin/api-keys/:id/disable` | admin | `ApiKeyService.disableApiKey` (reversible) |
|
|
1011
|
+
| `POST /admin/api-keys/:id/delete` | admin | `ApiKeyService.deleteApiKey` (soft, and revokes) |
|
|
959
1012
|
|
|
960
1013
|
List endpoints are `POST .../list` with the filter payload in the body (a
|
|
961
1014
|
`CommonListFilterDto`) — see [List Endpoints & Filtering](#list-endpoints--filtering).
|
|
@@ -998,7 +1051,7 @@ registration deliberately sends nothing.
|
|
|
998
1051
|
|
|
999
1052
|
##### Create vs. update
|
|
1000
1053
|
|
|
1001
|
-
Creation DTOs extend `
|
|
1054
|
+
Creation DTOs extend `CommonDataDto`, which carries an optional UUID `id`. Where a
|
|
1002
1055
|
processor supports it, sending an `id` turns the same `POST` into an update.
|
|
1003
1056
|
|
|
1004
1057
|
The processor loads the row when an `id` is present, falls back to `Entity.create()`
|
|
@@ -40,7 +40,7 @@ let AdminTenantUserController = class AdminTenantUserController {
|
|
|
40
40
|
await this.adminAccessService.validateContentReader();
|
|
41
41
|
const user = await user_entity_1.UserEntity.findOne({
|
|
42
42
|
where: { id, user_type: user_type_enum_1.UserType.TENANT_USER },
|
|
43
|
-
relations: {
|
|
43
|
+
relations: { organization: true, userRoles: { role: true } },
|
|
44
44
|
});
|
|
45
45
|
if (!user)
|
|
46
46
|
throw new common_1.NotFoundException('No client user exists for this id');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin.tenant.user.controller.js","sourceRoot":"","sources":["../../../src/admin/controllers/admin.tenant.user.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAQwB;AACxB,6CAA+C;AAC/C,iEAA6D;AAC7D,oEAA2D;AAC3D,2EAAsE;AACtE,mEAA6D;AAC7D,qEAA+D;AAC/D,uEAAiE;AACjE,oFAA8E;AAC9E,wFAAkF;AAClF,4FAAsF;AACtF,wFAAkF;AAClF,2EAAsE;AACtE,yEAAqE;AACrE,2GAAoG;AACpG,mEAA+D;AAGxD,IAAM,yBAAyB,GAA/B,MAAM,yBAAyB;IACpC,YACqB,kBAAsC,EACtC,aAA4B,EAC5B,0BAAsD,EACtD,UAAsB;QAHtB,uBAAkB,GAAlB,kBAAkB,CAAoB;QACtC,kBAAa,GAAb,aAAa,CAAe;QAC5B,+BAA0B,GAA1B,0BAA0B,CAA4B;QACtD,eAAU,GAAV,UAAU,CAAY;IACxC,CAAC;IAQE,AAAN,KAAK,CAAC,gBAAgB,CAAU,EAAE,EAAE,EAAmB;QACrD,MAAM,IAAI,CAAC,kBAAkB,CAAC,qBAAqB,EAAE,CAAC;QAEtD,MAAM,IAAI,GAAG,MAAM,wBAAU,CAAC,OAAO,CAAC;YACpC,KAAK,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,yBAAQ,CAAC,WAAW,EAAE;YAC9C,SAAS,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"admin.tenant.user.controller.js","sourceRoot":"","sources":["../../../src/admin/controllers/admin.tenant.user.controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export declare class AddAdminUserDto extends
|
|
1
|
+
import { CommonDataDto } from '../../common/dtos/common.data.dto';
|
|
2
|
+
export declare class AddAdminUserDto extends CommonDataDto {
|
|
3
3
|
name: string;
|
|
4
4
|
email: string;
|
|
5
5
|
username: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add.admin.user.dto.d.ts","sourceRoot":"","sources":["../../../src/admin/dtos/add.admin.user.dto.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"add.admin.user.dto.d.ts","sourceRoot":"","sources":["../../../src/admin/dtos/add.admin.user.dto.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAGlE,qBAAa,eAAgB,SAAQ,aAAa;IAIhD,IAAI,EAAE,MAAM,CAAC;IAKb,KAAK,EAAE,MAAM,CAAC;IAKd,QAAQ,EAAE,MAAM,CAAC;IAOjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAUlB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB"}
|
|
@@ -12,8 +12,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
12
12
|
exports.AddAdminUserDto = void 0;
|
|
13
13
|
const class_validator_1 = require("class-validator");
|
|
14
14
|
const swagger_1 = require("@nestjs/swagger");
|
|
15
|
-
const
|
|
16
|
-
class AddAdminUserDto extends
|
|
15
|
+
const common_data_dto_1 = require("../../common/dtos/common.data.dto");
|
|
16
|
+
class AddAdminUserDto extends common_data_dto_1.CommonDataDto {
|
|
17
17
|
}
|
|
18
18
|
exports.AddAdminUserDto = AddAdminUserDto;
|
|
19
19
|
__decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add.admin.user.dto.js","sourceRoot":"","sources":["../../../src/admin/dtos/add.admin.user.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qDAUyB;AACzB,6CAA8C;AAC9C,
|
|
1
|
+
{"version":3,"file":"add.admin.user.dto.js","sourceRoot":"","sources":["../../../src/admin/dtos/add.admin.user.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qDAUyB;AACzB,6CAA8C;AAC9C,uEAAkE;AAGlE,MAAa,eAAgB,SAAQ,+BAAa;CAgCjD;AAhCD,0CAgCC;AA5BC;IAHC,IAAA,qBAAW,EAAC,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;IACpC,IAAA,0BAAQ,GAAE;IACV,IAAA,2BAAS,EAAC,GAAG,CAAC;;6CACF;AAKb;IAHC,IAAA,qBAAW,EAAC,EAAE,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC5C,IAAA,yBAAO,GAAE;IACT,IAAA,2BAAS,EAAC,GAAG,CAAC;;8CACD;AAKd;IAHC,IAAA,qBAAW,EAAC,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;IACpC,IAAA,0BAAQ,GAAE;IACV,IAAA,2BAAS,EAAC,GAAG,CAAC;;iDACE;AAOjB;IALC,IAAA,qBAAW,EAAC,EAAE,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;IACrD,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;IACV,IAAA,2BAAS,EAAC,CAAC,CAAC;IACZ,IAAA,2BAAS,EAAC,EAAE,CAAC;;iDACI;AAUlB;IARC,IAAA,qBAAW,EAAC;QACX,IAAI,EAAE,CAAC,MAAM,CAAC;QACd,MAAM,EAAE,MAAM;QACd,WAAW,EAAE,gDAAgD;KAC9D,CAAC;IACD,IAAA,yBAAO,GAAE;IACT,IAAA,8BAAY,EAAC,CAAC,CAAC;IACf,IAAA,wBAAM,EAAC,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;;iDACX"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CommonDataDto } from '../../common/dtos/common.data.dto';
|
|
2
2
|
import { CatchUpPolicy, OverlapPolicy, ScheduleKind } from '../../common/enums/schedule.enum';
|
|
3
3
|
export declare class ScheduleDto {
|
|
4
4
|
kind: ScheduleKind;
|
|
@@ -8,7 +8,7 @@ export declare class ScheduleDto {
|
|
|
8
8
|
sec?: number;
|
|
9
9
|
expression?: string;
|
|
10
10
|
}
|
|
11
|
-
export declare class AddScheduledTaskDto extends
|
|
11
|
+
export declare class AddScheduledTaskDto extends CommonDataDto {
|
|
12
12
|
identifier: string;
|
|
13
13
|
name: string;
|
|
14
14
|
start_from?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add.scheduled.task.dto.d.ts","sourceRoot":"","sources":["../../../src/admin/dtos/add.scheduled.task.dto.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"add.scheduled.task.dto.d.ts","sourceRoot":"","sources":["../../../src/admin/dtos/add.scheduled.task.dto.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,EACL,aAAa,EACb,aAAa,EAEb,YAAY,EACb,MAAM,kCAAkC,CAAC;AAW1C,qBAAa,WAAW;IAGtB,IAAI,EAAE,YAAY,CAAC;IAOnB,GAAG,CAAC,EAAE,MAAM,CAAC;IAOb,IAAI,CAAC,EAAE,MAAM,CAAC;IAOd,GAAG,CAAC,EAAE,MAAM,CAAC;IAOb,GAAG,CAAC,EAAE,MAAM,CAAC;IASb,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAOD,qBAAa,mBAAoB,SAAQ,aAAa;IAQpD,UAAU,EAAE,MAAM,CAAC;IAMnB,IAAI,EAAE,MAAM,CAAC;IASb,UAAU,CAAC,EAAE,MAAM,CAAC;IAUpB,QAAQ,EAAE,WAAW,CAAC;IAStB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAQlB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAUlC,eAAe,CAAC,EAAE,aAAa,CAAC;IAUhC,WAAW,CAAC,EAAE,MAAM,CAAC;IAKrB,cAAc,CAAC,EAAE,aAAa,CAAC;IAU/B,UAAU,CAAC,EAAE,MAAM,CAAC;IAKpB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB"}
|
|
@@ -13,7 +13,7 @@ exports.AddScheduledTaskDto = exports.ScheduleDto = void 0;
|
|
|
13
13
|
const class_transformer_1 = require("class-transformer");
|
|
14
14
|
const class_validator_1 = require("class-validator");
|
|
15
15
|
const swagger_1 = require("@nestjs/swagger");
|
|
16
|
-
const
|
|
16
|
+
const common_data_dto_1 = require("../../common/dtos/common.data.dto");
|
|
17
17
|
const schedule_enum_1 = require("../../common/enums/schedule.enum");
|
|
18
18
|
const schedule_validator_1 = require("../../common/validators/schedule.validator");
|
|
19
19
|
class ScheduleDto {
|
|
@@ -66,7 +66,7 @@ __decorate([
|
|
|
66
66
|
(0, schedule_validator_1.IsCronExpression)(),
|
|
67
67
|
__metadata("design:type", String)
|
|
68
68
|
], ScheduleDto.prototype, "expression", void 0);
|
|
69
|
-
class AddScheduledTaskDto extends
|
|
69
|
+
class AddScheduledTaskDto extends common_data_dto_1.CommonDataDto {
|
|
70
70
|
}
|
|
71
71
|
exports.AddScheduledTaskDto = AddScheduledTaskDto;
|
|
72
72
|
__decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add.scheduled.task.dto.js","sourceRoot":"","sources":["../../../src/admin/dtos/add.scheduled.task.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,yDAAyC;AACzC,qDAayB;AACzB,6CAAmE;AACnE,
|
|
1
|
+
{"version":3,"file":"add.scheduled.task.dto.js","sourceRoot":"","sources":["../../../src/admin/dtos/add.scheduled.task.dto.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export declare class AddScopeDto extends
|
|
1
|
+
import { CommonDataDto } from '../../common/dtos/common.data.dto';
|
|
2
|
+
export declare class AddScopeDto extends CommonDataDto {
|
|
3
3
|
identifier: string;
|
|
4
4
|
name: string;
|
|
5
5
|
description?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add.scope.dto.d.ts","sourceRoot":"","sources":["../../../src/admin/dtos/add.scope.dto.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"add.scope.dto.d.ts","sourceRoot":"","sources":["../../../src/admin/dtos/add.scope.dto.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAOlE,qBAAa,WAAY,SAAQ,aAAa;IAa5C,UAAU,EAAE,MAAM,CAAC;IAMnB,IAAI,EAAE,MAAM,CAAC;IAOb,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB"}
|
|
@@ -12,8 +12,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
12
12
|
exports.AddScopeDto = void 0;
|
|
13
13
|
const class_validator_1 = require("class-validator");
|
|
14
14
|
const swagger_1 = require("@nestjs/swagger");
|
|
15
|
-
const
|
|
16
|
-
class AddScopeDto extends
|
|
15
|
+
const common_data_dto_1 = require("../../common/dtos/common.data.dto");
|
|
16
|
+
class AddScopeDto extends common_data_dto_1.CommonDataDto {
|
|
17
17
|
}
|
|
18
18
|
exports.AddScopeDto = AddScopeDto;
|
|
19
19
|
__decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add.scope.dto.js","sourceRoot":"","sources":["../../../src/admin/dtos/add.scope.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qDAMyB;AACzB,6CAAmE;AACnE,
|
|
1
|
+
{"version":3,"file":"add.scope.dto.js","sourceRoot":"","sources":["../../../src/admin/dtos/add.scope.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qDAMyB;AACzB,6CAAmE;AACnE,uEAAkE;AAOlE,MAAa,WAAY,SAAQ,+BAAa;CA2B7C;AA3BD,kCA2BC;AAdC;IAZC,IAAA,qBAAW,EAAC;QACX,OAAO,EAAE,kBAAkB;QAC3B,WAAW,EACT,iHAAiH;KACpH,CAAC;IACD,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;IACZ,IAAA,2BAAS,EAAC,GAAG,CAAC;IACd,IAAA,yBAAO,EAAC,kBAAkB,EAAE;QAC3B,OAAO,EACL,iGAAiG;KACpG,CAAC;;+CACiB;AAMnB;IAJC,IAAA,qBAAW,EAAC,EAAE,OAAO,EAAE,oBAAoB,EAAE,CAAC;IAC9C,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;IACZ,IAAA,2BAAS,EAAC,GAAG,CAAC;;yCACF;AAOb;IALC,IAAA,6BAAmB,EAAC;QACnB,OAAO,EAAE,+CAA+C;KACzD,CAAC;IACD,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;gDACU"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export declare class AddSystemRoleDto extends
|
|
1
|
+
import { CommonDataDto } from '../../common/dtos/common.data.dto';
|
|
2
|
+
export declare class AddSystemRoleDto extends CommonDataDto {
|
|
3
3
|
identifier: string;
|
|
4
4
|
name: string;
|
|
5
5
|
description?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add.system.role.dto.d.ts","sourceRoot":"","sources":["../../../src/admin/dtos/add.system.role.dto.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"add.system.role.dto.d.ts","sourceRoot":"","sources":["../../../src/admin/dtos/add.system.role.dto.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAOlE,qBAAa,gBAAiB,SAAQ,aAAa;IAajD,UAAU,EAAE,MAAM,CAAC;IAMnB,IAAI,EAAE,MAAM,CAAC;IAOb,WAAW,CAAC,EAAE,MAAM,CAAC;IASrB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB"}
|
|
@@ -12,8 +12,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
12
12
|
exports.AddSystemRoleDto = void 0;
|
|
13
13
|
const class_validator_1 = require("class-validator");
|
|
14
14
|
const swagger_1 = require("@nestjs/swagger");
|
|
15
|
-
const
|
|
16
|
-
class AddSystemRoleDto extends
|
|
15
|
+
const common_data_dto_1 = require("../../common/dtos/common.data.dto");
|
|
16
|
+
class AddSystemRoleDto extends common_data_dto_1.CommonDataDto {
|
|
17
17
|
}
|
|
18
18
|
exports.AddSystemRoleDto = AddSystemRoleDto;
|
|
19
19
|
__decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add.system.role.dto.js","sourceRoot":"","sources":["../../../src/admin/dtos/add.system.role.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qDAOyB;AACzB,6CAAmE;AACnE,
|
|
1
|
+
{"version":3,"file":"add.system.role.dto.js","sourceRoot":"","sources":["../../../src/admin/dtos/add.system.role.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qDAOyB;AACzB,6CAAmE;AACnE,uEAAkE;AAOlE,MAAa,gBAAiB,SAAQ,+BAAa;CAoClD;AApCD,4CAoCC;AAvBC;IAZC,IAAA,qBAAW,EAAC;QACX,OAAO,EAAE,WAAW;QACpB,WAAW,EACT,+GAA+G;KAClH,CAAC;IACD,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;IACZ,IAAA,2BAAS,EAAC,GAAG,CAAC;IACd,IAAA,yBAAO,EAAC,iBAAiB,EAAE;QAC1B,OAAO,EACL,8FAA8F;KACjG,CAAC;;oDACiB;AAMnB;IAJC,IAAA,qBAAW,EAAC,EAAE,OAAO,EAAE,oBAAoB,EAAE,CAAC;IAC9C,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;IACZ,IAAA,2BAAS,EAAC,GAAG,CAAC;;8CACF;AAOb;IALC,IAAA,6BAAmB,EAAC;QACnB,OAAO,EAAE,sDAAsD;KAChE,CAAC;IACD,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;qDACU;AASrB;IAPC,IAAA,6BAAmB,EAAC;QACnB,OAAO,EAAE,IAAI;QACb,WAAW,EACT,gGAAgG;KACnG,CAAC;IACD,IAAA,4BAAU,GAAE;IACZ,IAAA,2BAAS,GAAE;;mDACQ"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export declare class AddTenantDto extends
|
|
1
|
+
import { CommonDataDto } from '../../common/dtos/common.data.dto';
|
|
2
|
+
export declare class AddTenantDto extends CommonDataDto {
|
|
3
3
|
name: string;
|
|
4
4
|
slug: string;
|
|
5
5
|
domain?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add.tenant.dto.d.ts","sourceRoot":"","sources":["../../../src/admin/dtos/add.tenant.dto.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"add.tenant.dto.d.ts","sourceRoot":"","sources":["../../../src/admin/dtos/add.tenant.dto.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAOlE,qBAAa,YAAa,SAAQ,aAAa;IAK7C,IAAI,EAAE,MAAM,CAAC;IAab,IAAI,EAAE,MAAM,CAAC;IAMb,MAAM,CAAC,EAAE,MAAM,CAAC;IAMhB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAMlB,SAAS,CAAC,EAAE,MAAM,CAAC;IAMnB,WAAW,CAAC,EAAE,MAAM,CAAC;IAMrB,aAAa,CAAC,EAAE,MAAM,CAAC;IAMvB,aAAa,CAAC,EAAE,MAAM,CAAC;IAMvB,IAAI,CAAC,EAAE,MAAM,CAAC;IAMd,KAAK,CAAC,EAAE,MAAM,CAAC;IAMf,WAAW,CAAC,EAAE,MAAM,CAAC;IAMrB,OAAO,CAAC,EAAE,MAAM,CAAC;IAQjB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAK7B,SAAS,CAAC,EAAE,OAAO,CAAC;IAKpB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAYrC,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB"}
|
|
@@ -12,8 +12,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
12
12
|
exports.AddTenantDto = void 0;
|
|
13
13
|
const class_validator_1 = require("class-validator");
|
|
14
14
|
const swagger_1 = require("@nestjs/swagger");
|
|
15
|
-
const
|
|
16
|
-
class AddTenantDto extends
|
|
15
|
+
const common_data_dto_1 = require("../../common/dtos/common.data.dto");
|
|
16
|
+
class AddTenantDto extends common_data_dto_1.CommonDataDto {
|
|
17
17
|
}
|
|
18
18
|
exports.AddTenantDto = AddTenantDto;
|
|
19
19
|
__decorate([
|