@solidxai/core 0.1.5-beta.4 → 0.1.5

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/CHANGELOG.md ADDED
@@ -0,0 +1,87 @@
1
+ # Changelog
2
+
3
+ ## [0.1.5] - 2026-03-13
4
+
5
+ ### Breaking Changes
6
+
7
+ - **Date/time handling**: All base entity timestamp columns (`createdAt`, `updatedAt`, `deletedAt`, `publishedAt`) now use a UTC passthrough transformer. Previously, timestamps were adjusted to the configured wall-clock timezone when read back. They are now always returned as UTC. Applications that relied on timezone-adjusted timestamps from `CommonEntity` or `LegacyCommonEntity` will see different date values.
8
+ - **Passwordless registration configuration**: `IAM_PASSWORD_LESS_REGISTRATION_VALIDATE_WHAT` is now treated as a plain string (e.g. `"email"` or `"mobile"`) instead of a comma-separated list. Multi-value configurations are no longer supported.
9
+ - **Local Passport strategy removed**: `LocalStrategy` / `LocalAuthGuard` have been deleted. Applications that depended on the local passport strategy must migrate away from it.
10
+ ---
11
+
12
+ ### New Features
13
+
14
+ #### Authentication & Security
15
+ - **Account blocking on repeated login failures**: A new `failedLoginAttempts` counter column is tracked on the `User` entity. When the counter exceeds the configured threshold (`IAM_MAX_FAILED_LOGIN_ATTEMPTS`, default `0` = disabled), the user receives a `ForbiddenException` with message `"Your account has been blocked due to multiple failed login attempts."` The check runs on password login, OTP login, and Google OAuth login. The counter resets to 0 on a successful login.
16
+ - **Active-user check on OTP login**: Initiating a mobile OTP login now checks `user.active` upfront. Inactive users receive an `UnauthorizedException("User is inactive.")` before an OTP is ever generated.
17
+ - **Per-user dummy OTP**: The dummy OTP can now be enabled on a per-user basis, in addition to the global setting. This allows test/development accounts to be individually configured without affecting all users.
18
+ - **New system setting exposed**: `maxFailedLoginAttempts` (env: `IAM_MAX_FAILED_LOGIN_ATTEMPTS`) is now surfaced as a `SystemAdminReadonly` setting.
19
+
20
+ #### Layout & Views
21
+ - **`viewModes` in layout response**: `fetchLayout()` now returns a `viewModes` array alongside the layout payload. Each entry describes an alternative view (list, kanban, or tree) available for the current model, containing `{ type, menuItemId, menuItemName, actionId, actionName }`. This allows clients to offer view-switcher UI without a separate API call.
22
+
23
+ #### Saved Filters
24
+ - **`isSeeded` flag on SavedFilters**: A new `isSeeded` boolean column (default `false`) has been added to the `SavedFilters` entity. Filters created by the seeder automatically have `isSeeded: true`, making it easy to distinguish programmatic seed data from user-created filters. Both create and update DTOs accept this field.
25
+
26
+ #### Aggregate Queries
27
+ - **Security-aware aggregate methods**: `SolidBaseRepository` now applies security rules (row-level access control) before executing `count`, `average`, `sum`, `min`, `max`, `increment`, and `decrement` operations. Previously these methods bypassed security rules entirely. `increment` and `decrement` now only mutate rows the current user is allowed to access.
28
+
29
+ #### Filter Field Granularity
30
+ - **Date field granularity in filters**: Filter keys can now include a granularity suffix using colon syntax (e.g. `createdAt:month`, `createdAt:day`, `createdAt:year`). The backend generates a DB-level date truncation expression for the specified granularity. Unsupported aliases return a `BadRequestException`. Granularity is not supported on relation/join fields.
31
+ - **`groupValue` in group meta response**: Grouped query results now include `groupValue` (the raw, normalised group key) alongside `groupName` in each group's metadata. This allows consumers to use the raw value for programmatic filtering without re-deriving it from the display name. Date group values are normalised to ISO date format (`YYYY-MM-DD`).
32
+
33
+ #### Role Management
34
+ - **`PATCH /role-metadata/:id` endpoint**: A new partial update endpoint has been added to the role metadata controller, allowing partial role updates without sending the full role object.
35
+
36
+ #### Version Info
37
+ - **`GET /info` endpoint**: A new `InfoService` and controller expose the installed versions of `solid-core`, `solid-core-ui`, and `solid-code-builder`, indicating whether each package is resolved from a local path or npm.
38
+
39
+ ---
40
+
41
+ ### Bug Fixes
42
+
43
+ - **Many-to-many `link`/`unlink` commands**: Previously, `link` and `unlink` on many-to-many relation fields would load the entire association and replace it, causing data loss and N+1 queries. Both commands now use TypeORM's `QueryBuilder.relation().add()` / `.remove()` to perform targeted join-table mutations without touching the rest of the association.
44
+ - **One-to-many `link`/`unlink` commands**: Same fix applied — targeted relation mutations replace the previous full-collection replacement approach.
45
+ - **`fetchLayout` view modes query**: Fixed an issue where the initial view modes query filtered by menu item role access and `modelName`, which produced incorrect results. The query now resolves the model and module IDs from the menu item and queries `ActionMetadata` directly.
46
+ - **Seeder filter validation**: The seeder now validates that each saved filter's `filterQueryJson` is an object with a top-level `$or` or `$and` key before upserting. Invalid filter JSON fails with a clear error rather than silently seeding malformed data.
47
+ - **`solid-core-metadata.json` corrections**: Fixed stale view user keys for chatter models (`chatter-message-list-view` → `chatterMessage-list-view`); removed a stale `locale-list-view` action definition; cleared incorrect `actionUserKey` values on top-level menu items that pointed to non-existent actions.
48
+ - **AI interaction entity**: The `user` relation on `AiInteraction` is now nullable, allowing AI interactions to be recorded without a linked user.
49
+
50
+ ---
51
+
52
+ ### Improvements
53
+
54
+ #### Authentication
55
+ - **Microservice adapter access token caching**: `SolidMicroserviceAdapter` now caches the access token and reuses it across requests, avoiding redundant re-authentication on every call.
56
+ - **JWT token optimisation**: Minor optimisation to JWT handling in the microservice adapter.
57
+ - **Dummy OTP optimisation**: After a successful OTP login, the OTP is no longer cleared when a `dummyOtp` is configured in settings. This prevents the dummy OTP from being consumed on first use in test/development environments.
58
+ - **OTP registration flow refactored**: Internal OTP registration logic split into focused private methods (`upsertUserWithRegistrationVerificationTokens`, `assignRegistrationOtp`, etc.) for maintainability.
59
+
60
+ #### Security
61
+ - **CSP tightened**: The default Content Security Policy now explicitly sets `style-src: 'self'`, removing the implicit `unsafe-inline` allowance for stylesheets.
62
+
63
+ #### Database
64
+ - **New indexes on Chatter tables**: A composite index on `ChatterMessage(coModelName, coModelEntityId)` and an index on `ChatterMessageDetails(chatterMessage)` have been added, improving lookup performance for the typical chatter query pattern.
65
+
66
+ #### Messaging
67
+ - **RabbitMQ subscriber prefetch**: The RabbitMQ subscriber now sets a prefetch count, allowing fairer concurrency by preventing a single consumer from hogging all unacknowledged messages.
68
+
69
+ #### Request Handling
70
+ - **Request body size limit raised to 10 MB**: `SolidCoreModule` now configures `express.json` and `express.urlencoded` middleware with a `10mb` limit globally.
71
+
72
+ #### S3
73
+ - **`ResolveS3UrlDto` simplified**: The model/field entity-lookup-based resolution flow has been removed. The DTO now only requires `s3Key` and `isPrivate`. The old `modelName`, `fieldName`, and `fileType` fields are gone.
74
+
75
+ #### Developer Experience
76
+ - **Seeder error output**: On seed failure, a structured JSON block is now printed to stdout containing the module name, step name, error name, message, and the first 8 lines of the stack trace. The error is then re-thrown.
77
+ - **`modelSequenceFormViewChangeHandler` wired up**: The field-change hook for the Model Sequence form view in the seed metadata now correctly points to `"modelSequenceFormViewChangeHandler"`.
78
+
79
+ #### Dependencies
80
+ - **Playwright moved to optional peer dependency**: `@playwright/test` removed from `devDependencies`. `playwright` is now listed as an optional peer dependency — consumers who need it for testing must install it explicitly.
81
+ - **`form-data` added as a direct dependency**.
82
+
83
+ ---
84
+
85
+ ## [0.1.4]
86
+
87
+ Previous stable release.
@@ -26,15 +26,15 @@ __decorate([
26
26
  __metadata("design:type", Number)
27
27
  ], CommonEntity.prototype, "id", void 0);
