rez_core 6.5.75 → 6.5.76

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 (194) hide show
  1. package/.claude/settings.local.json +26 -0
  2. package/.idea/250218_nodejs_core.iml +9 -0
  3. package/.idea/codeStyles/Project.xml +59 -0
  4. package/.idea/codeStyles/codeStyleConfig.xml +5 -0
  5. package/.idea/copilot.data.migration.agent.xml +6 -0
  6. package/.idea/copilot.data.migration.ask.xml +6 -0
  7. package/.idea/copilot.data.migration.ask2agent.xml +6 -0
  8. package/.idea/copilot.data.migration.edit.xml +6 -0
  9. package/.idea/inspectionProfiles/Project_Default.xml +6 -0
  10. package/.idea/misc.xml +6 -0
  11. package/.idea/modules.xml +8 -0
  12. package/.idea/prettier.xml +6 -0
  13. package/.idea/vcs.xml +6 -0
  14. package/dist/app.module.js +3 -1
  15. package/dist/app.module.js.map +1 -1
  16. package/dist/constant/db-data-type.constant.d.ts +30 -0
  17. package/dist/constant/db-data-type.constant.js +59 -0
  18. package/dist/constant/db-data-type.constant.js.map +1 -0
  19. package/dist/constant/storage-type.constant.d.ts +4 -0
  20. package/dist/constant/storage-type.constant.js +9 -0
  21. package/dist/constant/storage-type.constant.js.map +1 -0
  22. package/dist/module/dashboard/controller/dashboard.controller.d.ts +1 -0
  23. package/dist/module/dashboard/service/dashboard.service.d.ts +1 -0
  24. package/dist/module/eav/controller/eav.controller.d.ts +21 -0
  25. package/dist/module/eav/controller/eav.controller.js +127 -0
  26. package/dist/module/eav/controller/eav.controller.js.map +1 -0
  27. package/dist/module/eav/dto/eav-operation.dto.d.ts +20 -0
  28. package/dist/module/eav/dto/eav-operation.dto.js +75 -0
  29. package/dist/module/eav/dto/eav-operation.dto.js.map +1 -0
  30. package/dist/module/eav/eav.module.d.ts +2 -0
  31. package/dist/module/eav/eav.module.js +84 -0
  32. package/dist/module/eav/eav.module.js.map +1 -0
  33. package/dist/module/eav/entity/eav-boolean.entity.d.ts +9 -0
  34. package/dist/module/eav/entity/eav-boolean.entity.js +48 -0
  35. package/dist/module/eav/entity/eav-boolean.entity.js.map +1 -0
  36. package/dist/module/eav/entity/eav-date.entity.d.ts +9 -0
  37. package/dist/module/eav/entity/eav-date.entity.js +48 -0
  38. package/dist/module/eav/entity/eav-date.entity.js.map +1 -0
  39. package/dist/module/eav/entity/eav-decimal.entity.d.ts +9 -0
  40. package/dist/module/eav/entity/eav-decimal.entity.js +48 -0
  41. package/dist/module/eav/entity/eav-decimal.entity.js.map +1 -0
  42. package/dist/module/eav/entity/eav-int.entity.d.ts +9 -0
  43. package/dist/module/eav/entity/eav-int.entity.js +48 -0
  44. package/dist/module/eav/entity/eav-int.entity.js.map +1 -0
  45. package/dist/module/eav/entity/eav-json.entity.d.ts +9 -0
  46. package/dist/module/eav/entity/eav-json.entity.js +48 -0
  47. package/dist/module/eav/entity/eav-json.entity.js.map +1 -0
  48. package/dist/module/eav/entity/eav-text.entity.d.ts +9 -0
  49. package/dist/module/eav/entity/eav-text.entity.js +48 -0
  50. package/dist/module/eav/entity/eav-text.entity.js.map +1 -0
  51. package/dist/module/eav/entity/eav-time.entity.d.ts +9 -0
  52. package/dist/module/eav/entity/eav-time.entity.js +48 -0
  53. package/dist/module/eav/entity/eav-time.entity.js.map +1 -0
  54. package/dist/module/eav/entity/eav-timestamp.entity.d.ts +9 -0
  55. package/dist/module/eav/entity/eav-timestamp.entity.js +48 -0
  56. package/dist/module/eav/entity/eav-timestamp.entity.js.map +1 -0
  57. package/dist/module/eav/entity/eav-varchar.entity.d.ts +9 -0
  58. package/dist/module/eav/entity/eav-varchar.entity.js +48 -0
  59. package/dist/module/eav/entity/eav-varchar.entity.js.map +1 -0
  60. package/dist/module/eav/interface/eav-strategy.interface.d.ts +8 -0
  61. package/dist/module/eav/interface/eav-strategy.interface.js +3 -0
  62. package/dist/module/eav/interface/eav-strategy.interface.js.map +1 -0
  63. package/dist/module/eav/repository/eav-boolean.repository.d.ts +13 -0
  64. package/dist/module/eav/repository/eav-boolean.repository.js +57 -0
  65. package/dist/module/eav/repository/eav-boolean.repository.js.map +1 -0
  66. package/dist/module/eav/repository/eav-date.repository.d.ts +13 -0
  67. package/dist/module/eav/repository/eav-date.repository.js +57 -0
  68. package/dist/module/eav/repository/eav-date.repository.js.map +1 -0
  69. package/dist/module/eav/repository/eav-decimal.repository.d.ts +13 -0
  70. package/dist/module/eav/repository/eav-decimal.repository.js +57 -0
  71. package/dist/module/eav/repository/eav-decimal.repository.js.map +1 -0
  72. package/dist/module/eav/repository/eav-int.repository.d.ts +13 -0
  73. package/dist/module/eav/repository/eav-int.repository.js +57 -0
  74. package/dist/module/eav/repository/eav-int.repository.js.map +1 -0
  75. package/dist/module/eav/repository/eav-json.repository.d.ts +13 -0
  76. package/dist/module/eav/repository/eav-json.repository.js +57 -0
  77. package/dist/module/eav/repository/eav-json.repository.js.map +1 -0
  78. package/dist/module/eav/repository/eav-text.repository.d.ts +13 -0
  79. package/dist/module/eav/repository/eav-text.repository.js +57 -0
  80. package/dist/module/eav/repository/eav-text.repository.js.map +1 -0
  81. package/dist/module/eav/repository/eav-time.repository.d.ts +13 -0
  82. package/dist/module/eav/repository/eav-time.repository.js +57 -0
  83. package/dist/module/eav/repository/eav-time.repository.js.map +1 -0
  84. package/dist/module/eav/repository/eav-timestamp.repository.d.ts +13 -0
  85. package/dist/module/eav/repository/eav-timestamp.repository.js +57 -0
  86. package/dist/module/eav/repository/eav-timestamp.repository.js.map +1 -0
  87. package/dist/module/eav/repository/eav-varchar.repository.d.ts +13 -0
  88. package/dist/module/eav/repository/eav-varchar.repository.js +57 -0
  89. package/dist/module/eav/repository/eav-varchar.repository.js.map +1 -0
  90. package/dist/module/eav/service/eav-boolean.service.d.ts +12 -0
  91. package/dist/module/eav/service/eav-boolean.service.js +59 -0
  92. package/dist/module/eav/service/eav-boolean.service.js.map +1 -0
  93. package/dist/module/eav/service/eav-date.service.d.ts +12 -0
  94. package/dist/module/eav/service/eav-date.service.js +59 -0
  95. package/dist/module/eav/service/eav-date.service.js.map +1 -0
  96. package/dist/module/eav/service/eav-decimal.service.d.ts +12 -0
  97. package/dist/module/eav/service/eav-decimal.service.js +59 -0
  98. package/dist/module/eav/service/eav-decimal.service.js.map +1 -0
  99. package/dist/module/eav/service/eav-factory.service.d.ts +26 -0
  100. package/dist/module/eav/service/eav-factory.service.js +81 -0
  101. package/dist/module/eav/service/eav-factory.service.js.map +1 -0
  102. package/dist/module/eav/service/eav-int.service.d.ts +12 -0
  103. package/dist/module/eav/service/eav-int.service.js +59 -0
  104. package/dist/module/eav/service/eav-int.service.js.map +1 -0
  105. package/dist/module/eav/service/eav-json.service.d.ts +12 -0
  106. package/dist/module/eav/service/eav-json.service.js +59 -0
  107. package/dist/module/eav/service/eav-json.service.js.map +1 -0
  108. package/dist/module/eav/service/eav-text.service.d.ts +12 -0
  109. package/dist/module/eav/service/eav-text.service.js +59 -0
  110. package/dist/module/eav/service/eav-text.service.js.map +1 -0
  111. package/dist/module/eav/service/eav-time.service.d.ts +12 -0
  112. package/dist/module/eav/service/eav-time.service.js +59 -0
  113. package/dist/module/eav/service/eav-time.service.js.map +1 -0
  114. package/dist/module/eav/service/eav-timestamp.service.d.ts +12 -0
  115. package/dist/module/eav/service/eav-timestamp.service.js +59 -0
  116. package/dist/module/eav/service/eav-timestamp.service.js.map +1 -0
  117. package/dist/module/eav/service/eav-varchar.service.d.ts +12 -0
  118. package/dist/module/eav/service/eav-varchar.service.js +59 -0
  119. package/dist/module/eav/service/eav-varchar.service.js.map +1 -0
  120. package/dist/module/eav/service/eav.service.d.ts +14 -0
  121. package/dist/module/eav/service/eav.service.js +65 -0
  122. package/dist/module/eav/service/eav.service.js.map +1 -0
  123. package/dist/module/listmaster/service/list-master-item.service.js +9 -41
  124. package/dist/module/listmaster/service/list-master-item.service.js.map +1 -1
  125. package/dist/module/meta/controller/entity.controller.js +1 -4
  126. package/dist/module/meta/controller/entity.controller.js.map +1 -1
  127. package/dist/module/meta/entity/base-entity.entity.d.ts +1 -0
  128. package/dist/module/meta/entity/base-entity.entity.js +4 -0
  129. package/dist/module/meta/entity/base-entity.entity.js.map +1 -1
  130. package/dist/module/meta/entity/dynamic.entity.d.ts +3 -0
  131. package/dist/module/meta/entity/dynamic.entity.js +8 -0
  132. package/dist/module/meta/entity/dynamic.entity.js.map +1 -0
  133. package/dist/module/meta/entity/entity-master.entity.d.ts +4 -8
  134. package/dist/module/meta/entity/entity-master.entity.js +13 -57
  135. package/dist/module/meta/entity/entity-master.entity.js.map +1 -1
  136. package/dist/module/meta/service/entity-master.service.d.ts +8 -2
  137. package/dist/module/meta/service/entity-master.service.js +82 -2
  138. package/dist/module/meta/service/entity-master.service.js.map +1 -1
  139. package/dist/module/meta/service/media-data.service.d.ts +0 -1
  140. package/dist/module/meta/service/media-data.service.js +0 -119
  141. package/dist/module/meta/service/media-data.service.js.map +1 -1
  142. package/dist/module/workflow/controller/activity-log.controller.d.ts +1 -0
  143. package/dist/module/workflow/repository/activity-log.repository.d.ts +1 -0
  144. package/dist/module/workflow/repository/stage-group.repository.d.ts +1 -0
  145. package/dist/module/workflow/repository/stage.repository.d.ts +1 -0
  146. package/dist/module/workflow/service/activity-log.service.d.ts +1 -0
  147. package/dist/module/workflow-automation/service/workflow-automation.service.d.ts +1 -0
  148. package/dist/tsconfig.build.tsbuildinfo +1 -1
  149. package/package.json +1 -1
  150. package/server.log +850 -0
  151. package/src/app.module.ts +3 -1
  152. package/src/constant/db-data-type.constant.ts +81 -0
  153. package/src/constant/storage-type.constant.ts +4 -0
  154. package/src/module/eav/EAV_USAGE_GUIDE.md +351 -0
  155. package/src/module/eav/controller/eav.controller.ts +119 -0
  156. package/src/module/eav/dto/eav-operation.dto.ts +62 -0
  157. package/src/module/eav/eav.module.ts +80 -0
  158. package/src/module/eav/entity/eav-boolean.entity.ts +26 -0
  159. package/src/module/eav/entity/eav-date.entity.ts +25 -0
  160. package/src/module/eav/entity/eav-decimal.entity.ts +25 -0
  161. package/src/module/eav/entity/eav-int.entity.ts +25 -0
  162. package/src/module/eav/entity/eav-json.entity.ts +25 -0
  163. package/src/module/eav/entity/eav-text.entity.ts +25 -0
  164. package/src/module/eav/entity/eav-time.entity.ts +25 -0
  165. package/src/module/eav/entity/eav-timestamp.entity.ts +25 -0
  166. package/src/module/eav/entity/eav-varchar.entity.ts +25 -0
  167. package/src/module/eav/interface/eav-strategy.interface.ts +32 -0
  168. package/src/module/eav/repository/eav-boolean.repository.ts +67 -0
  169. package/src/module/eav/repository/eav-date.repository.ts +67 -0
  170. package/src/module/eav/repository/eav-decimal.repository.ts +67 -0
  171. package/src/module/eav/repository/eav-int.repository.ts +67 -0
  172. package/src/module/eav/repository/eav-json.repository.ts +67 -0
  173. package/src/module/eav/repository/eav-text.repository.ts +67 -0
  174. package/src/module/eav/repository/eav-time.repository.ts +67 -0
  175. package/src/module/eav/repository/eav-timestamp.repository.ts +67 -0
  176. package/src/module/eav/repository/eav-varchar.repository.ts +67 -0
  177. package/src/module/eav/service/eav-boolean.service.ts +64 -0
  178. package/src/module/eav/service/eav-date.service.ts +64 -0
  179. package/src/module/eav/service/eav-decimal.service.ts +64 -0
  180. package/src/module/eav/service/eav-factory.service.ts +93 -0
  181. package/src/module/eav/service/eav-int.service.ts +64 -0
  182. package/src/module/eav/service/eav-json.service.ts +64 -0
  183. package/src/module/eav/service/eav-text.service.ts +64 -0
  184. package/src/module/eav/service/eav-time.service.ts +64 -0
  185. package/src/module/eav/service/eav-timestamp.service.ts +64 -0
  186. package/src/module/eav/service/eav-varchar.service.ts +65 -0
  187. package/src/module/eav/service/eav.service.ts +116 -0
  188. package/src/module/listmaster/service/list-master-item.service.ts +11 -61
  189. package/src/module/meta/controller/entity.controller.ts +2 -10
  190. package/src/module/meta/entity/base-entity.entity.ts +3 -0
  191. package/src/module/meta/entity/dynamic.entity.ts +4 -0
  192. package/src/module/meta/entity/entity-master.entity.ts +16 -52
  193. package/src/module/meta/service/entity-master.service.ts +135 -6
  194. package/src/module/meta/service/media-data.service.ts +0 -206
