@solidxai/core 0.1.4 → 0.1.5-beta.0

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 (209) 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/dtos/create-email-template.dto.d.ts.map +1 -1
  18. package/dist/dtos/create-email-template.dto.js.map +1 -1
  19. package/dist/dtos/create-list-of-values.dto.d.ts.map +1 -1
  20. package/dist/dtos/create-list-of-values.dto.js.map +1 -1
  21. package/dist/dtos/create-menu-item-metadata.dto.d.ts.map +1 -1
  22. package/dist/dtos/create-menu-item-metadata.dto.js.map +1 -1
  23. package/dist/dtos/create-role-metadata.dto.d.ts.map +1 -1
  24. package/dist/dtos/create-role-metadata.dto.js.map +1 -1
  25. package/dist/dtos/create-scheduled-job.dto.d.ts.map +1 -1
  26. package/dist/dtos/create-scheduled-job.dto.js.map +1 -1
  27. package/dist/dtos/create-security-rule.dto.d.ts.map +1 -1
  28. package/dist/dtos/create-security-rule.dto.js.map +1 -1
  29. package/dist/dtos/create-sms-template.dto.d.ts.map +1 -1
  30. package/dist/dtos/create-sms-template.dto.js.map +1 -1
  31. package/dist/dtos/create-view-metadata.dto.d.ts.map +1 -1
  32. package/dist/dtos/create-view-metadata.dto.js.map +1 -1
  33. package/dist/dtos/otp-sign-in.dto.d.ts +1 -1
  34. package/dist/dtos/otp-sign-in.dto.d.ts.map +1 -1
  35. package/dist/dtos/otp-sign-in.dto.js +2 -2
  36. package/dist/dtos/otp-sign-in.dto.js.map +1 -1
  37. package/dist/dtos/otp-sign-up.dto.d.ts +2 -2
  38. package/dist/dtos/otp-sign-up.dto.d.ts.map +1 -1
  39. package/dist/dtos/otp-sign-up.dto.js +2 -2
  40. package/dist/dtos/otp-sign-up.dto.js.map +1 -1
  41. package/dist/dtos/resolve-s3-url.dto.d.ts +2 -5
  42. package/dist/dtos/resolve-s3-url.dto.d.ts.map +1 -1
  43. package/dist/dtos/resolve-s3-url.dto.js +1 -13
  44. package/dist/dtos/resolve-s3-url.dto.js.map +1 -1
  45. package/dist/dtos/sign-up.dto.d.ts.map +1 -1
  46. package/dist/dtos/sign-up.dto.js.map +1 -1
  47. package/dist/dtos/update-email-template.dto.d.ts.map +1 -1
  48. package/dist/dtos/update-email-template.dto.js.map +1 -1
  49. package/dist/dtos/update-list-of-values.dto.d.ts.map +1 -1
  50. package/dist/dtos/update-list-of-values.dto.js.map +1 -1
  51. package/dist/dtos/update-menu-item-metadata.dto.d.ts.map +1 -1
  52. package/dist/dtos/update-menu-item-metadata.dto.js.map +1 -1
  53. package/dist/dtos/update-scheduled-job.dto.d.ts.map +1 -1
  54. package/dist/dtos/update-scheduled-job.dto.js.map +1 -1
  55. package/dist/dtos/update-security-rule.dto.d.ts.map +1 -1
  56. package/dist/dtos/update-security-rule.dto.js.map +1 -1
  57. package/dist/dtos/update-sms-template.dto.d.ts.map +1 -1
  58. package/dist/dtos/update-sms-template.dto.js.map +1 -1
  59. package/dist/dtos/update-view-metadata.dto.d.ts.map +1 -1
  60. package/dist/dtos/update-view-metadata.dto.js.map +1 -1
  61. package/dist/entities/user.entity.d.ts +1 -0
  62. package/dist/entities/user.entity.d.ts.map +1 -1
  63. package/dist/entities/user.entity.js +6 -1
  64. package/dist/entities/user.entity.js.map +1 -1
  65. package/dist/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.d.ts +2 -0
  66. package/dist/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.d.ts.map +1 -1
  67. package/dist/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.js +33 -23
  68. package/dist/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.js.map +1 -1
  69. package/dist/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.d.ts +3 -0
  70. package/dist/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.d.ts.map +1 -1
  71. package/dist/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.js +36 -23
  72. package/dist/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.js.map +1 -1
  73. package/dist/helpers/security.helper.js +1 -0
  74. package/dist/helpers/security.helper.js.map +1 -1
  75. package/dist/index.d.ts +0 -4
  76. package/dist/index.d.ts.map +1 -1
  77. package/dist/index.js +0 -4
  78. package/dist/index.js.map +1 -1
  79. package/dist/repository/solid-base.repository.d.ts +10 -1
  80. package/dist/repository/solid-base.repository.d.ts.map +1 -1
  81. package/dist/repository/solid-base.repository.js +109 -0
  82. package/dist/repository/solid-base.repository.js.map +1 -1
  83. package/dist/seeders/module-metadata-seeder.service.d.ts +2 -0
  84. package/dist/seeders/module-metadata-seeder.service.d.ts.map +1 -1
  85. package/dist/seeders/module-metadata-seeder.service.js +141 -71
  86. package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
  87. package/dist/seeders/permission-metadata-seeder.service.d.ts +1 -1
  88. package/dist/seeders/permission-metadata-seeder.service.d.ts.map +1 -1
  89. package/dist/seeders/permission-metadata-seeder.service.js +1 -1
  90. package/dist/seeders/permission-metadata-seeder.service.js.map +1 -1
  91. package/dist/seeders/seed-data/solid-core-metadata.json +12 -25
  92. package/dist/services/authentication.service.d.ts +22 -8
  93. package/dist/services/authentication.service.d.ts.map +1 -1
  94. package/dist/services/authentication.service.js +228 -214
  95. package/dist/services/authentication.service.js.map +1 -1
  96. package/dist/services/crud-helper.service.d.ts +4 -0
  97. package/dist/services/crud-helper.service.d.ts.map +1 -1
  98. package/dist/services/crud-helper.service.js +66 -32
  99. package/dist/services/crud-helper.service.js.map +1 -1
  100. package/dist/services/crud.service.d.ts.map +1 -1
  101. package/dist/services/crud.service.js +7 -4
  102. package/dist/services/crud.service.js.map +1 -1
  103. package/dist/services/field-metadata.service.d.ts.map +1 -1
  104. package/dist/services/field-metadata.service.js.map +1 -1
  105. package/dist/services/file/disk-file.service.d.ts +0 -2
  106. package/dist/services/file/disk-file.service.d.ts.map +1 -1
  107. package/dist/services/file/disk-file.service.js +7 -16
  108. package/dist/services/file/disk-file.service.js.map +1 -1
  109. package/dist/services/file/index.d.ts +1 -0
  110. package/dist/services/file/index.d.ts.map +1 -1
  111. package/dist/services/file/index.js +1 -0
  112. package/dist/services/file/index.js.map +1 -1
  113. package/dist/services/file/storage-path-builder.d.ts +17 -0
  114. package/dist/services/file/storage-path-builder.d.ts.map +1 -0
  115. package/dist/{seeders/sms-template-seeder.service.js → services/file/storage-path-builder.js} +45 -35
  116. package/dist/services/file/storage-path-builder.js.map +1 -0
  117. package/dist/services/media.service.d.ts +1 -1
  118. package/dist/services/media.service.d.ts.map +1 -1
  119. package/dist/services/media.service.js +45 -6
  120. package/dist/services/media.service.js.map +1 -1
  121. package/dist/services/mediaStorageProviders/file-s3-storage-provider.js.map +1 -1
  122. package/dist/services/mediaStorageProviders/file-storage-provider.d.ts.map +1 -1
  123. package/dist/services/mediaStorageProviders/file-storage-provider.js +46 -7
  124. package/dist/services/mediaStorageProviders/file-storage-provider.js.map +1 -1
  125. package/dist/services/module-metadata.service.d.ts +4 -6
  126. package/dist/services/module-metadata.service.d.ts.map +1 -1
  127. package/dist/services/module-metadata.service.js +16 -14
  128. package/dist/services/module-metadata.service.js.map +1 -1
  129. package/dist/services/setting.service.d.ts +3 -2
  130. package/dist/services/setting.service.d.ts.map +1 -1
  131. package/dist/services/setting.service.js +7 -4
  132. package/dist/services/setting.service.js.map +1 -1
  133. package/dist/services/settings/default-settings-provider.service.d.ts +24 -2
  134. package/dist/services/settings/default-settings-provider.service.d.ts.map +1 -1
  135. package/dist/services/settings/default-settings-provider.service.js +8 -6
  136. package/dist/services/settings/default-settings-provider.service.js.map +1 -1
  137. package/dist/solid-core.module.d.ts +3 -1
  138. package/dist/solid-core.module.d.ts.map +1 -1
  139. package/dist/solid-core.module.js +45 -9
  140. package/dist/solid-core.module.js.map +1 -1
  141. package/dist/testing/adapters/ui/playwright-adapter.d.ts.map +1 -1
  142. package/dist/testing/adapters/ui/playwright-adapter.js +35 -2
  143. package/dist/testing/adapters/ui/playwright-adapter.js.map +1 -1
  144. package/package.json +8 -2
  145. package/src/constants/error-messages.ts +1 -0
  146. package/src/constants.ts +3 -3
  147. package/src/controllers/role-metadata.controller.ts +26 -18
  148. package/src/dtos/create-email-template.dto.ts +7 -0
  149. package/src/dtos/create-list-of-values.dto.ts +7 -0
  150. package/src/dtos/create-menu-item-metadata.dto.ts +12 -1
  151. package/src/dtos/create-role-metadata.dto.ts +9 -0
  152. package/src/dtos/create-scheduled-job.dto.ts +14 -0
  153. package/src/dtos/create-security-rule.dto.ts +6 -0
  154. package/src/dtos/create-sms-template.dto.ts +6 -0
  155. package/src/dtos/create-view-metadata.dto.ts +11 -0
  156. package/src/dtos/otp-sign-in.dto.ts +3 -3
  157. package/src/dtos/otp-sign-up.dto.ts +3 -3
  158. package/src/dtos/resolve-s3-url.dto.ts +2 -12
  159. package/src/dtos/sign-up.dto.ts +0 -2
  160. package/src/dtos/update-email-template.dto.ts +6 -0
  161. package/src/dtos/update-list-of-values.dto.ts +8 -0
  162. package/src/dtos/update-menu-item-metadata.dto.ts +12 -0
  163. package/src/dtos/update-scheduled-job.dto.ts +15 -0
  164. package/src/dtos/update-security-rule.dto.ts +7 -0
  165. package/src/dtos/update-sms-template.dto.ts +32 -32
  166. package/src/dtos/update-view-metadata.dto.ts +12 -0
  167. package/src/entities/user.entity.ts +3 -0
  168. package/src/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.ts +43 -32
  169. package/src/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.ts +45 -33
  170. package/src/helpers/security.helper.ts +1 -1
  171. package/src/index.ts +0 -4
  172. package/src/repository/solid-base.repository.ts +172 -1
  173. package/src/seeders/module-metadata-seeder.service.ts +188 -126
  174. package/src/seeders/permission-metadata-seeder.service.ts +1 -4
  175. package/src/seeders/seed-data/solid-core-metadata.json +12 -25
  176. package/src/services/authentication.service.ts +268 -266
  177. package/src/services/crud-helper.service.ts +79 -36
  178. package/src/services/crud.service.ts +9 -4
  179. package/src/services/field-metadata.service.ts +0 -71
  180. package/src/services/file/disk-file.service.ts +8 -18
  181. package/src/services/file/index.ts +1 -0
  182. package/src/services/file/storage-path-builder.ts +56 -0
  183. package/src/services/media.service.ts +13 -7
  184. package/src/services/mediaStorageProviders/file-s3-storage-provider.ts +1 -1
  185. package/src/services/mediaStorageProviders/file-storage-provider.ts +13 -8
  186. package/src/services/module-metadata.service.ts +18 -15
  187. package/src/services/setting.service.ts +5 -3
  188. package/src/services/settings/default-settings-provider.service.ts +5 -3
  189. package/src/solid-core.module.ts +16 -12
  190. package/src/testing/adapters/ui/playwright-adapter.ts +1 -1
  191. package/dist/passport-strategies/local.strategy.d.ts +0 -15
  192. package/dist/passport-strategies/local.strategy.d.ts.map +0 -1
  193. package/dist/passport-strategies/local.strategy.js +0 -44
  194. package/dist/passport-strategies/local.strategy.js.map +0 -1
  195. package/dist/seeders/email-template-seeder.service.d.ts +0 -10
  196. package/dist/seeders/email-template-seeder.service.d.ts.map +0 -1
  197. package/dist/seeders/email-template-seeder.service.js +0 -84
  198. package/dist/seeders/email-template-seeder.service.js.map +0 -1
  199. package/dist/seeders/sms-template-seeder.service.d.ts +0 -10
  200. package/dist/seeders/sms-template-seeder.service.d.ts.map +0 -1
  201. package/dist/seeders/sms-template-seeder.service.js.map +0 -1
  202. package/dist/seeders/user-seeder.service.d.ts +0 -10
  203. package/dist/seeders/user-seeder.service.d.ts.map +0 -1
  204. package/dist/seeders/user-seeder.service.js +0 -44
  205. package/dist/seeders/user-seeder.service.js.map +0 -1
  206. package/src/passport-strategies/local.strategy.ts +0 -28
  207. package/src/seeders/email-template-seeder.service.ts +0 -49
  208. package/src/seeders/sms-template-seeder.service.ts +0 -50
  209. package/src/seeders/user-seeder.service.ts +0 -33
