@lv-x-software-house/x_view 1.2.6-dev.2 → 1.2.6-dev.21
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/index.js +1029 -709
- package/dist/index.mjs +958 -646
- package/dist/server.js +480 -0
- package/dist/server.mjs +445 -0
- package/package.json +2 -10
package/dist/server.mjs
ADDED
|
@@ -0,0 +1,445 @@
|
|
|
1
|
+
// src/x_view_server_logic.js
|
|
2
|
+
async function save_view_data_logic(db_services, filename, data) {
|
|
3
|
+
try {
|
|
4
|
+
const saveResult = await db_services.save_file(filename, data);
|
|
5
|
+
return saveResult;
|
|
6
|
+
} catch (error) {
|
|
7
|
+
console.error("catch (error) em save_view_data_logic:", error);
|
|
8
|
+
return { success: false, error: error.message };
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
async function get_scene_view_data_logic(db_services, scene_config, owner_id, type, session, focusNodeId = null, focusAncestryId = null) {
|
|
12
|
+
var _a, _b;
|
|
13
|
+
try {
|
|
14
|
+
if (!session || !session.user) {
|
|
15
|
+
return { success: false, error: "Usu\xE1rio n\xE3o autenticado." };
|
|
16
|
+
}
|
|
17
|
+
const membershipCheck = await db_services.check_membership(owner_id, type, scene_config, session.user.id);
|
|
18
|
+
const isFullMember = membershipCheck.success && membershipCheck.isValidMember;
|
|
19
|
+
if (!isFullMember && !focusNodeId && !focusAncestryId) {
|
|
20
|
+
return { success: false, error: "Acesso Negado: Voc\xEA n\xE3o possui permiss\xE3o para acessar este cen\xE1rio." };
|
|
21
|
+
}
|
|
22
|
+
const sceneResponse = await db_services.get_file(`x_view_scenes/${owner_id}/${scene_config}`);
|
|
23
|
+
if (!sceneResponse || !sceneResponse.success) {
|
|
24
|
+
console.error("Falha ao buscar dados da cena:", sceneResponse == null ? void 0 : sceneResponse.error);
|
|
25
|
+
return { success: false, error: `N\xE3o foi poss\xEDvel carregar o arquivo da cena: ${scene_config}` };
|
|
26
|
+
}
|
|
27
|
+
const sceneData = sceneResponse.data;
|
|
28
|
+
const parentDbObjects = sceneData.parent_dbs || [];
|
|
29
|
+
if (type && type.toLowerCase().includes("database")) {
|
|
30
|
+
const selfExists = parentDbObjects.some((db) => String(db.db_id) === String(scene_config));
|
|
31
|
+
if (!selfExists) {
|
|
32
|
+
parentDbObjects.push({ db_id: scene_config, owner_id });
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
const parentResponsesPromises = parentDbObjects.map(
|
|
36
|
+
(db_info) => db_services.get_file(`x_view_dbs/${db_info.owner_id}/${db_info.db_id}`)
|
|
37
|
+
);
|
|
38
|
+
const parentResponsesResults = await Promise.allSettled(parentResponsesPromises);
|
|
39
|
+
const parentData = {};
|
|
40
|
+
for (let i = 0; i < parentResponsesResults.length; i++) {
|
|
41
|
+
const result = parentResponsesResults[i];
|
|
42
|
+
const db_info = parentDbObjects[i];
|
|
43
|
+
if (result.status === "fulfilled" && ((_a = result.value) == null ? void 0 : _a.success)) {
|
|
44
|
+
parentData[db_info.db_id] = result.value.data;
|
|
45
|
+
} else {
|
|
46
|
+
console.warn(
|
|
47
|
+
`Arquivo pai n\xE3o carregado: ${db_info.db_id}. Pode ter sido deletado.`,
|
|
48
|
+
result.status === "rejected" ? result.reason : (_b = result.value) == null ? void 0 : _b.error
|
|
49
|
+
);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
if (type && type.toLowerCase() === "view") {
|
|
53
|
+
parentData[scene_config] = {
|
|
54
|
+
dataset_name: "Quests Internas (View)",
|
|
55
|
+
nodes: sceneData.quest_nodes || [],
|
|
56
|
+
links: sceneData.quest_links || []
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
const allNodes = Object.values(parentData).flatMap((db) => db.nodes || []);
|
|
60
|
+
const allLinks = Object.values(parentData).flatMap((db) => db.links || []);
|
|
61
|
+
const parentNodeMap = new Map(allNodes.map((node) => [String(node.id), node]));
|
|
62
|
+
const parentLinkMap = new Map(allLinks.map((link) => [`${link.source}-${link.target}`, link]));
|
|
63
|
+
const validatedNodes = (sceneData.nodes || []).map((sceneNode) => {
|
|
64
|
+
var _a2, _b2;
|
|
65
|
+
const nodeTypes = Array.isArray(sceneNode.type) ? sceneNode.type : [sceneNode.type];
|
|
66
|
+
if (nodeTypes.includes("quest")) {
|
|
67
|
+
const dbQuestNode = (_b2 = (_a2 = parentData[scene_config]) == null ? void 0 : _a2.nodes) == null ? void 0 : _b2.find((qn) => String(qn.id) === String(sceneNode.id));
|
|
68
|
+
if (dbQuestNode) {
|
|
69
|
+
return { ...sceneNode, ...dbQuestNode };
|
|
70
|
+
}
|
|
71
|
+
return sceneNode;
|
|
72
|
+
}
|
|
73
|
+
const dbNode = parentNodeMap.get(String(sceneNode.id));
|
|
74
|
+
if (dbNode) {
|
|
75
|
+
return { ...sceneNode, ...dbNode };
|
|
76
|
+
}
|
|
77
|
+
return null;
|
|
78
|
+
}).filter(Boolean);
|
|
79
|
+
const validNodeIdsInScene = new Set(validatedNodes.map((node) => String(node.id)));
|
|
80
|
+
const validatedLinks = (sceneData.links || []).filter((sceneLink) => {
|
|
81
|
+
const linkExistsInParent = parentLinkMap.has(`${sceneLink.source}-${sceneLink.target}`);
|
|
82
|
+
const nodesAreValidForScene = validNodeIdsInScene.has(String(sceneLink.source)) && validNodeIdsInScene.has(String(sceneLink.target));
|
|
83
|
+
return linkExistsInParent && nodesAreValidForScene;
|
|
84
|
+
}).map((sceneLink) => parentLinkMap.get(`${sceneLink.source}-${sceneLink.target}`));
|
|
85
|
+
const validatedSceneData = {
|
|
86
|
+
...sceneData,
|
|
87
|
+
nodes: validatedNodes,
|
|
88
|
+
links: validatedLinks
|
|
89
|
+
};
|
|
90
|
+
const ancestryFilePaths = [];
|
|
91
|
+
ancestryFilePaths.push({
|
|
92
|
+
path: `x_view_ancestry/${owner_id}/${scene_config}`,
|
|
93
|
+
source_id: scene_config,
|
|
94
|
+
owner_id,
|
|
95
|
+
isSceneFile: true
|
|
96
|
+
});
|
|
97
|
+
parentDbObjects.forEach((db_info) => {
|
|
98
|
+
ancestryFilePaths.push({
|
|
99
|
+
path: `x_view_ancestry/${db_info.owner_id}/${db_info.db_id}`,
|
|
100
|
+
source_id: db_info.db_id,
|
|
101
|
+
owner_id: db_info.owner_id,
|
|
102
|
+
isSceneFile: false
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
const ancestryPromises = ancestryFilePaths.map((file) => db_services.get_file(file.path));
|
|
106
|
+
const ancestryResults = await Promise.allSettled(ancestryPromises);
|
|
107
|
+
const ancestriesFromSceneFile = [];
|
|
108
|
+
const ancestriesFromDbFiles = [];
|
|
109
|
+
ancestryResults.forEach((result, index) => {
|
|
110
|
+
var _a2;
|
|
111
|
+
const fileInfo = ancestryFilePaths[index];
|
|
112
|
+
if (result.status === "fulfilled" && ((_a2 = result.value) == null ? void 0 : _a2.success) && Array.isArray(result.value.data)) {
|
|
113
|
+
const ancestriesFromFile = result.value.data.map((ancestry) => {
|
|
114
|
+
const existingSource = ancestry._source_file_id;
|
|
115
|
+
const existingOwner = ancestry._source_owner_id;
|
|
116
|
+
const isImportedItem = existingSource && existingSource !== fileInfo.source_id;
|
|
117
|
+
return {
|
|
118
|
+
...ancestry,
|
|
119
|
+
_source_file_id: isImportedItem ? existingSource : fileInfo.source_id,
|
|
120
|
+
_source_owner_id: isImportedItem ? existingOwner : fileInfo.owner_id
|
|
121
|
+
};
|
|
122
|
+
});
|
|
123
|
+
if (fileInfo.isSceneFile) {
|
|
124
|
+
ancestriesFromSceneFile.push(...ancestriesFromFile);
|
|
125
|
+
} else {
|
|
126
|
+
ancestriesFromDbFiles.push(...ancestriesFromFile);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
const ancestryMap = /* @__PURE__ */ new Map();
|
|
131
|
+
ancestriesFromDbFiles.forEach((anc) => ancestryMap.set(anc.ancestry_id, anc));
|
|
132
|
+
ancestriesFromSceneFile.forEach((anc) => ancestryMap.set(anc.ancestry_id, anc));
|
|
133
|
+
let ancestryData = Array.from(ancestryMap.values());
|
|
134
|
+
const externalSourcesToRefresh = /* @__PURE__ */ new Map();
|
|
135
|
+
ancestryData.forEach((anc) => {
|
|
136
|
+
const targetSourceId = anc._source_file_id || anc._imported_from_view_id;
|
|
137
|
+
const targetOwnerId = anc._source_owner_id || anc._imported_from_view_owner_id;
|
|
138
|
+
if (targetSourceId && targetSourceId !== scene_config && targetOwnerId) {
|
|
139
|
+
const isAlreadyLoadedAsParent = parentDbObjects.some((db) => String(db.db_id) === String(targetSourceId));
|
|
140
|
+
if (!isAlreadyLoadedAsParent) {
|
|
141
|
+
const key = `${targetOwnerId}/${targetSourceId}`;
|
|
142
|
+
externalSourcesToRefresh.set(key, {
|
|
143
|
+
owner_id: targetOwnerId,
|
|
144
|
+
source_id: targetSourceId,
|
|
145
|
+
key
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
const successfullyFetchedSources = /* @__PURE__ */ new Set();
|
|
151
|
+
const failedSources = /* @__PURE__ */ new Set();
|
|
152
|
+
if (externalSourcesToRefresh.size > 0) {
|
|
153
|
+
const refreshPromises = Array.from(externalSourcesToRefresh.values()).map(
|
|
154
|
+
(src) => db_services.get_file(`x_view_ancestry/${src.owner_id}/${src.source_id}`).then((res) => ({ ...res, _meta_key: src.key }))
|
|
155
|
+
);
|
|
156
|
+
const refreshResults = await Promise.allSettled(refreshPromises);
|
|
157
|
+
const freshAncestryMap = /* @__PURE__ */ new Map();
|
|
158
|
+
refreshResults.forEach((result) => {
|
|
159
|
+
var _a2, _b2;
|
|
160
|
+
if (result.status === "fulfilled" && ((_a2 = result.value) == null ? void 0 : _a2.success) && Array.isArray(result.value.data)) {
|
|
161
|
+
successfullyFetchedSources.add(result.value._meta_key);
|
|
162
|
+
result.value.data.forEach((freshAnc) => {
|
|
163
|
+
if (!freshAnc.is_private) {
|
|
164
|
+
freshAncestryMap.set(String(freshAnc.ancestry_id), freshAnc);
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
} else if (result.status === "fulfilled" && !((_b2 = result.value) == null ? void 0 : _b2.success)) {
|
|
168
|
+
failedSources.add(result.value._meta_key);
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
ancestryData = ancestryData.filter((localAnc) => {
|
|
172
|
+
const targetSourceId = localAnc._source_file_id || localAnc._imported_from_view_id;
|
|
173
|
+
const targetOwnerId = localAnc._source_owner_id || localAnc._imported_from_view_owner_id;
|
|
174
|
+
if (!targetSourceId || targetSourceId === scene_config) return true;
|
|
175
|
+
const key = `${targetOwnerId}/${targetSourceId}`;
|
|
176
|
+
if (failedSources.has(key)) {
|
|
177
|
+
return false;
|
|
178
|
+
}
|
|
179
|
+
if (externalSourcesToRefresh.has(key) && successfullyFetchedSources.has(key)) {
|
|
180
|
+
const stillExists = freshAncestryMap.has(String(localAnc.ancestry_id));
|
|
181
|
+
return stillExists;
|
|
182
|
+
}
|
|
183
|
+
return true;
|
|
184
|
+
}).map((localAnc) => {
|
|
185
|
+
const freshVersion = freshAncestryMap.get(String(localAnc.ancestry_id));
|
|
186
|
+
if (freshVersion) {
|
|
187
|
+
return {
|
|
188
|
+
...freshVersion,
|
|
189
|
+
_imported_from_view_id: localAnc._imported_from_view_id,
|
|
190
|
+
_imported_from_view_owner_id: localAnc._imported_from_view_owner_id,
|
|
191
|
+
_origin_db_ids: localAnc._origin_db_ids,
|
|
192
|
+
_source_file_id: localAnc._source_file_id,
|
|
193
|
+
_source_owner_id: localAnc._source_owner_id
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
return localAnc;
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
const ancestryFilePath = `x_view_ancestry/${owner_id}/${scene_config}`;
|
|
200
|
+
const parentNodeIds = new Set(allNodes.map((node) => String(node.id)));
|
|
201
|
+
const pruneTree = (node) => {
|
|
202
|
+
if (!node) return null;
|
|
203
|
+
if (node.is_section) {
|
|
204
|
+
const validChildren2 = (node.children || []).map((child) => pruneTree(child)).filter(Boolean);
|
|
205
|
+
return { ...node, children: validChildren2 };
|
|
206
|
+
}
|
|
207
|
+
if (!parentNodeIds.has(String(node.node_id))) {
|
|
208
|
+
return null;
|
|
209
|
+
}
|
|
210
|
+
const validChildren = (node.children || []).map((child) => pruneTree(child)).filter(Boolean);
|
|
211
|
+
let validBranches = [];
|
|
212
|
+
if (node.parallel_branches) {
|
|
213
|
+
validBranches = node.parallel_branches.map((branch) => ({
|
|
214
|
+
...branch,
|
|
215
|
+
tree: pruneTree(branch.tree)
|
|
216
|
+
})).filter((b) => b.tree !== null);
|
|
217
|
+
}
|
|
218
|
+
return {
|
|
219
|
+
...node,
|
|
220
|
+
children: validChildren,
|
|
221
|
+
parallel_branches: validBranches
|
|
222
|
+
};
|
|
223
|
+
};
|
|
224
|
+
const originalAncestryDataString = JSON.stringify(Array.from(ancestryMap.values()));
|
|
225
|
+
const cleanedAncestryData = ancestryData.map((ancestry) => {
|
|
226
|
+
if (!parentNodeIds.has(String(ancestry.ancestral_node))) return null;
|
|
227
|
+
const cleanedTree = pruneTree(ancestry.tree);
|
|
228
|
+
if (!cleanedTree) return null;
|
|
229
|
+
let cleanedAbstraction = null;
|
|
230
|
+
if (ancestry.abstraction_tree) {
|
|
231
|
+
cleanedAbstraction = pruneTree(ancestry.abstraction_tree);
|
|
232
|
+
}
|
|
233
|
+
return {
|
|
234
|
+
...ancestry,
|
|
235
|
+
tree: cleanedTree,
|
|
236
|
+
abstraction_tree: cleanedAbstraction
|
|
237
|
+
};
|
|
238
|
+
}).filter(Boolean);
|
|
239
|
+
if (JSON.stringify(cleanedAncestryData) !== originalAncestryDataString) {
|
|
240
|
+
ancestryData = cleanedAncestryData;
|
|
241
|
+
try {
|
|
242
|
+
await db_services.save_file(ancestryFilePath, ancestryData);
|
|
243
|
+
} catch (saveError) {
|
|
244
|
+
console.error("Falha ao salvar o arquivo de ancestralidade da cena atualizado:", saveError);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
if (!isFullMember) {
|
|
248
|
+
const requiredNodeIds = /* @__PURE__ */ new Set();
|
|
249
|
+
const requiredAncestryIds = /* @__PURE__ */ new Set();
|
|
250
|
+
if (focusNodeId) requiredNodeIds.add(String(focusNodeId));
|
|
251
|
+
if (focusAncestryId) requiredAncestryIds.add(String(focusAncestryId));
|
|
252
|
+
const allNodesFromDb = Object.values(parentData).flatMap((db) => db.nodes || []);
|
|
253
|
+
const extractDependenciesFromText = (text) => {
|
|
254
|
+
if (!text) return;
|
|
255
|
+
const mentionRegex = /\[\[MENTION:node:([a-zA-Z0-9\-_]+)\]\]/g;
|
|
256
|
+
const refRegex = /\[\[REF:(node|ancestry):([a-zA-Z0-9\-_]+):([a-zA-Z0-9\-_]+)\]\]/g;
|
|
257
|
+
let match;
|
|
258
|
+
while ((match = mentionRegex.exec(text)) !== null) {
|
|
259
|
+
requiredNodeIds.add(match[1]);
|
|
260
|
+
}
|
|
261
|
+
while ((match = refRegex.exec(text)) !== null) {
|
|
262
|
+
if (match[1] === "node") requiredNodeIds.add(match[2]);
|
|
263
|
+
if (match[1] === "ancestry") requiredAncestryIds.add(match[2]);
|
|
264
|
+
}
|
|
265
|
+
};
|
|
266
|
+
const extractTreeDependencies = (treeItem) => {
|
|
267
|
+
var _a2;
|
|
268
|
+
if (!treeItem) return;
|
|
269
|
+
if (treeItem.node_id) requiredNodeIds.add(String(treeItem.node_id));
|
|
270
|
+
if ((_a2 = treeItem.node) == null ? void 0 : _a2.id) requiredNodeIds.add(String(treeItem.node.id));
|
|
271
|
+
if (treeItem.children) {
|
|
272
|
+
treeItem.children.forEach(extractTreeDependencies);
|
|
273
|
+
}
|
|
274
|
+
if (treeItem.parallel_branches) {
|
|
275
|
+
treeItem.parallel_branches.forEach((branch) => {
|
|
276
|
+
if (branch.linked_ancestry_id) {
|
|
277
|
+
requiredAncestryIds.add(String(branch.linked_ancestry_id));
|
|
278
|
+
}
|
|
279
|
+
if (branch.description) extractDependenciesFromText(branch.description);
|
|
280
|
+
if (branch.description_sections) {
|
|
281
|
+
branch.description_sections.forEach((s) => extractDependenciesFromText(s.content));
|
|
282
|
+
}
|
|
283
|
+
extractTreeDependencies(branch.tree);
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
};
|
|
287
|
+
let previousSize;
|
|
288
|
+
do {
|
|
289
|
+
previousSize = requiredNodeIds.size + requiredAncestryIds.size;
|
|
290
|
+
requiredAncestryIds.forEach((ancId) => {
|
|
291
|
+
const anc = ancestryData.find((a) => String(a.ancestry_id) === ancId);
|
|
292
|
+
if (anc && !anc.is_private) {
|
|
293
|
+
if (anc.description) extractDependenciesFromText(anc.description);
|
|
294
|
+
if (anc.description_sections) {
|
|
295
|
+
anc.description_sections.forEach((s) => extractDependenciesFromText(s.content));
|
|
296
|
+
}
|
|
297
|
+
extractTreeDependencies(anc.tree);
|
|
298
|
+
extractTreeDependencies(anc.abstraction_tree);
|
|
299
|
+
}
|
|
300
|
+
});
|
|
301
|
+
requiredNodeIds.forEach((nodeId) => {
|
|
302
|
+
const node = allNodesFromDb.find((n) => String(n.id) === nodeId);
|
|
303
|
+
if (node) {
|
|
304
|
+
if (node.description) extractDependenciesFromText(node.description);
|
|
305
|
+
if (node.description_sections) {
|
|
306
|
+
node.description_sections.forEach((s) => extractDependenciesFromText(s.content));
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
});
|
|
310
|
+
} while (requiredNodeIds.size + requiredAncestryIds.size > previousSize);
|
|
311
|
+
const restrictedSceneData = { ...validatedSceneData, nodes: [], links: [] };
|
|
312
|
+
const restrictedParentData = {};
|
|
313
|
+
const restrictedAncestryData = ancestryData.filter((a) => requiredAncestryIds.has(String(a.ancestry_id)) && !a.is_private);
|
|
314
|
+
for (const [dbId, dbContent] of Object.entries(parentData)) {
|
|
315
|
+
const filteredNodes = (dbContent.nodes || []).filter((n) => requiredNodeIds.has(String(n.id)));
|
|
316
|
+
if (filteredNodes.length > 0) {
|
|
317
|
+
restrictedParentData[dbId] = { ...dbContent, nodes: filteredNodes, links: [] };
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
if (focusNodeId) {
|
|
321
|
+
const mainNode = allNodesFromDb.find((n) => String(n.id) === String(focusNodeId));
|
|
322
|
+
if (mainNode) {
|
|
323
|
+
restrictedSceneData.nodes = [mainNode];
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
return {
|
|
327
|
+
success: true,
|
|
328
|
+
data: {
|
|
329
|
+
scene: restrictedSceneData,
|
|
330
|
+
parent: restrictedParentData,
|
|
331
|
+
ancestry: restrictedAncestryData
|
|
332
|
+
}
|
|
333
|
+
};
|
|
334
|
+
}
|
|
335
|
+
return {
|
|
336
|
+
success: true,
|
|
337
|
+
data: { scene: validatedSceneData, parent: parentData, ancestry: ancestryData }
|
|
338
|
+
};
|
|
339
|
+
} catch (error) {
|
|
340
|
+
console.error("Erro em get_scene_view_data_logic:", error);
|
|
341
|
+
return { success: false, error: error.message };
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
async function import_parent_file_modal_get_logic(db_services, session) {
|
|
345
|
+
try {
|
|
346
|
+
const call_firestore_get_x_view_data = await db_services.get_firestore_data(session);
|
|
347
|
+
const x_view_databases = call_firestore_get_x_view_data.data.sub_collections.x_view_databases || [];
|
|
348
|
+
const x_views = call_firestore_get_x_view_data.data.sub_collections.x_views || [];
|
|
349
|
+
return {
|
|
350
|
+
success: true,
|
|
351
|
+
data: {
|
|
352
|
+
databases: x_view_databases,
|
|
353
|
+
views: x_views
|
|
354
|
+
}
|
|
355
|
+
};
|
|
356
|
+
} catch (error) {
|
|
357
|
+
console.error("catch (error) em import_parent_file_modal_get_logic:", error);
|
|
358
|
+
return { success: false, error: error.message };
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
async function get_single_parent_file_logic(db_services, file_id, session) {
|
|
362
|
+
try {
|
|
363
|
+
const call_GCP_cloud_storage_get_file = await db_services.get_file(`x_view_dbs/${session.user.id}/${file_id}`);
|
|
364
|
+
return call_GCP_cloud_storage_get_file;
|
|
365
|
+
} catch (error) {
|
|
366
|
+
console.error("catch (error) em get_single_parent_file_logic:", error);
|
|
367
|
+
return { success: false, error: error.message };
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
async function x_view_add_new_parent_file_to_scene_at_firebase(file_id, session, new_parent, db_services) {
|
|
371
|
+
try {
|
|
372
|
+
const update_data = {
|
|
373
|
+
scene_id: file_id,
|
|
374
|
+
new_parent,
|
|
375
|
+
session
|
|
376
|
+
};
|
|
377
|
+
const call_firestore_add_new_parent_file_to_scene_at_firebase = await db_services.add_new_parent_file_to_scene_at_firebase(update_data);
|
|
378
|
+
return call_firestore_add_new_parent_file_to_scene_at_firebase;
|
|
379
|
+
} catch (error) {
|
|
380
|
+
console.error("catch (error) em get_single_parent_file_logic:", error);
|
|
381
|
+
return { success: false, error: error.message };
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
async function get_ancestry_file_logic(db_services, file_id, owner_id) {
|
|
385
|
+
try {
|
|
386
|
+
const path = `x_view_ancestry/${owner_id}/${file_id}`;
|
|
387
|
+
const call_GCP_cloud_storage_get_file = await db_services.get_file(path);
|
|
388
|
+
return call_GCP_cloud_storage_get_file;
|
|
389
|
+
} catch (error) {
|
|
390
|
+
console.error("catch (error) em get_ancestry_file_logic:", error);
|
|
391
|
+
return { success: false, error: error.message };
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
async function save_ancestry_board_logic(db_services, scene_id, type, groups, session, owner_id) {
|
|
395
|
+
try {
|
|
396
|
+
const targetOwnerId = owner_id || session.user.id;
|
|
397
|
+
return await db_services.save_ancestry_board(session, scene_id, type, groups, targetOwnerId);
|
|
398
|
+
} catch (error) {
|
|
399
|
+
console.error("Erro em save_ancestry_board_logic:", error);
|
|
400
|
+
return { success: false, error: error.message };
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
async function get_ancestry_board_logic(db_services, scene_id, type, session, owner_id) {
|
|
404
|
+
try {
|
|
405
|
+
const targetOwnerId = owner_id || session.user.id;
|
|
406
|
+
return await db_services.get_ancestry_board(session, scene_id, type, targetOwnerId);
|
|
407
|
+
} catch (error) {
|
|
408
|
+
console.error("Erro em get_ancestry_board_logic:", error);
|
|
409
|
+
return { success: false, error: error.message };
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
async function delete_uploaded_file_logic(db_services, fileUrl) {
|
|
413
|
+
try {
|
|
414
|
+
if (db_services.delete_public_file) {
|
|
415
|
+
return await db_services.delete_public_file(fileUrl);
|
|
416
|
+
}
|
|
417
|
+
return { success: false, error: "Servi\xE7o de dele\xE7\xE3o n\xE3o configurado." };
|
|
418
|
+
} catch (error) {
|
|
419
|
+
console.error("Erro em delete_uploaded_file_logic:", error);
|
|
420
|
+
return { success: false, error: error.message };
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
async function get_view_members_logic(db_services, ownerId, type, itemId) {
|
|
424
|
+
try {
|
|
425
|
+
if (!db_services.get_view_members) {
|
|
426
|
+
return { success: false, error: "Servi\xE7o de busca de membros n\xE3o configurado." };
|
|
427
|
+
}
|
|
428
|
+
return await db_services.get_view_members(ownerId, type, itemId);
|
|
429
|
+
} catch (error) {
|
|
430
|
+
console.error("Erro em get_view_members_logic:", error);
|
|
431
|
+
return { success: false, error: error.message };
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
export {
|
|
435
|
+
delete_uploaded_file_logic,
|
|
436
|
+
get_ancestry_board_logic,
|
|
437
|
+
get_ancestry_file_logic,
|
|
438
|
+
get_scene_view_data_logic,
|
|
439
|
+
get_single_parent_file_logic,
|
|
440
|
+
get_view_members_logic,
|
|
441
|
+
import_parent_file_modal_get_logic,
|
|
442
|
+
save_ancestry_board_logic,
|
|
443
|
+
save_view_data_logic,
|
|
444
|
+
x_view_add_new_parent_file_to_scene_at_firebase
|
|
445
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lv-x-software-house/x_view",
|
|
3
|
-
"version": "1.2.6-dev.
|
|
3
|
+
"version": "1.2.6-dev.21",
|
|
4
4
|
"description": "Pacote privado contendo os componentes e lógica de renderização 3D do X View.",
|
|
5
5
|
"author": "iv.x - Engenharia de Software - ivxsoftwarehouse@gmail.com",
|
|
6
6
|
"license": "UNLICENSED",
|
|
@@ -35,8 +35,7 @@
|
|
|
35
35
|
"@eslint/js": "^9.39.4",
|
|
36
36
|
"@types/crypto-js": "^4.2.2",
|
|
37
37
|
"@types/node": "^22.5.4",
|
|
38
|
-
"@types/react": "^
|
|
39
|
-
"@types/react-dom": "^19.2.3",
|
|
38
|
+
"@types/react": "^18.3.5",
|
|
40
39
|
"@types/three": "^0.179.0",
|
|
41
40
|
"eslint": "^9.39.4",
|
|
42
41
|
"eslint-config-prettier": "^10.1.8",
|
|
@@ -50,14 +49,7 @@
|
|
|
50
49
|
},
|
|
51
50
|
"dependencies": {
|
|
52
51
|
"@casl/ability": "^6.8.0",
|
|
53
|
-
"@tiptap/core": "^3.22.2",
|
|
54
|
-
"@tiptap/extension-mention": "^3.22.2",
|
|
55
|
-
"@tiptap/pm": "^3.22.2",
|
|
56
|
-
"@tiptap/react": "^3.22.2",
|
|
57
|
-
"@tiptap/starter-kit": "^3.22.2",
|
|
58
|
-
"@tiptap/suggestion": "^3.22.2",
|
|
59
52
|
"react-colorful": "^5.6.1",
|
|
60
|
-
"tippy.js": "^6.3.7",
|
|
61
53
|
"uuid": "^13.0.0"
|
|
62
54
|
}
|
|
63
55
|
}
|