@aneuhold/be-ts-db-lib 2.0.84 → 3.0.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 (93) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/lib/repositories/BaseRepository.d.ts +12 -12
  3. package/lib/repositories/BaseRepository.d.ts.map +1 -1
  4. package/lib/repositories/BaseRepository.js +8 -6
  5. package/lib/repositories/BaseRepository.js.map +1 -1
  6. package/lib/repositories/BaseRepository.ts +16 -18
  7. package/lib/repositories/common/ApiKeyRepository.d.ts +1 -1
  8. package/lib/repositories/common/ApiKeyRepository.d.ts.map +1 -1
  9. package/lib/repositories/common/ApiKeyRepository.js +1 -1
  10. package/lib/repositories/common/ApiKeyRepository.js.map +1 -1
  11. package/lib/repositories/common/ApiKeyRepository.ts +1 -1
  12. package/lib/repositories/common/UserRepository.d.ts +4 -3
  13. package/lib/repositories/common/UserRepository.d.ts.map +1 -1
  14. package/lib/repositories/common/UserRepository.js +1 -0
  15. package/lib/repositories/common/UserRepository.js.map +1 -1
  16. package/lib/repositories/common/UserRepository.ts +4 -3
  17. package/lib/repositories/dashboard/DashboardBaseRepository.js +2 -0
  18. package/lib/repositories/dashboard/DashboardBaseRepository.js.map +1 -1
  19. package/lib/repositories/dashboard/DashboardNonogramKatanaItemRepository.d.ts +3 -3
  20. package/lib/repositories/dashboard/DashboardNonogramKatanaItemRepository.d.ts.map +1 -1
  21. package/lib/repositories/dashboard/DashboardNonogramKatanaItemRepository.js +1 -1
  22. package/lib/repositories/dashboard/DashboardNonogramKatanaItemRepository.js.map +1 -1
  23. package/lib/repositories/dashboard/DashboardNonogramKatanaItemRepository.ts +3 -3
  24. package/lib/repositories/dashboard/DashboardNonogramKatanaUpgradeRepository.d.ts +3 -3
  25. package/lib/repositories/dashboard/DashboardNonogramKatanaUpgradeRepository.d.ts.map +1 -1
  26. package/lib/repositories/dashboard/DashboardNonogramKatanaUpgradeRepository.js +1 -1
  27. package/lib/repositories/dashboard/DashboardNonogramKatanaUpgradeRepository.js.map +1 -1
  28. package/lib/repositories/dashboard/DashboardNonogramKatanaUpgradeRepository.ts +3 -3
  29. package/lib/repositories/dashboard/DashboardTaskRepository.d.ts +6 -6
  30. package/lib/repositories/dashboard/DashboardTaskRepository.d.ts.map +1 -1
  31. package/lib/repositories/dashboard/DashboardTaskRepository.js +1 -1
  32. package/lib/repositories/dashboard/DashboardTaskRepository.js.map +1 -1
  33. package/lib/repositories/dashboard/DashboardTaskRepository.ts +7 -7
  34. package/lib/repositories/dashboard/DashboardUserConfigRepository.d.ts +4 -4
  35. package/lib/repositories/dashboard/DashboardUserConfigRepository.d.ts.map +1 -1
  36. package/lib/repositories/dashboard/DashboardUserConfigRepository.js +2 -2
  37. package/lib/repositories/dashboard/DashboardUserConfigRepository.js.map +1 -1
  38. package/lib/repositories/dashboard/DashboardUserConfigRepository.ts +6 -6
  39. package/lib/services/DemoAccountsService/DashboardDemoAccountsService.d.ts +2 -2
  40. package/lib/services/DemoAccountsService/DashboardDemoAccountsService.d.ts.map +1 -1
  41. package/lib/services/DemoAccountsService/DashboardDemoAccountsService.js +2 -2
  42. package/lib/services/DemoAccountsService/DashboardDemoAccountsService.js.map +1 -1
  43. package/lib/services/DemoAccountsService/DashboardDemoAccountsService.ts +13 -13
  44. package/lib/services/DemoAccountsService/DemoAccountsService.d.ts +2 -2
  45. package/lib/services/DemoAccountsService/DemoAccountsService.d.ts.map +1 -1
  46. package/lib/services/DemoAccountsService/DemoAccountsService.js.map +1 -1
  47. package/lib/services/DemoAccountsService/DemoAccountsService.ts +2 -5
  48. package/lib/services/MigrationService.d.ts.map +1 -1
  49. package/lib/services/MigrationService.js +151 -19
  50. package/lib/services/MigrationService.js.map +1 -1
  51. package/lib/services/MigrationService.ts +178 -21
  52. package/lib/services/RepoSubscriptionService.d.ts +3 -3
  53. package/lib/services/RepoSubscriptionService.d.ts.map +1 -1
  54. package/lib/services/RepoSubscriptionService.js +1 -0
  55. package/lib/services/RepoSubscriptionService.js.map +1 -1
  56. package/lib/services/RepoSubscriptionService.ts +3 -3
  57. package/lib/tests/testsUtil.js +2 -0
  58. package/lib/tests/testsUtil.js.map +1 -1
  59. package/lib/util/DocumentCleaner.js +1 -0
  60. package/lib/util/DocumentCleaner.js.map +1 -1
  61. package/lib/util/DocumentDb.d.ts +1 -1
  62. package/lib/util/DocumentDb.d.ts.map +1 -1
  63. package/lib/util/DocumentDb.js +1 -1
  64. package/lib/util/DocumentDb.js.map +1 -1
  65. package/lib/util/DocumentDb.ts +1 -1
  66. package/lib/validators/BaseValidator.d.ts +4 -3
  67. package/lib/validators/BaseValidator.d.ts.map +1 -1
  68. package/lib/validators/BaseValidator.js +2 -1
  69. package/lib/validators/BaseValidator.js.map +1 -1
  70. package/lib/validators/BaseValidator.ts +6 -5
  71. package/lib/validators/common/ApiKeyValidator.d.ts.map +1 -1
  72. package/lib/validators/common/ApiKeyValidator.js +7 -7
  73. package/lib/validators/common/ApiKeyValidator.js.map +1 -1
  74. package/lib/validators/common/ApiKeyValidator.ts +8 -15
  75. package/lib/validators/common/UserValidator.d.ts +1 -1
  76. package/lib/validators/common/UserValidator.d.ts.map +1 -1
  77. package/lib/validators/common/UserValidator.js +3 -3
  78. package/lib/validators/common/UserValidator.js.map +1 -1
  79. package/lib/validators/common/UserValidator.ts +5 -7
  80. package/lib/validators/dashboard/NonogramKatanaItemValidator.js +5 -5
  81. package/lib/validators/dashboard/NonogramKatanaItemValidator.js.map +1 -1
  82. package/lib/validators/dashboard/NonogramKatanaItemValidator.ts +6 -6
  83. package/lib/validators/dashboard/NonogramKatanaUpgradeValidator.js +5 -5
  84. package/lib/validators/dashboard/NonogramKatanaUpgradeValidator.js.map +1 -1
  85. package/lib/validators/dashboard/NonogramKatanaUpgradeValidator.ts +6 -6
  86. package/lib/validators/dashboard/TaskValidator.js +9 -9
  87. package/lib/validators/dashboard/TaskValidator.js.map +1 -1
  88. package/lib/validators/dashboard/TaskValidator.ts +10 -10
  89. package/lib/validators/dashboard/UserConfigValidator.d.ts.map +1 -1
  90. package/lib/validators/dashboard/UserConfigValidator.js +10 -10
  91. package/lib/validators/dashboard/UserConfigValidator.js.map +1 -1
  92. package/lib/validators/dashboard/UserConfigValidator.ts +11 -16
  93. package/package.json +10 -7