@@ -0,0 +1,64 @@
1
+ import { Injectable } from '@nestjs/common';
2
+ import { IEAVStrategy } from '../interface/eav-strategy.interface';
3
+ import { CreateEAVDto, UpdateEAVDto, EAVQueryDto } from '../dto/eav-operation.dto';
4
+ import { EAVTextRepository } from '../repository/eav-text.repository';
5
+
6
+ @Injectable()
7
+ export class EAVTextService implements IEAVStrategy {
8
+ constructor(private readonly repository: EAVTextRepository) { }
9
+
10
+ async create(dto: CreateEAVDto, modifiedBy?: number): Promise<any> {
11
+ const entity = this.repository.create({
12
+ entity_type: dto.entity_type,
13
+ entity_id: String(dto.entity_id),
14
+ key: dto.key,
15
+ value: dto.value,
16
+ modified_by: modifiedBy,
17
+ });
18
+
19
+ return await this.repository.save(entity);
20
+ }
21
+
22
+ async findOne(query: EAVQueryDto): Promise<any> {
23
+ return await this.repository.findByEntityAndKey(
24
+ query.entity_type,
25
+ query.entity_id,
26
+ query.key,
27
+ );
28
+ }
29
+
30
+ async findAll(query: Partial<EAVQueryDto>): Promise<any[]> {
31
+ return await this.repository.findByPartialCriteria({
32
+ entity_type: query.entity_type,
33
+ entity_id: query.entity_id,
34
+ key: query.key,
35
+ });
36
+ }
37
+
38
+ async update(query: EAVQueryDto, dto: UpdateEAVDto, modifiedBy?: number): Promise<any> {
39
+ const existing = await this.repository.findByEntityAndKey(
40
+ query.entity_type,
41
+ query.entity_id,
42
+ query.key,
43
+ );
44
+
45
+ if (!existing) {
46
+ return null;
47
+ }
48
+
49
+ existing.value = dto.value;
50
+ if (modifiedBy !== undefined) {
51
+ existing.modified_by = modifiedBy;
52
+ }
53
+
54
+ return await this.repository.save(existing);
55
+ }
56
+
57
+ async delete(query: EAVQueryDto): Promise<boolean> {
58
+ return await this.repository.deleteByEntityAndKey(
59
+ query.entity_type,
60
+ query.entity_id,
61
+ query.key,
62
+ );
63
+ }
64
+ }
@@ -0,0 +1,64 @@
1
+ import { Injectable } from '@nestjs/common';
2
+ import { IEAVStrategy } from '../interface/eav-strategy.interface';
3
+ import { CreateEAVDto, UpdateEAVDto, EAVQueryDto } from '../dto/eav-operation.dto';
4
+ import { EAVTimeRepository } from '../repository/eav-time.repository';
5
+
6
+ @Injectable()
7
+ export class EAVTimeService implements IEAVStrategy {
8
+ constructor(private readonly repository: EAVTimeRepository) { }
9
+
10
+ async create(dto: CreateEAVDto, modifiedBy?: number): Promise<any> {
11
+ const entity = this.repository.create({
12
+ entity_type: dto.entity_type,
13
+ entity_id: String(dto.entity_id),
14
+ key: dto.key,
15
+ value: dto.value,
16
+ modified_by: modifiedBy,
17
+ });
18
+
19
+ return await this.repository.save(entity);
20
+ }
21
+
22
+ async findOne(query: EAVQueryDto): Promise<any> {
23
+ return await this.repository.findByEntityAndKey(
24
+ query.entity_type,
25
+ query.entity_id,
26
+ query.key,
27
+ );
28
+ }
29
+
30
+ async findAll(query: Partial<EAVQueryDto>): Promise<any[]> {
31
+ return await this.repository.findByPartialCriteria({
32
+ entity_type: query.entity_type,
33
+ entity_id: query.entity_id,
34
+ key: query.key,
35
+ });
36
+ }
37
+
38
+ async update(query: EAVQueryDto, dto: UpdateEAVDto, modifiedBy?: number): Promise<any> {
39
+ const existing = await this.repository.findByEntityAndKey(
40
+ query.entity_type,
41
+ query.entity_id,
42
+ query.key,
43
+ );
44
+
45
+ if (!existing) {
46
+ return null;
47
+ }
48
+
49
+ existing.value = dto.value;
50
+ if (modifiedBy !== undefined) {
51
+ existing.modified_by = modifiedBy;
52
+ }
53
+
54
+ return await this.repository.save(existing);
55
+ }
56
+
57
+ async delete(query: EAVQueryDto): Promise<boolean> {
58
+ return await this.repository.deleteByEntityAndKey(
59
+ query.entity_type,
60
+ query.entity_id,
61
+ query.key,
62
+ );
63
+ }
64
+ }
@@ -0,0 +1,64 @@
1
+ import { Injectable } from '@nestjs/common';
2
+ import { IEAVStrategy } from '../interface/eav-strategy.interface';
3
+ import { CreateEAVDto, UpdateEAVDto, EAVQueryDto } from '../dto/eav-operation.dto';
4
+ import { EAVTimestampRepository } from '../repository/eav-timestamp.repository';
5
+
6
+ @Injectable()
7
+ export class EAVTimestampService implements IEAVStrategy {
8
+ constructor(private readonly repository: EAVTimestampRepository) { }
9
+
10
+ async create(dto: CreateEAVDto, modifiedBy?: number): Promise<any> {
11
+ const entity = this.repository.create({
12
+ entity_type: dto.entity_type,
13
+ entity_id: String(dto.entity_id),
14
+ key: dto.key,
15
+ value: dto.value,
16
+ modified_by: modifiedBy,
17
+ });
18
+
19
+ return await this.repository.save(entity);
20
+ }
21
+
22
+ async findOne(query: EAVQueryDto): Promise<any> {
23
+ return await this.repository.findByEntityAndKey(
24
+ query.entity_type,
25
+ query.entity_id,
26
+ query.key,
27
+ );
28
+ }
29
+
30
+ async findAll(query: Partial<EAVQueryDto>): Promise<any[]> {
31
+ return await this.repository.findByPartialCriteria({
32
+ entity_type: query.entity_type,
33
+ entity_id: query.entity_id,
34
+ key: query.key,
35
+ });
36
+ }
37
+
38
+ async update(query: EAVQueryDto, dto: UpdateEAVDto, modifiedBy?: number): Promise<any> {
39
+ const existing = await this.repository.findByEntityAndKey(
40
+ query.entity_type,
41
+ query.entity_id,
42
+ query.key,
43
+ );
44
+
45
+ if (!existing) {
46
+ return null;
47
+ }
48
+
49
+ existing.value = dto.value;
50
+ if (modifiedBy !== undefined) {
51
+ existing.modified_by = modifiedBy;
52
+ }
53
+
54
+ return await this.repository.save(existing);
55
+ }
56
+
57
+ async delete(query: EAVQueryDto): Promise<boolean> {
58
+ return await this.repository.deleteByEntityAndKey(
59
+ query.entity_type,
60
+ query.entity_id,
61
+ query.key,
62
+ );
63
+ }
64
+ }
@@ -0,0 +1,65 @@
1
+ import { Injectable } from '@nestjs/common';
2
+ import { IEAVStrategy } from '../interface/eav-strategy.interface';
3
+ import { CreateEAVDto, UpdateEAVDto, EAVQueryDto } from '../dto/eav-operation.dto';
4
+ import { EAVVarcharRepository } from '../repository/eav-varchar.repository';
5
+
6
+ @Injectable()
7
+ export class EAVVarcharService implements IEAVStrategy {
8
+ constructor(private readonly repository: EAVVarcharRepository) { }
9
+
10
+ async create(dto: CreateEAVDto, modifiedBy?: number): Promise<any> {
11
+ const entity = this.repository.create({
12
+ entity_type: dto.entity_type,
13
+ entity_id: String(dto.entity_id),
14
+ key: dto.key,
15
+ value: dto.value,
16
+ modified_by: modifiedBy,
17
+ });
18
+
19
+ return await this.repository.save(entity);
20
+ }
21
+
22
+ async findOne(query: EAVQueryDto): Promise<any> {
23
+ return await this.repository.findByEntityAndKey(
24
+ query.entity_type,
25
+ query.entity_id,
26
+ query.key,
27
+ );
28
+ }
29
+
30
+ async findAll(query: Partial<EAVQueryDto>): Promise<any[]> {
31
+ return await this.repository.findByPartialCriteria({
32
+ entity_type: query.entity_type,
33
+ entity_id: query.entity_id,
34
+ key: query.key,
35
+ });
36
+ }
37
+
38
+ async update(query: EAVQueryDto, dto: UpdateEAVDto, modifiedBy?: number): Promise<any> {
39
+ const existing = await this.repository.findByEntityAndKey(
40
+ query.entity_type,
41
+ query.entity_id,
42
+ query.key,
43
+ );
44
+
45
+ if (!existing) {
46
+ return null;
47
+ }
48
+
49
+ existing.value = dto.value;
50
+ if (modifiedBy !== undefined) {
51
+ existing.modified_by = modifiedBy;
52
+ }
53
+
54
+ return await this.repository.save(existing);
55
+ }
56
+
57
+ async delete(query: EAVQueryDto): Promise<boolean> {
58
+ return await this.repository.deleteByEntityAndKey(
59
+ query.entity_type,
60
+ query.entity_id,
61
+ query.key,
62
+ );
63
+ }
64
+ }
65
+
@@ -0,0 +1,116 @@
1
+ import { Injectable } from '@nestjs/common';
2
+ import { EAVFactoryService } from './eav-factory.service';
3
+ import { CreateEAVDto, UpdateEAVDto, EAVQueryDto } from '../dto/eav-operation.dto';
4
+
5
+ /**
6
+ * Main EAV Service - Orchestrator/Facade
7
+ * Provides a simple interface for CRUD operations on EAV data
8
+ * Delegates to appropriate type-specific services via the factory
9
+ */
10
+ @Injectable()
11
+ export class EAVService {
12
+ constructor(private readonly eavFactory: EAVFactoryService) { }
13
+
14
+ /**
15
+ * Create a new EAV record
16
+ * @param dataType - The data type (varchar, int, boolean, etc.)
17
+ * @param dto - The data to create
18
+ * @param modifiedBy - Optional user ID who is creating the record
19
+ * @returns The created record
20
+ */
21
+ async create(dataType: string, dto: CreateEAVDto, modifiedBy?: number): Promise<any> {
22
+ const service = this.eavFactory.getService(dataType);
23
+ return await service.create(dto, modifiedBy);
24
+ }
25
+
26
+ /**
27
+ * Find a single EAV record
28
+ * @param dataType - The data type
29
+ * @param query - Query parameters (entity_type, entity_id, key)
30
+ * @returns The found record or null
31
+ */
32
+ async findOne(dataType: string, query: EAVQueryDto): Promise<any> {
33
+ const service = this.eavFactory.getService(dataType);
34
+ return await service.findOne(query);
35
+ }
36
+
37
+ /**
38
+ * Find all EAV records matching the query
39
+ * @param dataType - The data type
40
+ * @param query - Partial query parameters
41
+ * @returns Array of matching records
42
+ */
43
+ async findAll(dataType: string, query: Partial<EAVQueryDto>): Promise<any[]> {
44
+ const service = this.eavFactory.getService(dataType);
45
+ return await service.findAll(query);
46
+ }
47
+
48
+ /**
49
+ * Update an existing EAV record
50
+ * @param dataType - The data type
51
+ * @param query - Query to find the record (entity_type, entity_id, key)
52
+ * @param dto - The updated data
53
+ * @param modifiedBy - Optional user ID who is updating the record
54
+ * @returns The updated record or null
55
+ */
56
+ async update(
57
+ dataType: string,
58
+ query: EAVQueryDto,
59
+ dto: UpdateEAVDto,
60
+ modifiedBy?: number,
61
+ ): Promise<any> {
62
+ const service = this.eavFactory.getService(dataType);
63
+ return await service.update(query, dto, modifiedBy);
64
+ }
65
+
66
+ /**
67
+ * Delete an EAV record
68
+ * @param dataType - The data type
69
+ * @param query - Query to find the record (entity_type, entity_id, key)
70
+ * @returns True if deleted, false otherwise
71
+ */
72
+ async delete(dataType: string, query: EAVQueryDto): Promise<boolean> {
73
+ const service = this.eavFactory.getService(dataType);
74
+ return await service.delete(query);
75
+ }
76
+
77
+ /**
78
+ * Create or update an EAV record (upsert)
79
+ * @param dataType - The data type
80
+ * @param dto - The data to create or update
81
+ * @param modifiedBy - Optional user ID
82
+ * @returns The created or updated record
83
+ */
84
+ async upsert(dataType: string, dto: CreateEAVDto, modifiedBy?: number): Promise<any> {
85
+ const query: EAVQueryDto = {
86
+ entity_type: dto.entity_type,
87
+ entity_id: dto.entity_id,
88
+ key: dto.key,
89
+ };
90
+
91
+ const existing = await this.findOne(dataType, query);
92
+
93
+ if (existing) {
94
+ return await this.update(dataType, query, { value: dto.value }, modifiedBy);
95
+ } else {
96
+ return await this.create(dataType, dto, modifiedBy);
97
+ }
98
+ }
99
+
100
+ /**
101
+ * Get all supported data types
102
+ * @returns Array of supported data type names
103
+ */
104
+ getSupportedTypes(): string[] {
105
+ return this.eavFactory.getSupportedTypes();
106
+ }
107
+
108
+ /**
109
+ * Check if a data type is supported
110
+ * @param dataType - The data type to check
111
+ * @returns True if supported, false otherwise
112
+ */
113
+ isTypeSupported(dataType: string): boolean {
114
+ return this.eavFactory.isTypeSupported(dataType);
115
+ }
116
+ }
@@ -36,7 +36,7 @@ export class ListMasterItemService extends EntityServiceImpl {
36
36
 
37
37
  async createEntity(entityData: any, loggedInUser: UserData): Promise<any> {
38
38
  try {
39
- const generatedCode = CodeGeneratorService.generateCode(entityData.name);
39
+ const generatedCode = CodeGeneratorService.generateCode(entityData.code);
40
40
 
41
41
  entityData.code = generatedCode;
42
42
  entityData.value = generatedCode;
@@ -72,46 +72,7 @@ export class ListMasterItemService extends EntityServiceImpl {
72
72
  if (!name) {
73
73
  throw new BadRequestException(`name is missing at index ${i}`);
74
74
  }
75
-
76
- if (code) {
77
- // Check if code exists
78
- const existingItem = await this.listItemsRepo.findOneByCondition({
79
- code,
80
- listtype: listType,
81
- enterprise_id: entId,
82
- });
83
-
84
- if (existingItem) {
85
- // It's an update — check if name is changing to a used name
86
- if (existingItem.name.toLowerCase() !== name.toLowerCase()) {
87
- const nameExists = await this.listItemsRepo.findOneByCondition({
88
- name,
89
- listtype: listType,
90
- enterprise_id: entId,
91
- });
92
-
93
- if (nameExists && nameExists.id !== existingItem.id) {
94
- throw new BadRequestException(
95
- `${name} already used by another item`,
96
- );
97
- }
98
- }
99
-
100
- // Update the existing item
101
- await this.updateEntity(
102
- {
103
- ...existingItem,
104
- ...item,
105
- name,
106
- listtype: listType,
107
- },
108
- loggedInUser,
109
- );
110
-
111
- continue;
112
- }
113
- }
114
-
75
+
115
76
  // Creation path
116
77
  const nameExists = await this.listItemsRepo.findOneByCondition({
117
78
  name,
@@ -119,34 +80,23 @@ export class ListMasterItemService extends EntityServiceImpl {
119
80
  enterprise_id: entId,
120
81
  });
121
82
 
122
- if (nameExists) {
83
+ const codeExists = await this.listItemsRepo.findOneByCondition({
84
+ code,
85
+ listtype: listType,
86
+ enterprise_id: entId,
87
+ });
88
+
89
+ if (nameExists || codeExists) {
123
90
  throw new BadRequestException(
124
- `list item with name ${name} already exists`,
91
+ `list item with name ${name} or code ${code} already exists`,
125
92
  );
126
93
  }
127
94
 
128
- const finalCode = code || ''; // Could generate code here if needed
129
-
130
- // Check if code already exists (if code is provided)
131
- if (finalCode) {
132
- const codeExists = await this.listItemsRepo.findOneByCondition({
133
- code: finalCode,
134
- listtype: listType,
135
- enterprise_id: entId,
136
- });
137
-
138
- if (codeExists) {
139
- throw new BadRequestException(
140
- `list item with code ${finalCode} already exists`,
141
- );
142
- }
143
- }
144
-
145
95
  await this.createEntity(
146
96
  {
147
97
  ...item,
148
98
  name,
149
- code: finalCode,
99
+ code: code,
150
100
  listtype: listType,
151
101
  value: '',
152
102
  },
@@ -4,7 +4,6 @@ import {
4
4
  Controller,
5
5
  Get,
6
6
  HttpCode,
7
- HttpStatus,
8
7
  InternalServerErrorException,
9
8
  NotFoundException,
10
9
  Param,
@@ -12,23 +11,17 @@ import {
12
11
  Query,
13
12
  Req,
14
13
  Request,
15
- Res,
16
- UseGuards,
17
14
  } from '@nestjs/common';
18
15
  import { EntityServiceImpl } from '../service/entity-service-impl.service';
19
- import { Response } from 'express';
20
16
  import { ReflectionHelper } from '../../../utils/service/reflection-helper.service';
21
17
  import { EntityMasterService } from '../service/entity-master.service';
22
18
  import { BaseEntity } from '../entity/base-entity.entity';
23
- import { JwtAuthGuard } from '../../auth/guards/jwt.guard';
24
- import * as fs from 'fs';
25
- import * as path from 'path';
26
19
  import { UserData } from '../../user/entity/user.entity';
27
20
  import {
28
21
  WorkflowAutomationEngineService,
29
22
  } from 'src/module/workflow-automation/service/workflow-automation-engine.service';
30
23
 
31
- @UseGuards(JwtAuthGuard)
24
+ // @UseGuards(JwtAuthGuard)
32
25
  @Controller('entity')
33
26
  export class EntityController {
34
27
  constructor(
@@ -141,8 +134,7 @@ export class EntityController {
141
134
  @Query('entity_type') entityType: string,
142
135
  @Req() req: Request & { user: any },
143
136
  ) {
144
- const loggedInUser = req.user.userData;
145
- const appcode = loggedInUser.appcode;
137
+ const loggedInUser = req.user?.userData;
146
138
 
147
139
  if (!entityType) {
148
140
  throw new BadRequestException(
@@ -20,6 +20,9 @@ export class BaseEntity {
20
20
  @Column({ name: 'status', type: 'varchar', nullable: true, length: 50 })
21
21
  status: string;
22
22
 
23
+ @Column({name: 'seq_no', type: 'bigint', nullable: true })
24
+ seq_no: number;
25
+
23
26
  @Column({ name: 'created_by', type: 'bigint', nullable: true })
24
27
  created_by: number;
25
28
 
@@ -0,0 +1,4 @@
1
+ import { BaseEntity } from './base-entity.entity';
2
+
3
+ export class DynamicEntity extends BaseEntity {
4
+ }
@@ -1,65 +1,31 @@
1
1
  import { BaseEntity } from './base-entity.entity';
2
2
  import { Column, Entity, Index } from 'typeorm';
3
+ import { StorageType } from '../../../constant/storage-type.constant';
3
4
 
4
5
  @Entity({ name: 'frm_entity_master' })
5
6
  @Index('idx_entity_master_mapped_type_org', ['mapped_entity_type', 'enterprise_id'])
6
7
  export class EntityMaster extends BaseEntity {
7
8
 
8
- @Column({
9
- name: 'mapped_entity_type',
10
- type: 'varchar',
11
- length: 50,
12
- nullable: false,
13
- })
9
+ @Column({ name: 'mapped_entity_type', type: 'varchar', length: 50, nullable: false })
14
10
  mapped_entity_type: string;
15
11
 
16
- @Column({ name: 'appcode', type: 'varchar', length: 50, nullable: true })
17
- appcode: string;
18
-
19
- @Column({ name: 'category', type: 'varchar', length: 50, nullable: true })
20
- category: string;
12
+ @Column({name: 'app_id', type: 'int', nullable: true})
13
+ app_id: number;
21
14
 
22
- @Column({ name: 'module', type: 'varchar', length: 200, nullable: true })
23
- module: string;
24
-
25
- @Column({
26
- name: 'entity_data_class',
27
- type: 'varchar',
28
- length: 200,
29
- nullable: true,
30
- })
15
+ @Column({ name: 'entity_data_class', type: 'varchar', length: 200, nullable: true })
31
16
  entity_data_class: string;
32
17
 
33
- @Column({
34
- name: 'entity_service',
35
- type: 'varchar',
36
- length: 200,
37
- nullable: true,
38
- })
18
+ @Column({ name: 'entity_service', type: 'varchar', length: 200, nullable: true })
39
19
  entity_service: string;
40
20
 
41
- @Column({
42
- name: 'db_table_name',
43
- type: 'varchar',
44
- length: 200,
45
- nullable: true,
46
- })
47
- db_table_name: string;
48
-
49
- @Column({
50
- name: 'description',
51
- type: 'varchar',
52
- length: 200,
53
- nullable: true,
54
- })
55
- description: string;
21
+ // SELF,DYNAMIC
22
+ @Column({ name: 'storage_type', type: 'varchar' ,nullable: true, length: 20 })
23
+ storage_type: StorageType;
56
24
 
57
- @Column({ name: 'storage_type', nullable: true, length: 20 })
58
- storage_type: string;
59
-
60
- @Column({ name: 'show_in_entity_list', nullable: true, length: 20 })
61
- show_in_entity_list: string;
25
+ @Column({ name: 'db_table_name', type: 'varchar', length: 200, nullable: true })
26
+ db_table_name: string;
62
27
 
28
+ // manual/system/pattern
63
29
  @Column({ name: 'code_entry', nullable: true, length: 20 })
64
30
  code_entry: string;
65
31
 
@@ -69,12 +35,10 @@ export class EntityMaster extends BaseEntity {
69
35
  @Column({ name: 'data_source', nullable: true })
70
36
  data_source: string;
71
37
 
72
- @Column({ name: 'is_workflow', nullable: true })
38
+ @Column({ name: 'is_workflow', type: 'boolean' ,nullable: true })
73
39
  is_workflow: boolean;
74
40
 
75
- @Column({ name: 'doc_upload_path', nullable: true, length:50 })
76
- doc_upload_path: string;
77
-
78
- @Column({name: 'overwrite_path', type: 'int', nullable: true})
79
- overwrite_path: number;
41
+ //FIXME: Remove appcode column
42
+ @Column({ name: 'appcode', type: 'varchar', length: 50, nullable: true })
43
+ appcode: string;
80
44
  }