@solidxai/core 0.1.4 → 0.1.5-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (251) hide show
  1. package/.claude/settings.local.json +8 -0
  2. package/dist/constants/error-messages.d.ts +1 -0
  3. package/dist/constants/error-messages.d.ts.map +1 -1
  4. package/dist/constants/error-messages.js +1 -0
  5. package/dist/constants/error-messages.js.map +1 -1
  6. package/dist/constants.d.ts +3 -3
  7. package/dist/constants.d.ts.map +1 -1
  8. package/dist/constants.js +12 -12
  9. package/dist/constants.js.map +1 -1
  10. package/dist/controllers/otp-authentication.controller.d.ts +1 -4
  11. package/dist/controllers/otp-authentication.controller.d.ts.map +1 -1
  12. package/dist/controllers/otp-authentication.controller.js +1 -1
  13. package/dist/controllers/role-metadata.controller.d.ts +1 -0
  14. package/dist/controllers/role-metadata.controller.d.ts.map +1 -1
  15. package/dist/controllers/role-metadata.controller.js +15 -0
  16. package/dist/controllers/role-metadata.controller.js.map +1 -1
  17. package/dist/controllers/view-metadata.controller.d.ts +1 -0
  18. package/dist/controllers/view-metadata.controller.d.ts.map +1 -1
  19. package/dist/dtos/create-email-template.dto.d.ts.map +1 -1
  20. package/dist/dtos/create-email-template.dto.js.map +1 -1
  21. package/dist/dtos/create-list-of-values.dto.d.ts.map +1 -1
  22. package/dist/dtos/create-list-of-values.dto.js.map +1 -1
  23. package/dist/dtos/create-menu-item-metadata.dto.d.ts.map +1 -1
  24. package/dist/dtos/create-menu-item-metadata.dto.js.map +1 -1
  25. package/dist/dtos/create-role-metadata.dto.d.ts.map +1 -1
  26. package/dist/dtos/create-role-metadata.dto.js.map +1 -1
  27. package/dist/dtos/create-saved-filters.dto.d.ts +1 -0
  28. package/dist/dtos/create-saved-filters.dto.d.ts.map +1 -1
  29. package/dist/dtos/create-saved-filters.dto.js +8 -1
  30. package/dist/dtos/create-saved-filters.dto.js.map +1 -1
  31. package/dist/dtos/create-scheduled-job.dto.d.ts.map +1 -1
  32. package/dist/dtos/create-scheduled-job.dto.js.map +1 -1
  33. package/dist/dtos/create-security-rule.dto.d.ts.map +1 -1
  34. package/dist/dtos/create-security-rule.dto.js.map +1 -1
  35. package/dist/dtos/create-sms-template.dto.d.ts.map +1 -1
  36. package/dist/dtos/create-sms-template.dto.js.map +1 -1
  37. package/dist/dtos/create-view-metadata.dto.d.ts.map +1 -1
  38. package/dist/dtos/create-view-metadata.dto.js.map +1 -1
  39. package/dist/dtos/otp-sign-in.dto.d.ts +1 -1
  40. package/dist/dtos/otp-sign-in.dto.d.ts.map +1 -1
  41. package/dist/dtos/otp-sign-in.dto.js +2 -2
  42. package/dist/dtos/otp-sign-in.dto.js.map +1 -1
  43. package/dist/dtos/otp-sign-up.dto.d.ts +2 -2
  44. package/dist/dtos/otp-sign-up.dto.d.ts.map +1 -1
  45. package/dist/dtos/otp-sign-up.dto.js +2 -2
  46. package/dist/dtos/otp-sign-up.dto.js.map +1 -1
  47. package/dist/dtos/resolve-s3-url.dto.d.ts +2 -5
  48. package/dist/dtos/resolve-s3-url.dto.d.ts.map +1 -1
  49. package/dist/dtos/resolve-s3-url.dto.js +1 -13
  50. package/dist/dtos/resolve-s3-url.dto.js.map +1 -1
  51. package/dist/dtos/sign-up.dto.d.ts.map +1 -1
  52. package/dist/dtos/sign-up.dto.js.map +1 -1
  53. package/dist/dtos/update-email-template.dto.d.ts.map +1 -1
  54. package/dist/dtos/update-email-template.dto.js.map +1 -1
  55. package/dist/dtos/update-list-of-values.dto.d.ts.map +1 -1
  56. package/dist/dtos/update-list-of-values.dto.js.map +1 -1
  57. package/dist/dtos/update-menu-item-metadata.dto.d.ts.map +1 -1
  58. package/dist/dtos/update-menu-item-metadata.dto.js.map +1 -1
  59. package/dist/dtos/update-saved-filters.dto.d.ts +1 -0
  60. package/dist/dtos/update-saved-filters.dto.d.ts.map +1 -1
  61. package/dist/dtos/update-saved-filters.dto.js +10 -1
  62. package/dist/dtos/update-saved-filters.dto.js.map +1 -1
  63. package/dist/dtos/update-scheduled-job.dto.d.ts.map +1 -1
  64. package/dist/dtos/update-scheduled-job.dto.js.map +1 -1
  65. package/dist/dtos/update-security-rule.dto.d.ts.map +1 -1
  66. package/dist/dtos/update-security-rule.dto.js.map +1 -1
  67. package/dist/dtos/update-sms-template.dto.d.ts.map +1 -1
  68. package/dist/dtos/update-sms-template.dto.js.map +1 -1
  69. package/dist/dtos/update-view-metadata.dto.d.ts.map +1 -1
  70. package/dist/dtos/update-view-metadata.dto.js.map +1 -1
  71. package/dist/entities/chatter-message-details.entity.d.ts.map +1 -1
  72. package/dist/entities/chatter-message-details.entity.js +1 -0
  73. package/dist/entities/chatter-message-details.entity.js.map +1 -1
  74. package/dist/entities/chatter-message.entity.d.ts.map +1 -1
  75. package/dist/entities/chatter-message.entity.js +1 -0
  76. package/dist/entities/chatter-message.entity.js.map +1 -1
  77. package/dist/entities/common.entity.js +4 -4
  78. package/dist/entities/common.entity.js.map +1 -1
  79. package/dist/entities/legacy-common.entity.js +4 -4
  80. package/dist/entities/legacy-common.entity.js.map +1 -1
  81. package/dist/entities/saved-filters.entity.d.ts +1 -0
  82. package/dist/entities/saved-filters.entity.d.ts.map +1 -1
  83. package/dist/entities/saved-filters.entity.js +6 -1
  84. package/dist/entities/saved-filters.entity.js.map +1 -1
  85. package/dist/entities/user.entity.d.ts +1 -0
  86. package/dist/entities/user.entity.d.ts.map +1 -1
  87. package/dist/entities/user.entity.js +6 -1
  88. package/dist/entities/user.entity.js.map +1 -1
  89. package/dist/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.d.ts +2 -0
  90. package/dist/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.d.ts.map +1 -1
  91. package/dist/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.js +33 -23
  92. package/dist/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.js.map +1 -1
  93. package/dist/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.d.ts +3 -0
  94. package/dist/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.d.ts.map +1 -1
  95. package/dist/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.js +36 -23
  96. package/dist/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.js.map +1 -1
  97. package/dist/helpers/security.helper.js +1 -0
  98. package/dist/helpers/security.helper.js.map +1 -1
  99. package/dist/index.d.ts +0 -4
  100. package/dist/index.d.ts.map +1 -1
  101. package/dist/index.js +0 -4
  102. package/dist/index.js.map +1 -1
  103. package/dist/repository/solid-base.repository.d.ts +10 -1
  104. package/dist/repository/solid-base.repository.d.ts.map +1 -1
  105. package/dist/repository/solid-base.repository.js +109 -0
  106. package/dist/repository/solid-base.repository.js.map +1 -1
  107. package/dist/seeders/module-metadata-seeder.service.d.ts +2 -0
  108. package/dist/seeders/module-metadata-seeder.service.d.ts.map +1 -1
  109. package/dist/seeders/module-metadata-seeder.service.js +142 -72
  110. package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
  111. package/dist/seeders/permission-metadata-seeder.service.d.ts +1 -1
  112. package/dist/seeders/permission-metadata-seeder.service.d.ts.map +1 -1
  113. package/dist/seeders/permission-metadata-seeder.service.js +1 -1
  114. package/dist/seeders/permission-metadata-seeder.service.js.map +1 -1
  115. package/dist/seeders/seed-data/solid-core-metadata.json +23 -25
  116. package/dist/services/authentication.service.d.ts +22 -8
  117. package/dist/services/authentication.service.d.ts.map +1 -1
  118. package/dist/services/authentication.service.js +230 -214
  119. package/dist/services/authentication.service.js.map +1 -1
  120. package/dist/services/crud-helper.service.d.ts +4 -0
  121. package/dist/services/crud-helper.service.d.ts.map +1 -1
  122. package/dist/services/crud-helper.service.js +66 -32
  123. package/dist/services/crud-helper.service.js.map +1 -1
  124. package/dist/services/crud.service.d.ts.map +1 -1
  125. package/dist/services/crud.service.js +7 -4
  126. package/dist/services/crud.service.js.map +1 -1
  127. package/dist/services/field-metadata.service.d.ts.map +1 -1
  128. package/dist/services/field-metadata.service.js.map +1 -1
  129. package/dist/services/file/disk-file.service.d.ts +0 -2
  130. package/dist/services/file/disk-file.service.d.ts.map +1 -1
  131. package/dist/services/file/disk-file.service.js +7 -16
  132. package/dist/services/file/disk-file.service.js.map +1 -1
  133. package/dist/services/file/index.d.ts +1 -0
  134. package/dist/services/file/index.d.ts.map +1 -1
  135. package/dist/services/file/index.js +1 -0
  136. package/dist/services/file/index.js.map +1 -1
  137. package/dist/services/file/storage-path-builder.d.ts +17 -0
  138. package/dist/services/file/storage-path-builder.d.ts.map +1 -0
  139. package/dist/{seeders/sms-template-seeder.service.js → services/file/storage-path-builder.js} +45 -35
  140. package/dist/services/file/storage-path-builder.js.map +1 -0
  141. package/dist/services/media.service.d.ts +1 -1
  142. package/dist/services/media.service.d.ts.map +1 -1
  143. package/dist/services/media.service.js +45 -6
  144. package/dist/services/media.service.js.map +1 -1
  145. package/dist/services/mediaStorageProviders/file-s3-storage-provider.js.map +1 -1
  146. package/dist/services/mediaStorageProviders/file-storage-provider.d.ts.map +1 -1
  147. package/dist/services/mediaStorageProviders/file-storage-provider.js +46 -7
  148. package/dist/services/mediaStorageProviders/file-storage-provider.js.map +1 -1
  149. package/dist/services/module-metadata.service.d.ts +4 -6
  150. package/dist/services/module-metadata.service.d.ts.map +1 -1
  151. package/dist/services/module-metadata.service.js +16 -14
  152. package/dist/services/module-metadata.service.js.map +1 -1
  153. package/dist/services/setting.service.d.ts +3 -2
  154. package/dist/services/setting.service.d.ts.map +1 -1
  155. package/dist/services/setting.service.js +7 -4
  156. package/dist/services/setting.service.js.map +1 -1
  157. package/dist/services/settings/default-settings-provider.service.d.ts +24 -2
  158. package/dist/services/settings/default-settings-provider.service.d.ts.map +1 -1
  159. package/dist/services/settings/default-settings-provider.service.js +8 -6
  160. package/dist/services/settings/default-settings-provider.service.js.map +1 -1
  161. package/dist/services/view-metadata.service.d.ts +1 -0
  162. package/dist/services/view-metadata.service.d.ts.map +1 -1
  163. package/dist/services/view-metadata.service.js +25 -1
  164. package/dist/services/view-metadata.service.js.map +1 -1
  165. package/dist/solid-core.module.d.ts +3 -1
  166. package/dist/solid-core.module.d.ts.map +1 -1
  167. package/dist/solid-core.module.js +45 -9
  168. package/dist/solid-core.module.js.map +1 -1
  169. package/dist/testing/adapters/ui/playwright-adapter.d.ts.map +1 -1
  170. package/dist/testing/adapters/ui/playwright-adapter.js +35 -2
  171. package/dist/testing/adapters/ui/playwright-adapter.js.map +1 -1
  172. package/dist/transformers/typeorm/local-date-time-transformer.d.ts +4 -3
  173. package/dist/transformers/typeorm/local-date-time-transformer.d.ts.map +1 -1
  174. package/dist/transformers/typeorm/local-date-time-transformer.js +20 -2
  175. package/dist/transformers/typeorm/local-date-time-transformer.js.map +1 -1
  176. package/package.json +8 -2
  177. package/src/constants/error-messages.ts +1 -0
  178. package/src/constants.ts +3 -3
  179. package/src/controllers/role-metadata.controller.ts +26 -18
  180. package/src/dtos/create-email-template.dto.ts +7 -0
  181. package/src/dtos/create-list-of-values.dto.ts +7 -0
  182. package/src/dtos/create-menu-item-metadata.dto.ts +12 -1
  183. package/src/dtos/create-role-metadata.dto.ts +9 -0
  184. package/src/dtos/create-saved-filters.dto.ts +7 -0
  185. package/src/dtos/create-scheduled-job.dto.ts +14 -0
  186. package/src/dtos/create-security-rule.dto.ts +6 -0
  187. package/src/dtos/create-sms-template.dto.ts +6 -0
  188. package/src/dtos/create-view-metadata.dto.ts +11 -0
  189. package/src/dtos/otp-sign-in.dto.ts +3 -3
  190. package/src/dtos/otp-sign-up.dto.ts +3 -3
  191. package/src/dtos/resolve-s3-url.dto.ts +2 -12
  192. package/src/dtos/sign-up.dto.ts +0 -2
  193. package/src/dtos/update-email-template.dto.ts +6 -0
  194. package/src/dtos/update-list-of-values.dto.ts +8 -0
  195. package/src/dtos/update-menu-item-metadata.dto.ts +12 -0
  196. package/src/dtos/update-saved-filters.dto.ts +5 -1
  197. package/src/dtos/update-scheduled-job.dto.ts +15 -0
  198. package/src/dtos/update-security-rule.dto.ts +7 -0
  199. package/src/dtos/update-sms-template.dto.ts +32 -32
  200. package/src/dtos/update-view-metadata.dto.ts +12 -0
  201. package/src/entities/chatter-message-details.entity.ts +1 -0
  202. package/src/entities/chatter-message.entity.ts +1 -0
  203. package/src/entities/common.entity.ts +5 -5
  204. package/src/entities/legacy-common.entity.ts +5 -5
  205. package/src/entities/saved-filters.entity.ts +3 -0
  206. package/src/entities/user.entity.ts +4 -1
  207. package/src/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.ts +43 -32
  208. package/src/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.ts +45 -33
  209. package/src/helpers/security.helper.ts +1 -1
  210. package/src/index.ts +0 -4
  211. package/src/repository/solid-base.repository.ts +172 -1
  212. package/src/seeders/module-metadata-seeder.service.ts +189 -127
  213. package/src/seeders/permission-metadata-seeder.service.ts +1 -4
  214. package/src/seeders/seed-data/solid-core-metadata.json +30 -32
  215. package/src/services/authentication.service.ts +273 -269
  216. package/src/services/crud-helper.service.ts +79 -36
  217. package/src/services/crud.service.ts +9 -4
  218. package/src/services/field-metadata.service.ts +0 -71
  219. package/src/services/file/disk-file.service.ts +8 -18
  220. package/src/services/file/index.ts +1 -0
  221. package/src/services/file/storage-path-builder.ts +56 -0
  222. package/src/services/media.service.ts +13 -7
  223. package/src/services/mediaStorageProviders/file-s3-storage-provider.ts +1 -1
  224. package/src/services/mediaStorageProviders/file-storage-provider.ts +13 -8
  225. package/src/services/module-metadata.service.ts +18 -15
  226. package/src/services/setting.service.ts +5 -3
  227. package/src/services/settings/default-settings-provider.service.ts +5 -3
  228. package/src/services/view-metadata.service.ts +29 -1
  229. package/src/solid-core.module.ts +16 -12
  230. package/src/testing/adapters/ui/playwright-adapter.ts +1 -1
  231. package/src/transformers/typeorm/local-date-time-transformer.ts +21 -3
  232. package/dist/passport-strategies/local.strategy.d.ts +0 -15
  233. package/dist/passport-strategies/local.strategy.d.ts.map +0 -1
  234. package/dist/passport-strategies/local.strategy.js +0 -44
  235. package/dist/passport-strategies/local.strategy.js.map +0 -1
  236. package/dist/seeders/email-template-seeder.service.d.ts +0 -10
  237. package/dist/seeders/email-template-seeder.service.d.ts.map +0 -1
  238. package/dist/seeders/email-template-seeder.service.js +0 -84
  239. package/dist/seeders/email-template-seeder.service.js.map +0 -1
  240. package/dist/seeders/sms-template-seeder.service.d.ts +0 -10
  241. package/dist/seeders/sms-template-seeder.service.d.ts.map +0 -1
  242. package/dist/seeders/sms-template-seeder.service.js.map +0 -1
  243. package/dist/seeders/user-seeder.service.d.ts +0 -10
  244. package/dist/seeders/user-seeder.service.d.ts.map +0 -1
  245. package/dist/seeders/user-seeder.service.js +0 -44
  246. package/dist/seeders/user-seeder.service.js.map +0 -1
  247. package/src/passport-strategies/local.strategy.ts +0 -28
  248. package/src/seeders/email-template-seeder.service.ts +0 -49
  249. package/src/seeders/sms-template-seeder.service.ts +0 -50
  250. package/src/seeders/user-seeder.service.ts +0 -33
  251. package/src/workflow.readme.md +0 -25
