streamby-core 0.17.0 → 0.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/README.md +206 -114
  2. package/dist/adapters/database/connectionManager.d.ts +6 -0
  3. package/dist/adapters/database/connectionManager.js +47 -0
  4. package/dist/adapters/database/nosql.d.ts +8 -0
  5. package/dist/adapters/database/nosql.js +46 -0
  6. package/dist/adapters/database/nosqlAdapter.d.ts +8 -0
  7. package/dist/adapters/database/nosqlAdapter.js +30 -0
  8. package/dist/adapters/database/sql.d.ts +8 -0
  9. package/dist/adapters/database/sql.js +42 -0
  10. package/dist/adapters/database/sqlAdapter.d.ts +8 -0
  11. package/dist/adapters/database/sqlAdapter.js +42 -0
  12. package/dist/adapters/s3.d.ts +11 -2
  13. package/dist/adapters/s3.js +59 -76
  14. package/dist/adapters/storage/gcs.d.ts +0 -0
  15. package/dist/adapters/storage/gcs.js +1 -0
  16. package/dist/adapters/storage/local.d.ts +0 -0
  17. package/dist/adapters/storage/local.js +1 -0
  18. package/dist/adapters/storage/s3.d.ts +11 -0
  19. package/dist/adapters/storage/s3.js +65 -0
  20. package/dist/database/Model.d.ts +11 -0
  21. package/dist/database/Model.js +95 -0
  22. package/dist/database/connectionManager.d.ts +5 -0
  23. package/dist/database/connectionManager.js +32 -0
  24. package/dist/database/index.d.ts +3 -0
  25. package/dist/database/index.js +19 -0
  26. package/dist/database/model.d.ts +20 -0
  27. package/dist/database/model.js +2 -0
  28. package/dist/database/modelManager.d.ts +8 -0
  29. package/dist/database/modelManager.js +38 -0
  30. package/dist/database/modelRegistry.d.ts +3 -0
  31. package/dist/database/modelRegistry.js +17 -0
  32. package/dist/database/mongoAdapter.d.ts +11 -0
  33. package/dist/database/mongoAdapter.js +42 -0
  34. package/dist/database/sqlAdapter.d.ts +12 -0
  35. package/dist/database/sqlAdapter.js +68 -0
  36. package/dist/middleware/createRouter.js +76 -140
  37. package/dist/models/Model.d.ts +12 -0
  38. package/dist/models/Model.js +146 -0
  39. package/dist/models/manager.d.ts +2 -0
  40. package/dist/models/manager.js +7 -0
  41. package/dist/models/modelManager.d.ts +2 -0
  42. package/dist/models/modelManager.js +7 -0
  43. package/dist/models/modelRegistry.d.ts +3 -0
  44. package/dist/models/modelRegistry.js +17 -0
  45. package/dist/models/register.d.ts +1 -0
  46. package/dist/models/register.js +8 -0
  47. package/dist/models/registerModel.d.ts +1 -0
  48. package/dist/models/registerModel.js +8 -0
  49. package/dist/models/registry.d.ts +3 -0
  50. package/dist/models/registry.js +17 -0
  51. package/dist/providers/createStorageProvider.d.ts +1 -1
  52. package/dist/providers/createStorageProvider.js +9 -13
  53. package/dist/providers/storage.d.ts +2 -0
  54. package/dist/providers/storage.js +12 -0
  55. package/dist/services/auth.d.ts +0 -1
  56. package/dist/services/auth.js +0 -11
  57. package/dist/types/index.d.ts +4 -95
  58. package/package.json +5 -1
  59. package/dist/config.d.ts +0 -18
  60. package/dist/config.js +0 -26
  61. package/dist/db/initExportModel.d.ts +0 -60
  62. package/dist/db/initExportModel.js +0 -18
  63. package/dist/db/initProjectModel.d.ts +0 -2502
  64. package/dist/db/initProjectModel.js +0 -33
  65. package/dist/db/initUserModel.d.ts +0 -48
  66. package/dist/db/initUserModel.js +0 -19
  67. package/dist/models/ExportCollection.d.ts +0 -54
  68. package/dist/models/ExportCollection.js +0 -19
  69. package/dist/mongoose_models/initExportModel.d.ts +0 -61
  70. package/dist/mongoose_models/initExportModel.js +0 -19
  71. package/dist/mongoose_models/initProjectModel.d.ts +0 -2503
  72. package/dist/mongoose_models/initProjectModel.js +0 -34
  73. package/dist/providers/createDatabaseProvider.d.ts +0 -2
  74. package/dist/providers/createDatabaseProvider.js +0 -36
  75. package/dist/providers/createMongooseProvider.d.ts +0 -8
  76. package/dist/providers/createMongooseProvider.js +0 -33
  77. package/dist/providers/createPrismaProvider.d.ts +0 -14
  78. package/dist/providers/createPrismaProvider.js +0 -29
  79. package/dist/providers/mongoExportProvider.d.ts +0 -3
  80. package/dist/providers/mongoExportProvider.js +0 -13
  81. package/dist/providers/mongoProjectProvider.d.ts +0 -3
  82. package/dist/providers/mongoProjectProvider.js +0 -107
  83. package/dist/providers/mongooseExportProvider.d.ts +0 -3
  84. package/dist/providers/mongooseExportProvider.js +0 -13
  85. package/dist/providers/mongooseProjectProvider.d.ts +0 -3
  86. package/dist/providers/mongooseProjectProvider.js +0 -114
  87. package/dist/providers/prismaExportCollectionProvider.d.ts +0 -61
  88. package/dist/providers/prismaExportCollectionProvider.js +0 -45
  89. package/dist/providers/prismaExportProvider.d.ts +0 -3
  90. package/dist/providers/prismaExportProvider.js +0 -13
  91. package/dist/providers/prismaProjectProvider.d.ts +0 -3
  92. package/dist/providers/prismaProjectProvider.js +0 -148
  93. package/dist/utils/pushPrismaSchema.d.ts +0 -5
  94. package/dist/utils/pushPrismaSchema.js +0 -35
