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,67 @@
|
|
|
1
|
+
import { Injectable } from '@nestjs/common';
|
|
2
|
+
import { DataSource, Repository } from 'typeorm';
|
|
3
|
+
import { EAVText } from '../entity/eav-text.entity';
|
|
4
|
+
|
|
5
|
+
@Injectable()
|
|
6
|
+
export class EAVTextRepository extends Repository<EAVText> {
|
|
7
|
+
constructor(private dataSource: DataSource) {
|
|
8
|
+
super(EAVText, dataSource.createEntityManager());
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Find by entity_type, entity_id, and key
|
|
13
|
+
*/
|
|
14
|
+
async findByEntityAndKey(
|
|
15
|
+
entityType: string,
|
|
16
|
+
entityId: string | number,
|
|
17
|
+
key: string,
|
|
18
|
+
): Promise<EAVText | null> {
|
|
19
|
+
return await this.findOne({
|
|
20
|
+
where: {
|
|
21
|
+
entity_type: entityType,
|
|
22
|
+
entity_id: String(entityId),
|
|
23
|
+
key: key,
|
|
24
|
+
},
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Find all by partial criteria
|
|
30
|
+
*/
|
|
31
|
+
async findByPartialCriteria(criteria: {
|
|
32
|
+
entity_type?: string;
|
|
33
|
+
entity_id?: string | number;
|
|
34
|
+
key?: string;
|
|
35
|
+
}): Promise<EAVText[]> {
|
|
36
|
+
const where: any = {};
|
|
37
|
+
|
|
38
|
+
if (criteria.entity_type) {
|
|
39
|
+
where.entity_type = criteria.entity_type;
|
|
40
|
+
}
|
|
41
|
+
if (criteria.entity_id) {
|
|
42
|
+
where.entity_id = String(criteria.entity_id);
|
|
43
|
+
}
|
|
44
|
+
if (criteria.key) {
|
|
45
|
+
where.key = criteria.key;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
return await this.find({ where });
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Delete by entity_type, entity_id, and key
|
|
53
|
+
*/
|
|
54
|
+
async deleteByEntityAndKey(
|
|
55
|
+
entityType: string,
|
|
56
|
+
entityId: string | number,
|
|
57
|
+
key: string,
|
|
58
|
+
): Promise<boolean> {
|
|
59
|
+
const result = await this.delete({
|
|
60
|
+
entity_type: entityType,
|
|
61
|
+
entity_id: String(entityId),
|
|
62
|
+
key: key,
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
return (result.affected ?? 0) > 0;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { Injectable } from '@nestjs/common';
|
|
2
|
+
import { DataSource, Repository } from 'typeorm';
|
|
3
|
+
import { EAVTime } from '../entity/eav-time.entity';
|
|
4
|
+
|
|
5
|
+
@Injectable()
|
|
6
|
+
export class EAVTimeRepository extends Repository<EAVTime> {
|
|
7
|
+
constructor(private dataSource: DataSource) {
|
|
8
|
+
super(EAVTime, dataSource.createEntityManager());
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Find by entity_type, entity_id, and key
|
|
13
|
+
*/
|
|
14
|
+
async findByEntityAndKey(
|
|
15
|
+
entityType: string,
|
|
16
|
+
entityId: string | number,
|
|
17
|
+
key: string,
|
|
18
|
+
): Promise<EAVTime | null> {
|
|
19
|
+
return await this.findOne({
|
|
20
|
+
where: {
|
|
21
|
+
entity_type: entityType,
|
|
22
|
+
entity_id: String(entityId),
|
|
23
|
+
key: key,
|
|
24
|
+
},
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Find all by partial criteria
|
|
30
|
+
*/
|
|
31
|
+
async findByPartialCriteria(criteria: {
|
|
32
|
+
entity_type?: string;
|
|
33
|
+
entity_id?: string | number;
|
|
34
|
+
key?: string;
|
|
35
|
+
}): Promise<EAVTime[]> {
|
|
36
|
+
const where: any = {};
|
|
37
|
+
|
|
38
|
+
if (criteria.entity_type) {
|
|
39
|
+
where.entity_type = criteria.entity_type;
|
|
40
|
+
}
|
|
41
|
+
if (criteria.entity_id) {
|
|
42
|
+
where.entity_id = String(criteria.entity_id);
|
|
43
|
+
}
|
|
44
|
+
if (criteria.key) {
|
|
45
|
+
where.key = criteria.key;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
return await this.find({ where });
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Delete by entity_type, entity_id, and key
|
|
53
|
+
*/
|
|
54
|
+
async deleteByEntityAndKey(
|
|
55
|
+
entityType: string,
|
|
56
|
+
entityId: string | number,
|
|
57
|
+
key: string,
|
|
58
|
+
): Promise<boolean> {
|
|
59
|
+
const result = await this.delete({
|
|
60
|
+
entity_type: entityType,
|
|
61
|
+
entity_id: String(entityId),
|
|
62
|
+
key: key,
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
return (result.affected ?? 0) > 0;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { Injectable } from '@nestjs/common';
|
|
2
|
+
import { DataSource, Repository } from 'typeorm';
|
|
3
|
+
import { EAVTimeStamp } from '../entity/eav-timestamp.entity';
|
|
4
|
+
|
|
5
|
+
@Injectable()
|
|
6
|
+
export class EAVTimestampRepository extends Repository<EAVTimeStamp> {
|
|
7
|
+
constructor(private dataSource: DataSource) {
|
|
8
|
+
super(EAVTimeStamp, dataSource.createEntityManager());
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Find by entity_type, entity_id, and key
|
|
13
|
+
*/
|
|
14
|
+
async findByEntityAndKey(
|
|
15
|
+
entityType: string,
|
|
16
|
+
entityId: string | number,
|
|
17
|
+
key: string,
|
|
18
|
+
): Promise<EAVTimeStamp | null> {
|
|
19
|
+
return await this.findOne({
|
|
20
|
+
where: {
|
|
21
|
+
entity_type: entityType,
|
|
22
|
+
entity_id: String(entityId),
|
|
23
|
+
key: key,
|
|
24
|
+
},
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Find all by partial criteria
|
|
30
|
+
*/
|
|
31
|
+
async findByPartialCriteria(criteria: {
|
|
32
|
+
entity_type?: string;
|
|
33
|
+
entity_id?: string | number;
|
|
34
|
+
key?: string;
|
|
35
|
+
}): Promise<EAVTimeStamp[]> {
|
|
36
|
+
const where: any = {};
|
|
37
|
+
|
|
38
|
+
if (criteria.entity_type) {
|
|
39
|
+
where.entity_type = criteria.entity_type;
|
|
40
|
+
}
|
|
41
|
+
if (criteria.entity_id) {
|
|
42
|
+
where.entity_id = String(criteria.entity_id);
|
|
43
|
+
}
|
|
44
|
+
if (criteria.key) {
|
|
45
|
+
where.key = criteria.key;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
return await this.find({ where });
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Delete by entity_type, entity_id, and key
|
|
53
|
+
*/
|
|
54
|
+
async deleteByEntityAndKey(
|
|
55
|
+
entityType: string,
|
|
56
|
+
entityId: string | number,
|
|
57
|
+
key: string,
|
|
58
|
+
): Promise<boolean> {
|
|
59
|
+
const result = await this.delete({
|
|
60
|
+
entity_type: entityType,
|
|
61
|
+
entity_id: String(entityId),
|
|
62
|
+
key: key,
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
return (result.affected ?? 0) > 0;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { Injectable } from '@nestjs/common';
|
|
2
|
+
import { DataSource, Repository } from 'typeorm';
|
|
3
|
+
import { EAVVarchar } from '../entity/eav-varchar.entity';
|
|
4
|
+
|
|
5
|
+
@Injectable()
|
|
6
|
+
export class EAVVarcharRepository extends Repository<EAVVarchar> {
|
|
7
|
+
constructor(private dataSource: DataSource) {
|
|
8
|
+
super(EAVVarchar, dataSource.createEntityManager());
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Find by entity_type, entity_id, and key
|
|
13
|
+
*/
|
|
14
|
+
async findByEntityAndKey(
|
|
15
|
+
entityType: string,
|
|
16
|
+
entityId: string | number,
|
|
17
|
+
key: string,
|
|
18
|
+
): Promise<EAVVarchar | null> {
|
|
19
|
+
return await this.findOne({
|
|
20
|
+
where: {
|
|
21
|
+
entity_type: entityType,
|
|
22
|
+
entity_id: String(entityId),
|
|
23
|
+
key: key,
|
|
24
|
+
},
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Find all by partial criteria
|
|
30
|
+
*/
|
|
31
|
+
async findByPartialCriteria(criteria: {
|
|
32
|
+
entity_type?: string;
|
|
33
|
+
entity_id?: string | number;
|
|
34
|
+
key?: string;
|
|
35
|
+
}): Promise<EAVVarchar[]> {
|
|
36
|
+
const where: any = {};
|
|
37
|
+
|
|
38
|
+
if (criteria.entity_type) {
|
|
39
|
+
where.entity_type = criteria.entity_type;
|
|
40
|
+
}
|
|
41
|
+
if (criteria.entity_id) {
|
|
42
|
+
where.entity_id = String(criteria.entity_id);
|
|
43
|
+
}
|
|
44
|
+
if (criteria.key) {
|
|
45
|
+
where.key = criteria.key;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
return await this.find({ where });
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Delete by entity_type, entity_id, and key
|
|
53
|
+
*/
|
|
54
|
+
async deleteByEntityAndKey(
|
|
55
|
+
entityType: string,
|
|
56
|
+
entityId: string | number,
|
|
57
|
+
key: string,
|
|
58
|
+
): Promise<boolean> {
|
|
59
|
+
const result = await this.delete({
|
|
60
|
+
entity_type: entityType,
|
|
61
|
+
entity_id: String(entityId),
|
|
62
|
+
key: key,
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
return (result.affected ?? 0) > 0;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
@@ -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 { EAVBooleanRepository } from '../repository/eav-boolean.repository';
|
|
5
|
+
|
|
6
|
+
@Injectable()
|
|
7
|
+
export class EAVBooleanService implements IEAVStrategy {
|
|
8
|
+
constructor(private readonly repository: EAVBooleanRepository) { }
|
|
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 { EAVDateRepository } from '../repository/eav-date.repository';
|
|
5
|
+
|
|
6
|
+
@Injectable()
|
|
7
|
+
export class EAVDateService implements IEAVStrategy {
|
|
8
|
+
constructor(private readonly repository: EAVDateRepository) { }
|
|
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 { EAVDecimalRepository } from '../repository/eav-decimal.repository';
|
|
5
|
+
|
|
6
|
+
@Injectable()
|
|
7
|
+
export class EAVDecimalService implements IEAVStrategy {
|
|
8
|
+
constructor(private readonly repository: EAVDecimalRepository) { }
|
|
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,93 @@
|
|
|
1
|
+
import { Injectable, BadRequestException } from '@nestjs/common';
|
|
2
|
+
import { IEAVStrategy } from '../interface/eav-strategy.interface';
|
|
3
|
+
import { EAVVarcharService } from './eav-varchar.service';
|
|
4
|
+
import { EAVIntService } from './eav-int.service';
|
|
5
|
+
import { EAVBooleanService } from './eav-boolean.service';
|
|
6
|
+
import { EAVDecimalService } from './eav-decimal.service';
|
|
7
|
+
import { EAVTextService } from './eav-text.service';
|
|
8
|
+
import { EAVJsonService } from './eav-json.service';
|
|
9
|
+
import { EAVDateService } from './eav-date.service';
|
|
10
|
+
import { EAVTimeService } from './eav-time.service';
|
|
11
|
+
import { EAVTimestampService } from './eav-timestamp.service';
|
|
12
|
+
import { EavDataType, EavPrimaryDataType } from '../../../constant/db-data-type.constant';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Factory service to resolve the appropriate EAV service based on data type
|
|
16
|
+
* Implements the Factory Pattern
|
|
17
|
+
*/
|
|
18
|
+
@Injectable()
|
|
19
|
+
export class EAVFactoryService {
|
|
20
|
+
private readonly serviceMap: Map<string, IEAVStrategy>;
|
|
21
|
+
|
|
22
|
+
constructor(
|
|
23
|
+
private readonly eavVarcharService: EAVVarcharService,
|
|
24
|
+
private readonly eavIntService: EAVIntService,
|
|
25
|
+
private readonly eavBooleanService: EAVBooleanService,
|
|
26
|
+
private readonly eavDecimalService: EAVDecimalService,
|
|
27
|
+
private readonly eavTextService: EAVTextService,
|
|
28
|
+
private readonly eavJsonService: EAVJsonService,
|
|
29
|
+
private readonly eavDateService: EAVDateService,
|
|
30
|
+
private readonly eavTimeService: EAVTimeService,
|
|
31
|
+
private readonly eavTimestampService: EAVTimestampService,
|
|
32
|
+
) {
|
|
33
|
+
// Initialize the service map with all available data type services using enum constants
|
|
34
|
+
this.serviceMap = new Map<string, IEAVStrategy>([
|
|
35
|
+
// String types
|
|
36
|
+
[EavDataType.VARCHAR, this.eavVarcharService],
|
|
37
|
+
[EavDataType.STRING, this.eavVarcharService],
|
|
38
|
+
// Numeric types
|
|
39
|
+
[EavDataType.INT, this.eavIntService],
|
|
40
|
+
[EavDataType.INTEGER, this.eavIntService],
|
|
41
|
+
[EavDataType.DECIMAL, this.eavDecimalService],
|
|
42
|
+
[EavDataType.FLOAT, this.eavDecimalService],
|
|
43
|
+
// Boolean types
|
|
44
|
+
[EavDataType.BOOLEAN, this.eavBooleanService],
|
|
45
|
+
[EavDataType.BOOL, this.eavBooleanService],
|
|
46
|
+
// Text types
|
|
47
|
+
[EavDataType.TEXT, this.eavTextService],
|
|
48
|
+
[EavDataType.JSON, this.eavJsonService],
|
|
49
|
+
// Date/Time types
|
|
50
|
+
[EavDataType.DATE, this.eavDateService],
|
|
51
|
+
[EavDataType.TIME, this.eavTimeService],
|
|
52
|
+
[EavDataType.TIMESTAMP, this.eavTimestampService],
|
|
53
|
+
[EavDataType.DATETIME, this.eavTimestampService],
|
|
54
|
+
]);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Get the appropriate service based on data type
|
|
59
|
+
* @param dataType - The data type (varchar, int, boolean, etc.)
|
|
60
|
+
* @returns The corresponding EAV service
|
|
61
|
+
* @throws BadRequestException if data type is not supported
|
|
62
|
+
*/
|
|
63
|
+
getService(dataType: string): IEAVStrategy {
|
|
64
|
+
const normalizedType = dataType.toLowerCase().trim();
|
|
65
|
+
const service = this.serviceMap.get(normalizedType);
|
|
66
|
+
|
|
67
|
+
if (!service) {
|
|
68
|
+
throw new BadRequestException(
|
|
69
|
+
`Unsupported data type: ${dataType}. Supported types: ${Array.from(this.serviceMap.keys()).join(', ')}`,
|
|
70
|
+
);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
return service;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Get all supported data types
|
|
78
|
+
* @returns Array of supported data type names
|
|
79
|
+
*/
|
|
80
|
+
getSupportedTypes(): string[] {
|
|
81
|
+
return Array.from(this.serviceMap.keys());
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Check if a data type is supported
|
|
86
|
+
* @param dataType - The data type to check
|
|
87
|
+
* @returns True if supported, false otherwise
|
|
88
|
+
*/
|
|
89
|
+
isTypeSupported(dataType: string): boolean {
|
|
90
|
+
const normalizedType = dataType.toLowerCase().trim();
|
|
91
|
+
return this.serviceMap.has(normalizedType);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
@@ -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 { EAVIntRepository } from '../repository/eav-int.repository';
|
|
5
|
+
|
|
6
|
+
@Injectable()
|
|
7
|
+
export class EAVIntService implements IEAVStrategy {
|
|
8
|
+
constructor(private readonly repository: EAVIntRepository) { }
|
|
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 { EAVJsonRepository } from '../repository/eav-json.repository';
|
|
5
|
+
|
|
6
|
+
@Injectable()
|
|
7
|
+
export class EAVJsonService implements IEAVStrategy {
|
|
8
|
+
constructor(private readonly repository: EAVJsonRepository) { }
|
|
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
|
+
}
|