@@ -5,32 +5,39 @@ export class UpdateSecurityRuleDto {
5
5
  @IsOptional()
6
6
  @IsInt()
7
7
  id: number;
8
+
8
9
  @IsNotEmpty()
9
10
  @IsOptional()
10
11
  @IsString()
11
12
  @ApiProperty()
12
13
  name: string;
14
+
13
15
  @IsNotEmpty()
14
16
  @IsOptional()
15
17
  @IsString()
16
18
  @ApiProperty()
17
19
  description: string;
20
+
18
21
  @IsOptional()
19
22
  @IsInt()
20
23
  @ApiProperty()
21
24
  roleId: number;
25
+
22
26
  @IsString()
23
27
  @IsOptional()
24
28
  @ApiProperty()
25
29
  roleUserKey: string;
30
+
26
31
  @IsOptional()
27
32
  @IsInt()
28
33
  @ApiProperty()
29
34
  modelMetadataId: number;
35
+
30
36
  @IsString()
31
37
  @IsOptional()
32
38
  @ApiProperty()
33
39
  modelMetadataUserKey: string;
40
+
34
41
  @IsNotEmpty()
35
42
  @IsOptional()
36
43
  @IsJSON()
@@ -3,42 +3,42 @@ import { CreateSmsTemplateDto } from './create-sms-template.dto';
3
3
  import { IsString } from 'class-validator';
4
4
  import { IsOptional, Matches, IsNotEmpty, IsBoolean } from 'class-validator';
5
5
 
6
- export class UpdateSmsTemplateDto extends PartialType(CreateSmsTemplateDto) {
7
- @IsOptional()
8
- @IsString()
9
- @ApiProperty()
10
- type: string;
6
+ export class UpdateSmsTemplateDto extends PartialType(CreateSmsTemplateDto) {
7
+ @IsOptional()
8
+ @IsString()
9
+ @ApiProperty()
10
+ type: string;
11
11
 
12
- @IsNotEmpty()
13
- @IsOptional()
14
- @Matches(/[a-z]+(-[a-z]+)*/)
15
- @IsString()
16
- @ApiProperty()
17
- name: string;
12
+ @IsNotEmpty()
13
+ @IsOptional()
14
+ @Matches(/[a-z]+(-[a-z]+)*/)
15
+ @IsString()
16
+ @ApiProperty()
17
+ name: string;
18
18
 
19
- @IsOptional()
20
- @IsString()
21
- @ApiProperty()
22
- smsProviderTemplateId: string;
19
+ @IsOptional()
20
+ @IsString()
21
+ @ApiProperty()
22
+ smsProviderTemplateId: string;
23
23
 
24
- @IsNotEmpty()
25
- @IsOptional()
26
- @IsString()
27
- @ApiProperty()
28
- displayName: string;
24
+ @IsNotEmpty()
25
+ @IsOptional()
26
+ @IsString()
27
+ @ApiProperty()
28
+ displayName: string;
29
29
 
30
- @IsOptional()
31
- @IsString()
32
- @ApiProperty()
33
- body: string;
30
+ @IsOptional()
31
+ @IsString()
32
+ @ApiProperty()
33
+ body: string;
34
34
 
35
- @IsOptional()
36
- @IsString()
37
- @ApiProperty()
38
- description: string;
35
+ @IsOptional()
36
+ @IsString()
37
+ @ApiProperty()
38
+ description: string;
39
39
 
40
- @IsOptional()
41
- @IsBoolean()
42
- @ApiProperty()
43
- active: boolean;
40
+ @IsOptional()
41
+ @IsBoolean()
42
+ @ApiProperty()
43
+ active: boolean;
44
44
  } { }
@@ -7,58 +7,70 @@ export class UpdateViewMetadataDto {
7
7
  @IsOptional()
8
8
  @IsInt()
9
9
  id: number;
10
+
10
11
  @IsNotEmpty()
11
12
  @IsOptional()
12
13
  @Matches(/[a-z]+(-[a-z]+)*/)
13
14
  @IsString()
14
15
  @ApiProperty()
15
16
  name: string;
17
+
16
18
  @IsNotEmpty()
17
19
  @IsOptional()
18
20
  @IsString()
19
21
  @ApiProperty()
20
22
  displayName: string;
23
+
21
24
  @IsNotEmpty()
22
25
  @IsOptional()
23
26
  @IsString()
24
27
  @ApiProperty()
25
28
  type: string;
29
+
26
30
  @IsNotEmpty()
27
31
  @IsOptional()
28
32
  @IsJSON()
29
33
  @ApiProperty()
30
34
  context: any;
35
+
31
36
  @IsNotEmpty()
32
37
  @IsOptional()
33
38
  @IsJSON()
34
39
  @ApiProperty()
35
40
  layout: any;
41
+
36
42
  @IsOptional()
37
43
  @IsInt()
38
44
  @ApiProperty()
39
45
  moduleId: number;
46
+
40
47
  @IsString()
41
48
  @IsOptional()
42
49
  @ApiProperty()
43
50
  moduleUserKey: string;
51
+
44
52
  @IsOptional()
45
53
  @IsInt()
46
54
  @ApiProperty()
47
55
  modelId: number;
56
+
48
57
  @IsString()
49
58
  @IsOptional()
50
59
  @ApiProperty()
51
60
  modelUserKey: string;
61
+
52
62
  @IsOptional()
53
63
  @ApiProperty()
54
64
  @IsArray()
55
65
  @ValidateNested({ each: true })
56
66
  @Type(() => UpdateUserViewMetadataDto)
57
67
  userViewMetadata: UpdateUserViewMetadataDto[];
68
+
58
69
  @IsOptional()
59
70
  @IsArray()
60
71
  @ApiProperty()
61
72
  userViewMetadataIds: number[];
73
+
62
74
  @IsString()
63
75
  @IsOptional()
64
76
  @ApiProperty()
@@ -3,6 +3,7 @@ import { Entity, JoinColumn, ManyToOne, Column, Index } from 'typeorm';
3
3
  import { ChatterMessage } from 'src/entities/chatter-message.entity'
4
4
  @Entity("ss_chatter_message_details")
5
5
  export class ChatterMessageDetails extends CommonEntity {
6
+ @Index()
6
7
  @ManyToOne(() => ChatterMessage, { nullable: true })
7
8
  @JoinColumn()
8
9
  chatterMessage: ChatterMessage;
@@ -3,6 +3,7 @@ import { Entity, Column, Index, JoinColumn, ManyToOne, OneToMany } from 'typeorm
3
3
  import { User } from 'src/entities/user.entity'
4
4
  import { ChatterMessageDetails } from './chatter-message-details.entity';
5
5
 
6
+ @Index(["coModelName", "coModelEntityId"])
6
7
  @Entity("ss_chatter_message")
7
8
  export class ChatterMessage extends CommonEntity {
8
9
  @Index()
@@ -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 { LocalDateTimeTransformer } from "src/transformers/typeorm/local-date-time-transformer";
3
+ import { 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: LocalDateTimeTransformer })
11
+ @CreateDateColumn({ name: "created_at", transformer: UtcDateTimeTransformer })
12
12
  createdAt: Date;
13
13
 
14
- @UpdateDateColumn({ name: "updated_at", transformer: LocalDateTimeTransformer })
14
+ @UpdateDateColumn({ name: "updated_at", transformer: UtcDateTimeTransformer })
15
15
  updatedAt: Date;
16
16
 
17
- @DeleteDateColumn({ name: "deleted_at", transformer: LocalDateTimeTransformer })
17
+ @DeleteDateColumn({ name: "deleted_at", transformer: UtcDateTimeTransformer })
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: LocalDateTimeTransformer })
25
+ @Column({ name: 'published_at', default: null, nullable: true, transformer: UtcDateTimeTransformer })
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 { LocalDateTimeTransformer } from "src/transformers/typeorm/local-date-time-transformer";
4
+ import { 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: LocalDateTimeTransformer })
15
+ @CreateDateColumn({ name: `${LEGACY_TABLE_FIELDS_PREFIX}_created_at`, transformer: UtcDateTimeTransformer })
16
16
  createdAt: Date;
17
17
 
18
- @UpdateDateColumn({ name: `${LEGACY_TABLE_FIELDS_PREFIX}_updated_at`, transformer: LocalDateTimeTransformer })
18
+ @UpdateDateColumn({ name: `${LEGACY_TABLE_FIELDS_PREFIX}_updated_at`, transformer: UtcDateTimeTransformer })
19
19
  updatedAt: Date;
20
20
 
21
- @DeleteDateColumn({ name: `${LEGACY_TABLE_FIELDS_PREFIX}_deleted_at`, transformer: LocalDateTimeTransformer })
21
+ @DeleteDateColumn({ name: `${LEGACY_TABLE_FIELDS_PREFIX}_deleted_at`, transformer: UtcDateTimeTransformer })
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: LocalDateTimeTransformer })
29
+ @Column({ name: `${LEGACY_TABLE_FIELDS_PREFIX}_published_at`, default: null, nullable: true, transformer: UtcDateTimeTransformer })
30
30
  publishedAt: Date;