@@ -2,17 +2,7 @@ import { IsEmail, IsNotEmpty, IsOptional, MinLength } from 'class-validator';
2
2
 
3
3
  export class ResolveS3UrlDto {
4
4
  @IsNotEmpty()
5
- modelName: string;
6
-
7
- @IsNotEmpty()
8
- fieldName: string;
9
-
10
-
11
- @IsNotEmpty()
12
- fileType?: string;
13
-
14
- @IsNotEmpty()
15
- s3Key?: string;
5
+ s3Key: string;
16
6
 
17
7
  @IsOptional()
18
8
  bucketName?: string;
@@ -21,7 +11,7 @@ export class ResolveS3UrlDto {
21
11
  mediaStorageProviderUserKey?: string;
22
12
 
23
13
  @IsNotEmpty()
24
- isPrivate?: string;
14
+ isPrivate: string;
25
15
  }
26
16
 
27
17
 
@@ -25,6 +25,4 @@ export class SignUpDto {
25
25
  @IsArray()
26
26
  @Type(() => String)
27
27
  roles?: string[];
28
-
29
-
30
28
  }
@@ -12,29 +12,35 @@ export class UpdateEmailTemplateDto extends PartialType(CreateEmailTemplateDto)
12
12
  @IsString()
13
13
  @ApiProperty()
14
14
  name: string;
15
+
15
16
  @IsNotEmpty()
16
17
  @IsOptional()
17
18
  @IsString()
18
19
  @ApiProperty()
19
20
  displayName: string;
21
+
20
22
  @IsNotEmpty()
21
23
  @IsOptional()
22
24
  @IsString()
23
25
  @ApiProperty()
24
26
  body: string;
27
+
25
28
  @IsOptional()
26
29
  @IsString()
27
30
  @ApiProperty()
28
31
  type: string;
32
+
29
33
  @IsNotEmpty()
30
34
  @IsOptional()
31
35
  @IsString()
32
36
  @ApiProperty()
33
37
  subject: string;
38
+
34
39
  @IsOptional()
35
40
  @IsString()
36
41
  @ApiProperty()
37
42
  description: string;
43
+
38
44
  @IsOptional()
39
45
  @IsBoolean()
40
46
  @ApiProperty()
@@ -5,38 +5,46 @@ export class UpdateListOfValuesDto {
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
  type: string;
14
+
13
15
  @IsNotEmpty()
14
16
  @IsOptional()
15
17
  @IsString()
16
18
  @ApiProperty()
17
19
  value: string;
20
+
18
21
  @IsNotEmpty()
19
22
  @IsOptional()
20
23
  @IsString()
21
24
  @ApiProperty()
22
25
  display: string;
26
+
23
27
  @IsNotEmpty()
24
28
  @IsOptional()
25
29
  @IsString()
26
30
  @ApiProperty()
27
31
  description: string;
32
+
28
33
  @IsOptional()
29
34
  @IsBoolean()
30
35
  @ApiProperty()
31
36
  default: boolean;
37
+
32
38
  @IsOptional()
33
39
  @IsInt()
34
40
  @ApiProperty()
35
41
  sequence: number;
42
+
36
43
  @IsOptional()
37
44
  @IsInt()
38
45
  @ApiProperty()
39
46
  moduleId: number;
47
+
40
48
  @IsString()
41
49
  @IsOptional()
42
50
  @ApiProperty()
@@ -8,41 +8,50 @@ export class UpdateMenuItemMetadataDto {
8
8
  @IsOptional()
9
9
  @IsInt()
10
10
  id: number;
11
+
11
12
  @IsNotEmpty()
12
13
  @IsOptional()
13
14
  @Matches(/[a-z]+(-[a-z]+)*/)
14
15
  @IsString()
15
16
  @ApiProperty()
16
17
  name: string;
18
+
17
19
  @IsNotEmpty()
18
20
  @IsOptional()
19
21
  @IsString()
20
22
  @ApiProperty()
21
23
  displayName: string;
24
+
22
25
  @IsOptional()
23
26
  @IsInt()
24
27
  @ApiProperty()
25
28
  moduleId: number;
29
+
26
30
  @IsString()
27
31
  @IsOptional()
28
32
  @ApiProperty()
29
33
  moduleUserKey: string;
34
+
30
35
  @IsOptional()
31
36
  @IsInt()
32
37
  @ApiProperty()
33
38
  parentMenuItemId: number;
39
+
34
40
  @IsString()
35
41
  @IsOptional()
36
42
  @ApiProperty()
37
43
  parentMenuItemUserKey: string;
44
+
38
45
  @IsOptional()
39
46
  @IsInt()
40
47
  @ApiProperty()
41
48
  actionId: number;
49
+
42
50
  @IsString()
43
51
  @IsOptional()
44
52
  @ApiProperty()
45
53
  actionUserKey: string;
54
+
46
55
  @Transform(arrayTransformer)
47
56
  @IsOptional()
48
57
  @ApiProperty()
@@ -50,14 +59,17 @@ export class UpdateMenuItemMetadataDto {
50
59
  @ValidateNested({ each: true })
51
60
  @Type(() => UpdateRoleMetadataDto)
52
61
  roles: UpdateRoleMetadataDto[];
62
+
53
63
  @IsOptional()
54
64
  @IsArray()
55
65
  @ApiProperty()
56
66
  rolesIds: number[];
67
+
57
68
  @IsString()
58
69
  @IsOptional()
59
70
  @ApiProperty()
60
71
  rolesCommand: string;
72
+
61
73
  @IsOptional()
62
74
  @IsNumber()
63
75
  @ApiProperty()
@@ -5,66 +5,81 @@ export class UpdateScheduledJobDto {
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
  scheduleName: string;
14
+
13
15
  @IsNotEmpty()
14
16
  @IsOptional()
15
17
  @IsBoolean()
16
18
  @ApiProperty()
17
19
  isActive: boolean;
20
+
18
21
  @IsNotEmpty()
19
22
  @IsOptional()
20
23
  @IsString()
21
24
  @ApiProperty()
22
25
  frequency: string;
26
+
23
27
  @IsOptional()
24
28
  @IsDate()
25
29
  @ApiProperty()
26
30
  startTime: Date;
31
+
27
32
  @IsOptional()
28
33
  @IsDate()
29
34
  @ApiProperty()
30
35
  endTime: Date;
36
+
31
37
  @IsOptional()
32
38
  @IsDate()
33
39
  @ApiProperty()
34
40
  startDate: Date;
41
+
35
42
  @IsOptional()
36
43
  @IsDate()
37
44
  @ApiProperty()
38
45
  endDate: Date;
46
+
39
47
  @IsOptional()
40
48
  @IsInt()
41
49
  @ApiProperty()
42
50
  dayOfMonth: number;
51
+
43
52
  @IsOptional()
44
53
  @IsDate()
45
54
  @ApiProperty()
46
55
  lastRunAt: Date;
56
+
47
57
  @IsOptional()
48
58
  @IsDate()
49
59
  @ApiProperty()
50
60
  nextRunAt: Date;
61
+
51
62
  @IsOptional()
52
63
  @IsString()
53
64
  @ApiProperty()
54
65
  dayOfWeek: string;
66
+
55
67
  @IsNotEmpty()
56
68
  @IsOptional()
57
69
  @IsString()
58
70
  @ApiProperty()
59
71
  job: string;
72
+
60
73
  @IsOptional()
61
74
  @IsString()
62
75
  @ApiProperty()
63
76
  cronExpression: string;
77
+
64
78
  @IsOptional()
65
79
  @IsInt()
66
80
  @ApiProperty()
67
81
  moduleId: number;
82
+
68
83
  @IsString()
69
84
  @IsOptional()
70
85
  @ApiProperty()
@@ -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()
@@ -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[]> {