@@ -1,7 +1,11 @@
1
1
  /* eslint-disable */
2
2
  // @ts-nocheck
3
3
  import { DR } from '@aneuhold/core-ts-lib';
4
+ import { ObjectId } from 'bson';
5
+ import { v7 as uuidv7 } from 'uuid';
4
6
  import UserRepository from '../repositories/common/UserRepository.js';
7
+ import DashboardTaskRepository from '../repositories/dashboard/DashboardTaskRepository.js';
8
+ import DashboardUserConfigRepository from '../repositories/dashboard/DashboardUserConfigRepository.js';
5
9
 
6
10
  /**
7
11
  * A service for migrating the DB to a new state after an existing document
@@ -21,32 +25,185 @@ export default class MigrationService {
21
25
  * @param dryRun Whether or not to actually make the changes or just log them.
22
26
  */
23
27
  static async migrateDb(dryRun = false): Promise<void> {
28
+ return;
29
+ DR.logger.info('Starting migration from ObjectId to UUID v7...');
30
+
31
+ // 1. Load all documents
24
32
  const userRepo = UserRepository.getRepo();
25
- const allUsers = (await userRepo.getAll()) as any;
26
- const updatedUsers = [];
27
- allUsers.forEach((user) => {
28
- if (user.password) {
29
- DR.logger.error(
30
- `User with ID: ${user._id} has a password in the wrong spot.`
31
- );
32
- user.auth.password = user.password;
33
- delete user.password;
34
- updatedUsers.push(user);
33
+ const taskRepo = DashboardTaskRepository.getRepo();
34
+ const configRepo = DashboardUserConfigRepository.getRepo();
35
+
36
+ const users = await userRepo.getAll();
37
+ const tasks = await taskRepo.getAll();
38
+ const configs = await configRepo.getAll();
39
+
40
+ DR.logger.info(`Loaded ${users.length} users, ${tasks.length} tasks, ${configs.length} configs.`);
41
+
42
+ // 2. Create ID Map (Old ObjectId string -> New UUID)
43
+ const idMap = new Map<string, string>();
44
+ let newIdCount = 0;
45
+
46
+ const addToMap = (docs: any[]) => {
47
+ docs.forEach((doc) => {
48
+ if (doc._id instanceof ObjectId) {
49
+ idMap.set(doc._id.toHexString(), uuidv7());
50
+ newIdCount++;
51
+ } else if (typeof doc._id === 'string' && !idMap.has(doc._id)) {
52
+ // Already a string? Maybe already migrated or just a string ID.
53
+ // If it looks like an ObjectId, map it.
54
+ if (ObjectId.isValid(doc._id) && doc._id.length === 24) {
55
+ idMap.set(doc._id, uuidv7());
56
+ newIdCount++;
57
+ }
58
+ }
59
+ });
60
+ };
61
+
62
+ addToMap(users);
63
+ addToMap(tasks);
64
+ addToMap(configs);
65
+
66
+ DR.logger.info(`Generated ${newIdCount} new UUIDs.`);
67
+
68
+ // 3. Helper to get new ID
69
+ const getNewId = (oldId: any): string | undefined => {
70
+ if (!oldId) return undefined;
71
+ const oldIdStr = oldId.toString();
72
+ return idMap.get(oldIdStr) || (typeof oldId === 'string' ? oldId : undefined);
73
+ };
74
+
75
+ // 4. Prepare New Documents
76
+ const newUsers: any[] = [];
77
+ const oldUserIds: ObjectId[] = [];
78
+
79
+ const newTasks: any[] = [];
80
+ const oldTaskIds: ObjectId[] = [];
81
+
82
+ const newConfigs: any[] = [];
83
+ const oldConfigIds: ObjectId[] = [];
84
+
85
+ // --- Process Users ---
86
+ for (const user of users) {
87
+ if (user._id instanceof ObjectId) {
88
+ const newId = getNewId(user._id);
89
+ if (!newId) continue;
90
+
91
+ const newUser = { ...user, _id: newId };
92
+ // Users don't have many internal refs usually, but check if needed
93
+ newUsers.push(newUser);
94
+ oldUserIds.push(user._id);
35
95
  }
36
- });
37
- if (dryRun) {
38
- if (updatedUsers.length > 0) {
39
- DR.logger.info(`Would update ${updatedUsers.length} users.`);
40
- } else {
41
- DR.logger.success('No changes to make.');
96
+ }
97
+
98
+ // --- Process Tasks ---
99
+ for (const task of tasks) {
100
+ if (task._id instanceof ObjectId) {
101
+ const newId = getNewId(task._id);
102
+ if (!newId) continue;
103
+
104
+ const newTask = { ...task, _id: newId };
105
+
106
+ // Fix userId
107
+ if (newTask.userId) newTask.userId = getNewId(newTask.userId) || newTask.userId;
108
+
109
+ // Fix assignedTo
110
+ if (newTask.assignedTo) newTask.assignedTo = getNewId(newTask.assignedTo) || newTask.assignedTo;
111
+
112
+ // Fix parentTaskId
113
+ if (newTask.parentTaskId) newTask.parentTaskId = getNewId(newTask.parentTaskId) || newTask.parentTaskId;
114
+
115
+ // Fix sharedWith array
116
+ if (Array.isArray(newTask.sharedWith)) {
117
+ newTask.sharedWith = newTask.sharedWith.map((id: any) => getNewId(id) || id);
118
+ }
119
+
120
+ // Fix tags keys (userIds are keys)
121
+ if (newTask.tags) {
122
+ const newTags: any = {};
123
+ for (const [key, val] of Object.entries(newTask.tags)) {
124
+ const newKey = getNewId(key) || key;
125
+ newTags[newKey] = val;
126
+ }
127
+ newTask.tags = newTags;
128
+ }
129
+
130
+ // Fix filterSettings keys (userIds are keys)
131
+ if (newTask.filterSettings) {
132
+ const newSettings: any = {};
133
+ for (const [key, val] of Object.entries(newTask.filterSettings)) {
134
+ const newKey = getNewId(key) || key;
135
+ newSettings[newKey] = val;
136
+ }
137
+ newTask.filterSettings = newSettings;
138
+ }
139
+
140
+ // Fix sortSettings keys (userIds are keys)
141
+ if (newTask.sortSettings) {
142
+ const newSettings: any = {};
143
+ for (const [key, val] of Object.entries(newTask.sortSettings)) {
144
+ const newKey = getNewId(key) || key;
145
+ newSettings[newKey] = val;
146
+ }
147
+ newTask.sortSettings = newSettings;
148
+ }
149
+
150
+ newTasks.push(newTask);
151
+ oldTaskIds.push(task._id);
152
+ }
153
+ }
154
+
155
+ // --- Process UserConfigs ---
156
+ for (const config of configs) {
157
+ if (config._id instanceof ObjectId) {
158
+ const newId = getNewId(config._id);
159
+ if (!newId) continue;
160
+
161
+ const newConfig = { ...config, _id: newId };
162
+
163
+ // Fix userId
164
+ if (newConfig.userId) newConfig.userId = getNewId(newConfig.userId) || newConfig.userId;
165
+
166
+ // Fix collaborators
167
+ if (Array.isArray(newConfig.collaborators)) {
168
+ newConfig.collaborators = newConfig.collaborators.map((id: any) => getNewId(id) || id);
169
+ }
170
+
171
+ newConfigs.push(newConfig);
172
+ oldConfigIds.push(config._id);
42
173
  }
174
+ }
175
+
176
+ // 5. Execute
177
+ if (dryRun) {
178
+ DR.logger.info(`[DRY RUN] Would insert ${newUsers.length} users and delete ${oldUserIds.length} old ones.`);
179
+ DR.logger.info(`[DRY RUN] Would insert ${newTasks.length} tasks and delete ${oldTaskIds.length} old ones.`);
180
+ DR.logger.info(`[DRY RUN] Would insert ${newConfigs.length} configs and delete ${oldConfigIds.length} old ones.`);
43
181
  return;
44
182
  }
45
- if (updatedUsers.length > 0) {
46
- DR.logger.info(`Updating ${updatedUsers.length} users.`);
47
- await userRepo.updateMany(updatedUsers);
48
- } else {
49
- DR.logger.success('No changes to make.');
183
+
184
+ DR.logger.info('Executing migration...');
185
+
186
+ // Users
187
+ if (newUsers.length > 0) {
188
+ await userRepo.insertMany(newUsers);
189
+ await userRepo.deleteList(oldUserIds);
190
+ DR.logger.success(`Migrated ${newUsers.length} users.`);
191
+ }
192
+
193
+ // Tasks
194
+ if (newTasks.length > 0) {
195
+ await taskRepo.insertMany(newTasks);
196
+ await taskRepo.deleteList(oldTaskIds);
197
+ DR.logger.success(`Migrated ${newTasks.length} tasks.`);
50
198
  }
199
+
200
+ // Configs
201
+ if (newConfigs.length > 0) {
202
+ await configRepo.insertMany(newConfigs);
203
+ await configRepo.deleteList(oldConfigIds);
204
+ DR.logger.success(`Migrated ${newConfigs.length} configs.`);
205
+ }
206
+
207
+ DR.logger.success('Migration complete!');
51
208
  }
52
209
  }
@@ -1,5 +1,5 @@
1
1
  import { BaseDocument } from '@aneuhold/core-ts-db-lib';
2
- import { ObjectId } from 'bson';
2
+ import type { UUID } from 'crypto';
3
3
  export type RepoSubscribers<TDocType extends BaseDocument> = {
4
4
  insertNew: InsertNewSubscriber<TDocType>[];
5
5
  insertMany: InsertManySubscriber<TDocType>[];
@@ -20,8 +20,8 @@ export type InsertNewSubscriber<TDocType extends BaseDocument> = (doc: TDocType)
20
20
  export type InsertManySubscriber<TDocType extends BaseDocument> = (docs: TDocType[]) => Promise<void>;
21
21
  export type UpdateOneSubscriber<TDocType extends BaseDocument> = (doc: Partial<TDocType>) => Promise<void>;
22
22
  export type UpdateManySubscriber<TDocType extends BaseDocument> = (docs: Partial<TDocType>[]) => Promise<void>;
23
- export type DeleteOneSubscriber = (docId: ObjectId) => Promise<void>;
24
- export type DeleteListSubscriber = (docIds: ObjectId[]) => Promise<void>;
23
+ export type DeleteOneSubscriber = (docId: UUID) => Promise<void>;
24
+ export type DeleteListSubscriber = (docIds: UUID[]) => Promise<void>;
25
25
  /**
26
26
  * A subscription service that allows repositories to subscribe to events
27
27
  * that happen in other repositories.
@@ -1 +1 @@
1
- {"version":3,"file":"RepoSubscriptionService.d.ts","sourceRoot":"","sources":["../../src/services/RepoSubscriptionService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAEhC,MAAM,MAAM,eAAe,CAAC,QAAQ,SAAS,YAAY,IAAI;IAC3D,SAAS,EAAE,mBAAmB,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC3C,UAAU,EAAE,oBAAoB,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC7C,SAAS,EAAE,mBAAmB,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC3C,UAAU,EAAE,oBAAoB,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC7C,SAAS,EAAE,mBAAmB,EAAE,CAAC;IACjC,UAAU,EAAE,oBAAoB,EAAE,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,aAAa,CAAC,QAAQ,SAAS,YAAY,IAAI;IACzD,SAAS,CAAC,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAC1C,UAAU,CAAC,EAAE,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAC5C,SAAS,CAAC,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAC1C,UAAU,CAAC,EAAE,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAC5C,SAAS,CAAC,EAAE,mBAAmB,CAAC;IAChC,UAAU,CAAC,EAAE,oBAAoB,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,mBAAmB,CAAC,QAAQ,SAAS,YAAY,IAAI,CAAC,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAElG,MAAM,MAAM,oBAAoB,CAAC,QAAQ,SAAS,YAAY,IAAI,CAChE,IAAI,EAAE,QAAQ,EAAE,KACb,OAAO,CAAC,IAAI,CAAC,CAAC;AAEnB,MAAM,MAAM,mBAAmB,CAAC,QAAQ,SAAS,YAAY,IAAI,CAC/D,GAAG,EAAE,OAAO,CAAC,QAAQ,CAAC,KACnB,OAAO,CAAC,IAAI,CAAC,CAAC;AAEnB,MAAM,MAAM,oBAAoB,CAAC,QAAQ,SAAS,YAAY,IAAI,CAChE,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,KACtB,OAAO,CAAC,IAAI,CAAC,CAAC;AAEnB,MAAM,MAAM,mBAAmB,GAAG,CAAC,KAAK,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAErE,MAAM,MAAM,oBAAoB,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAEzE;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,uBAAuB;IAC1C;;;OAGG;IACH,MAAM,CAAC,qBAAqB,CAAC,QAAQ,SAAS,YAAY,KAAK,eAAe,CAAC,QAAQ,CAAC;CAUzF"}
1
+ {"version":3,"file":"RepoSubscriptionService.d.ts","sourceRoot":"","sources":["../../src/services/RepoSubscriptionService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAEnC,MAAM,MAAM,eAAe,CAAC,QAAQ,SAAS,YAAY,IAAI;IAC3D,SAAS,EAAE,mBAAmB,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC3C,UAAU,EAAE,oBAAoB,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC7C,SAAS,EAAE,mBAAmB,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC3C,UAAU,EAAE,oBAAoB,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC7C,SAAS,EAAE,mBAAmB,EAAE,CAAC;IACjC,UAAU,EAAE,oBAAoB,EAAE,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,aAAa,CAAC,QAAQ,SAAS,YAAY,IAAI;IACzD,SAAS,CAAC,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAC1C,UAAU,CAAC,EAAE,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAC5C,SAAS,CAAC,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAC1C,UAAU,CAAC,EAAE,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAC5C,SAAS,CAAC,EAAE,mBAAmB,CAAC;IAChC,UAAU,CAAC,EAAE,oBAAoB,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,mBAAmB,CAAC,QAAQ,SAAS,YAAY,IAAI,CAAC,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAElG,MAAM,MAAM,oBAAoB,CAAC,QAAQ,SAAS,YAAY,IAAI,CAChE,IAAI,EAAE,QAAQ,EAAE,KACb,OAAO,CAAC,IAAI,CAAC,CAAC;AAEnB,MAAM,MAAM,mBAAmB,CAAC,QAAQ,SAAS,YAAY,IAAI,CAC/D,GAAG,EAAE,OAAO,CAAC,QAAQ,CAAC,KACnB,OAAO,CAAC,IAAI,CAAC,CAAC;AAEnB,MAAM,MAAM,oBAAoB,CAAC,QAAQ,SAAS,YAAY,IAAI,CAChE,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,KACtB,OAAO,CAAC,IAAI,CAAC,CAAC;AAEnB,MAAM,MAAM,mBAAmB,GAAG,CAAC,KAAK,EAAE,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAEjE,MAAM,MAAM,oBAAoB,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAErE;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,uBAAuB;IAC1C;;;OAGG;IACH,MAAM,CAAC,qBAAqB,CAAC,QAAQ,SAAS,YAAY,KAAK,eAAe,CAAC,QAAQ,CAAC;CAUzF"}
@@ -1,3 +1,4 @@
1
+ import { BaseDocument } from '@aneuhold/core-ts-db-lib';
1
2
  /**
2
3
  * A subscription service that allows repositories to subscribe to events
3
4
  * that happen in other repositories.
@@ -1 +1 @@
1
- {"version":3,"file":"RepoSubscriptionService.js","sourceRoot":"","sources":["../../src/services/RepoSubscriptionService.ts"],"names":[],"mappings":"AAuCA;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,uBAAuB;IAC1C;;;OAGG;IACH,MAAM,CAAC,qBAAqB;QAC1B,OAAO;YACL,SAAS,EAAE,EAAE;YACb,UAAU,EAAE,EAAE;YACd,SAAS,EAAE,EAAE;YACb,UAAU,EAAE,EAAE;YACd,SAAS,EAAE,EAAE;YACb,UAAU,EAAE,EAAE;SACf,CAAC;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"RepoSubscriptionService.js","sourceRoot":"","sources":["../../src/services/RepoSubscriptionService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAuCxD;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,uBAAuB;IAC1C;;;OAGG;IACH,MAAM,CAAC,qBAAqB;QAC1B,OAAO;YACL,SAAS,EAAE,EAAE;YACb,UAAU,EAAE,EAAE;YACd,SAAS,EAAE,EAAE;YACb,UAAU,EAAE,EAAE;YACd,SAAS,EAAE,EAAE;YACb,UAAU,EAAE,EAAE;SACf,CAAC;IACJ,CAAC;CACF"}
@@ -1,5 +1,5 @@
1
1
  import { BaseDocument } from '@aneuhold/core-ts-db-lib';
2
- import { ObjectId } from 'bson';
2
+ import type { UUID } from 'crypto';
3
3
 
4
4
  export type RepoSubscribers<TDocType extends BaseDocument> = {
5
5
  insertNew: InsertNewSubscriber<TDocType>[];
@@ -33,9 +33,9 @@ export type UpdateManySubscriber<TDocType extends BaseDocument> = (
33
33
  docs: Partial<TDocType>[]
34
34
  ) => Promise<void>;
35
35
 
36
- export type DeleteOneSubscriber = (docId: ObjectId) => Promise<void>;
36
+ export type DeleteOneSubscriber = (docId: UUID) => Promise<void>;
37
37
 
38
- export type DeleteListSubscriber = (docIds: ObjectId[]) => Promise<void>;
38
+ export type DeleteListSubscriber = (docIds: UUID[]) => Promise<void>;
39
39
 
40
40
  /**
41
41
  * A subscription service that allows repositories to subscribe to events
@@ -1,5 +1,7 @@
1
+ import { BaseDocument } from '@aneuhold/core-ts-db-lib';
1
2
  import crypto from 'crypto';
2
3
  import { expect } from 'vitest';
4
+ import BaseRepository from '../repositories/BaseRepository.js';
3
5
  import { TEST_USER_NAME_PREFIX } from './globalTestVariables.js';
4
6
  /**
5
7
  * Asserts that the provided asynchronous function throws an error.
@@ -1 +1 @@
1
- {"version":3,"file":"testsUtil.js","sourceRoot":"","sources":["../../src/tests/testsUtil.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEjE;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAyB;IAC3D,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,IAAI,CAAC;QACH,MAAM,IAAI,EAAE,CAAC;IACf,CAAC;IAAC,MAAM,CAAC;QACP,UAAU,GAAG,IAAI,CAAC;IACpB,CAAC;IACD,MAAM,CAAC,UAAU,CAAC,CAAC,UAAU,EAAE,CAAC;AAClC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,QAAiB;IAC/C,IAAI,CAAC,QAAQ;QAAE,OAAO,GAAG,qBAAqB,IAAI,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC;IACxE,OAAO,GAAG,qBAAqB,IAAI,QAAQ,EAAE,CAAC;AAChD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,IAA8B,EAC9B,GAAa;IAEb,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChD,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,UAAU,EAAE,CAAC;IAC/C,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAuB,CAAC,CAAC;IACzE,MAAM,CAAC,UAAU,CAAC,CAAC,QAAQ,EAAE,CAAC;AAChC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,IAA8B,EAC9B,IAAgB;IAEhB,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC/C,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IACxD,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,UAAU,EAAE,CAAC;IAC/C,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACnD,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpC,CAAC"}
1
+ {"version":3,"file":"testsUtil.js","sourceRoot":"","sources":["../../src/tests/testsUtil.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,cAAc,MAAM,mCAAmC,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEjE;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAyB;IAC3D,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,IAAI,CAAC;QACH,MAAM,IAAI,EAAE,CAAC;IACf,CAAC;IAAC,MAAM,CAAC;QACP,UAAU,GAAG,IAAI,CAAC;IACpB,CAAC;IACD,MAAM,CAAC,UAAU,CAAC,CAAC,UAAU,EAAE,CAAC;AAClC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,QAAiB;IAC/C,IAAI,CAAC,QAAQ;QAAE,OAAO,GAAG,qBAAqB,IAAI,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC;IACxE,OAAO,GAAG,qBAAqB,IAAI,QAAQ,EAAE,CAAC;AAChD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,IAA8B,EAC9B,GAAa;IAEb,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChD,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,UAAU,EAAE,CAAC;IAC/C,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAuB,CAAC,CAAC;IACzE,MAAM,CAAC,UAAU,CAAC,CAAC,QAAQ,EAAE,CAAC;AAChC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,IAA8B,EAC9B,IAAgB;IAEhB,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC/C,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IACxD,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,UAAU,EAAE,CAAC;IAC/C,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACnD,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpC,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { BaseDocument, BaseDocumentWithType, RequiredUserId } from '@aneuhold/core-ts-db-lib';
1
2
  /**
2
3
  * A class which contains some standard methods for cleaning update documents
3
4
  * before they are sent to the database.
@@ -1 +1 @@
1
- {"version":3,"file":"DocumentCleaner.js","sourceRoot":"","sources":["../../src/util/DocumentCleaner.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,aAAa;IAChC,MAAM,CAAC,EAAE,CAAgC,SAA4B;QACnE,MAAM,OAAO,GAAG,EAAE,GAAG,SAAS,EAAE,CAAC;QACjC,OAAO,OAAO,CAAC,GAAG,CAAC;QACnB,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,MAAM,CAAC,MAAM,CAAkC,SAA4B;QACzE,MAAM,OAAO,GAAG,EAAE,GAAG,SAAS,EAAE,CAAC;QACjC,OAAO,OAAO,CAAC,MAAM,CAAC;QACtB,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,MAAM,CAAC,OAAO,CAAwC,SAA4B;QAChF,MAAM,OAAO,GAAG,EAAE,GAAG,SAAS,EAAE,CAAC;QACjC,OAAO,OAAO,CAAC,OAAO,CAAC;QACvB,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}
1
+ {"version":3,"file":"DocumentCleaner.js","sourceRoot":"","sources":["../../src/util/DocumentCleaner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE9F;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,aAAa;IAChC,MAAM,CAAC,EAAE,CAAgC,SAA4B;QACnE,MAAM,OAAO,GAAG,EAAE,GAAG,SAAS,EAAE,CAAC;QACjC,OAAO,OAAO,CAAC,GAAG,CAAC;QACnB,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,MAAM,CAAC,MAAM,CAAkC,SAA4B;QACzE,MAAM,OAAO,GAAG,EAAE,GAAG,SAAS,EAAE,CAAC;QACjC,OAAO,OAAO,CAAC,MAAM,CAAC;QACtB,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,MAAM,CAAC,OAAO,CAAwC,SAA4B;QAChF,MAAM,OAAO,GAAG,EAAE,GAAG,SAAS,EAAE,CAAC;QACjC,OAAO,OAAO,CAAC,OAAO,CAAC;QACvB,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}
@@ -1,4 +1,4 @@
1
- import { Document } from 'bson';
1
+ import type { Document } from 'bson';
2
2
  import { Collection } from 'mongodb';
3
3
  /**
4
4
  * A utility class for interacting with a MongoDB database.
@@ -1 +1 @@
1
- {"version":3,"file":"DocumentDb.d.ts","sourceRoot":"","sources":["../../src/util/DocumentDb.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAChC,OAAO,EAAE,UAAU,EAAmB,MAAM,SAAS,CAAC;AAEtD;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,UAAU;IAC7B,OAAO,CAAC,MAAM,CAAC,OAAO,CAAa;IAEnC,OAAO,CAAC,MAAM,CAAC,WAAW,CAA0B;IAEpD,OAAO,CAAC,MAAM,CAAC,EAAE,CAAiB;IAElC;;;;OAIG;mBACkB,SAAS;IAiB9B;;;;;OAKG;WACU,aAAa,CAAC,QAAQ,SAAS,QAAQ,EAClD,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAQhC;;;;OAIG;WACU,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;CAKhD"}
1
+ {"version":3,"file":"DocumentDb.d.ts","sourceRoot":"","sources":["../../src/util/DocumentDb.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,UAAU,EAAmB,MAAM,SAAS,CAAC;AAEtD;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,UAAU;IAC7B,OAAO,CAAC,MAAM,CAAC,OAAO,CAAa;IAEnC,OAAO,CAAC,MAAM,CAAC,WAAW,CAA0B;IAEpD,OAAO,CAAC,MAAM,CAAC,EAAE,CAAiB;IAElC;;;;OAIG;mBACkB,SAAS;IAiB9B;;;;;OAKG;WACU,aAAa,CAAC,QAAQ,SAAS,QAAQ,EAClD,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAQhC;;;;OAIG;WACU,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;CAKhD"}
@@ -1,5 +1,5 @@
1
1
  import { ConfigService } from '@aneuhold/be-ts-lib';
2
- import { MongoClient } from 'mongodb';
2
+ import { Collection, Db, MongoClient } from 'mongodb';
3
3
  /**
4
4
  * A utility class for interacting with a MongoDB database.
5
5
  */
@@ -1 +1 @@
1
- {"version":3,"file":"DocumentDb.js","sourceRoot":"","sources":["../../src/util/DocumentDb.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAAkB,WAAW,EAAE,MAAM,SAAS,CAAC;AAEtD;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,UAAU;IACrB,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC;IAE3B,MAAM,CAAC,WAAW,CAA0B;IAE5C,MAAM,CAAC,EAAE,CAAiB;IAElC;;;;OAIG;IACK,MAAM,CAAC,KAAK,CAAC,SAAS;QAC5B,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC;YACjC,sDAAsD;YACtD,MAAM,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACzC,CAAC;QACD,MAAM,EAAE,MAAM,EAAE,GAAG,aAAa,CAAC;QACjC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,MAAM,uBAAuB,GAAG,iBAAiB,MAAM,CAAC,iBAAiB,IAAI,MAAM,CAAC,iBAAiB,IAAI,MAAM,CAAC,QAAQ,+BAA+B,CAAC;YACxJ,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,uBAAuB,CAAC,CAAC;QAC9D,CAAC;QACD,uEAAuE;QACvE,mEAAmE;QACnE,aAAa;QACb,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,KAAK,CAAC,aAAa,CACxB,cAAsB;QAEtB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACtC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC;YACnB,UAAU,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAChD,CAAC;QACD,OAAO,UAAU,CAAC,EAAE,CAAC,UAAU,CAAW,cAAc,CAAC,CAAC;IAC5D,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,KAAK,CAAC,iBAAiB;QAC5B,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC;YAC3B,MAAM,UAAU,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QACvC,CAAC;IACH,CAAC"}
1
+ {"version":3,"file":"DocumentDb.js","sourceRoot":"","sources":["../../src/util/DocumentDb.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEtD;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,UAAU;IACrB,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC;IAE3B,MAAM,CAAC,WAAW,CAA0B;IAE5C,MAAM,CAAC,EAAE,CAAiB;IAElC;;;;OAIG;IACK,MAAM,CAAC,KAAK,CAAC,SAAS;QAC5B,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC;YACjC,sDAAsD;YACtD,MAAM,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACzC,CAAC;QACD,MAAM,EAAE,MAAM,EAAE,GAAG,aAAa,CAAC;QACjC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,MAAM,uBAAuB,GAAG,iBAAiB,MAAM,CAAC,iBAAiB,IAAI,MAAM,CAAC,iBAAiB,IAAI,MAAM,CAAC,QAAQ,+BAA+B,CAAC;YACxJ,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,uBAAuB,CAAC,CAAC;QAC9D,CAAC;QACD,uEAAuE;QACvE,mEAAmE;QACnE,aAAa;QACb,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,KAAK,CAAC,aAAa,CACxB,cAAsB;QAEtB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACtC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC;YACnB,UAAU,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAChD,CAAC;QACD,OAAO,UAAU,CAAC,EAAE,CAAC,UAAU,CAAW,cAAc,CAAC,CAAC;IAC5D,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,KAAK,CAAC,iBAAiB;QAC5B,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC;YAC3B,MAAM,UAAU,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QACvC,CAAC;IACH,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { ConfigService } from '@aneuhold/be-ts-lib';
2
- import { Document } from 'bson';
2
+ import type { Document } from 'bson';
3
3
  import { Collection, Db, MongoClient } from 'mongodb';
4
4
 
5
5
  /**
@@ -1,5 +1,6 @@
1
- import { BaseDocument, DocumentValidator } from '@aneuhold/core-ts-db-lib';
2
- import { ObjectId } from 'bson';
1
+ import type { DocumentValidator } from '@aneuhold/core-ts-db-lib';
2
+ import { BaseDocument } from '@aneuhold/core-ts-db-lib';
3
+ import type { UUID } from 'crypto';
3
4
  export declare enum ObjectSchemaState {
4
5
  Valid = 0,
5
6
  InvalidAndCorrectable = 1,
@@ -51,7 +52,7 @@ export default abstract class IValidator<TBaseType extends BaseDocument> {
51
52
  allDocs: Array<TBaseType>;
52
53
  shouldDelete: (doc: TBaseType) => boolean;
53
54
  documentValidator: DocumentValidator<TBaseType>;
54
- deletionFunction: (docIdsToDelete: ObjectId[]) => Promise<void>;
55
+ deletionFunction: (docIdsToDelete: UUID[]) => Promise<void>;
55
56
  updateFunction: (docsToUpdate: TBaseType[]) => Promise<void>;
56
57
  }): Promise<void>;
57
58
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"BaseValidator.d.ts","sourceRoot":"","sources":["../../src/validators/BaseValidator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE3E,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAEhC,oBAAY,iBAAiB;IAC3B,KAAK,IAAA;IACL,qBAAqB,IAAA;IACrB,uBAAuB,IAAA;CACxB;AAED,MAAM,CAAC,OAAO,CAAC,QAAQ,OAAO,UAAU,CAAC,SAAS,SAAS,YAAY;IACrE;;;OAGG;IACH,QAAQ,CAAC,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAE5D;;;;OAIG;IACH,QAAQ,CAAC,oBAAoB,CAAC,aAAa,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAE/E;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,sBAAsB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAE/D;;;;;;;;;;;;;;OAcG;cACa,kCAAkC,CAAC,KAAK,EAAE;QACxD,MAAM,EAAE,OAAO,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QAC1B,YAAY,EAAE,CAAC,GAAG,EAAE,SAAS,KAAK,OAAO,CAAC;QAC1C,iBAAiB,EAAE,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAChD,gBAAgB,EAAE,CAAC,cAAc,EAAE,QAAQ,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;QAChE,cAAc,EAAE,CAAC,YAAY,EAAE,SAAS,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;KAC9D;IAgED;;;;;OAKG;IACH,SAAS,CAAC,0BAA0B,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,OAAO;CAG9F"}
1
+ {"version":3,"file":"BaseValidator.d.ts","sourceRoot":"","sources":["../../src/validators/BaseValidator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAEnC,oBAAY,iBAAiB;IAC3B,KAAK,IAAA;IACL,qBAAqB,IAAA;IACrB,uBAAuB,IAAA;CACxB;AAED,MAAM,CAAC,OAAO,CAAC,QAAQ,OAAO,UAAU,CAAC,SAAS,SAAS,YAAY;IACrE;;;OAGG;IACH,QAAQ,CAAC,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAE5D;;;;OAIG;IACH,QAAQ,CAAC,oBAAoB,CAAC,aAAa,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAE/E;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,sBAAsB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAE/D;;;;;;;;;;;;;;OAcG;cACa,kCAAkC,CAAC,KAAK,EAAE;QACxD,MAAM,EAAE,OAAO,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QAC1B,YAAY,EAAE,CAAC,GAAG,EAAE,SAAS,KAAK,OAAO,CAAC;QAC1C,iBAAiB,EAAE,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAChD,gBAAgB,EAAE,CAAC,cAAc,EAAE,IAAI,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;QAC5D,cAAc,EAAE,CAAC,YAAY,EAAE,SAAS,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;KAC9D;IAgED;;;;;OAKG;IACH,SAAS,CAAC,0BAA0B,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,OAAO;CAG9F"}
@@ -1,3 +1,4 @@
1
+ import { BaseDocument } from '@aneuhold/core-ts-db-lib';
1
2
  import { DR } from '@aneuhold/core-ts-lib';
2
3
  export var ObjectSchemaState;
3
4
  (function (ObjectSchemaState) {
@@ -40,7 +41,7 @@ export default class IValidator {
40
41
  docsToValidate.forEach((doc) => {
41
42
  const { updatedDoc, errors } = documentValidator(doc);
42
43
  if (errors.length !== 0) {
43
- DR.logger.error(`${docName} with ID: ${doc._id.toString()} is invalid. Errors:`);
44
+ DR.logger.error(`${docName} with ID: ${doc._id} is invalid. Errors:`);
44
45
  numInvalidDocs += 1;
45
46
  errors.forEach((error) => {
46
47
  DR.logger.error(error);
@@ -1 +1 @@
1
- {"version":3,"file":"BaseValidator.js","sourceRoot":"","sources":["../../src/validators/BaseValidator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BaseValidator.js","sourceRoot":"","sources":["../../src/validators/BaseValidator.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
- import { BaseDocument, DocumentValidator } from '@aneuhold/core-ts-db-lib';
1
+ import type { DocumentValidator } from '@aneuhold/core-ts-db-lib';
2
+ import { BaseDocument } from '@aneuhold/core-ts-db-lib';
2
3
  import { DR } from '@aneuhold/core-ts-lib';
3
- import { ObjectId } from 'bson';
4
+ import type { UUID } from 'crypto';
4
5
 
5
6
  export enum ObjectSchemaState {
6
7
  Valid,
@@ -57,7 +58,7 @@ export default abstract class IValidator<TBaseType extends BaseDocument> {
57
58
  allDocs: Array<TBaseType>;
58
59
  shouldDelete: (doc: TBaseType) => boolean;
59
60
  documentValidator: DocumentValidator<TBaseType>;
60
- deletionFunction: (docIdsToDelete: ObjectId[]) => Promise<void>;
61
+ deletionFunction: (docIdsToDelete: UUID[]) => Promise<void>;
61
62
  updateFunction: (docsToUpdate: TBaseType[]) => Promise<void>;
62
63
  }) {
63
64
  const {
@@ -69,7 +70,7 @@ export default abstract class IValidator<TBaseType extends BaseDocument> {
69
70
  deletionFunction,
70
71
  updateFunction
71
72
  } = input;
72
- const docIdsToDelete: Array<ObjectId> = [];
73
+ const docIdsToDelete: Array<UUID> = [];
73
74
  const docsToValidate: Array<TBaseType> = [];
74
75
  const docsToUpdate: Array<TBaseType> = [];
75
76
  let numInvalidDocs = 0;
@@ -86,7 +87,7 @@ export default abstract class IValidator<TBaseType extends BaseDocument> {
86
87
  docsToValidate.forEach((doc) => {
87
88
  const { updatedDoc, errors } = documentValidator(doc);
88
89
  if (errors.length !== 0) {
89
- DR.logger.error(`${docName} with ID: ${doc._id.toString()} is invalid. Errors:`);
90
+ DR.logger.error(`${docName} with ID: ${doc._id} is invalid. Errors:`);
90
91
  numInvalidDocs += 1;
91
92
  errors.forEach((error) => {
92
93
  DR.logger.error(error);
@@ -1 +1 @@
1
- {"version":3,"file":"ApiKeyValidator.d.ts","sourceRoot":"","sources":["../../../src/validators/common/ApiKeyValidator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAkB,MAAM,0BAA0B,CAAC;AAKlE,OAAO,UAAU,MAAM,qBAAqB,CAAC;AAE7C,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,UAAU,CAAC,MAAM,CAAC;IACvD,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA2BnD,oBAAoB,CAAC,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IASnE,sBAAsB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;CA2B7D"}
1
+ {"version":3,"file":"ApiKeyValidator.d.ts","sourceRoot":"","sources":["../../../src/validators/common/ApiKeyValidator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAkB,MAAM,0BAA0B,CAAC;AAKlE,OAAO,UAAU,MAAM,qBAAqB,CAAC;AAE7C,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,UAAU,CAAC,MAAM,CAAC;IACvD,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBnD,oBAAoB,CAAC,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IASnE,sBAAsB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;CAyB7D"}
@@ -1,4 +1,4 @@
1
- import { validateApiKey } from '@aneuhold/core-ts-db-lib';
1
+ import { ApiKey, validateApiKey } from '@aneuhold/core-ts-db-lib';
2
2
  import { DR, ErrorUtils } from '@aneuhold/core-ts-lib';
3
3
  import ApiKeyRepository from '../../repositories/common/ApiKeyRepository.js';
4
4
  import UserRepository from '../../repositories/common/UserRepository.js';
@@ -9,16 +9,16 @@ export default class ApiKeyValidator extends IValidator {
9
9
  const userRepo = UserRepository.getRepo();
10
10
  const userInDb = await userRepo.get({ _id: newApiKey.userId });
11
11
  if (!userInDb) {
12
- DR.logger.error(`User with ID: ${newApiKey.userId.toString()} does not exist in the database.`);
13
- ErrorUtils.throwError(`User with ID: ${newApiKey.userId.toString()} does not exist in the database.`, newApiKey);
12
+ DR.logger.error(`User with ID: ${newApiKey.userId} does not exist in the database.`);
13
+ ErrorUtils.throwError(`User with ID: ${newApiKey.userId} does not exist in the database.`, newApiKey);
14
14
  return;
15
15
  }
16
16
  // Check if the user already has an API key
17
17
  const apiKeyRepo = ApiKeyRepository.getRepo();
18
18
  const apiKeyInDb = await apiKeyRepo.get({ userId: newApiKey.userId });
19
19
  if (apiKeyInDb) {
20
- DR.logger.error(`User with ID: ${newApiKey.userId.toString()} already has an API key.`);
21
- ErrorUtils.throwError(`User with ID: ${newApiKey.userId.toString()} already has an API key.`, newApiKey);
20
+ DR.logger.error(`User with ID: ${newApiKey.userId} already has an API key.`);
21
+ ErrorUtils.throwError(`User with ID: ${newApiKey.userId} already has an API key.`, newApiKey);
22
22
  }
23
23
  }
24
24
  // eslint-disable-next-line @typescript-eslint/require-await
@@ -36,8 +36,8 @@ export default class ApiKeyValidator extends IValidator {
36
36
  docName: 'API Key',
37
37
  allDocs: allApiKeys,
38
38
  shouldDelete: (apiKey) => {
39
- if (!allUserIds[apiKey.userId.toString()]) {
40
- DR.logger.error(`API Key with ID: ${apiKey._id.toString()} has no valid associated user.`);
39
+ if (!allUserIds[apiKey.userId]) {
40
+ DR.logger.error(`API Key with ID: ${apiKey._id} has no valid associated user.`);
41
41
  return true;
42
42
  }
43
43
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"ApiKeyValidator.js","sourceRoot":"","sources":["../../../src/validators/common/ApiKeyValidator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ApiKeyValidator.js","sourceRoot":"","sources":["../../../src/validators/common/ApiKeyValidator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,gBAAgB,MAAM,+CAA+C,CAAC;AAC7E,OAAO,cAAc,MAAM,6CAA6C,CAAC;AACzE,OAAO,UAAU,MAAM,qBAAqB,CAAC;AAE7C,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,UAAkB;IAC7D,KAAK,CAAC,iBAAiB,CAAC,SAAiB;QACvC,2BAA2B;QAC3B,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,EAAE,CAAC;QAC1C,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;QAC/D,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,SAAS,CAAC,MAAM,kCAAkC,CAAC,CAAC;YACrF,UAAU,CAAC,UAAU,CACnB,iBAAiB,SAAS,CAAC,MAAM,kCAAkC,EACnE,SAAS,CACV,CAAC;YACF,OAAO;QACT,CAAC;QACD,2CAA2C;QAC3C,MAAM,UAAU,GAAG,gBAAgB,CAAC,OAAO,EAAE,CAAC;QAC9C,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;QACtE,IAAI,UAAU,EAAE,CAAC;YACf,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,SAAS,CAAC,MAAM,0BAA0B,CAAC,CAAC;YAC7E,UAAU,CAAC,UAAU,CAAC,iBAAiB,SAAS,CAAC,MAAM,0BAA0B,EAAE,SAAS,CAAC,CAAC;QAChG,CAAC;IACH,CAAC;IAED,4DAA4D;IAC5D,KAAK,CAAC,oBAAoB,CAAC,aAA8B;QACvD,2EAA2E;QAC3E,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,wEAAwE,CAAC,CAAC;QAC1F,UAAU,CAAC,UAAU,CACnB,wEAAwE,EACxE,aAAa,CACd,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,sBAAsB,CAAC,MAAe;QAC1C,MAAM,UAAU,GAAG,gBAAgB,CAAC,OAAO,EAAE,CAAC;QAC9C,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,CAAC;QAC7C,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,OAAO,EAAE,CAAC,eAAe,EAAE,CAAC;QAEpE,MAAM,IAAI,CAAC,kCAAkC,CAAC;YAC5C,MAAM;YACN,OAAO,EAAE,SAAS;YAClB,OAAO,EAAE,UAAU;YACnB,YAAY,EAAE,CAAC,MAAc,EAAE,EAAE;gBAC/B,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC/B,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,MAAM,CAAC,GAAG,gCAAgC,CAAC,CAAC;oBAChF,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,OAAO,KAAK,CAAC;YACf,CAAC;YACD,iBAAiB,EAAE,cAAc;YACjC,gBAAgB,EAAE,KAAK,EAAE,cAAsB,EAAE,EAAE;gBACjD,MAAM,UAAU,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;YAC9C,CAAC;YACD,cAAc,EAAE,KAAK,EAAE,YAAsB,EAAE,EAAE;gBAC/C,MAAM,UAAU,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;YAC5C,CAAC;SACF,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -1,6 +1,6 @@
1
1
  import { ApiKey, validateApiKey } from '@aneuhold/core-ts-db-lib';
2
2
  import { DR, ErrorUtils } from '@aneuhold/core-ts-lib';
3
- import { ObjectId } from 'bson';
3
+ import type { UUID } from 'crypto';
4
4
  import ApiKeyRepository from '../../repositories/common/ApiKeyRepository.js';
5
5
  import UserRepository from '../../repositories/common/UserRepository.js';
6
6
  import IValidator from '../BaseValidator.js';
@@ -11,11 +11,9 @@ export default class ApiKeyValidator extends IValidator<ApiKey> {
11
11
  const userRepo = UserRepository.getRepo();
12
12
  const userInDb = await userRepo.get({ _id: newApiKey.userId });
13
13
  if (!userInDb) {
14
- DR.logger.error(
15
- `User with ID: ${newApiKey.userId.toString()} does not exist in the database.`
16
- );
14
+ DR.logger.error(`User with ID: ${newApiKey.userId} does not exist in the database.`);
17
15
  ErrorUtils.throwError(
18
- `User with ID: ${newApiKey.userId.toString()} does not exist in the database.`,
16
+ `User with ID: ${newApiKey.userId} does not exist in the database.`,
19
17
  newApiKey
20
18
  );
21
19
  return;
@@ -24,11 +22,8 @@ export default class ApiKeyValidator extends IValidator<ApiKey> {
24
22
  const apiKeyRepo = ApiKeyRepository.getRepo();
25
23
  const apiKeyInDb = await apiKeyRepo.get({ userId: newApiKey.userId });
26
24
  if (apiKeyInDb) {
27
- DR.logger.error(`User with ID: ${newApiKey.userId.toString()} already has an API key.`);
28
- ErrorUtils.throwError(
29
- `User with ID: ${newApiKey.userId.toString()} already has an API key.`,
30
- newApiKey
31
- );
25
+ DR.logger.error(`User with ID: ${newApiKey.userId} already has an API key.`);
26
+ ErrorUtils.throwError(`User with ID: ${newApiKey.userId} already has an API key.`, newApiKey);
32
27
  }
33
28
  }
34
29
 
@@ -52,16 +47,14 @@ export default class ApiKeyValidator extends IValidator<ApiKey> {
52
47
  docName: 'API Key',
53
48
  allDocs: allApiKeys,
54
49
  shouldDelete: (apiKey: ApiKey) => {
55
- if (!allUserIds[apiKey.userId.toString()]) {
56
- DR.logger.error(
57
- `API Key with ID: ${apiKey._id.toString()} has no valid associated user.`
58
- );
50
+ if (!allUserIds[apiKey.userId]) {
51
+ DR.logger.error(`API Key with ID: ${apiKey._id} has no valid associated user.`);
59
52
  return true;
60
53
  }
61
54
  return false;
62
55
  },
63
56
  documentValidator: validateApiKey,
64
- deletionFunction: async (docIdsToDelete: ObjectId[]) => {
57
+ deletionFunction: async (docIdsToDelete: UUID[]) => {
65
58
  await apiKeyRepo.deleteList(docIdsToDelete);
66
59
  },
67
60
  updateFunction: async (docsToUpdate: ApiKey[]) => {
@@ -18,7 +18,7 @@ export default class UserValidator extends IValidator<User> {
18
18
  *
19
19
  * @param userRepo - The user repository
20
20
  * @param userName - The username to check
21
- * @throws An error if the username already exists
21
+ * @throws {Error} An error if the username already exists
22
22
  */
23
23
  private checkIfUserNameExists;
24
24
  }
@@ -1 +1 @@
1
- {"version":3,"file":"UserValidator.d.ts","sourceRoot":"","sources":["../../../src/validators/common/UserValidator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAgB,MAAM,0BAA0B,CAAC;AAK9D,OAAO,UAAU,MAAM,qBAAqB,CAAC;AAE7C;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,UAAU,CAAC,IAAI,CAAC;IACnD,iBAAiB,CAAC,OAAO,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAMrD;;;;;OAKG;IACG,oBAAoB,CAAC,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBhE,sBAAsB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IA2B5D;;;;;;OAMG;YACW,qBAAqB;CASpC"}
1
+ {"version":3,"file":"UserValidator.d.ts","sourceRoot":"","sources":["../../../src/validators/common/UserValidator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAgB,MAAM,0BAA0B,CAAC;AAK9D,OAAO,UAAU,MAAM,qBAAqB,CAAC;AAE7C;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,UAAU,CAAC,IAAI,CAAC;IACnD,iBAAiB,CAAC,OAAO,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAMrD;;;;;OAKG;IACG,oBAAoB,CAAC,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBhE,sBAAsB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAyB5D;;;;;;OAMG;YACW,qBAAqB;CASpC"}
@@ -27,7 +27,7 @@ export default class UserValidator extends IValidator {
27
27
  const userRepo = UserRepository.getRepo();
28
28
  const userInDb = await userRepo.get({ _id: userToUpdate._id });
29
29
  if (!userInDb) {
30
- ErrorUtils.throwError(`${User.name} with ID: ${userToUpdate._id?.toString()} does not exist in the database.`, userToUpdate);
30
+ ErrorUtils.throwError(`${User.name} with ID: ${userToUpdate._id} does not exist in the database.`, userToUpdate);
31
31
  return;
32
32
  }
33
33
  // Check if the username is being updated and, if it is, if it already
@@ -45,7 +45,7 @@ export default class UserValidator extends IValidator {
45
45
  allDocs: allUsers,
46
46
  shouldDelete: (user) => {
47
47
  if (user.userName.startsWith(TEST_USER_NAME_PREFIX)) {
48
- DR.logger.error(`User with ID: ${user._id.toString()} is a test user and should be deleted`);
48
+ DR.logger.error(`User with ID: ${user._id} is a test user and should be deleted`);
49
49
  return true;
50
50
  }
51
51
  return false;
@@ -64,7 +64,7 @@ export default class UserValidator extends IValidator {
64
64
  *
65
65
  * @param userRepo - The user repository
66
66
  * @param userName - The username to check
67
- * @throws An error if the username already exists
67
+ * @throws {Error} An error if the username already exists
68
68
  */
69
69
  async checkIfUserNameExists(userRepo, userName) {
70
70
  const userNameSearchResult = await userRepo.get({
@@ -1 +1 @@
1
- {"version":3,"file":"UserValidator.js","sourceRoot":"","sources":["../../../src/validators/common/UserValidator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,cAAc,MAAM,6CAA6C,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,UAAU,MAAM,qBAAqB,CAAC;AAE7C;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,UAAgB;IACzD,KAAK,CAAC,iBAAiB,CAAC,OAAa;QACnC,uCAAuC;QACvC,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,EAAE,CAAC;QAC1C,MAAM,IAAI,CAAC,qBAAqB,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC/D,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,oBAAoB,CAAC,YAA2B;QACpD,4BAA4B;QAC5B,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC;YACtB,UAAU,CAAC,UAAU,CAAC,sBAAsB,IAAI,CAAC,IAAI,aAAa,EAAE,YAAY,CAAC,CAAC;QACpF,CAAC;QAED,kCAAkC;QAClC,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,EAAE,CAAC;QAC1C,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC;QAC/D,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,UAAU,CAAC,UAAU,CACnB,GAAG,IAAI,CAAC,IAAI,aAAa,YAAY,CAAC,GAAG,EAAE,QAAQ,EAAE,kCAAkC,EACvF,YAAY,CACb,CAAC;YACF,OAAO;QACT,CAAC;QAED,sEAAsE;QACtE,SAAS;QACT,IAAI,YAAY,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,KAAK,YAAY,CAAC,QAAQ,EAAE,CAAC;YACzE,MAAM,IAAI,CAAC,qBAAqB,CAAC,QAAQ,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;IAED,KAAK,CAAC,sBAAsB,CAAC,MAAe;QAC1C,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,EAAE,CAAC;QAC1C,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,CAAC;QAEzC,MAAM,IAAI,CAAC,kCAAkC,CAAC;YAC5C,MAAM;YACN,OAAO,EAAE,MAAM;YACf,OAAO,EAAE,QAAQ;YACjB,YAAY,EAAE,CAAC,IAAU,EAAE,EAAE;gBAC3B,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,qBAAqB,CAAC,EAAE,CAAC;oBACpD,EAAE,CAAC,MAAM,CAAC,KAAK,CACb,iBAAiB,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,uCAAuC,CAC5E,CAAC;oBACF,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,OAAO,KAAK,CAAC;YACf,CAAC;YACD,iBAAiB,EAAE,YAAY;YAC/B,gBAAgB,EAAE,KAAK,EAAE,cAA0B,EAAE,EAAE;gBACrD,MAAM,QAAQ,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;YAC5C,CAAC;YACD,cAAc,EAAE,KAAK,EAAE,YAAoB,EAAE,EAAE;gBAC7C,MAAM,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;YAC1C,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAED;;;;;;OAMG;IACK,KAAK,CAAC,qBAAqB,CAAC,QAAwB,EAAE,QAAgB;QAC5E,MAAM,oBAAoB,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC;YAC9C,QAAQ;SACT,CAAC,CAAC;QACH,IAAI,oBAAoB,EAAE,CAAC;YACzB,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;YAC3C,UAAU,CAAC,UAAU,CAAC,yBAAyB,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"UserValidator.js","sourceRoot":"","sources":["../../../src/validators/common/UserValidator.ts"],"names":[],"mappings":"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"}