@@ -7,35 +7,17 @@ exports.createStreamByRouter = createStreamByRouter;
7
7
  const express_1 = __importDefault(require("express"));
8
8
  const file_1 = require("../services/file");
9
9
  const presign_1 = require("../services/presign");
10
- const createStorageProvider_1 = require("../providers/createStorageProvider");
11
- const createDatabaseProvider_1 = require("../providers/createDatabaseProvider");
10
+ const manager_1 = require("../models/manager");
11
+ const storage_1 = require("../providers/storage");
12
+ const connectionManager_1 = require("../adapters/database/connectionManager");
12
13
  function isProjectMember(project, userId) {
13
14
  return project.members?.some((m) => m.userId?.toString() === userId?.toString());
14
15
  }
15
16
  function createStreamByRouter(config) {
16
17
  const router = express_1.default.Router();
17
- const adapter = config.adapter || (0, createStorageProvider_1.createStorageProvider)(config.storageProviders);
18
- const projectProviders = {};
19
- let exportProvider;
20
- let exportCollectionProvider;
21
- if (config.databases) {
22
- const db = (0, createDatabaseProvider_1.createDatabaseProvider)(config.databases, adapter);
23
- projectProviders.nosql = db.projectProviders.nosql;
24
- projectProviders.sql = db.projectProviders.sql;
25
- exportProvider = db.exportProvider;
26
- exportCollectionProvider = db.exportCollectionProvider;
27
- }
28
- else {
29
- projectProviders.default = config.projectProvider;
30
- exportProvider = config.exportProvider;
31
- exportCollectionProvider = config.exportCollectionProvider;
32
- }
33
- if (!projectProviders.nosql && !projectProviders.sql) {
34
- throw new Error('Project provider is not initialized. Please check your database configuration.');
35
- }
36
- if (!exportProvider) {
37
- throw new Error('Export provider is not initialized. Please check your database configuration.');
38
- }
18
+ const adapter = config.adapter || (0, storage_1.createStorageProvider)(config.storageProviders);
19
+ const Project = (0, manager_1.getModel)('Project');
20
+ const Export = (0, manager_1.getModel)('Export');
39
21
  router.get('/auth', async (req, res) => {
40
22
  try {
41
23
  const auth = await config.authProvider(req);
@@ -51,13 +33,10 @@ function createStreamByRouter(config) {
51
33
  if (!auth) {
52
34
  return res.status(401).json({ error: 'Unauthorized' });
53
35
  }
54
- const databases = [];
55
- if (projectProviders.nosql) {
56
- databases.push({ name: "NoSQL (Mongo)", value: "nosql" });
57
- }
58
- if (projectProviders.sql) {
59
- databases.push({ name: "SQL (Prisma)", value: "sql" });
60
- }
36
+ const connectedDbIds = (0, connectionManager_1.getConnectedIds)();
37
+ const databases = (config.databases || [])
38
+ .filter(db => connectedDbIds.includes(db.id))
39
+ .map(db => ({ name: db.id, value: db.type }));
61
40
  res.status(200).json({ databases });
62
41
  }
63
42
  catch (err) {
@@ -92,11 +71,7 @@ function createStreamByRouter(config) {
92
71
  return res.status(400).json({ error: 'Missing projectId' });
93
72
  }
94
73
  await (0, file_1.deleteProjectImage)(adapter, projectId);
95
- const provider = await getProjectProvider(projectId);
96
- if (!provider) {
97
- return res.status(404).json({ error: 'Project not found' });
98
- }
99
- const updated = await provider.update(projectId, { image: '' });
74
+ const updated = await Project.update({ _id: projectId }, { image: '' });
100
75
  res.status(201).json(updated);
101
76
  }
102
77
  catch (err) {
@@ -107,7 +82,7 @@ function createStreamByRouter(config) {
107
82
  try {
108
83
  const auth = await config.authProvider(req);
109
84
  const projectId = (req.query.projectId || req.headers['x-project-id']);
110
- if (!projectId || !auth.projects.includes(projectId)) {
85
+ if (!projectId) {
111
86
  return res.status(403).json({ error: 'Unauthorized or missing projectId' });
112
87
  }
113
88
  const files = await (0, file_1.listFilesService)(adapter, req, projectId);
@@ -117,51 +92,20 @@ function createStreamByRouter(config) {
117
92
  res.status(500).json({ error: 'Failed to list files', details: err });
118
93
  }
119
94
  });
120
- async function getProjectProvider(projectId, dbType) {
121
- if (dbType) {
122
- const specificProvider = projectProviders[dbType];
123
- if (specificProvider) {
124
- try {
125
- const project = await specificProvider.getById(projectId, true);
126
- if (project)
127
- return specificProvider;
128
- }
129
- catch (error) { /* ignore */ }
130
- }
131
- return null; // If dbType was provided and no project found in that specific provider, return null.
132
- }
133
- // If dbType is not provided, search both nosql and sql
134
- if (projectProviders.nosql) {
135
- try {
136
- const project = await projectProviders.nosql.getById(projectId, true);
137
- if (project)
138
- return projectProviders.nosql;
139
- }
140
- catch (error) { /* ignore */ }
141
- }
142
- if (projectProviders.sql) {
143
- try {
144
- const project = await projectProviders.sql.getById(projectId, true);
145
- if (project)
146
- return projectProviders.sql;
147
- }
148
- catch (error) { /* ignore */ }
149
- }
150
- return null; // If not found in either nosql or sql, return null.
151
- }
152
95
  router.get('/projects', async (req, res) => {
153
96
  try {
154
97
  const auth = await config.authProvider(req);
155
- const projects = [];
156
- if (projectProviders.nosql) {
157
- projects.push(...await projectProviders.nosql.list(auth.userId));
158
- }
159
- if (projectProviders.sql) {
160
- projects.push(...await projectProviders.sql.list(auth.userId));
161
- }
162
- if (projectProviders.default) {
163
- projects.push(...await projectProviders.default.list(auth.userId));
164
- }
98
+ const archived = req.query.archived ? String(req.query.archived).toLowerCase() === 'true' : undefined;
99
+ const projects = (await Project.find({ members: { $elemMatch: { userId: auth.userId } }, archived })).map(project => {
100
+ const currentUserMember = project.members?.find((member) => member.userId === auth.userId);
101
+ return {
102
+ id: project._id || project.id,
103
+ dbType: project.dbType,
104
+ name: project.name,
105
+ image: project.image || '',
106
+ archived: currentUserMember ? currentUserMember.archived || false : false,
107
+ };
108
+ });
165
109
  res.json({ projects });
166
110
  }
167
111
  catch (err) {
@@ -175,17 +119,13 @@ function createStreamByRouter(config) {
175
119
  return res.status(403).json({ error: 'Permission denied' });
176
120
  }
177
121
  const { name, description, dbType } = req.body;
178
- const provider = dbType ? projectProviders[dbType] : projectProviders.default || projectProviders.nosql || projectProviders.sql;
179
- if (!provider) {
180
- return res.status(400).json({ error: 'Invalid dbType' });
181
- }
182
- const newProject = await provider.create({
122
+ const newProject = await Project.create({
183
123
  dbType: dbType || 'nosql',
184
124
  name,
185
125
  description: description || '',
186
- members: [{ userId: auth.userId, role: "admin" }]
126
+ members: [{ userId: auth.userId, role: "admin", archived: false }]
187
127
  });
188
- res.status(201).json({ project: newProject });
128
+ res.status(201).json({ project: { ...newProject, id: newProject._id || newProject.id, _id: undefined } });
189
129
  }
190
130
  catch (err) {
191
131
  res.status(500).json({ error: 'Failed to create project', details: err.message });
@@ -195,19 +135,14 @@ function createStreamByRouter(config) {
195
135
  try {
196
136
  const auth = await config.authProvider(req);
197
137
  const projectId = req.params.id;
198
- const dbType = req.query.dbType;
199
- const projectProvider = await getProjectProvider(projectId, dbType);
200
- if (!projectProvider) {
201
- return res.status(404).json({ error: 'Project not found' });
202
- }
203
- const project = await projectProvider.getById(projectId, true);
138
+ const project = await Project.findOne({ _id: projectId });
204
139
  if (!project) {
205
140
  return res.status(404).json({ error: 'Project not found' });
206
141
  }
207
142
  if (!isProjectMember(project, auth.userId)) {
208
143
  return res.status(403).json({ error: 'Unauthorized project access' });
209
144
  }
210
- res.json({ project });
145
+ res.json({ project: { ...project, id: project._id || project.id, _id: undefined } });
211
146
  }
212
147
  catch (err) {
213
148
  res.status(500).json({ error: 'Failed to fetch project', details: err.message });
@@ -221,11 +156,7 @@ function createStreamByRouter(config) {
221
156
  }
222
157
  const projectId = req.params.id;
223
158
  const updates = req.body;
224
- const projectProvider = await getProjectProvider(projectId);
225
- if (!projectProvider) {
226
- return res.status(404).json({ error: 'Project not found' });
227
- }
228
- const project = await projectProvider.getById(projectId, true);
159
+ const project = await Project.findOne({ _id: projectId });
229
160
  if (!project) {
230
161
  return res.status(404).json({ error: 'Project not found' });
231
162
  }
@@ -235,8 +166,11 @@ function createStreamByRouter(config) {
235
166
  if (!isProjectMember(project, auth.userId)) {
236
167
  return res.status(403).json({ error: 'Unauthorized project access' });
237
168
  }
238
- const updated = await projectProvider.update(projectId, updates);
239
- res.status(200).json({ success: true, project: updated });
169
+ const updated = await Project.update({ _id: projectId }, updates);
170
+ if (!updated) {
171
+ return res.status(404).json({ error: 'Project not found or not updated' });
172
+ }
173
+ res.status(200).json({ success: true, project: { ...updated, id: updated._id || updated.id, _id: undefined } });
240
174
  }
241
175
  catch (err) {
242
176
  res.status(500).json({ error: 'Failed to update project', details: err.message });
@@ -246,18 +180,14 @@ function createStreamByRouter(config) {
246
180
  try {
247
181
  const auth = await config.authProvider(req);
248
182
  const projectId = req.params.id;
249
- const projectProvider = await getProjectProvider(projectId);
250
- if (!projectProvider) {
251
- return res.status(404).json({ error: 'Project not found' });
252
- }
253
- const project = await projectProvider.getById(projectId, true);
183
+ const project = await Project.findOne({ _id: projectId });
254
184
  if (!project) {
255
185
  return res.status(404).json({ error: 'Project not found' });
256
186
  }
257
187
  if (!isProjectMember(project, auth.userId)) {
258
188
  return res.status(403).json({ error: 'Unauthorized project access' });
259
189
  }
260
- await projectProvider.delete(projectId);
190
+ await Project.delete({ _id: projectId });
261
191
  res.status(200).json({ success: true });
262
192
  }
263
193
  catch (err) {
@@ -268,16 +198,25 @@ function createStreamByRouter(config) {
268
198
  try {
269
199
  const auth = await config.authProvider(req);
270
200
  const projectId = req.params.id;
271
- const projectProvider = await getProjectProvider(projectId);
272
- if (!projectProvider) {
273
- return res.status(404).json({ error: 'Project not found' });
274
- }
275
- const project = await projectProvider.getById(projectId, true);
201
+ const project = await Project.findOne({ _id: projectId });
276
202
  if (!project || !isProjectMember(project, auth.userId)) {
277
203
  return res.status(403).json({ error: 'Unauthorized project access' });
278
204
  }
279
- const result = await projectProvider.archive(projectId, auth.userId);
280
- res.status(200).json(result);
205
+ await Project.update({ _id: projectId, "members.userId": auth.userId }, { "members.$.archived": true, "members.$.archivedBy": auth.userId, "members.$.archivedAt": new Date() });
206
+ const updatedProject = await Project.findOne({ _id: projectId }); // Fetch the updated project
207
+ const projects = (await Project.find({ members: { $elemMatch: { userId: auth.userId } } })).map(project => {
208
+ const currentUserMember = project.members?.find((member) => member.userId === auth.userId);
209
+ return {
210
+ id: project._id || project.id,
211
+ dbType: project.dbType,
212
+ name: project.name,
213
+ image: project.image || '',
214
+ archived: currentUserMember ? currentUserMember.archived || false : false,
215
+ };
216
+ });
217
+ // Replace the old project with the updated one in the list
218
+ const finalProjects = projects.map(p => p.id === (updatedProject?._id || updatedProject?.id) ? ({ ...updatedProject, id: updatedProject._id || updatedProject.id, _id: undefined }) : p);
219
+ res.status(200).json({ success: true, projects: finalProjects });
281
220
  }
282
221
  catch (err) {
283
222
  res.status(500).json({ error: 'Failed to archive project', details: err.message });
@@ -287,16 +226,25 @@ function createStreamByRouter(config) {
287
226
  try {
288
227
  const auth = await config.authProvider(req);
289
228
  const projectId = req.params.id;
290
- const projectProvider = await getProjectProvider(projectId);
291
- if (!projectProvider) {
292
- return res.status(404).json({ error: 'Project not found' });
293
- }
294
- const project = await projectProvider.getById(projectId, true);
229
+ const project = await Project.findOne({ _id: projectId });
295
230
  if (!project || !isProjectMember(project, auth.userId)) {
296
231
  return res.status(403).json({ error: 'Unauthorized project access' });
297
232
  }
298
- const result = await projectProvider.unarchive(projectId, auth.userId);
299
- res.status(200).json(result);
233
+ await Project.update({ _id: projectId, "members.userId": auth.userId }, { "members.$.archived": false, "members.$.archivedBy": null, "members.$.archivedAt": null });
234
+ const updatedProject = await Project.findOne({ _id: projectId }); // Fetch the updated project
235
+ const projects = (await Project.find({ members: { $elemMatch: { userId: auth.userId } } })).map(project => {
236
+ const currentUserMember = project.members?.find((member) => member.userId === auth.userId);
237
+ return {
238
+ id: project._id || project.id,
239
+ dbType: project.dbType,
240
+ name: project.name,
241
+ image: project.image || '',
242
+ archived: currentUserMember ? currentUserMember.archived || false : false,
243
+ };
244
+ });
245
+ // Replace the old project with the updated one in the list
246
+ const finalProjects = projects.map(p => p.id === (updatedProject?._id || updatedProject?.id) ? ({ ...updatedProject, id: updatedProject._id || updatedProject.id, _id: undefined }) : p);
247
+ res.status(200).json({ success: true, projects: finalProjects });
300
248
  }
301
249
  catch (err) {
302
250
  res.status(500).json({ error: 'Failed to unarchive project', details: err.message });
@@ -307,19 +255,15 @@ function createStreamByRouter(config) {
307
255
  const auth = await config.authProvider(req);
308
256
  const projectId = req.params.id;
309
257
  const exportId = req.params.export_id;
310
- const projectProvider = await getProjectProvider(projectId);
311
- if (!projectProvider) {
312
- return res.status(404).json({ error: 'Project not found' });
313
- }
314
- const project = await projectProvider.getById(projectId, true);
258
+ const project = await Project.findOne({ _id: projectId });
315
259
  if (!project) {
316
260
  return res.status(404).json({ error: 'Project not found' });
317
261
  }
318
262
  if (!isProjectMember(project, auth.userId)) {
319
263
  return res.status(403).json({ error: 'Unauthorized access' });
320
264
  }
321
- const data = await exportProvider.getById(exportId);
322
- res.json({ data });
265
+ const data = await Export.findOne({ _id: exportId });
266
+ res.json({ data: { ...data, id: data._id || data.id, _id: undefined } });
323
267
  }
324
268
  catch (err) {
325
269
  res.status(500).json({ error: 'Failed to fetch export data', details: err.message });
@@ -333,22 +277,18 @@ function createStreamByRouter(config) {
333
277
  if (!name || !collectionName) {
334
278
  return res.status(400).json({ error: 'Missing export name or collectionName' });
335
279
  }
336
- const projectProvider = await getProjectProvider(projectId);
337
- if (!projectProvider) {
338
- return res.status(404).json({ error: 'Project not found' });
339
- }
340
- const project = await projectProvider.getById(projectId, true);
280
+ const project = await Project.findOne({ _id: projectId });
341
281
  if (!project || !isProjectMember(project, auth.userId)) {
342
282
  return res.status(403).json({ error: 'Unauthorized project access' });
343
283
  }
344
- const newExport = await exportProvider.create({
284
+ const newExport = await Export.create({
345
285
  name,
346
286
  description,
347
287
  collectionName,
348
288
  projectId
349
289
  });
350
- await projectProvider.addExportToProject(projectId, newExport.id);
351
- res.status(201).json({ data: newExport });
290
+ await Project.update({ _id: projectId }, { $push: { exports: newExport._id } });
291
+ res.status(201).json({ data: { ...newExport, id: newExport._id || newExport.id, _id: undefined } });
352
292
  }
353
293
  catch (err) {
354
294
  res.status(500).json({ error: 'Failed to create export', details: err.message });
@@ -358,11 +298,7 @@ function createStreamByRouter(config) {
358
298
  try {
359
299
  const auth = await config.authProvider(req);
360
300
  const projectId = req.params.id;
361
- const projectProvider = await getProjectProvider(projectId);
362
- if (!projectProvider) {
363
- return res.status(404).json({ error: 'Project not found' });
364
- }
365
- const project = await projectProvider.getById(projectId, true);
301
+ const project = await Project.findOne({ _id: projectId });
366
302
  if (!project) {
367
303
  return res.status(404).json({ error: 'Project not found' });
368
304
  }
@@ -0,0 +1,12 @@
1
+ import { Document } from 'mongodb';
2
+ export declare class Model<T extends Document> {
3
+ private connectionIds;
4
+ private tableName;
5
+ constructor(connectionIds: string[], tableName: string);
6
+ find(filter: any): Promise<T[]>;
7
+ private transformResult;
8
+ findOne(filter: any): Promise<T | null>;
9
+ create(data: T): Promise<T>;
10
+ update(filter: any, data: Partial<T>): Promise<T | null>;
11
+ delete(filter: any): Promise<number>;
12
+ }
@@ -0,0 +1,146 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Model = void 0;
4
+ const connectionManager_1 = require("../adapters/database/connectionManager");
5
+ const pg_1 = require("pg");
6
+ const mongodb_1 = require("mongodb");
7
+ const sql_1 = require("../adapters/database/sql");
8
+ const nosql_1 = require("../adapters/database/nosql");
9
+ class Model {
10
+ constructor(connectionIds, tableName) {
11
+ this.connectionIds = connectionIds;
12
+ this.tableName = tableName;
13
+ }
14
+ async find(filter) {
15
+ const allResults = [];
16
+ const activeConnectionIds = this.connectionIds.filter(id => (0, connectionManager_1.getConnectedIds)().includes(id));
17
+ for (const connectionId of activeConnectionIds) {
18
+ const connection = (0, connectionManager_1.getConnection)(connectionId);
19
+ if (connection instanceof pg_1.Pool) {
20
+ const sqlResults = await sql_1.sqlAdapter.find(connection, this.tableName, filter);
21
+ for (const item of sqlResults) {
22
+ allResults.push(this.transformResult(item));
23
+ }
24
+ }
25
+ else if (connection instanceof mongodb_1.MongoClient) {
26
+ const nosqlResults = await nosql_1.nosqlAdapter.find(connection, this.tableName, filter);
27
+ for (const item of nosqlResults) {
28
+ allResults.push(this.transformResult(item));
29
+ }
30
+ }
31
+ }
32
+ return allResults;
33
+ }
34
+ transformResult(item) {
35
+ const transformedItem = { ...item };
36
+ if (transformedItem._id && !transformedItem.id) {
37
+ transformedItem.id = transformedItem._id.toString();
38
+ }
39
+ return transformedItem;
40
+ }
41
+ async findOne(filter) {
42
+ const activeConnectionIds = this.connectionIds.filter(id => (0, connectionManager_1.getConnectedIds)().includes(id));
43
+ for (const connectionId of activeConnectionIds) {
44
+ const connection = (0, connectionManager_1.getConnection)(connectionId);
45
+ let processedFilter = { ...filter };
46
+ if (connection instanceof pg_1.Pool) {
47
+ if (processedFilter._id) {
48
+ processedFilter.id = processedFilter._id;
49
+ delete processedFilter._id;
50
+ }
51
+ const result = await sql_1.sqlAdapter.findOne(connection, this.tableName, processedFilter);
52
+ if (result)
53
+ return result;
54
+ }
55
+ else if (connection instanceof mongodb_1.MongoClient) {
56
+ const result = await nosql_1.nosqlAdapter.findOne(connection, this.tableName, processedFilter);
57
+ if (result)
58
+ return result;
59
+ }
60
+ }
61
+ return null;
62
+ }
63
+ async create(data) {
64
+ const activeConnectionIds = this.connectionIds.filter(id => (0, connectionManager_1.getConnectedIds)().includes(id));
65
+ const connection = (0, connectionManager_1.getConnection)(activeConnectionIds[0]); // Use the first active connection for creation
66
+ if (connection instanceof pg_1.Pool) {
67
+ const created = await sql_1.sqlAdapter.create(connection, this.tableName, data);
68
+ return created;
69
+ }
70
+ else if (connection instanceof mongodb_1.MongoClient) {
71
+ const created = await nosql_1.nosqlAdapter.create(connection, this.tableName, data);
72
+ return created;
73
+ }
74
+ return data;
75
+ }
76
+ async update(filter, data) {
77
+ const activeConnectionIds = this.connectionIds.filter(id => (0, connectionManager_1.getConnectedIds)().includes(id));
78
+ for (const connectionId of activeConnectionIds) {
79
+ const connection = (0, connectionManager_1.getConnection)(connectionId);
80
+ let processedFilter = { ...filter };
81
+ // Handle specific member archiving/unarchiving
82
+ if (data["members.$.archived"] !== undefined && processedFilter["_id"] && processedFilter["members.userId"]) {
83
+ const projectId = processedFilter["_id"];
84
+ const userIdToUpdate = processedFilter["members.userId"];
85
+ const newArchivedStatus = data["members.$.archived"];
86
+ const archivedBy = data["members.$.archivedBy"];
87
+ const archivedAt = data["members.$.archivedAt"];
88
+ // Fetch the project to modify its members array
89
+ const projectToUpdate = await this.findOne({ _id: projectId });
90
+ if (!projectToUpdate || !projectToUpdate.members) {
91
+ continue; // Project not found or has no members, try next connection
92
+ }
93
+ const updatedMembers = projectToUpdate.members.map((member) => {
94
+ if (member.userId === userIdToUpdate) {
95
+ return { ...member, archived: newArchivedStatus, archivedBy: archivedBy, archivedAt: archivedAt };
96
+ }
97
+ return member;
98
+ });
99
+ // Update the project with the modified members array
100
+ const result = await (connection instanceof pg_1.Pool ? sql_1.sqlAdapter.update(connection, this.tableName, { id: projectId }, { members: updatedMembers }) : nosql_1.nosqlAdapter.update(connection, this.tableName, { _id: new mongodb_1.ObjectId(projectId) }, { members: updatedMembers }));
101
+ if (result)
102
+ return result;
103
+ }
104
+ else {
105
+ // General update logic
106
+ if (connection instanceof pg_1.Pool) {
107
+ if (processedFilter._id) {
108
+ processedFilter.id = processedFilter._id;
109
+ delete processedFilter._id;
110
+ }
111
+ const result = await sql_1.sqlAdapter.update(connection, this.tableName, processedFilter, data);
112
+ if (result)
113
+ return result;
114
+ }
115
+ else if (connection instanceof mongodb_1.MongoClient) {
116
+ const result = await nosql_1.nosqlAdapter.update(connection, this.tableName, processedFilter, data);
117
+ if (result)
118
+ return result;
119
+ }
120
+ }
121
+ }
122
+ return null;
123
+ }
124
+ async delete(filter) {
125
+ let deletedCount = 0;
126
+ const activeConnectionIds = this.connectionIds.filter(id => (0, connectionManager_1.getConnectedIds)().includes(id));
127
+ for (const connectionId of activeConnectionIds) {
128
+ const connection = (0, connectionManager_1.getConnection)(connectionId);
129
+ let processedFilter = { ...filter };
130
+ if (connection instanceof pg_1.Pool) {
131
+ if (processedFilter._id) {
132
+ processedFilter.id = processedFilter._id;
133
+ delete processedFilter._id;
134
+ }
135
+ const count = await sql_1.sqlAdapter.delete(connection, this.tableName, processedFilter);
136
+ deletedCount += count;
137
+ }
138
+ else if (connection instanceof mongodb_1.MongoClient) {
139
+ const count = await nosql_1.nosqlAdapter.delete(connection, this.tableName, processedFilter);
140
+ deletedCount += count;
141
+ }
142
+ }
143
+ return deletedCount;
144
+ }
145
+ }
146
+ exports.Model = Model;
@@ -0,0 +1,2 @@
1
+ export { registerModel } from './register';
2
+ export { getModel } from './registry';
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getModel = exports.registerModel = void 0;
4
+ var register_1 = require("./register");
5
+ Object.defineProperty(exports, "registerModel", { enumerable: true, get: function () { return register_1.registerModel; } });
6
+ var registry_1 = require("./registry");
7
+ Object.defineProperty(exports, "getModel", { enumerable: true, get: function () { return registry_1.getModel; } });
@@ -0,0 +1,2 @@
1
+ export { registerModel } from './registerModel';
2
+ export { getModel } from './modelRegistry';
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getModel = exports.registerModel = void 0;
4
+ var registerModel_1 = require("./registerModel");
5
+ Object.defineProperty(exports, "registerModel", { enumerable: true, get: function () { return registerModel_1.registerModel; } });
6
+ var modelRegistry_1 = require("./modelRegistry");
7
+ Object.defineProperty(exports, "getModel", { enumerable: true, get: function () { return modelRegistry_1.getModel; } });
@@ -0,0 +1,3 @@
1
+ import { Model } from './Model';
2
+ export declare const defineModel: (name: string, connectionId: string, tableName: string) => void;
3
+ export declare const getModel: (name: string) => Model<any>;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getModel = exports.defineModel = void 0;
4
+ const Model_1 = require("./Model");
5
+ const models = {};
6
+ const defineModel = (name, connectionId, tableName) => {
7
+ models[name] = new Model_1.Model(connectionId, tableName);
8
+ };
9
+ exports.defineModel = defineModel;
10
+ const getModel = (name) => {
11
+ const model = models[name];
12
+ if (!model) {
13
+ throw new Error(`Model ${name} not defined.`);
14
+ }
15
+ return model;
16
+ };
17
+ exports.getModel = getModel;
@@ -0,0 +1 @@
1
+ export declare const registerModel: (name: string, connectionIds: string[], tableName: string) => void;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerModel = void 0;
4
+ const registry_1 = require("./registry");
5
+ const registerModel = (name, connectionIds, tableName) => {
6
+ (0, registry_1.defineModel)(name, connectionIds, tableName);
7
+ };
8
+ exports.registerModel = registerModel;
@@ -0,0 +1 @@
1
+ export declare const registerModel: (name: string, connectionId: string, tableName: string) => void;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerModel = void 0;
4
+ const modelRegistry_1 = require("./modelRegistry");
5
+ const registerModel = (name, connectionId, tableName) => {
6
+ (0, modelRegistry_1.defineModel)(name, connectionId, tableName);
7
+ };
8
+ exports.registerModel = registerModel;
@@ -0,0 +1,3 @@
1
+ import { Model } from './Model';
2
+ export declare const defineModel: (name: string, connectionIds: string[], tableName: string) => void;
3
+ export declare const getModel: (name: string) => Model<any>;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getModel = exports.defineModel = void 0;
4
+ const Model_1 = require("./Model");
5
+ const models = {};
6
+ const defineModel = (name, connectionIds, tableName) => {
7
+ models[name] = new Model_1.Model(connectionIds, tableName);
8
+ };
9
+ exports.defineModel = defineModel;
10
+ const getModel = (name) => {
11
+ const model = models[name];
12
+ if (!model) {
13
+ throw new Error(`Model ${name} not defined.`);
14
+ }
15
+ return model;
16
+ };
17
+ exports.getModel = getModel;
@@ -1,2 +1,2 @@
1
1
  import { StorageAdapter, StorageProvider } from '../types';
2
- export declare function createStorageProvider(providers: StorageProvider[]): StorageAdapter;
2
+ export declare const createStorageProvider: (providers: StorageProvider[]) => StorageAdapter;
@@ -1,16 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createStorageProvider = createStorageProvider;
4
- const s3_1 = require("../adapters/s3");
5
- function createStorageProvider(providers) {
6
- if (!providers.length)
7
- throw new Error('No storage providers configured.');
8
- const selected = providers[0];
9
- switch (selected.type) {
10
- case 's3':
11
- return (0, s3_1.createS3Adapter)(selected.config);
12
- // futuro: case 'gcs': return createGCSAdapter(selected.config);
13
- default:
14
- throw new Error(`Unsupported storage type: ${selected.type}`);
3
+ exports.createStorageProvider = void 0;
4
+ const s3_1 = require("../adapters/storage/s3");
5
+ const createStorageProvider = (providers) => {
6
+ const s3Provider = providers.find(p => p.type === 's3');
7
+ if (s3Provider) {
8
+ return new s3_1.S3Adapter(s3Provider.config);
15
9
  }
16
- }
10
+ throw new Error('No storage provider configured.');
11
+ };
12
+ exports.createStorageProvider = createStorageProvider;