28
28
  __decorate([
29
- (0, typeorm_1.CreateDateColumn)({ name: "created_at", transformer: local_date_time_transformer_1.UtcDateTimeTransformer }),
29
+ (0, typeorm_1.CreateDateColumn)({ name: "created_at", transformer: local_date_time_transformer_1.LocalDateTimeTransformer }),
30
30
  __metadata("design:type", Date)
31
31
  ], CommonEntity.prototype, "createdAt", void 0);
32
32
  __decorate([
33
- (0, typeorm_1.UpdateDateColumn)({ name: "updated_at", transformer: local_date_time_transformer_1.UtcDateTimeTransformer }),
33
+ (0, typeorm_1.UpdateDateColumn)({ name: "updated_at", transformer: local_date_time_transformer_1.LocalDateTimeTransformer }),
34
34
  __metadata("design:type", Date)
35
35
  ], CommonEntity.prototype, "updatedAt", void 0);
36
36
  __decorate([
37
- (0, typeorm_1.DeleteDateColumn)({ name: "deleted_at", transformer: local_date_time_transformer_1.UtcDateTimeTransformer }),
37
+ (0, typeorm_1.DeleteDateColumn)({ name: "deleted_at", transformer: local_date_time_transformer_1.LocalDateTimeTransformer }),
38
38
  (0, typeorm_1.Index)(),
39
39
  __metadata("design:type", Date)
40
40
  ], CommonEntity.prototype, "deletedAt", void 0);
@@ -44,7 +44,7 @@ __decorate([
44
44
  ], CommonEntity.prototype, "deletedTracker", void 0);
45
45
  __decorate([
46
46
  (0, class_transformer_1.Expose)(),
47
- (0, typeorm_1.Column)({ name: 'published_at', default: null, nullable: true, transformer: local_date_time_transformer_1.UtcDateTimeTransformer }),
47
+ (0, typeorm_1.Column)({ name: 'published_at', default: null, nullable: true, transformer: local_date_time_transformer_1.LocalDateTimeTransformer }),
48
48
  __metadata("design:type", Date)
49
49
  ], CommonEntity.prototype, "publishedAt", void 0);
