@things-factory/integration-base 9.0.1 → 9.0.4
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/dist-server/controllers/publish-data.js +2 -0
- package/dist-server/controllers/publish-data.js.map +1 -1
- package/dist-server/engine/scenario-engine.js +7 -0
- package/dist-server/engine/scenario-engine.js.map +1 -1
- package/dist-server/service/state-register/state-register-mutation.js +92 -8
- package/dist-server/service/state-register/state-register-mutation.js.map +1 -1
- package/dist-server/service/state-register/state-register-type.d.ts +2 -0
- package/dist-server/service/state-register/state-register-type.js +21 -2
- package/dist-server/service/state-register/state-register-type.js.map +1 -1
- package/dist-server/service/state-register/state-register.d.ts +1 -0
- package/dist-server/service/state-register/state-register.js +12 -1
- package/dist-server/service/state-register/state-register.js.map +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/helps/integration/task/state-write.ja.md +2 -0
- package/helps/integration/task/state-write.ko.md +2 -0
- package/helps/integration/task/state-write.md +2 -0
- package/helps/integration/task/state-write.ms.md +2 -0
- package/helps/integration/task/state-write.zh.md +2 -0
- package/package.json +7 -7
@@ -9,6 +9,8 @@ async function publishData(tag, data, { domain, user }) {
|
|
9
9
|
where: { domain: { id: domain?.id }, name: tag }
|
10
10
|
});
|
11
11
|
if (stateRegister) {
|
12
|
+
// Since this operation is based on publish, it is important to ensure that automatic publishing by autoPublish does not occur.
|
13
|
+
// repository.save() does not trigger publish, so it can be considered safe.
|
12
14
|
await repository.save({
|
13
15
|
...stateRegister,
|
14
16
|
state: data,
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"publish-data.js","sourceRoot":"","sources":["../../server/controllers/publish-data.ts"],"names":[],"mappings":";;AAKA,
|
1
|
+
{"version":3,"file":"publish-data.js","sourceRoot":"","sources":["../../server/controllers/publish-data.ts"],"names":[],"mappings":";;AAKA,kCAyBC;AA9BD,iDAAqE;AAGrE,6EAAwE;AAEjE,KAAK,UAAU,WAAW,CAAC,GAAW,EAAE,IAAS,EAAE,EAAE,MAAM,EAAE,IAAI,EAAkC;IACxG,MAAM,UAAU,GAAG,IAAA,qBAAa,EAAC,8BAAa,CAAC,CAAA;IAE/C,MAAM,aAAa,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC;QAC7C,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE;KACjD,CAAC,CAAA;IAEF,IAAI,aAAa,EAAE,CAAC;QAClB,+HAA+H;QAC/H,4EAA4E;QAC5E,MAAM,UAAU,CAAC,IAAI,CAAC;YACpB,GAAG,aAAa;YAChB,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,IAAI;YACZ,OAAO,EAAE,IAAI,IAAI,EAAE;SACpB,CAAC,CAAA;IACJ,CAAC;IAED,cAAM,CAAC,OAAO,CAAC,MAAM,EAAE;QACrB,IAAI,EAAE;YACJ,MAAM;YACN,GAAG;YACH,IAAI;SACL;KACF,CAAC,CAAA;AACJ,CAAC","sourcesContent":["import { Domain, getRepository, pubsub } from '@things-factory/shell'\nimport { User } from '@things-factory/auth-base'\n\nimport { StateRegister } from '../service/state-register/state-register'\n\nexport async function publishData(tag: string, data: any, { domain, user }: { domain: Domain; user: User }) {\n const repository = getRepository(StateRegister)\n\n const stateRegister = await repository.findOne({\n where: { domain: { id: domain?.id }, name: tag }\n })\n\n if (stateRegister) {\n // Since this operation is based on publish, it is important to ensure that automatic publishing by autoPublish does not occur.\n // repository.save() does not trigger publish, so it can be considered safe.\n await repository.save({\n ...stateRegister,\n state: data,\n writer: user,\n wroteAt: new Date()\n })\n }\n\n pubsub.publish('data', {\n data: {\n domain,\n tag,\n data\n }\n })\n}\n"]}
|
@@ -5,6 +5,7 @@ const shell_1 = require("@things-factory/shell");
|
|
5
5
|
const scenario_1 = require("../service/scenario/scenario");
|
6
6
|
const scenario_instance_type_1 = require("../service/scenario-instance/scenario-instance-type");
|
7
7
|
const pending_queue_1 = require("./pending-queue");
|
8
|
+
const auth_base_1 = require("@things-factory/auth-base");
|
8
9
|
const debug = require('debug')('things-factory:integration-base:scenario-engine');
|
9
10
|
class ScenarioEngine {
|
10
11
|
static { this.scenarioInstances = {}; } // TODO impl. by WeakMap
|
@@ -44,6 +45,12 @@ class ScenarioEngine {
|
|
44
45
|
}
|
45
46
|
var instance = new scenario_instance_type_1.ScenarioInstance(instanceName, scenarioConfig, {
|
46
47
|
...context,
|
48
|
+
user: context?.user ||
|
49
|
+
(await (0, shell_1.getRepository)(auth_base_1.User).findOne({
|
50
|
+
where: {
|
51
|
+
id: scenarioConfig.creatorId
|
52
|
+
}
|
53
|
+
})),
|
47
54
|
client: shell_1.GraphqlLocalClient.client,
|
48
55
|
disposer: () => {
|
49
56
|
this.unload(domain, instanceName);
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"scenario-engine.js","sourceRoot":"","sources":["../../server/engine/scenario-engine.ts"],"names":[],"mappings":";;;AAAA,iDAAiF;AAEjF,2DAAuD;AACvD,gGAAsF;AAEtF,mDAA8C;
|
1
|
+
{"version":3,"file":"scenario-engine.js","sourceRoot":"","sources":["../../server/engine/scenario-engine.ts"],"names":[],"mappings":";;;AAAA,iDAAiF;AAEjF,2DAAuD;AACvD,gGAAsF;AAEtF,mDAA8C;AAC9C,yDAAgD;AAEhD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,iDAAiD,CAAC,CAAA;AAEjF,MAAa,cAAc;aACV,sBAAiB,GAAG,EAAE,CAAA,GAAC,wBAAwB;aAC/C,kBAAa,GAAG,EAAE,CAAA;IAE1B,MAAM,CAAC,eAAe,CAAC,MAAM;QAClC,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;YAC7C,cAAc,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,4BAAY,CAAC,KAAK,CAAC,EAAE;gBACjE,cAAM,CAAC,OAAO,CAAC,sBAAsB,EAAE;oBACrC,kBAAkB,EAAE;wBAClB,MAAM;wBACN,KAAK;qBACN;iBACF,CAAC,CAAA;YACJ,CAAC,CAAC,CAAA;QACJ,CAAC;QAED,OAAO,cAAc,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IAChD,CAAC;IAEM,MAAM,CAAC,mBAAmB,CAAC,MAAM,EAAE,YAAY;QACpD,OAAO,cAAc,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,CAAA;IACpE,CAAC;IAEM,MAAM,CAAC,oBAAoB,CAAC,MAAM,EAAE,YAAa;QACtD,MAAM,SAAS,GAAuB,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAA;QAC5G,OAAO,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,YAAY,IAAI,QAAQ,CAAC,YAAY,IAAI,YAAY,CAAC,CAAA;IAC7F,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,cAAc,EAAE,OAAQ;QAC7D,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,cAAc,CAAA;QACjD,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,cAAc,CAAA;QAEhD,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,CAAA;QAE7C,IAAI,iBAAiB,GAAG,cAAc,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QACnE,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACvB,iBAAiB,GAAG,cAAc,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,CAAA;QACtE,CAAC;QAED,IAAI,gBAAgB,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAA;QACtD,IAAI,gBAAgB,EAAE,CAAC;YACrB,KAAK,CAAC,mBAAmB,EAAE,YAAY,CAAC,CAAA;YACxC,OAAO,gBAAgB,CAAA;QACzB,CAAC;QAED,IAAI,QAAQ,GAAG,IAAI,yCAAgB,CAAC,YAAY,EAAE,cAAc,EAAE;YAChE,GAAG,OAAO;YACV,IAAI,EACF,OAAO,EAAE,IAAI;gBACb,CAAC,MAAM,IAAA,qBAAa,EAAC,gBAAI,CAAC,CAAC,OAAO,CAAC;oBACjC,KAAK,EAAE;wBACL,EAAE,EAAE,cAAc,CAAC,SAAS;qBAC7B;iBACF,CAAC,CAAC;YACL,MAAM,EAAE,0BAAkB,CAAC,MAAM;YACjC,QAAQ,EAAE,GAAG,EAAE;gBACb,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;YACnC,CAAC;SACF,CAAC,CAAA;QAEF,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;YAC3B,wEAAwE;YACxE,OAAO,CAAC,KAAK,CACX,sEAAsE,YAAY,oBAAoB,MAAM,CAAC,IAAI,GAAG,EACpH,GAAG,CACJ,CAAA;QACH,CAAC,CAAC,CAAA;QAEF,iBAAiB,CAAC,YAAY,CAAC,GAAG,QAAQ,CAAA;QAE1C,OAAO,QAAQ,CAAA;IACjB,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY;QAC7C,IAAI,iBAAiB,GAAG,cAAc,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QACnE,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACvB,OAAM;QACR,CAAC;QAED,IAAI,QAAQ,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAA;QAC9C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAM;QACR,CAAC;QAED,OAAO,iBAAiB,CAAC,YAAY,CAAC,CAAA;QAEtC,QAAQ,CAAC,MAAM,EAAE,CAAA;IACnB,CAAC;IAED,0BAA0B;IACnB,MAAM,CAAC,KAAK,CAAC,OAAO;QACzB,MAAM,SAAS,GAAG,MAAM,IAAA,qBAAa,EAAC,mBAAQ,CAAC,CAAC,IAAI,CAAC;YACnD,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;YACvB,SAAS,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC;SAC/B,CAAC,CAAA;QAEF,KAAK,CACH,UAAU,EACV,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,SAAS,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC,CAC5E,CAAA;QAED,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAA;IAC7E,CAAC;;AAtGH,wCAuGC","sourcesContent":["import { getRepository, GraphqlLocalClient, pubsub } from '@things-factory/shell'\n\nimport { Scenario } from '../service/scenario/scenario'\nimport { ScenarioInstance } from '../service/scenario-instance/scenario-instance-type'\n\nimport { PendingQueue } from './pending-queue'\nimport { User } from '@things-factory/auth-base'\n\nconst debug = require('debug')('things-factory:integration-base:scenario-engine')\n\nexport class ScenarioEngine {\n private static scenarioInstances = {} // TODO impl. by WeakMap\n private static pendingQueues = {}\n\n public static getPendingQueue(domain) {\n if (!ScenarioEngine.pendingQueues[domain.id]) {\n ScenarioEngine.pendingQueues[domain.id] = new PendingQueue(queue => {\n pubsub.publish('scenario-queue-state', {\n scenarioQueueState: {\n domain,\n queue\n }\n })\n })\n }\n\n return ScenarioEngine.pendingQueues[domain.id]\n }\n\n public static getScenarioInstance(domain, instanceName): ScenarioInstance {\n return ScenarioEngine.scenarioInstances[domain.id]?.[instanceName]\n }\n\n public static getScenarioInstances(domain, scenarioName?): ScenarioInstance[] {\n const instances: ScenarioInstance[] = Object.values(ScenarioEngine.scenarioInstances[domain.id] || {}) || []\n return instances.filter(instance => !scenarioName || instance.scenarioName == scenarioName)\n }\n\n public static async load(instanceName, scenarioConfig, context?) {\n const { domain: scenarioDomain } = scenarioConfig\n const domain = context?.domain || scenarioDomain\n\n debug('load', domain.subdomain, instanceName)\n\n var scenarioInstances = ScenarioEngine.scenarioInstances[domain.id]\n if (!scenarioInstances) {\n scenarioInstances = ScenarioEngine.scenarioInstances[domain.id] = {}\n }\n\n var scenarioInstance = scenarioInstances[instanceName]\n if (scenarioInstance) {\n debug('load - duplicated', instanceName)\n return scenarioInstance\n }\n\n var instance = new ScenarioInstance(instanceName, scenarioConfig, {\n ...context,\n user:\n context?.user ||\n (await getRepository(User).findOne({\n where: {\n id: scenarioConfig.creatorId\n }\n })),\n client: GraphqlLocalClient.client,\n disposer: () => {\n this.unload(domain, instanceName)\n }\n })\n\n instance.start().catch(err => {\n /* IMPORTANT. if you didn't catch exception here, system will be exit */\n console.error(\n `An exception occurred while executing the scenario instance named \"${instanceName}\" on the domain \"${domain.name}\"`,\n err\n )\n })\n\n scenarioInstances[instanceName] = instance\n\n return instance\n }\n\n public static async unload(domain, instanceName) {\n var scenarioInstances = ScenarioEngine.scenarioInstances[domain.id]\n if (!scenarioInstances) {\n return\n }\n\n var instance = scenarioInstances[instanceName]\n if (!instance) {\n return\n }\n\n delete scenarioInstances[instanceName]\n\n instance.unload()\n }\n\n // will be deprecated soon\n public static async loadAll() {\n const SCENARIOS = await getRepository(Scenario).find({\n where: { active: true },\n relations: ['domain', 'steps']\n })\n\n debug(\n 'load-all',\n SCENARIOS.map(scenario => `${scenario.domain.subdomain}: ${scenario.name}`)\n )\n\n SCENARIOS.forEach(scenario => ScenarioEngine.load(scenario.name, scenario))\n }\n}\n"]}
|
@@ -10,12 +10,27 @@ const state_register_type_1 = require("./state-register-type");
|
|
10
10
|
let StateRegisterMutation = class StateRegisterMutation {
|
11
11
|
async createStateRegister(stateRegister, context) {
|
12
12
|
const { domain, user, tx } = context.state;
|
13
|
-
|
13
|
+
let toSave = {
|
14
14
|
...stateRegister,
|
15
15
|
domain,
|
16
16
|
creator: user,
|
17
17
|
updater: user
|
18
|
-
}
|
18
|
+
};
|
19
|
+
if (stateRegister.state !== undefined) {
|
20
|
+
toSave.wroteAt = new Date();
|
21
|
+
}
|
22
|
+
const saved = await tx.getRepository(state_register_1.StateRegister).save(toSave);
|
23
|
+
// autoPublish가 true면 name을 tag로 하여 data 채널로 publish
|
24
|
+
if (saved.autoPublish && saved.name) {
|
25
|
+
shell_1.pubsub.publish('data', {
|
26
|
+
data: {
|
27
|
+
domain,
|
28
|
+
tag: saved.name,
|
29
|
+
data: saved.state
|
30
|
+
}
|
31
|
+
});
|
32
|
+
}
|
33
|
+
return saved;
|
19
34
|
}
|
20
35
|
async updateStateRegister(id, patch, context) {
|
21
36
|
const { domain, user, tx } = context.state;
|
@@ -23,11 +38,34 @@ let StateRegisterMutation = class StateRegisterMutation {
|
|
23
38
|
const stateRegister = await repository.findOne({
|
24
39
|
where: { domain: { id: domain.id }, id }
|
25
40
|
});
|
26
|
-
|
41
|
+
// state가 patch에 있으면 wroteAt, writer도 갱신
|
42
|
+
let patchToApply = { ...patch, updater: user };
|
43
|
+
let shouldPublish = false;
|
44
|
+
if (patch.state !== undefined) {
|
45
|
+
patchToApply = {
|
46
|
+
...patchToApply,
|
47
|
+
wroteAt: new Date(),
|
48
|
+
writer: user
|
49
|
+
};
|
50
|
+
// autoPublish가 true면 publish
|
51
|
+
if (stateRegister?.autoPublish && stateRegister?.name) {
|
52
|
+
shouldPublish = true;
|
53
|
+
}
|
54
|
+
}
|
55
|
+
const saved = await repository.save({
|
27
56
|
...stateRegister,
|
28
|
-
...
|
29
|
-
updater: user
|
57
|
+
...patchToApply
|
30
58
|
});
|
59
|
+
if (shouldPublish) {
|
60
|
+
shell_1.pubsub.publish('data', {
|
61
|
+
data: {
|
62
|
+
domain,
|
63
|
+
tag: saved.name,
|
64
|
+
data: saved.state
|
65
|
+
}
|
66
|
+
});
|
67
|
+
}
|
68
|
+
return saved;
|
31
69
|
}
|
32
70
|
async updateMultipleStateRegister(patches, context) {
|
33
71
|
const { domain, user, tx } = context.state;
|
@@ -44,6 +82,16 @@ let StateRegisterMutation = class StateRegisterMutation {
|
|
44
82
|
creator: user,
|
45
83
|
updater: user
|
46
84
|
});
|
85
|
+
// autoPublish가 true면 name을 tag로 하여 publish
|
86
|
+
if (result.autoPublish && result.name) {
|
87
|
+
shell_1.pubsub.publish('data', {
|
88
|
+
data: {
|
89
|
+
domain,
|
90
|
+
tag: result.name,
|
91
|
+
data: result.state
|
92
|
+
}
|
93
|
+
});
|
94
|
+
}
|
47
95
|
results.push({ ...result, cuFlag: '+' });
|
48
96
|
}
|
49
97
|
}
|
@@ -51,11 +99,33 @@ let StateRegisterMutation = class StateRegisterMutation {
|
|
51
99
|
for (let i = 0; i < _updateRecords.length; i++) {
|
52
100
|
const updateRecord = _updateRecords[i];
|
53
101
|
const stateRegister = await stateRegisterRepo.findOneBy({ id: updateRecord.id });
|
102
|
+
// state가 patch에 있으면 wroteAt, writer도 갱신
|
103
|
+
let patchToApply = { ...updateRecord, updater: user };
|
104
|
+
let shouldPublish = false;
|
105
|
+
if (updateRecord.state !== undefined) {
|
106
|
+
patchToApply = {
|
107
|
+
...patchToApply,
|
108
|
+
wroteAt: new Date(),
|
109
|
+
writer: user
|
110
|
+
};
|
111
|
+
// autoPublish가 true면 publish
|
112
|
+
if (stateRegister?.autoPublish && stateRegister?.name) {
|
113
|
+
shouldPublish = true;
|
114
|
+
}
|
115
|
+
}
|
54
116
|
const result = await stateRegisterRepo.save({
|
55
117
|
...stateRegister,
|
56
|
-
...
|
57
|
-
updater: user
|
118
|
+
...patchToApply
|
58
119
|
});
|
120
|
+
if (shouldPublish) {
|
121
|
+
shell_1.pubsub.publish('data', {
|
122
|
+
data: {
|
123
|
+
domain,
|
124
|
+
tag: result.name,
|
125
|
+
data: result.state
|
126
|
+
}
|
127
|
+
});
|
128
|
+
}
|
59
129
|
results.push({ ...result, cuFlag: 'M' });
|
60
130
|
}
|
61
131
|
}
|
@@ -67,12 +137,26 @@ let StateRegisterMutation = class StateRegisterMutation {
|
|
67
137
|
const stateRegister = await repository.findOne({
|
68
138
|
where: { domain: { id: domain?.id }, name }
|
69
139
|
});
|
70
|
-
|
140
|
+
if (!stateRegister) {
|
141
|
+
throw new Error(`State register with name ${name} not found`);
|
142
|
+
}
|
143
|
+
const saved = await repository.save({
|
71
144
|
...stateRegister,
|
72
145
|
state,
|
73
146
|
writer: user,
|
74
147
|
wroteAt: new Date()
|
75
148
|
});
|
149
|
+
// autoPublish가 true면 name을 tag로 하여 publish
|
150
|
+
if (saved.autoPublish && saved.name) {
|
151
|
+
shell_1.pubsub.publish('data', {
|
152
|
+
data: {
|
153
|
+
domain,
|
154
|
+
tag: saved.name,
|
155
|
+
data: saved.state
|
156
|
+
}
|
157
|
+
});
|
158
|
+
}
|
159
|
+
return saved;
|
76
160
|
}
|
77
161
|
async deleteStateRegister(id, context) {
|
78
162
|
const { domain, tx } = context.state;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"state-register-mutation.js","sourceRoot":"","sources":["../../../server/service/state-register/state-register-mutation.ts"],"names":[],"mappings":"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","sourcesContent":["import { Resolver, Mutation, Arg, Ctx, Directive } from 'type-graphql'\nimport { In } from 'typeorm'\n\nimport { ScalarObject } from '@things-factory/shell'\nimport { StateRegister } from './state-register'\nimport { NewStateRegister, StateRegisterPatch } from './state-register-type'\n\n@Resolver(StateRegister)\nexport class StateRegisterMutation {\n @Directive('@transaction')\n @Directive('@privilege(category: \"state-register\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Mutation(returns => StateRegister, { description: 'Creates a new state register.' })\n async createStateRegister(\n @Arg('stateRegister') stateRegister: NewStateRegister,\n @Ctx() context: ResolverContext\n ): Promise<StateRegister> {\n const { domain, user, tx } = context.state\n\n return await tx.getRepository(StateRegister).save({\n ...stateRegister,\n domain,\n creator: user,\n updater: user\n })\n }\n\n @Directive('@transaction')\n @Directive('@privilege(category: \"state-register\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Mutation(returns => StateRegister, { description: 'Updates an existing state register.' })\n async updateStateRegister(\n @Arg('id') id: string,\n @Arg('patch') patch: StateRegisterPatch,\n @Ctx() context: ResolverContext\n ): Promise<StateRegister> {\n const { domain, user, tx } = context.state\n\n const repository = tx.getRepository(StateRegister)\n const stateRegister = await repository.findOne({\n where: { domain: { id: domain.id }, id }\n })\n\n return await repository.save({\n ...stateRegister,\n ...patch,\n updater: user\n })\n }\n\n @Directive('@transaction')\n @Directive('@privilege(category: \"state-register\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Mutation(returns => [StateRegister], { description: 'Updates multiple state registers at once.' })\n async updateMultipleStateRegister(\n @Arg('patches', type => [StateRegisterPatch]) patches: StateRegisterPatch[],\n @Ctx() context: ResolverContext\n ): Promise<StateRegister[]> {\n const { domain, user, tx } = context.state\n\n let results = []\n const _createRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === '+')\n const _updateRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === 'M')\n const stateRegisterRepo = tx.getRepository(StateRegister)\n\n if (_createRecords.length > 0) {\n for (let i = 0; i < _createRecords.length; i++) {\n const newRecord = _createRecords[i]\n\n const result = await stateRegisterRepo.save({\n ...newRecord,\n domain,\n creator: user,\n updater: user\n })\n\n results.push({ ...result, cuFlag: '+' })\n }\n }\n\n if (_updateRecords.length > 0) {\n for (let i = 0; i < _updateRecords.length; i++) {\n const updateRecord = _updateRecords[i]\n const stateRegister = await stateRegisterRepo.findOneBy({ id: updateRecord.id })\n\n const result = await stateRegisterRepo.save({\n ...stateRegister,\n ...updateRecord,\n updater: user\n })\n\n results.push({ ...result, cuFlag: 'M' })\n }\n }\n\n return results\n }\n\n @Directive('@transaction')\n @Directive('@privilege(category: \"state-register\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Mutation(returns => StateRegister, {\n description: 'Updates the state of a specific state register, identified by its name.'\n })\n async updateStateRegisterByName(\n @Arg('name') name: string,\n @Arg('state', type => ScalarObject) state: any,\n @Ctx() context: ResolverContext\n ): Promise<StateRegister> {\n const { domain, user = null, tx } = context.state\n\n const repository = tx.getRepository(StateRegister)\n const stateRegister = await repository.findOne({\n where: { domain: { id: domain?.id }, name }\n })\n\n return await repository.save({\n ...stateRegister,\n state,\n writer: user,\n wroteAt: new Date()\n })\n }\n\n @Directive('@transaction')\n @Directive('@privilege(category: \"state-register\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Mutation(returns => Boolean, { description: 'Deletes a single state register by its ID.' })\n async deleteStateRegister(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<boolean> {\n const { domain, tx } = context.state\n\n await tx.getRepository(StateRegister).delete({ domain: { id: domain.id }, id })\n\n return true\n }\n\n @Directive('@transaction')\n @Directive('@privilege(category: \"state-register\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Mutation(returns => Boolean, { description: 'Deletes multiple state registers by their IDs.' })\n async deleteStateRegisters(\n @Arg('ids', type => [String]) ids: string[],\n @Ctx() context: ResolverContext\n ): Promise<boolean> {\n const { domain, tx } = context.state\n\n await tx.getRepository(StateRegister).delete({\n domain: { id: domain.id },\n id: In(ids)\n })\n\n return true\n }\n\n @Directive('@transaction')\n @Directive('@privilege(category: \"state-register\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Mutation(returns => Boolean, { description: 'Imports multiple state registers from a provided list.' })\n async importStateRegisters(\n @Arg('stateRegisters', type => [StateRegisterPatch]) stateRegisters: StateRegisterPatch[],\n @Ctx() context: ResolverContext\n ): Promise<boolean> {\n const { domain, tx } = context.state\n\n await Promise.all(\n stateRegisters.map(async (stateRegister: StateRegisterPatch) => {\n const createdStateRegister: StateRegister = await tx\n .getRepository(StateRegister)\n .save({ domain, ...stateRegister })\n })\n )\n\n return true\n }\n}\n"]}
|
1
|
+
{"version":3,"file":"state-register-mutation.js","sourceRoot":"","sources":["../../../server/service/state-register/state-register-mutation.ts"],"names":[],"mappings":"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","sourcesContent":["import { Resolver, Mutation, Arg, Ctx, Directive } from 'type-graphql'\nimport { In } from 'typeorm'\n\nimport { ScalarObject, pubsub } from '@things-factory/shell'\nimport { StateRegister } from './state-register'\nimport { NewStateRegister, StateRegisterPatch } from './state-register-type'\n\n@Resolver(StateRegister)\nexport class StateRegisterMutation {\n @Directive('@transaction')\n @Directive('@privilege(category: \"state-register\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Mutation(returns => StateRegister, { description: 'Creates a new state register.' })\n async createStateRegister(\n @Arg('stateRegister') stateRegister: NewStateRegister,\n @Ctx() context: ResolverContext\n ): Promise<StateRegister> {\n const { domain, user, tx } = context.state\n\n let toSave = {\n ...stateRegister,\n domain,\n creator: user,\n updater: user\n } as any\n if (stateRegister.state !== undefined) {\n toSave.wroteAt = new Date()\n }\n const saved = await tx.getRepository(StateRegister).save(toSave)\n // autoPublish가 true면 name을 tag로 하여 data 채널로 publish\n if (saved.autoPublish && saved.name) {\n pubsub.publish('data', {\n data: {\n domain,\n tag: saved.name,\n data: saved.state\n }\n })\n }\n return saved\n }\n\n @Directive('@transaction')\n @Directive('@privilege(category: \"state-register\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Mutation(returns => StateRegister, { description: 'Updates an existing state register.' })\n async updateStateRegister(\n @Arg('id') id: string,\n @Arg('patch') patch: StateRegisterPatch,\n @Ctx() context: ResolverContext\n ): Promise<StateRegister> {\n const { domain, user, tx } = context.state\n\n const repository = tx.getRepository(StateRegister)\n const stateRegister = await repository.findOne({\n where: { domain: { id: domain.id }, id }\n })\n\n // state가 patch에 있으면 wroteAt, writer도 갱신\n let patchToApply = { ...patch, updater: user } as any\n let shouldPublish = false\n if (patch.state !== undefined) {\n patchToApply = {\n ...patchToApply,\n wroteAt: new Date(),\n writer: user\n }\n // autoPublish가 true면 publish\n if (stateRegister?.autoPublish && stateRegister?.name) {\n shouldPublish = true\n }\n }\n\n const saved = await repository.save({\n ...stateRegister,\n ...patchToApply\n })\n\n if (shouldPublish) {\n pubsub.publish('data', {\n data: {\n domain,\n tag: saved.name,\n data: saved.state\n }\n })\n }\n\n return saved\n }\n\n @Directive('@transaction')\n @Directive('@privilege(category: \"state-register\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Mutation(returns => [StateRegister], { description: 'Updates multiple state registers at once.' })\n async updateMultipleStateRegister(\n @Arg('patches', type => [StateRegisterPatch]) patches: StateRegisterPatch[],\n @Ctx() context: ResolverContext\n ): Promise<StateRegister[]> {\n const { domain, user, tx } = context.state\n\n let results = []\n const _createRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === '+')\n const _updateRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === 'M')\n const stateRegisterRepo = tx.getRepository(StateRegister)\n\n if (_createRecords.length > 0) {\n for (let i = 0; i < _createRecords.length; i++) {\n const newRecord = _createRecords[i]\n\n const result = await stateRegisterRepo.save({\n ...newRecord,\n domain,\n creator: user,\n updater: user\n })\n\n // autoPublish가 true면 name을 tag로 하여 publish\n if (result.autoPublish && result.name) {\n pubsub.publish('data', {\n data: {\n domain,\n tag: result.name,\n data: result.state\n }\n })\n }\n\n results.push({ ...result, cuFlag: '+' })\n }\n }\n\n if (_updateRecords.length > 0) {\n for (let i = 0; i < _updateRecords.length; i++) {\n const updateRecord = _updateRecords[i]\n const stateRegister = await stateRegisterRepo.findOneBy({ id: updateRecord.id })\n\n // state가 patch에 있으면 wroteAt, writer도 갱신\n let patchToApply = { ...updateRecord, updater: user } as any\n let shouldPublish = false\n if (updateRecord.state !== undefined) {\n patchToApply = {\n ...patchToApply,\n wroteAt: new Date(),\n writer: user\n }\n // autoPublish가 true면 publish\n if (stateRegister?.autoPublish && stateRegister?.name) {\n shouldPublish = true\n }\n }\n\n const result = await stateRegisterRepo.save({\n ...stateRegister,\n ...patchToApply\n })\n\n if (shouldPublish) {\n pubsub.publish('data', {\n data: {\n domain,\n tag: result.name,\n data: result.state\n }\n })\n }\n\n results.push({ ...result, cuFlag: 'M' })\n }\n }\n\n return results\n }\n\n @Directive('@transaction')\n @Directive('@privilege(category: \"state-register\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Mutation(returns => StateRegister, {\n description: 'Updates the state of a specific state register, identified by its name.'\n })\n async updateStateRegisterByName(\n @Arg('name') name: string,\n @Arg('state', type => ScalarObject) state: any,\n @Ctx() context: ResolverContext\n ): Promise<StateRegister> {\n const { domain, user = null, tx } = context.state\n\n const repository = tx.getRepository(StateRegister)\n const stateRegister = await repository.findOne({\n where: { domain: { id: domain?.id }, name }\n })\n\n if (!stateRegister) {\n throw new Error(`State register with name ${name} not found`)\n }\n\n const saved = await repository.save({\n ...stateRegister,\n state,\n writer: user,\n wroteAt: new Date()\n })\n\n // autoPublish가 true면 name을 tag로 하여 publish\n if (saved.autoPublish && saved.name) {\n pubsub.publish('data', {\n data: {\n domain,\n tag: saved.name,\n data: saved.state\n }\n })\n }\n\n return saved\n }\n\n @Directive('@transaction')\n @Directive('@privilege(category: \"state-register\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Mutation(returns => Boolean, { description: 'Deletes a single state register by its ID.' })\n async deleteStateRegister(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<boolean> {\n const { domain, tx } = context.state\n\n await tx.getRepository(StateRegister).delete({ domain: { id: domain.id }, id })\n\n return true\n }\n\n @Directive('@transaction')\n @Directive('@privilege(category: \"state-register\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Mutation(returns => Boolean, { description: 'Deletes multiple state registers by their IDs.' })\n async deleteStateRegisters(\n @Arg('ids', type => [String]) ids: string[],\n @Ctx() context: ResolverContext\n ): Promise<boolean> {\n const { domain, tx } = context.state\n\n await tx.getRepository(StateRegister).delete({\n domain: { id: domain.id },\n id: In(ids)\n })\n\n return true\n }\n\n @Directive('@transaction')\n @Directive('@privilege(category: \"state-register\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Mutation(returns => Boolean, { description: 'Imports multiple state registers from a provided list.' })\n async importStateRegisters(\n @Arg('stateRegisters', type => [StateRegisterPatch]) stateRegisters: StateRegisterPatch[],\n @Ctx() context: ResolverContext\n ): Promise<boolean> {\n const { domain, tx } = context.state\n\n await Promise.all(\n stateRegisters.map(async (stateRegister: StateRegisterPatch) => {\n const createdStateRegister: StateRegister = await tx\n .getRepository(StateRegister)\n .save({ domain, ...stateRegister })\n })\n )\n\n return true\n }\n}\n"]}
|
@@ -3,6 +3,7 @@ export declare class NewStateRegister {
|
|
3
3
|
name: string;
|
4
4
|
description?: string;
|
5
5
|
group?: string;
|
6
|
+
autoPublish?: boolean;
|
6
7
|
type?: string;
|
7
8
|
place?: string;
|
8
9
|
unit?: string;
|
@@ -15,6 +16,7 @@ export declare class StateRegisterPatch {
|
|
15
16
|
name?: string;
|
16
17
|
description?: string;
|
17
18
|
group?: string;
|
19
|
+
autoPublish?: boolean;
|
18
20
|
type?: string;
|
19
21
|
place?: string;
|
20
22
|
unit?: string;
|
@@ -9,7 +9,9 @@ let NewStateRegister = class NewStateRegister {
|
|
9
9
|
};
|
10
10
|
exports.NewStateRegister = NewStateRegister;
|
11
11
|
tslib_1.__decorate([
|
12
|
-
(0, type_graphql_1.Field)({
|
12
|
+
(0, type_graphql_1.Field)({
|
13
|
+
description: 'Name of the state register. If autoPublish is enabled, this name is used as the publish tag.'
|
14
|
+
}),
|
13
15
|
tslib_1.__metadata("design:type", String)
|
14
16
|
], NewStateRegister.prototype, "name", void 0);
|
15
17
|
tslib_1.__decorate([
|
@@ -20,6 +22,13 @@ tslib_1.__decorate([
|
|
20
22
|
(0, type_graphql_1.Field)({ nullable: true, description: 'Group name for the state register' }),
|
21
23
|
tslib_1.__metadata("design:type", String)
|
22
24
|
], NewStateRegister.prototype, "group", void 0);
|
25
|
+
tslib_1.__decorate([
|
26
|
+
(0, type_graphql_1.Field)({
|
27
|
+
nullable: true,
|
28
|
+
description: 'Whether to automatically publish state changes. If true, state changes will be published using the name as the tag.'
|
29
|
+
}),
|
30
|
+
tslib_1.__metadata("design:type", Boolean)
|
31
|
+
], NewStateRegister.prototype, "autoPublish", void 0);
|
23
32
|
tslib_1.__decorate([
|
24
33
|
(0, type_graphql_1.Field)({ nullable: true, description: 'Type of the state' }),
|
25
34
|
tslib_1.__metadata("design:type", String)
|
@@ -55,7 +64,10 @@ tslib_1.__decorate([
|
|
55
64
|
tslib_1.__metadata("design:type", String)
|
56
65
|
], StateRegisterPatch.prototype, "id", void 0);
|
57
66
|
tslib_1.__decorate([
|
58
|
-
(0, type_graphql_1.Field)({
|
67
|
+
(0, type_graphql_1.Field)({
|
68
|
+
nullable: true,
|
69
|
+
description: 'Name of the state register. If autoPublish is enabled, this name is used as the publish tag.'
|
70
|
+
}),
|
59
71
|
tslib_1.__metadata("design:type", String)
|
60
72
|
], StateRegisterPatch.prototype, "name", void 0);
|
61
73
|
tslib_1.__decorate([
|
@@ -66,6 +78,13 @@ tslib_1.__decorate([
|
|
66
78
|
(0, type_graphql_1.Field)({ nullable: true, description: 'Group name for the state register' }),
|
67
79
|
tslib_1.__metadata("design:type", String)
|
68
80
|
], StateRegisterPatch.prototype, "group", void 0);
|
81
|
+
tslib_1.__decorate([
|
82
|
+
(0, type_graphql_1.Field)({
|
83
|
+
nullable: true,
|
84
|
+
description: 'Whether to automatically publish state changes. If true, state changes will be published using the name as the tag.'
|
85
|
+
}),
|
86
|
+
tslib_1.__metadata("design:type", Boolean)
|
87
|
+
], StateRegisterPatch.prototype, "autoPublish", void 0);
|
69
88
|
tslib_1.__decorate([
|
70
89
|
(0, type_graphql_1.Field)({ nullable: true, description: 'Type of the state' }),
|
71
90
|
tslib_1.__metadata("design:type", String)
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"state-register-type.js","sourceRoot":"","sources":["../../../server/service/state-register/state-register-type.ts"],"names":[],"mappings":";;;;AAAA,+CAAoE;AAEpE,iDAAoD;AAEpD,qDAAgD;AAGzC,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;
|
1
|
+
{"version":3,"file":"state-register-type.js","sourceRoot":"","sources":["../../../server/service/state-register/state-register-type.ts"],"names":[],"mappings":"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","sourcesContent":["import { ObjectType, Field, InputType, Int, ID } from 'type-graphql'\n\nimport { ScalarObject } from '@things-factory/shell'\n\nimport { StateRegister } from './state-register'\n\n@InputType({ description: 'Input for creating a new state register.' })\nexport class NewStateRegister {\n @Field({\n description: 'Name of the state register. If autoPublish is enabled, this name is used as the publish tag.'\n })\n name: string\n\n @Field({ nullable: true, description: 'Description of the state register' })\n description?: string\n\n @Field({ nullable: true, description: 'Group name for the state register' })\n group?: string\n\n @Field({\n nullable: true,\n description:\n 'Whether to automatically publish state changes. If true, state changes will be published using the name as the tag.'\n })\n autoPublish?: boolean\n\n @Field({ nullable: true, description: 'Type of the state' })\n type?: string\n\n @Field({ nullable: true, description: 'Number of decimal places if the state is a number type' })\n place?: string\n\n @Field({ nullable: true, description: 'Unit of the state value' })\n unit?: string\n\n @Field(type => ScalarObject, { nullable: true, description: 'Current state value' })\n state?: any\n\n @Field(type => Int, { nullable: true, description: 'Time to live for the state value in seconds' })\n ttl?: number\n\n @Field({ nullable: true, description: 'Reference to an external entity or data, used as a flexible foreign key' })\n refBy?: string\n}\n\n@InputType({ description: 'Input for updating (patching) an existing state register.' })\nexport class StateRegisterPatch {\n @Field(type => ID, { nullable: true, description: 'ID of the state register' })\n id?: string\n\n @Field({\n nullable: true,\n description: 'Name of the state register. If autoPublish is enabled, this name is used as the publish tag.'\n })\n name?: string\n\n @Field({ nullable: true, description: 'Description of the state register' })\n description?: string\n\n @Field({ nullable: true, description: 'Group name for the state register' })\n group?: string\n\n @Field({\n nullable: true,\n description:\n 'Whether to automatically publish state changes. If true, state changes will be published using the name as the tag.'\n })\n autoPublish?: boolean\n\n @Field({ nullable: true, description: 'Type of the state' })\n type?: string\n\n @Field({ nullable: true, description: 'Number of decimal places if the state is a number type' })\n place?: string\n\n @Field({ nullable: true, description: 'Unit of the state value' })\n unit?: string\n\n @Field(type => ScalarObject, { nullable: true, description: 'Current state value' })\n state?: any\n\n @Field(type => Int, { nullable: true, description: 'Time to live for the state value in seconds' })\n ttl?: number\n\n @Field({ nullable: true, description: 'Reference to an external entity or data, used as a flexible foreign key' })\n refBy?: string\n\n @Field({ nullable: true, description: 'Flag indicating create/update operations' })\n cuFlag?: string\n}\n\n@ObjectType({ description: 'A paginated list of state registers.' })\nexport class StateRegisterList {\n @Field(type => [StateRegister], { description: 'List of state registers' })\n items: StateRegister[]\n\n @Field(type => Int, { description: 'Total number of state registers' })\n total: number\n}\n"]}
|
@@ -26,7 +26,10 @@ tslib_1.__decorate([
|
|
26
26
|
], StateRegister.prototype, "domainId", void 0);
|
27
27
|
tslib_1.__decorate([
|
28
28
|
(0, typeorm_1.Column)(),
|
29
|
-
(0, type_graphql_1.Field)({
|
29
|
+
(0, type_graphql_1.Field)({
|
30
|
+
nullable: true,
|
31
|
+
description: 'Name of the state register. If autoPublish is enabled, this name is used as the publish tag.'
|
32
|
+
}),
|
30
33
|
tslib_1.__metadata("design:type", String)
|
31
34
|
], StateRegister.prototype, "name", void 0);
|
32
35
|
tslib_1.__decorate([
|
@@ -39,6 +42,14 @@ tslib_1.__decorate([
|
|
39
42
|
(0, type_graphql_1.Field)({ nullable: true, description: 'Group name for the state register' }),
|
40
43
|
tslib_1.__metadata("design:type", String)
|
41
44
|
], StateRegister.prototype, "group", void 0);
|
45
|
+
tslib_1.__decorate([
|
46
|
+
(0, typeorm_1.Column)({ nullable: true }),
|
47
|
+
(0, type_graphql_1.Field)({
|
48
|
+
nullable: true,
|
49
|
+
description: 'Whether to automatically publish state changes. If true, state changes will be published using the name as the tag.'
|
50
|
+
}),
|
51
|
+
tslib_1.__metadata("design:type", Boolean)
|
52
|
+
], StateRegister.prototype, "autoPublish", void 0);
|
42
53
|
tslib_1.__decorate([
|
43
54
|
(0, typeorm_1.Column)({ nullable: true }),
|
44
55
|
(0, type_graphql_1.Field)({ nullable: true, description: 'Type of the state' }),
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"state-register.js","sourceRoot":"","sources":["../../../server/service/state-register/state-register.ts"],"names":[],"mappings":";;;;AAAA,qCASgB;AAChB,+CAAyD;AAEzD,iDAA4D;AAC5D,yDAAgD;AAiBzC,IAAM,aAAa,GAAnB,MAAM,aAAa;
|
1
|
+
{"version":3,"file":"state-register.js","sourceRoot":"","sources":["../../../server/service/state-register/state-register.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n CreateDateColumn,\n UpdateDateColumn,\n Entity,\n Index,\n Column,\n RelationId,\n ManyToOne,\n PrimaryGeneratedColumn\n} from 'typeorm'\nimport { ObjectType, Field, Int, ID } from 'type-graphql'\n\nimport { Domain, ScalarObject } from '@things-factory/shell'\nimport { User } from '@things-factory/auth-base'\n\n@Entity()\n@Index('ix_state_register_0', (stateRegister: StateRegister) => [stateRegister.domain, stateRegister.name], {\n unique: true\n})\n@Index(\n 'ix_state_register_1',\n (stateRegister: StateRegister) => [stateRegister.domain, stateRegister.group, stateRegister.name],\n {\n unique: true,\n where: '\"group\" IS NOT NULL'\n }\n)\n@ObjectType({\n description: 'Represents a key-value store for maintaining the state of various entities within a domain.'\n})\nexport class StateRegister {\n @PrimaryGeneratedColumn('uuid')\n @Field(type => ID, { description: 'Unique identifier for the state register.' })\n readonly id: string\n\n @ManyToOne(type => Domain)\n @Field(type => Domain, { description: 'Associated domain for the state register' })\n domain?: Domain\n\n @RelationId((stateRegister: StateRegister) => stateRegister.domain)\n @Field({ description: 'ID of the associated domain' })\n domainId?: string\n\n @Column()\n @Field({\n nullable: true,\n description: 'Name of the state register. If autoPublish is enabled, this name is used as the publish tag.'\n })\n name?: string\n\n @Column({ nullable: true })\n @Field({ nullable: true, description: 'Description of the state register' })\n description?: string\n\n @Column({ nullable: true })\n @Field({ nullable: true, description: 'Group name for the state register' })\n group?: string\n\n @Column({ nullable: true })\n @Field({\n nullable: true,\n description:\n 'Whether to automatically publish state changes. If true, state changes will be published using the name as the tag.'\n })\n autoPublish?: boolean\n\n @Column({ nullable: true })\n @Field({ nullable: true, description: 'Type of the state' })\n type?: string\n\n @Column({ nullable: true })\n @Field({ nullable: true, description: 'Number of decimal places if the state is a number type' })\n place?: string\n\n @Column({ nullable: true })\n @Field({ nullable: true, description: 'Unit of the state value' })\n unit?: string\n\n @Column('simple-json', { nullable: true, default: null })\n @Field(type => ScalarObject, { nullable: true, description: 'Current state value' })\n state?: any\n\n @Column({ nullable: true, default: null })\n @Field(type => Int, { nullable: true, description: 'Time to live for the state value in seconds' })\n ttl?: number\n\n @Column({ nullable: true })\n @Field({ nullable: true, description: 'Reference to an external entity or data, used as a flexible foreign key' })\n refBy?: string\n\n @Column({ nullable: true })\n @Field({ nullable: true, description: 'Time when the state was recorded' })\n wroteAt?: Date\n\n @CreateDateColumn()\n @Field({ nullable: true, description: 'Creation time of the state register' })\n createdAt?: Date\n\n @UpdateDateColumn()\n @Field({ nullable: true, description: 'Last update time of the state register' })\n updatedAt?: Date\n\n @ManyToOne(type => User, { nullable: true })\n @Field(type => User, { nullable: true, description: 'User who wrote the state' })\n writer?: User\n\n @RelationId((stateRegister: StateRegister) => stateRegister.writer)\n @Field({ nullable: true, description: 'ID of the user who wrote the state' })\n writerId?: string\n\n @ManyToOne(type => User, { nullable: true })\n @Field(type => User, { nullable: true, description: 'User who created the state register' })\n creator?: User\n\n @RelationId((stateRegister: StateRegister) => stateRegister.creator)\n @Field({ nullable: true, description: 'ID of the user who created the state register' })\n creatorId?: string\n\n @ManyToOne(type => User, { nullable: true })\n @Field(type => User, { nullable: true, description: 'User who last updated the state register' })\n updater?: User\n\n @RelationId((stateRegister: StateRegister) => stateRegister.updater)\n @Field({ nullable: true, description: 'ID of the user who last updated the state register' })\n updaterId?: string\n}\n"]}
|