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.
- package/.claude/settings.local.json +26 -0
- package/.idea/250218_nodejs_core.iml +9 -0
- package/.idea/codeStyles/Project.xml +59 -0
- package/.idea/codeStyles/codeStyleConfig.xml +5 -0
- package/.idea/copilot.data.migration.agent.xml +6 -0
- package/.idea/copilot.data.migration.ask.xml +6 -0
- package/.idea/copilot.data.migration.ask2agent.xml +6 -0
- package/.idea/copilot.data.migration.edit.xml +6 -0
- package/.idea/inspectionProfiles/Project_Default.xml +6 -0
- package/.idea/misc.xml +6 -0
- package/.idea/modules.xml +8 -0
- package/.idea/prettier.xml +6 -0
- package/.idea/vcs.xml +6 -0
- package/dist/app.module.js +3 -1
- package/dist/app.module.js.map +1 -1
- package/dist/constant/db-data-type.constant.d.ts +30 -0
- package/dist/constant/db-data-type.constant.js +59 -0
- package/dist/constant/db-data-type.constant.js.map +1 -0
- package/dist/constant/storage-type.constant.d.ts +4 -0
- package/dist/constant/storage-type.constant.js +9 -0
- package/dist/constant/storage-type.constant.js.map +1 -0
- package/dist/module/dashboard/controller/dashboard.controller.d.ts +1 -0
- package/dist/module/dashboard/service/dashboard.service.d.ts +1 -0
- package/dist/module/eav/controller/eav.controller.d.ts +21 -0
- package/dist/module/eav/controller/eav.controller.js +127 -0
- package/dist/module/eav/controller/eav.controller.js.map +1 -0
- package/dist/module/eav/dto/eav-operation.dto.d.ts +20 -0
- package/dist/module/eav/dto/eav-operation.dto.js +75 -0
- package/dist/module/eav/dto/eav-operation.dto.js.map +1 -0
- package/dist/module/eav/eav.module.d.ts +2 -0
- package/dist/module/eav/eav.module.js +84 -0
- package/dist/module/eav/eav.module.js.map +1 -0
- package/dist/module/eav/entity/eav-boolean.entity.d.ts +9 -0
- package/dist/module/eav/entity/eav-boolean.entity.js +48 -0
- package/dist/module/eav/entity/eav-boolean.entity.js.map +1 -0
- package/dist/module/eav/entity/eav-date.entity.d.ts +9 -0
- package/dist/module/eav/entity/eav-date.entity.js +48 -0
- package/dist/module/eav/entity/eav-date.entity.js.map +1 -0
- package/dist/module/eav/entity/eav-decimal.entity.d.ts +9 -0
- package/dist/module/eav/entity/eav-decimal.entity.js +48 -0
- package/dist/module/eav/entity/eav-decimal.entity.js.map +1 -0
- package/dist/module/eav/entity/eav-int.entity.d.ts +9 -0
- package/dist/module/eav/entity/eav-int.entity.js +48 -0
- package/dist/module/eav/entity/eav-int.entity.js.map +1 -0
- package/dist/module/eav/entity/eav-json.entity.d.ts +9 -0
- package/dist/module/eav/entity/eav-json.entity.js +48 -0
- package/dist/module/eav/entity/eav-json.entity.js.map +1 -0
- package/dist/module/eav/entity/eav-text.entity.d.ts +9 -0
- package/dist/module/eav/entity/eav-text.entity.js +48 -0
- package/dist/module/eav/entity/eav-text.entity.js.map +1 -0
- package/dist/module/eav/entity/eav-time.entity.d.ts +9 -0
- package/dist/module/eav/entity/eav-time.entity.js +48 -0
- package/dist/module/eav/entity/eav-time.entity.js.map +1 -0
- package/dist/module/eav/entity/eav-timestamp.entity.d.ts +9 -0
- package/dist/module/eav/entity/eav-timestamp.entity.js +48 -0
- package/dist/module/eav/entity/eav-timestamp.entity.js.map +1 -0
- package/dist/module/eav/entity/eav-varchar.entity.d.ts +9 -0
- package/dist/module/eav/entity/eav-varchar.entity.js +48 -0
- package/dist/module/eav/entity/eav-varchar.entity.js.map +1 -0
- package/dist/module/eav/interface/eav-strategy.interface.d.ts +8 -0
- package/dist/module/eav/interface/eav-strategy.interface.js +3 -0
- package/dist/module/eav/interface/eav-strategy.interface.js.map +1 -0
- package/dist/module/eav/repository/eav-boolean.repository.d.ts +13 -0
- package/dist/module/eav/repository/eav-boolean.repository.js +57 -0
- package/dist/module/eav/repository/eav-boolean.repository.js.map +1 -0
- package/dist/module/eav/repository/eav-date.repository.d.ts +13 -0
- package/dist/module/eav/repository/eav-date.repository.js +57 -0
- package/dist/module/eav/repository/eav-date.repository.js.map +1 -0
- package/dist/module/eav/repository/eav-decimal.repository.d.ts +13 -0
- package/dist/module/eav/repository/eav-decimal.repository.js +57 -0
- package/dist/module/eav/repository/eav-decimal.repository.js.map +1 -0
- package/dist/module/eav/repository/eav-int.repository.d.ts +13 -0
- package/dist/module/eav/repository/eav-int.repository.js +57 -0
- package/dist/module/eav/repository/eav-int.repository.js.map +1 -0
- package/dist/module/eav/repository/eav-json.repository.d.ts +13 -0
- package/dist/module/eav/repository/eav-json.repository.js +57 -0
- package/dist/module/eav/repository/eav-json.repository.js.map +1 -0
- package/dist/module/eav/repository/eav-text.repository.d.ts +13 -0
- package/dist/module/eav/repository/eav-text.repository.js +57 -0
- package/dist/module/eav/repository/eav-text.repository.js.map +1 -0
- package/dist/module/eav/repository/eav-time.repository.d.ts +13 -0
- package/dist/module/eav/repository/eav-time.repository.js +57 -0
- package/dist/module/eav/repository/eav-time.repository.js.map +1 -0
- package/dist/module/eav/repository/eav-timestamp.repository.d.ts +13 -0
- package/dist/module/eav/repository/eav-timestamp.repository.js +57 -0
- package/dist/module/eav/repository/eav-timestamp.repository.js.map +1 -0
- package/dist/module/eav/repository/eav-varchar.repository.d.ts +13 -0
- package/dist/module/eav/repository/eav-varchar.repository.js +57 -0
- package/dist/module/eav/repository/eav-varchar.repository.js.map +1 -0
- package/dist/module/eav/service/eav-boolean.service.d.ts +12 -0
- package/dist/module/eav/service/eav-boolean.service.js +59 -0
- package/dist/module/eav/service/eav-boolean.service.js.map +1 -0
- package/dist/module/eav/service/eav-date.service.d.ts +12 -0
- package/dist/module/eav/service/eav-date.service.js +59 -0
- package/dist/module/eav/service/eav-date.service.js.map +1 -0
- package/dist/module/eav/service/eav-decimal.service.d.ts +12 -0
- package/dist/module/eav/service/eav-decimal.service.js +59 -0
- package/dist/module/eav/service/eav-decimal.service.js.map +1 -0
- package/dist/module/eav/service/eav-factory.service.d.ts +26 -0
- package/dist/module/eav/service/eav-factory.service.js +81 -0
- package/dist/module/eav/service/eav-factory.service.js.map +1 -0
- package/dist/module/eav/service/eav-int.service.d.ts +12 -0
- package/dist/module/eav/service/eav-int.service.js +59 -0
- package/dist/module/eav/service/eav-int.service.js.map +1 -0
- package/dist/module/eav/service/eav-json.service.d.ts +12 -0
- package/dist/module/eav/service/eav-json.service.js +59 -0
- package/dist/module/eav/service/eav-json.service.js.map +1 -0
- package/dist/module/eav/service/eav-text.service.d.ts +12 -0
- package/dist/module/eav/service/eav-text.service.js +59 -0
- package/dist/module/eav/service/eav-text.service.js.map +1 -0
- package/dist/module/eav/service/eav-time.service.d.ts +12 -0
- package/dist/module/eav/service/eav-time.service.js +59 -0
- package/dist/module/eav/service/eav-time.service.js.map +1 -0
- package/dist/module/eav/service/eav-timestamp.service.d.ts +12 -0
- package/dist/module/eav/service/eav-timestamp.service.js +59 -0
- package/dist/module/eav/service/eav-timestamp.service.js.map +1 -0
- package/dist/module/eav/service/eav-varchar.service.d.ts +12 -0
- package/dist/module/eav/service/eav-varchar.service.js +59 -0
- package/dist/module/eav/service/eav-varchar.service.js.map +1 -0
- package/dist/module/eav/service/eav.service.d.ts +14 -0
- package/dist/module/eav/service/eav.service.js +65 -0
- package/dist/module/eav/service/eav.service.js.map +1 -0
- package/dist/module/listmaster/service/list-master-item.service.js +9 -41
- package/dist/module/listmaster/service/list-master-item.service.js.map +1 -1
- package/dist/module/meta/controller/entity.controller.js +1 -4
- package/dist/module/meta/controller/entity.controller.js.map +1 -1
- package/dist/module/meta/entity/base-entity.entity.d.ts +1 -0
- package/dist/module/meta/entity/base-entity.entity.js +4 -0
- package/dist/module/meta/entity/base-entity.entity.js.map +1 -1
- package/dist/module/meta/entity/dynamic.entity.d.ts +3 -0
- package/dist/module/meta/entity/dynamic.entity.js +8 -0
- package/dist/module/meta/entity/dynamic.entity.js.map +1 -0
- package/dist/module/meta/entity/entity-master.entity.d.ts +4 -8
- package/dist/module/meta/entity/entity-master.entity.js +13 -57
- package/dist/module/meta/entity/entity-master.entity.js.map +1 -1
- package/dist/module/meta/service/entity-master.service.d.ts +8 -2
- package/dist/module/meta/service/entity-master.service.js +82 -2
- package/dist/module/meta/service/entity-master.service.js.map +1 -1
- package/dist/module/meta/service/media-data.service.d.ts +0 -1
- package/dist/module/meta/service/media-data.service.js +0 -119
- package/dist/module/meta/service/media-data.service.js.map +1 -1
- package/dist/module/workflow/controller/activity-log.controller.d.ts +1 -0
- package/dist/module/workflow/repository/activity-log.repository.d.ts +1 -0
- package/dist/module/workflow/repository/stage-group.repository.d.ts +1 -0
- package/dist/module/workflow/repository/stage.repository.d.ts +1 -0
- package/dist/module/workflow/service/activity-log.service.d.ts +1 -0
- package/dist/module/workflow-automation/service/workflow-automation.service.d.ts +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/server.log +850 -0
- package/src/app.module.ts +3 -1
- package/src/constant/db-data-type.constant.ts +81 -0
- package/src/constant/storage-type.constant.ts +4 -0
- package/src/module/eav/EAV_USAGE_GUIDE.md +351 -0
- package/src/module/eav/controller/eav.controller.ts +119 -0
- package/src/module/eav/dto/eav-operation.dto.ts +62 -0
- package/src/module/eav/eav.module.ts +80 -0
- package/src/module/eav/entity/eav-boolean.entity.ts +26 -0
- package/src/module/eav/entity/eav-date.entity.ts +25 -0
- package/src/module/eav/entity/eav-decimal.entity.ts +25 -0
- package/src/module/eav/entity/eav-int.entity.ts +25 -0
- package/src/module/eav/entity/eav-json.entity.ts +25 -0
- package/src/module/eav/entity/eav-text.entity.ts +25 -0
- package/src/module/eav/entity/eav-time.entity.ts +25 -0
- package/src/module/eav/entity/eav-timestamp.entity.ts +25 -0
- package/src/module/eav/entity/eav-varchar.entity.ts +25 -0
- package/src/module/eav/interface/eav-strategy.interface.ts +32 -0
- package/src/module/eav/repository/eav-boolean.repository.ts +67 -0
- package/src/module/eav/repository/eav-date.repository.ts +67 -0
- package/src/module/eav/repository/eav-decimal.repository.ts +67 -0
- package/src/module/eav/repository/eav-int.repository.ts +67 -0
- package/src/module/eav/repository/eav-json.repository.ts +67 -0
- package/src/module/eav/repository/eav-text.repository.ts +67 -0
- package/src/module/eav/repository/eav-time.repository.ts +67 -0
- package/src/module/eav/repository/eav-timestamp.repository.ts +67 -0
- package/src/module/eav/repository/eav-varchar.repository.ts +67 -0
- package/src/module/eav/service/eav-boolean.service.ts +64 -0
- package/src/module/eav/service/eav-date.service.ts +64 -0
- package/src/module/eav/service/eav-decimal.service.ts +64 -0
- package/src/module/eav/service/eav-factory.service.ts +93 -0
- package/src/module/eav/service/eav-int.service.ts +64 -0
- package/src/module/eav/service/eav-json.service.ts +64 -0
- package/src/module/eav/service/eav-text.service.ts +64 -0
- package/src/module/eav/service/eav-time.service.ts +64 -0
- package/src/module/eav/service/eav-timestamp.service.ts +64 -0
- package/src/module/eav/service/eav-varchar.service.ts +65 -0
- package/src/module/eav/service/eav.service.ts +116 -0
- package/src/module/listmaster/service/list-master-item.service.ts +11 -61
- package/src/module/meta/controller/entity.controller.ts +2 -10
- package/src/module/meta/entity/base-entity.entity.ts +3 -0
- package/src/module/meta/entity/dynamic.entity.ts +4 -0
- package/src/module/meta/entity/entity-master.entity.ts +16 -52
- package/src/module/meta/service/entity-master.service.ts +135 -6
- 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.
|
|
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
|
-
|
|
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:
|
|
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
|
|
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
|
|
|
@@ -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({
|
|
17
|
-
|
|
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: '
|
|
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
|
-
|
|
42
|
-
|
|
43
|
-
|
|
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: '
|
|
58
|
-
|
|
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
|
-
|
|
76
|
-
|
|
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
|
}
|