50
50
  __decorate([
@@ -1 +1 @@
1
- {"version":3,"file":"common.entity.js","sourceRoot":"","sources":["../../src/entities/common.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,qCAAsH;AACtH,yDAAoD;AACpD,qGAA8F;AAGvF,IAAe,YAAY,GAA3B,MAAe,YAAY;;;;CA+CjC,CAAA;AA/CqB,oCAAY;AAG9B;IAFC,IAAA,0BAAM,GAAE;IACR,IAAA,gCAAsB,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;;wCAClC;AAGV;IADC,IAAA,0BAAgB,EAAC,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,oDAAsB,EAAE,CAAC;8BACnE,IAAI;+CAAC;AAGhB;IADC,IAAA,0BAAgB,EAAC,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,oDAAsB,EAAE,CAAC;8BACnE,IAAI;+CAAC;AAIhB;IAFC,IAAA,0BAAgB,EAAC,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,oDAAsB,EAAE,CAAC;IAC7E,IAAA,eAAK,GAAE;8BACG,IAAI;+CAAC;AAGhB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;;oDACpC;AAIvB;IAFC,IAAA,0BAAM,GAAE;IACR,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,oDAAsB,EAAE,CAAC;8BACxF,IAAI;iDAAC;AAIlB;IAFC,IAAA,0BAAM,GAAE;IACR,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;;gDAC7C;AAInB;IAFC,IAAA,0BAAM,GAAE;IACR,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,0BAA0B,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;;2DAC3C;AAc9B;IAFC,IAAA,0BAAM,GAAE;IACR,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;+CAChC;AAIlB;IAFC,IAAA,0BAAM,GAAE;IACR,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;+CAChC;uBA9CA,YAAY;IADjC,IAAA,2BAAO,GAAE;GACY,YAAY,CA+CjC","sourcesContent":["import { Column, CreateDateColumn, DeleteDateColumn, Index, PrimaryGeneratedColumn, UpdateDateColumn } from \"typeorm\";\nimport { Exclude, Expose } from \"class-transformer\";\nimport { UtcDateTimeTransformer } from \"src/transformers/typeorm/local-date-time-transformer\";\n\n@Exclude()\nexport abstract class CommonEntity {\n @Expose()\n @PrimaryGeneratedColumn({ type: 'integer' })\n id: number\n\n @CreateDateColumn({ name: \"created_at\", transformer: UtcDateTimeTransformer })\n createdAt: Date;\n\n @UpdateDateColumn({ name: \"updated_at\", transformer: UtcDateTimeTransformer })\n updatedAt: Date;\n\n @DeleteDateColumn({ name: \"deleted_at\", transformer: UtcDateTimeTransformer })\n @Index()\n deletedAt: Date;\n\n @Column({ name: \"deletedTracker\", default: \"not-deleted\" })\n deletedTracker: string;\n\n @Expose()\n @Column({ name: 'published_at', default: null, nullable: true, transformer: UtcDateTimeTransformer })\n publishedAt: Date;\n\n @Expose()\n @Column({ type: \"varchar\", name: 'locale_name', default: null })\n localeName: string;\n\n @Expose()\n @Column({ type: \"int\", name: 'default_entity_locale_id', default: null })\n defaultEntityLocaleId: number;\n\n // @Expose()\n // @Type( () => require('./user.entity').User?.default ?? require('./user.entity').User )\n // @ManyToOne(() => require('./user.entity').User?.default ?? require('./user.entity').User, { nullable: true })\n // createdBy: User;\n\n // @Expose()\n // @Type( () => require('./user.entity').User?.default ?? require('./user.entity').User )\n // @ManyToOne(() => require('./user.entity').User?.default ?? require('./user.entity').User, { nullable: true })\n // updatedBy: User;\n\n @Expose()\n @Column({ name: `created_by_id`, nullable: true })\n createdBy: number;\n\n @Expose()\n @Column({ name: `updated_by_id`, nullable: true })\n updatedBy: number;\n}\n"]}
1
+ {"version":3,"file":"common.entity.js","sourceRoot":"","sources":["../../src/entities/common.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,qCAAsH;AACtH,yDAAoD;AACpD,qGAAwH;AAGjH,IAAe,YAAY,GAA3B,MAAe,YAAY;;;;CA+CjC,CAAA;AA/CqB,oCAAY;AAG9B;IAFC,IAAA,0BAAM,GAAE;IACR,IAAA,gCAAsB,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;;wCAClC;AAGV;IADC,IAAA,0BAAgB,EAAC,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,sDAAwB,EAAE,CAAC;8BACrE,IAAI;+CAAC;AAGhB;IADC,IAAA,0BAAgB,EAAC,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,sDAAwB,EAAE,CAAC;8BACrE,IAAI;+CAAC;AAIhB;IAFC,IAAA,0BAAgB,EAAC,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,sDAAwB,EAAE,CAAC;IAC/E,IAAA,eAAK,GAAE;8BACG,IAAI;+CAAC;AAGhB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;;oDACpC;AAIvB;IAFC,IAAA,0BAAM,GAAE;IACR,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,sDAAwB,EAAE,CAAC;8BAC1F,IAAI;iDAAC;AAIlB;IAFC,IAAA,0BAAM,GAAE;IACR,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;;gDAC7C;AAInB;IAFC,IAAA,0BAAM,GAAE;IACR,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,0BAA0B,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;;2DAC3C;AAc9B;IAFC,IAAA,0BAAM,GAAE;IACR,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;+CAChC;AAIlB;IAFC,IAAA,0BAAM,GAAE;IACR,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;+CAChC;uBA9CA,YAAY;IADjC,IAAA,2BAAO,GAAE;GACY,YAAY,CA+CjC","sourcesContent":["import { Column, CreateDateColumn, DeleteDateColumn, Index, PrimaryGeneratedColumn, UpdateDateColumn } from \"typeorm\";\nimport { Exclude, Expose } from \"class-transformer\";\nimport { LocalDateTimeTransformer, UtcDateTimeTransformer } from \"src/transformers/typeorm/local-date-time-transformer\";\n\n@Exclude()\nexport abstract class CommonEntity {\n @Expose()\n @PrimaryGeneratedColumn({ type: 'integer' })\n id: number\n\n @CreateDateColumn({ name: \"created_at\", transformer: LocalDateTimeTransformer })\n createdAt: Date;\n\n @UpdateDateColumn({ name: \"updated_at\", transformer: LocalDateTimeTransformer })\n updatedAt: Date;\n\n @DeleteDateColumn({ name: \"deleted_at\", transformer: LocalDateTimeTransformer })\n @Index()\n deletedAt: Date;\n\n @Column({ name: \"deletedTracker\", default: \"not-deleted\" })\n deletedTracker: string;\n\n @Expose()\n @Column({ name: 'published_at', default: null, nullable: true, transformer: LocalDateTimeTransformer })\n publishedAt: Date;\n\n @Expose()\n @Column({ type: \"varchar\", name: 'locale_name', default: null })\n localeName: string;\n\n @Expose()\n @Column({ type: \"int\", name: 'default_entity_locale_id', default: null })\n defaultEntityLocaleId: number;\n\n // @Expose()\n // @Type( () => require('./user.entity').User?.default ?? require('./user.entity').User )\n // @ManyToOne(() => require('./user.entity').User?.default ?? require('./user.entity').User, { nullable: true })\n // createdBy: User;\n\n // @Expose()\n // @Type( () => require('./user.entity').User?.default ?? require('./user.entity').User )\n // @ManyToOne(() => require('./user.entity').User?.default ?? require('./user.entity').User, { nullable: true })\n // updatedBy: User;\n\n @Expose()\n @Column({ name: `created_by_id`, nullable: true })\n createdBy: number;\n\n @Expose()\n @Column({ name: `updated_by_id`, nullable: true })\n updatedBy: number;\n}\n"]}
@@ -22,15 +22,15 @@ let LegacyCommonEntity = class LegacyCommonEntity {
22
22
  };
23
23
  exports.LegacyCommonEntity = LegacyCommonEntity;
24
24
  __decorate([
25
- (0, typeorm_1.CreateDateColumn)({ name: `${exports.LEGACY_TABLE_FIELDS_PREFIX}_created_at`, transformer: local_date_time_transformer_1.UtcDateTimeTransformer }),
25
+ (0, typeorm_1.CreateDateColumn)({ name: `${exports.LEGACY_TABLE_FIELDS_PREFIX}_created_at`, transformer: local_date_time_transformer_1.LocalDateTimeTransformer }),
26
26
  __metadata("design:type", Date)
27
27
  ], LegacyCommonEntity.prototype, "createdAt", void 0);
28
28
  __decorate([
29
- (0, typeorm_1.UpdateDateColumn)({ name: `${exports.LEGACY_TABLE_FIELDS_PREFIX}_updated_at`, transformer: local_date_time_transformer_1.UtcDateTimeTransformer }),
29
+ (0, typeorm_1.UpdateDateColumn)({ name: `${exports.LEGACY_TABLE_FIELDS_PREFIX}_updated_at`, transformer: local_date_time_transformer_1.LocalDateTimeTransformer }),
30
30
  __metadata("design:type", Date)
31
31
  ], LegacyCommonEntity.prototype, "updatedAt", void 0);
32
32
  __decorate([
33
- (0, typeorm_1.DeleteDateColumn)({ name: `${exports.LEGACY_TABLE_FIELDS_PREFIX}_deleted_at`, transformer: local_date_time_transformer_1.UtcDateTimeTransformer }),
33
+ (0, typeorm_1.DeleteDateColumn)({ name: `${exports.LEGACY_TABLE_FIELDS_PREFIX}_deleted_at`, transformer: local_date_time_transformer_1.LocalDateTimeTransformer }),
34
34
  (0, typeorm_1.Index)(),
35
35
  __metadata("design:type", Date)
36
36
  ], LegacyCommonEntity.prototype, "deletedAt", void 0);
@@ -40,7 +40,7 @@ __decorate([
40
40
  ], LegacyCommonEntity.prototype, "deletedTracker", void 0);
41
41
  __decorate([
42
42
  (0, class_transformer_1.Expose)(),
43
- (0, typeorm_1.Column)({ name: `${exports.LEGACY_TABLE_FIELDS_PREFIX}_published_at`, default: null, nullable: true, transformer: local_date_time_transformer_1.UtcDateTimeTransformer }),
43
+ (0, typeorm_1.Column)({ name: `${exports.LEGACY_TABLE_FIELDS_PREFIX}_published_at`, default: null, nullable: true, transformer: local_date_time_transformer_1.LocalDateTimeTransformer }),
44
44
  __metadata("design:type", Date)
45
45
  ], LegacyCommonEntity.prototype, "publishedAt", void 0);
46
46
  __decorate([
@@ -1 +1 @@
1
- {"version":3,"file":"legacy-common.entity.js","sourceRoot":"","sources":["../../src/entities/legacy-common.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,yDAA0D;AAC1D,qCAAqH;AAErH,qGAA8F;AAEjF,QAAA,0BAA0B,GAAG,IAAI,CAAC;AAGxC,IAAe,kBAAkB,GAAjC,MAAe,kBAAkB;;;;CAkDvC,CAAA;AAlDqB,gDAAkB;AAOpC;IADC,IAAA,0BAAgB,EAAC,EAAE,IAAI,EAAE,GAAG,kCAA0B,aAAa,EAAE,WAAW,EAAE,oDAAsB,EAAE,CAAC;8BACjG,IAAI;qDAAC;AAGhB;IADC,IAAA,0BAAgB,EAAC,EAAE,IAAI,EAAE,GAAG,kCAA0B,aAAa,EAAE,WAAW,EAAE,oDAAsB,EAAE,CAAC;8BACjG,IAAI;qDAAC;AAIhB;IAFC,IAAA,0BAAgB,EAAC,EAAE,IAAI,EAAE,GAAG,kCAA0B,aAAa,EAAE,WAAW,EAAE,oDAAsB,EAAE,CAAC;IAC3G,IAAA,eAAK,GAAE;8BACG,IAAI;qDAAC;AAGhB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,GAAG,kCAA0B,kBAAkB,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;;0DACnE;AAIvB;IAFC,IAAA,0BAAM,GAAE;IACR,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,GAAG,kCAA0B,eAAe,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,oDAAsB,EAAE,CAAC;8BACtH,IAAI;uDAAC;AAIlB;IAFC,IAAA,0BAAM,GAAE;IACR,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,kCAA0B,cAAc,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;;sDAC3E;AAInB;IAFC,IAAA,0BAAM,GAAE;IACR,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,kCAA0B,2BAA2B,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;;iEACzE;AAgB9B;IAFC,IAAA,0BAAM,GAAE;IACR,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,GAAG,kCAA0B,gBAAgB,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;qDAC9D;AAIlB;IAFC,IAAA,0BAAM,GAAE;IACR,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,GAAG,kCAA0B,gBAAgB,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;qDAC9D;6BAjDA,kBAAkB;IADvC,IAAA,2BAAO,GAAE;GACY,kBAAkB,CAkDvC","sourcesContent":["import { Exclude, Expose, Type } from \"class-transformer\";\nimport { Column, CreateDateColumn, DeleteDateColumn, Index, JoinColumn, ManyToOne, UpdateDateColumn } from \"typeorm\";\nimport type { User } from \"./user.entity\";\nimport { UtcDateTimeTransformer } from \"src/transformers/typeorm/local-date-time-transformer\";\n\nexport const LEGACY_TABLE_FIELDS_PREFIX = 'ss';\n\n@Exclude()\nexport abstract class LegacyCommonEntity {\n // @Expose()\n // @Column({ type: 'integer', name: `${LEGACY_TABLE_FIELDS_PREFIX}_id`, unique: true })\n // @Generated(\"increment\")\n // id: number\n\n @CreateDateColumn({ name: `${LEGACY_TABLE_FIELDS_PREFIX}_created_at`, transformer: UtcDateTimeTransformer })\n createdAt: Date;\n\n @UpdateDateColumn({ name: `${LEGACY_TABLE_FIELDS_PREFIX}_updated_at`, transformer: UtcDateTimeTransformer })\n updatedAt: Date;\n\n @DeleteDateColumn({ name: `${LEGACY_TABLE_FIELDS_PREFIX}_deleted_at`, transformer: UtcDateTimeTransformer })\n @Index()\n deletedAt: Date;\n\n @Column({ name: `${LEGACY_TABLE_FIELDS_PREFIX}_deleted_tracker`, default: \"not-deleted\" })\n deletedTracker: string;\n\n @Expose()\n @Column({ name: `${LEGACY_TABLE_FIELDS_PREFIX}_published_at`, default: null, nullable: true, transformer: UtcDateTimeTransformer })\n publishedAt: Date;\n\n @Expose()\n @Column({ type: \"varchar\", name: `${LEGACY_TABLE_FIELDS_PREFIX}_locale_name`, default: null })\n localeName: string;\n\n @Expose()\n @Column({ type: \"int\", name: `${LEGACY_TABLE_FIELDS_PREFIX}_default_entity_locale_id`, default: null })\n defaultEntityLocaleId: number;\n\n // @Expose()\n // @Type( () => require('./user.entity').User?.default ?? require('./user.entity').User )\n // @ManyToOne(() => require('./user.entity').User?.default ?? require('./user.entity').User, { nullable: true })\n // @JoinColumn({ name: `${LEGACY_TABLE_FIELDS_PREFIX}_created_by_id` })\n // createdBy: User;\n\n // @Expose()\n // @Type( () => require('./user.entity').User?.default ?? require('./user.entity').User )\n // @ManyToOne(() => require('./user.entity').User?.default ?? require('./user.entity').User, { nullable: true })\n // @JoinColumn({ name: `${LEGACY_TABLE_FIELDS_PREFIX}_updated_by_id` })\n // updatedBy: User; \n\n @Expose()\n @Column({ name: `${LEGACY_TABLE_FIELDS_PREFIX}_created_by_id`, nullable: true })\n createdBy: number;\n\n @Expose()\n @Column({ name: `${LEGACY_TABLE_FIELDS_PREFIX}_updated_by_id`, nullable: true })\n updatedBy: number;\n}\n"]}
1
+ {"version":3,"file":"legacy-common.entity.js","sourceRoot":"","sources":["../../src/entities/legacy-common.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,yDAA0D;AAC1D,qCAAqH;AAErH,qGAAwH;AAE3G,QAAA,0BAA0B,GAAG,IAAI,CAAC;AAGxC,IAAe,kBAAkB,GAAjC,MAAe,kBAAkB;;;;CAkDvC,CAAA;AAlDqB,gDAAkB;AAOpC;IADC,IAAA,0BAAgB,EAAC,EAAE,IAAI,EAAE,GAAG,kCAA0B,aAAa,EAAE,WAAW,EAAE,sDAAwB,EAAE,CAAC;8BACnG,IAAI;qDAAC;AAGhB;IADC,IAAA,0BAAgB,EAAC,EAAE,IAAI,EAAE,GAAG,kCAA0B,aAAa,EAAE,WAAW,EAAE,sDAAwB,EAAE,CAAC;8BACnG,IAAI;qDAAC;AAIhB;IAFC,IAAA,0BAAgB,EAAC,EAAE,IAAI,EAAE,GAAG,kCAA0B,aAAa,EAAE,WAAW,EAAE,sDAAwB,EAAE,CAAC;IAC7G,IAAA,eAAK,GAAE;8BACG,IAAI;qDAAC;AAGhB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,GAAG,kCAA0B,kBAAkB,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;;0DACnE;AAIvB;IAFC,IAAA,0BAAM,GAAE;IACR,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,GAAG,kCAA0B,eAAe,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,sDAAwB,EAAE,CAAC;8BACxH,IAAI;uDAAC;AAIlB;IAFC,IAAA,0BAAM,GAAE;IACR,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,kCAA0B,cAAc,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;;sDAC3E;AAInB;IAFC,IAAA,0BAAM,GAAE;IACR,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,kCAA0B,2BAA2B,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;;iEACzE;AAgB9B;IAFC,IAAA,0BAAM,GAAE;IACR,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,GAAG,kCAA0B,gBAAgB,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;qDAC9D;AAIlB;IAFC,IAAA,0BAAM,GAAE;IACR,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,GAAG,kCAA0B,gBAAgB,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;qDAC9D;6BAjDA,kBAAkB;IADvC,IAAA,2BAAO,GAAE;GACY,kBAAkB,CAkDvC","sourcesContent":["import { Exclude, Expose, Type } from \"class-transformer\";\nimport { Column, CreateDateColumn, DeleteDateColumn, Index, JoinColumn, ManyToOne, UpdateDateColumn } from \"typeorm\";\nimport type { User } from \"./user.entity\";\nimport { LocalDateTimeTransformer, UtcDateTimeTransformer } from \"src/transformers/typeorm/local-date-time-transformer\";\n\nexport const LEGACY_TABLE_FIELDS_PREFIX = 'ss';\n\n@Exclude()\nexport abstract class LegacyCommonEntity {\n // @Expose()\n // @Column({ type: 'integer', name: `${LEGACY_TABLE_FIELDS_PREFIX}_id`, unique: true })\n // @Generated(\"increment\")\n // id: number\n\n @CreateDateColumn({ name: `${LEGACY_TABLE_FIELDS_PREFIX}_created_at`, transformer: LocalDateTimeTransformer })\n createdAt: Date;\n\n @UpdateDateColumn({ name: `${LEGACY_TABLE_FIELDS_PREFIX}_updated_at`, transformer: LocalDateTimeTransformer })\n updatedAt: Date;\n\n @DeleteDateColumn({ name: `${LEGACY_TABLE_FIELDS_PREFIX}_deleted_at`, transformer: LocalDateTimeTransformer })\n @Index()\n deletedAt: Date;\n\n @Column({ name: `${LEGACY_TABLE_FIELDS_PREFIX}_deleted_tracker`, default: \"not-deleted\" })\n deletedTracker: string;\n\n @Expose()\n @Column({ name: `${LEGACY_TABLE_FIELDS_PREFIX}_published_at`, default: null, nullable: true, transformer: LocalDateTimeTransformer })\n publishedAt: Date;\n\n @Expose()\n @Column({ type: \"varchar\", name: `${LEGACY_TABLE_FIELDS_PREFIX}_locale_name`, default: null })\n localeName: string;\n\n @Expose()\n @Column({ type: \"int\", name: `${LEGACY_TABLE_FIELDS_PREFIX}_default_entity_locale_id`, default: null })\n defaultEntityLocaleId: number;\n\n // @Expose()\n // @Type( () => require('./user.entity').User?.default ?? require('./user.entity').User )\n // @ManyToOne(() => require('./user.entity').User?.default ?? require('./user.entity').User, { nullable: true })\n // @JoinColumn({ name: `${LEGACY_TABLE_FIELDS_PREFIX}_created_by_id` })\n // createdBy: User;\n\n // @Expose()\n // @Type( () => require('./user.entity').User?.default ?? require('./user.entity').User )\n // @ManyToOne(() => require('./user.entity').User?.default ?? require('./user.entity').User, { nullable: true })\n // @JoinColumn({ name: `${LEGACY_TABLE_FIELDS_PREFIX}_updated_by_id` })\n // updatedBy: User; \n\n @Expose()\n @Column({ name: `${LEGACY_TABLE_FIELDS_PREFIX}_created_by_id`, nullable: true })\n createdBy: number;\n\n @Expose()\n @Column({ name: `${LEGACY_TABLE_FIELDS_PREFIX}_updated_by_id`, nullable: true })\n updatedBy: number;\n}\n"]}
@@ -4151,7 +4151,7 @@
4151
4151
  "singularName": "importTransactionErrorLog",
4152
4152
  "tableName": "ss_import_transaction_error_log",
4153
4153
  "pluralName": "importTransactionErrorLogs",
4154
- "displayName": "Import Transaction Error Logs",
4154
+ "displayName": "Import Error Logs",
4155
4155
  "description": "Model to capture all information related to a file import transaction error log",
4156
4156
  "dataSource": "default",
4157
4157
  "dataSourceType": "postgres",
@@ -5864,7 +5864,7 @@
5864
5864
  "modelUserKey": "aiInteraction"
5865
5865
  },
5866
5866
  {
5867
- "displayName": "Import Transaction Error Logs List Action",
5867
+ "displayName": "Import Error Logs List Action",
5868
5868
  "name": "importTransactionErrorLog-list-action",
5869
5869
  "type": "solid",
5870
5870
  "domain": "",
@@ -6163,7 +6163,7 @@
6163
6163
  "parentMenuItemUserKey": "other-menu-item"
6164
6164
  },
6165
6165
  {
6166
- "displayName": "Import Transaction Error Logs",
6166
+ "displayName": "Import Error Logs",
6167
6167
  "name": "importTransactionErrorLog-menu-item",
6168
6168
  "sequenceNumber": 9,
6169
6169
  "actionUserKey": "importTransactionErrorLog-list-action",
@@ -6171,7 +6171,7 @@
6171
6171
  "parentMenuItemUserKey": "other-menu-item"
6172
6172
  },
6173
6173
  {
6174
- "displayName": "Dashboard Management",
6174
+ "displayName": "Dashboards",
6175
6175
  "name": "dashboardManagement-menu-item",
6176
6176
  "sequenceNumber": 8,
6177
6177
  "actionUserKey": "",
@@ -12306,7 +12306,7 @@
12306
12306
  },
12307
12307
  {
12308
12308
  "name": "importTransactionErrorLog-list-view",
12309
- "displayName": "Import Transaction Error Logs",
12309
+ "displayName": "Import Error Logs",
12310
12310
  "type": "list",
12311
12311
  "context": "{}",
12312
12312
  "moduleUserKey": "solid-core",
@@ -12343,7 +12343,7 @@
12343
12343
  },
12344
12344
  {
12345
12345
  "name": "importTransactionErrorLog-form-view",
12346
- "displayName": "Import Transaction Error Logs",
12346
+ "displayName": "Import Error Logs",
12347
12347
  "type": "form",
12348
12348
  "context": "{}",
12349
12349
  "moduleUserKey": "solid-core",
@@ -12352,7 +12352,7 @@
12352
12352
  "type": "form",
12353
12353
  "attrs": {
12354
12354
  "name": "form-1",
12355
- "label": "Import Transaction Error Logs",
12355
+ "label": "Import Error Logs",
12356
12356
  "className": "grid"
12357
12357
  },
12358
12358
  "children": [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@solidxai/core",
3
- "version": "0.1.5-beta.4",
3
+ "version": "0.1.5",
4
4
  "description": "This module is a NestJS module containing all the required core providers required by a Solid application",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -1,6 +1,6 @@
1
1
  import { Column, CreateDateColumn, DeleteDateColumn, Index, PrimaryGeneratedColumn, UpdateDateColumn } from "typeorm";
2
2
  import { Exclude, Expose } from "class-transformer";
3
- import { UtcDateTimeTransformer } from "src/transformers/typeorm/local-date-time-transformer";
3
+ import { LocalDateTimeTransformer, UtcDateTimeTransformer } from "src/transformers/typeorm/local-date-time-transformer";
4
4
 
5
5
  @Exclude()
6
6
  export abstract class CommonEntity {
@@ -8,13 +8,13 @@ export abstract class CommonEntity {
8
8
  @PrimaryGeneratedColumn({ type: 'integer' })
9
9
  id: number
10
10
 
11
- @CreateDateColumn({ name: "created_at", transformer: UtcDateTimeTransformer })
11
+ @CreateDateColumn({ name: "created_at", transformer: LocalDateTimeTransformer })
12
12
  createdAt: Date;
13
13
 
14
- @UpdateDateColumn({ name: "updated_at", transformer: UtcDateTimeTransformer })
14
+ @UpdateDateColumn({ name: "updated_at", transformer: LocalDateTimeTransformer })
15
15
  updatedAt: Date;
16
16
 
17
- @DeleteDateColumn({ name: "deleted_at", transformer: UtcDateTimeTransformer })
17
+ @DeleteDateColumn({ name: "deleted_at", transformer: LocalDateTimeTransformer })
18
18
  @Index()
19
19
  deletedAt: Date;
20
20
 
@@ -22,7 +22,7 @@ export abstract class CommonEntity {
22
22
  deletedTracker: string;
23
23
 
24
24
  @Expose()
25
- @Column({ name: 'published_at', default: null, nullable: true, transformer: UtcDateTimeTransformer })
25
+ @Column({ name: 'published_at', default: null, nullable: true, transformer: LocalDateTimeTransformer })
26
26
  publishedAt: Date;
27
27
 
28
28
  @Expose()
@@ -1,7 +1,7 @@
1
1
  import { Exclude, Expose, Type } from "class-transformer";
2
2
  import { Column, CreateDateColumn, DeleteDateColumn, Index, JoinColumn, ManyToOne, UpdateDateColumn } from "typeorm";
3
3
  import type { User } from "./user.entity";
4
- import { UtcDateTimeTransformer } from "src/transformers/typeorm/local-date-time-transformer";
4
+ import { LocalDateTimeTransformer, UtcDateTimeTransformer } from "src/transformers/typeorm/local-date-time-transformer";
5
5
 
6
6
  export const LEGACY_TABLE_FIELDS_PREFIX = 'ss';
7
7
 
@@ -12,13 +12,13 @@ export abstract class LegacyCommonEntity {
12
12
  // @Generated("increment")
13
13
  // id: number
14
14
 
15
- @CreateDateColumn({ name: `${LEGACY_TABLE_FIELDS_PREFIX}_created_at`, transformer: UtcDateTimeTransformer })
15
+ @CreateDateColumn({ name: `${LEGACY_TABLE_FIELDS_PREFIX}_created_at`, transformer: LocalDateTimeTransformer })
16
16
  createdAt: Date;
17
17
 
18
- @UpdateDateColumn({ name: `${LEGACY_TABLE_FIELDS_PREFIX}_updated_at`, transformer: UtcDateTimeTransformer })
18
+ @UpdateDateColumn({ name: `${LEGACY_TABLE_FIELDS_PREFIX}_updated_at`, transformer: LocalDateTimeTransformer })
19
19
  updatedAt: Date;
20
20
 
21
- @DeleteDateColumn({ name: `${LEGACY_TABLE_FIELDS_PREFIX}_deleted_at`, transformer: UtcDateTimeTransformer })
21
+ @DeleteDateColumn({ name: `${LEGACY_TABLE_FIELDS_PREFIX}_deleted_at`, transformer: LocalDateTimeTransformer })
22
22
  @Index()
23
23
  deletedAt: Date;
24
24
 
@@ -26,7 +26,7 @@ export abstract class LegacyCommonEntity {
26
26
  deletedTracker: string;
27
27
 
28
28
  @Expose()
29
- @Column({ name: `${LEGACY_TABLE_FIELDS_PREFIX}_published_at`, default: null, nullable: true, transformer: UtcDateTimeTransformer })
29
+ @Column({ name: `${LEGACY_TABLE_FIELDS_PREFIX}_published_at`, default: null, nullable: true, transformer: LocalDateTimeTransformer })
30
30
  publishedAt: Date;
31
31
 
32
32
  @Expose()
@@ -4151,7 +4151,7 @@
4151
4151
  "singularName": "importTransactionErrorLog",
4152
4152
  "tableName": "ss_import_transaction_error_log",
4153
4153
  "pluralName": "importTransactionErrorLogs",
4154
- "displayName": "Import Transaction Error Logs",
4154
+ "displayName": "Import Error Logs",
4155
4155
  "description": "Model to capture all information related to a file import transaction error log",
4156
4156
  "dataSource": "default",
4157
4157
  "dataSourceType": "postgres",
@@ -5864,7 +5864,7 @@
5864
5864
  "modelUserKey": "aiInteraction"
5865
5865
  },
5866
5866
  {
5867
- "displayName": "Import Transaction Error Logs List Action",
5867
+ "displayName": "Import Error Logs List Action",
5868
5868
  "name": "importTransactionErrorLog-list-action",
5869
5869
  "type": "solid",
5870
5870
  "domain": "",
@@ -6163,7 +6163,7 @@
6163
6163
  "parentMenuItemUserKey": "other-menu-item"
6164
6164
  },
6165
6165
  {
6166
- "displayName": "Import Transaction Error Logs",
6166
+ "displayName": "Import Error Logs",
6167
6167
  "name": "importTransactionErrorLog-menu-item",
6168
6168
  "sequenceNumber": 9,
6169
6169
  "actionUserKey": "importTransactionErrorLog-list-action",
@@ -6171,7 +6171,7 @@
6171
6171
  "parentMenuItemUserKey": "other-menu-item"
6172
6172
  },
6173
6173
  {
6174
- "displayName": "Dashboard Management",
6174
+ "displayName": "Dashboards",
6175
6175
  "name": "dashboardManagement-menu-item",
6176
6176
  "sequenceNumber": 8,
6177
6177
  "actionUserKey": "",
@@ -12306,7 +12306,7 @@
12306
12306
  },
12307
12307
  {
12308
12308
  "name": "importTransactionErrorLog-list-view",
12309
- "displayName": "Import Transaction Error Logs",
12309
+ "displayName": "Import Error Logs",
12310
12310
  "type": "list",
12311
12311
  "context": "{}",
12312
12312
  "moduleUserKey": "solid-core",
@@ -12343,7 +12343,7 @@
12343
12343
  },
12344
12344
  {
12345
12345
  "name": "importTransactionErrorLog-form-view",
12346
- "displayName": "Import Transaction Error Logs",
12346
+ "displayName": "Import Error Logs",
12347
12347
  "type": "form",
12348
12348
  "context": "{}",
12349
12349
  "moduleUserKey": "solid-core",
@@ -12352,7 +12352,7 @@
12352
12352
  "type": "form",
12353
12353
  "attrs": {
12354
12354
  "name": "form-1",
12355
- "label": "Import Transaction Error Logs",
12355
+ "label": "Import Error Logs",
12356
12356
  "className": "grid"
12357
12357
  },
12358
12358
  "children": [