31
31
 
32
32
  @Expose()
@@ -30,4 +30,7 @@ export class SavedFilters extends CommonEntity {
30
30
 
31
31
  @Column({ name: "description", type: "text", nullable: true })
32
32
  description: string;
33
+
34
+ @Column({ nullable: true, default: false })
35
+ isSeeded: boolean = false;
33
36
  }
@@ -10,7 +10,7 @@ import { Exclude, Expose } from "class-transformer";
10
10
  export class User extends CommonEntity {
11
11
  @Column({ type: "varchar", nullable: true })
12
12
  @Expose()
13
- fullName: string;
13
+ fullName: string;
14
14
  @Index({ unique: true })
15
15
  @Column({ type: "varchar" })
16
16
  @Expose()
@@ -111,6 +111,9 @@ export class User extends CommonEntity {
111
111
  // dont send to client
112
112
  @Column({ nullable: true })
113
113
  rehashedAt: Date;
114
+ // dont send to client
115
+ @Column({ type: "int", default: 0 })
116
+ failedLoginAttempts: number = 0;
114
117
  @Expose()
115
118
  _media: any;
116
119
  }
@@ -14,6 +14,8 @@ export interface ManyToManyRelationFieldOptions {
14
14
  entityManager: EntityManager;
15
15
  fieldName: string;
16
16
  relationCoModelFieldName?: string;
17
+ isUpdate?: boolean;
18
+ entityId?: number;
17
19
  }
18
20
 
19
21
  const linkCommands = [RelationFieldsCommand.link, RelationFieldsCommand.unlink, RelationFieldsCommand.set];
@@ -74,16 +76,21 @@ export class ManyToManyRelationFieldCrudManager implements FieldCrudManager {
74
76
  const relatedEntityName = classify(this.options.relationCoModelSingularName);
75
77
  const relatedEntityRepository = this.options.entityManager.getRepository(relatedEntityName)
76
78
 
77
- dto[this.valueFieldName] = await this.transformByCommand(dto, relatedEntityRepository, currentEntityRepository);
79
+ const result = await this.transformByCommand(dto, relatedEntityRepository, currentEntityRepository);
80
+ if (result !== undefined) {
81
+ dto[this.valueFieldName] = result;
82
+ } else {
83
+ delete dto[this.valueFieldName];
84
+ }
78
85
  return dto;
79
86
  }
80
87
 
81
- private async transformByCommand(dto: any, relatedEntityRepository: any, currentEntityRepository: any): Promise<any[]> {
88
+ private async transformByCommand(dto: any, relatedEntityRepository: any, currentEntityRepository: any): Promise<any[] | undefined> {
82
89
  // TODO : Need to add support for the multiple commands
83
90
  const command = dto[this.commandFieldName];
84
91
  const values = dto[this.valueFieldName];
85
92
  const ids = dto[this.idFieldName];
86
-
93
+
87
94
  switch (command) {
88
95
  case RelationFieldsCommand.create:
89
96
  return await this.transformForCommandCreate(values, relatedEntityRepository);
@@ -94,15 +101,15 @@ export class ManyToManyRelationFieldCrudManager implements FieldCrudManager {
94
101
  case RelationFieldsCommand.clear:
95
102
  return this.transformForCommandClear();
96
103
  case RelationFieldsCommand.set:
97
- return await this.transformForCommandSet(ids, relatedEntityRepository, dto, currentEntityRepository);
104
+ return await this.transformForCommandSet(ids, relatedEntityRepository);
98
105
  case RelationFieldsCommand.link:
99
- return await this.tranformForCommandLink(ids, relatedEntityRepository, dto, currentEntityRepository);
106
+ return await this.tranformForCommandLink(ids, relatedEntityRepository);
100
107
  case RelationFieldsCommand.unlink:
101
- return await this.transformForCommandUnLink(ids, relatedEntityRepository, dto, currentEntityRepository);
108
+ return await this.transformForCommandUnLink(ids);
102
109
  default:
103
110
  this.logger.log(`Invalid command ${command}`);
104
111
  return null;
105
-
112
+
106
113
  }
107
114
  }
108
115
 
@@ -110,46 +117,50 @@ export class ManyToManyRelationFieldCrudManager implements FieldCrudManager {
110
117
  return []
111
118
  }
112
119
 
113
- private async transformForCommandSet(ids: any[], relatedEntityRepository: any, dto: any, currentEntityRepository: any): Promise<any[]> {
114
- // Load the entities with the ids passed
120
+ private async transformForCommandSet(ids: any[], relatedEntityRepository: any): Promise<any[]> {
115
121
  const loadedEntities: any[] = await relatedEntityRepository.find({
116
- where : {id: In(ids) }
122
+ where : {id: In(ids) }
117
123
  })
118
124
  if (loadedEntities.length !== ids.length) {
119
- throw new Error('Invalid entity ids provided for linking');
125
+ throw new Error('Invalid entity ids provided for set');
120
126
  }
121
127
 
122
128
  return loadedEntities;
123
129
  }
124
130
 
125
- private async tranformForCommandLink(ids: any, relatedEntityRepository: any, dto: any, currentEntityRepository: any) {
126
- const tranformedRelatedFields = [];
127
- // Load the entities with the ids passed
128
- const loadedEntities: any[] = await relatedEntityRepository.find({
129
- where : {id: In(ids) }
130
- })
131
- if (loadedEntities.length !== ids.length) {
131
+ private async tranformForCommandLink(ids: any[], relatedEntityRepository: any): Promise<undefined> {
132
+ if (!this.options.isUpdate) {
133
+ throw new Error('Link command is only supported for update operations');
134
+ }
135
+
136
+ const count: number = await relatedEntityRepository.count({
137
+ where: { id: In(ids) }
138
+ });
139
+ if (count !== ids.length) {
132
140
  throw new Error('Invalid entity ids provided for linking');
133
141
  }
134
- tranformedRelatedFields.push(...loadedEntities);
135
142
 
136
- return tranformedRelatedFields;
143
+ await this.options.entityManager
144
+ .createQueryBuilder()
145
+ .relation(classify(this.options.modelSingularName), this.valueFieldName)
146
+ .of(this.options.entityId)
147
+ .add(ids);
148
+
149
+ return undefined;
137
150
  }
138
151
 
139
- private async transformForCommandUnLink(ids: any, relatedEntityRepository: any, dto: any, currentEntityRepository: any) {
140
- if (dto.id == null) {
141
- throw new Error('Entity id is required for unlinking');
142
- }
152
+ private async transformForCommandUnLink(ids: any[]): Promise<undefined> {
153
+ if (!this.options.isUpdate) {
154
+ throw new Error('Unlink command is only supported for update operations');
155
+ }
143
156
 
144
- const tranformedRelatedFields = [];
145
- const entityInstance = await currentEntityRepository.findOne({
146
- where: {id: dto.id},
147
- relations: [this.valueFieldName]
148
- });
149
- const filteredEntities = entityInstance[this.valueFieldName].filter((entity) => !ids.includes(entity.id));
150
- tranformedRelatedFields.push(...filteredEntities);
157
+ await this.options.entityManager
158
+ .createQueryBuilder()
159
+ .relation(classify(this.options.modelSingularName), this.valueFieldName)
160
+ .of(this.options.entityId)
161
+ .remove(ids);
151
162
 
152
- return tranformedRelatedFields;
163
+ return undefined;
153
164
  }
154
165
 
155
166
  private async transformForCommandCreate(values: any[], relatedEntityRepository: any): Promise<any[]> {
@@ -1,7 +1,7 @@
1
1
  import { classify } from "@angular-devkit/core/src/utils/strings";
2
+ import { Logger } from "@nestjs/common";
2
3
  import { isEmpty, isEnum, isInt, isNotEmpty } from "class-validator";
3
4
  import { RelationFieldsCommand } from "src/dtos/create-field-metadata.dto";
4
- import { FieldMetadata } from "src/entities/field-metadata.entity";
5
5
  import { FieldCrudManager, ValidationError } from "src/interfaces";
6
6
  import { EntityManager, In } from "typeorm";
7
7
 
@@ -13,12 +13,15 @@ export interface OneToManyRelationFieldOptions {
13
13
  modelSingularName: string | undefined | null;
14
14
  inverseFieldName: string | undefined | null;
15
15
  entityManager: EntityManager | undefined | null;
16
+ isUpdate?: boolean;
17
+ entityId?: number;
16
18
  }
17
19
 
18
20
  const linkCommands = [RelationFieldsCommand.link, RelationFieldsCommand.unlink, RelationFieldsCommand.set];
19
21
 
20
22
  // This implementation is meant to be used for many-to-one relation field
21
23
  export class OneToManyRelationFieldCrudManager implements FieldCrudManager {
24
+ private readonly logger = new Logger(OneToManyRelationFieldCrudManager.name);
22
25
 
23
26
  private readonly valueFieldName: string;
24
27
  private readonly idFieldName: string;
@@ -74,18 +77,22 @@ export class OneToManyRelationFieldCrudManager implements FieldCrudManager {
74
77
  }
75
78
 
76
79
  async transformForCreate(dto: any): Promise<any> {
77
- // const relatedFieldData: any[] = dto[this.fieldName()];
78
80
  const currentEntityName = classify(this.options.modelSingularName);
79
81
  const currentEntityRepository = this.options.entityManager.getRepository(currentEntityName);
80
82
 
81
83
  const relatedEntityName = classify(this.options.relationCoModelSingularName);
82
84
  const relatedEntityRepository = this.options.entityManager.getRepository(relatedEntityName);
83
85
 
84
- dto[this.valueFieldName] = await this.transformByCommand(dto, relatedEntityRepository, currentEntityRepository);
86
+ const result = await this.transformByCommand(dto, relatedEntityRepository, currentEntityRepository);
87
+ if (result !== undefined) {
88
+ dto[this.valueFieldName] = result;
89
+ } else {
90
+ delete dto[this.valueFieldName];
91
+ }
85
92
  return dto;
86
93
  }
87
94
 
88
- private async transformByCommand(dto: any, relatedEntityRepository: any, currentEntityRepository: any): Promise<any[]> {
95
+ private async transformByCommand(dto: any, relatedEntityRepository: any, currentEntityRepository: any): Promise<any[] | undefined> {
89
96
  // TODO : Need to add support for the multiple commands
90
97
  const command = dto[this.commandFieldName];
91
98
  const values = dto[this.valueFieldName];
@@ -101,13 +108,14 @@ export class OneToManyRelationFieldCrudManager implements FieldCrudManager {
101
108
  case RelationFieldsCommand.clear:
102
109
  return this.transformForCommandClear();
103
110
  case RelationFieldsCommand.set:
104
- return await this.transformForCommandSet(ids, relatedEntityRepository, dto, currentEntityRepository);
111
+ return await this.transformForCommandSet(ids, relatedEntityRepository);
105
112
  case RelationFieldsCommand.link:
106
- return await this.tranformForCommandLink(ids, relatedEntityRepository, dto, currentEntityRepository);
113
+ return await this.tranformForCommandLink(ids, relatedEntityRepository);
107
114
  case RelationFieldsCommand.unlink:
108
- return await this.transformForCommandUnLink(ids, relatedEntityRepository, dto, currentEntityRepository);
115
+ return await this.transformForCommandUnLink(ids);
109
116
  default:
110
- return null; // This is equivalent to no transformation
117
+ this.logger.log(`Invalid command ${command}`);
118
+ return null;
111
119
  }
112
120
  }
113
121
 
@@ -115,46 +123,50 @@ export class OneToManyRelationFieldCrudManager implements FieldCrudManager {
115
123
  return []
116
124
  }
117
125
 
118
- private async transformForCommandSet(ids: any[], relatedEntityRepository: any, dto: any, currentEntityRepository: any): Promise<any[]> {
119
- // Load the entities with the ids passed
126
+ private async transformForCommandSet(ids: any[], relatedEntityRepository: any): Promise<any[]> {
120
127
  const loadedEntities: any[] = await relatedEntityRepository.find({
121
- where : {id: In(ids) }
128
+ where : {id: In(ids) }
122
129
  })
123
130
  if (loadedEntities.length !== ids.length) {
124
- throw new Error('Invalid entity ids provided for linking');
131
+ throw new Error('Invalid entity ids provided for set');
125
132
  }
126
133
 
127
134
  return loadedEntities;
128
135
  }
129
136
 
130
- private async tranformForCommandLink(ids: any, relatedEntityRepository: any, dto: any, currentEntityRepository: any) {
131
- const tranformedRelatedFields = [];
132
- // Load the entities with the ids passed
133
- const loadedEntities: any[] = await relatedEntityRepository.find({
134
- where : {id: In(ids) }
135
- })
136
- if (loadedEntities.length !== ids.length) {
137
+ private async tranformForCommandLink(ids: any[], relatedEntityRepository: any): Promise<undefined> {
138
+ if (!this.options.isUpdate) {
139
+ throw new Error('Link command is only supported for update operations');
140
+ }
141
+
142
+ const count: number = await relatedEntityRepository.count({
143
+ where: { id: In(ids) }
144
+ });
145
+ if (count !== ids.length) {
137
146
  throw new Error('Invalid entity ids provided for linking');
138
147
  }
139
- tranformedRelatedFields.push(...loadedEntities);
140
148
 
141
- return tranformedRelatedFields;
149
+ await this.options.entityManager
150
+ .createQueryBuilder()
151
+ .relation(classify(this.options.modelSingularName), this.valueFieldName)
152
+ .of(this.options.entityId)
153
+ .add(ids);
154
+
155
+ return undefined;
142
156
  }
143
157
 
144
- private async transformForCommandUnLink(ids: any, relatedEntityRepository: any, dto: any, currentEntityRepository: any) {
145
- if (dto.id == null) {
146
- throw new Error('Entity id is required for unlinking');
147
- }
158
+ private async transformForCommandUnLink(ids: any[]): Promise<undefined> {
159
+ if (!this.options.isUpdate) {
160
+ throw new Error('Unlink command is only supported for update operations');
161
+ }
148
162
 
149
- const tranformedRelatedFields = [];
150
- const entityInstance = await currentEntityRepository.findOne({
151
- where: {id: dto.id},
152
- relations: [this.valueFieldName]
153
- });
154
- const filteredEntities = entityInstance[this.valueFieldName].filter((entity) => !ids.includes(entity.id));
155
- tranformedRelatedFields.push(...filteredEntities);
163
+ await this.options.entityManager
164
+ .createQueryBuilder()
165
+ .relation(classify(this.options.modelSingularName), this.valueFieldName)
166
+ .of(this.options.entityId)
167
+ .remove(ids);
156
168
 
157
- return tranformedRelatedFields;
169
+ return undefined;
158
170
  }
159
171
 
160
172
  private async transformForCommandCreate(values: any[], relatedEntityRepository: any): Promise<any[]> {
@@ -24,7 +24,7 @@ export function buildDefaultSecurityHeaderOptions(): Readonly<HelmetOptions> {
24
24
 
25
25
  // clickjacking defense (modern)
26
26
  "frame-ancestors": ["'none'"],
27
-
27
+ "style-src": ["'self'"],
28
28
  // add/adjust as needed for your app:
29
29
  // "script-src": ["'self'"], // add hashes/nonces/CSPRO if needed
30
30
  // "style-src": ["'self'", "'unsafe-inline'"],
package/src/index.ts CHANGED
@@ -212,16 +212,12 @@ export * from './jobs/msg91-whatsapp-subscriber.service'
212
212
  export * from './listeners/user-registration.listener'
213
213
 
214
214
  export * from './passport-strategies/google-oauth.strategy'
215
- export * from './passport-strategies/local.strategy'
216
215
 
217
216
  export * from './services/selection-providers/list-of-values-selection-providers.service'
218
217
 
219
218
  // seed-data
220
- export * from './seeders/email-template-seeder.service'
221
219
  export * from './seeders/permission-metadata-seeder.service'
222
- export * from './seeders/sms-template-seeder.service'
223
220
  export * from './seeders/module-metadata-seeder.service'
224
- export * from './seeders/user-seeder.service'
225
221
 
226
222
  // export * from './services/access-token-storage.service'
227
223
  export * from './services/action-metadata.service'