@talkpilot/core-db 1.3.63 → 1.3.64

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 (257) hide show
  1. package/.cursor/rules/development.mdc +65 -65
  2. package/AGENTS.md +49 -49
  3. package/DEVELOPMENT.md +141 -141
  4. package/README.md +816 -815
  5. package/dist/configuration/models/models.constants.d.ts +1 -1
  6. package/dist/configuration/models/models.constants.d.ts.map +1 -1
  7. package/dist/configuration/models/models.constants.js +1 -6
  8. package/dist/configuration/models/models.constants.js.map +1 -1
  9. package/dist/talkpilot/callTokenUsage/callTokenUsage.getters.d.ts +4 -0
  10. package/dist/talkpilot/callTokenUsage/callTokenUsage.getters.d.ts.map +1 -0
  11. package/dist/talkpilot/callTokenUsage/callTokenUsage.getters.js +30 -0
  12. package/dist/talkpilot/callTokenUsage/callTokenUsage.getters.js.map +1 -0
  13. package/dist/talkpilot/callTokenUsage/callTokenUsage.types.d.ts +28 -0
  14. package/dist/talkpilot/callTokenUsage/callTokenUsage.types.d.ts.map +1 -0
  15. package/dist/{reconcile/reconcile.types.js → talkpilot/callTokenUsage/callTokenUsage.types.js} +1 -1
  16. package/dist/talkpilot/callTokenUsage/callTokenUsage.types.js.map +1 -0
  17. package/dist/talkpilot/callTokenUsage/index.d.ts +3 -0
  18. package/dist/talkpilot/callTokenUsage/index.d.ts.map +1 -0
  19. package/dist/{reconcile → talkpilot/callTokenUsage}/index.js +1 -4
  20. package/dist/talkpilot/callTokenUsage/index.js.map +1 -0
  21. package/dist/talkpilot/index.d.ts +1 -0
  22. package/dist/talkpilot/index.d.ts.map +1 -1
  23. package/dist/talkpilot/index.js +1 -0
  24. package/dist/talkpilot/index.js.map +1 -1
  25. package/jest.config.js +20 -20
  26. package/package.json +46 -46
  27. package/src/__tests__/setup.ts +20 -20
  28. package/src/bulkWrite/__tests__/bulkWrite.spec.ts +65 -65
  29. package/src/bulkWrite/bulkWrite.ops.ts +45 -45
  30. package/src/bulkWrite/bulkWrite.types.ts +4 -4
  31. package/src/bulkWrite/index.ts +2 -2
  32. package/src/config.ts +9 -9
  33. package/src/configuration/index.ts +17 -17
  34. package/src/configuration/internalModels/index.ts +3 -3
  35. package/src/configuration/internalModels/internalModels.constants.ts +1 -1
  36. package/src/configuration/internalModels/internalModels.getters.ts +33 -33
  37. package/src/configuration/internalModels/internalModels.types.ts +12 -12
  38. package/src/configuration/models/__tests__/models.getters.spec.ts +67 -67
  39. package/src/configuration/models/index.ts +27 -27
  40. package/src/configuration/models/models.constants.ts +15 -20
  41. package/src/configuration/models/models.getters.ts +71 -71
  42. package/src/configuration/models/models.types.ts +80 -80
  43. package/src/configuration/mongodb-client.ts +62 -62
  44. package/src/configuration/prompts/index.ts +2 -2
  45. package/src/configuration/prompts/prompts.getters.ts +49 -49
  46. package/src/configuration/prompts/prompts.types.ts +11 -11
  47. package/src/connection.ts +81 -81
  48. package/src/index.ts +47 -47
  49. package/src/municipal/__tests__/validation.spec.ts +62 -62
  50. package/src/municipal/cities/cities.getters.ts +50 -50
  51. package/src/municipal/cities/cities.types.ts +11 -11
  52. package/src/municipal/cities/index.ts +2 -2
  53. package/src/municipal/departmentsSubjects/__tests__/departmentsSubjects.spec.ts +272 -272
  54. package/src/municipal/departmentsSubjects/departmentsSubjects.getters.ts +317 -317
  55. package/src/municipal/departmentsSubjects/departmentsSubjects.types.ts +73 -73
  56. package/src/municipal/departmentsSubjects/index.ts +9 -9
  57. package/src/municipal/index.ts +22 -22
  58. package/src/municipal/mongodb-client.ts +61 -61
  59. package/src/municipal/muniIssues/__tests__/muniIssues.setters.spec.ts +94 -94
  60. package/src/municipal/muniIssues/__tests__/muniIssues.setup.spec.ts +92 -92
  61. package/src/municipal/muniIssues/index.ts +17 -17
  62. package/src/municipal/muniIssues/muniIssues.constants.ts +18 -18
  63. package/src/municipal/muniIssues/muniIssues.getters.ts +24 -24
  64. package/src/municipal/muniIssues/muniIssues.schema.ts +66 -66
  65. package/src/municipal/muniIssues/muniIssues.setters.ts +24 -24
  66. package/src/municipal/muniIssues/muniIssues.setup.ts +65 -65
  67. package/src/municipal/muniIssues/muniIssues.types.ts +37 -37
  68. package/src/municipal/streets/__tests__/streets.spec.ts +253 -253
  69. package/src/municipal/streets/index.ts +2 -2
  70. package/src/municipal/streets/streets.getters.ts +140 -140
  71. package/src/municipal/streets/streets.types.ts +19 -19
  72. package/src/municipal/systemInstructions/__tests__/getters.spec.ts +113 -113
  73. package/src/municipal/systemInstructions/__tests__/setters.spec.ts +274 -274
  74. package/src/municipal/systemInstructions/index.ts +7 -7
  75. package/src/municipal/systemInstructions/instructions.getters.ts +57 -57
  76. package/src/municipal/systemInstructions/instructions.setters.ts +119 -119
  77. package/src/municipal/systemInstructions/instructions.types.ts +30 -30
  78. package/src/municipal/tickets/__tests__/tickets.getters.spec.ts +30 -30
  79. package/src/municipal/tickets/__tests__/tickets.statistics.spec.ts +99 -99
  80. package/src/municipal/tickets/index.ts +9 -9
  81. package/src/municipal/tickets/tickets.constants.ts +8 -8
  82. package/src/municipal/tickets/tickets.getters.ts +121 -121
  83. package/src/municipal/tickets/tickets.statistics.aggregation.ts +110 -110
  84. package/src/municipal/tickets/tickets.statistics.getters.ts +145 -145
  85. package/src/municipal/tickets/tickets.types.ts +54 -54
  86. package/src/municipal/utils/types.ts +11 -11
  87. package/src/talkpilot/__tests__/db.spec.ts +38 -38
  88. package/src/talkpilot/__tests__/mongodb-client.spec.ts +18 -18
  89. package/src/talkpilot/__tests__/validation.spec.ts +68 -68
  90. package/src/talkpilot/agents/__tests__/agents.getters.spec.ts +29 -29
  91. package/src/talkpilot/agents/agents.getters.ts +34 -34
  92. package/src/talkpilot/agents/agents.types.ts +14 -14
  93. package/src/talkpilot/agents/index.ts +2 -2
  94. package/src/talkpilot/backgroundToolResults/__tests__/backgroundToolResults.getters.spec.ts +147 -147
  95. package/src/talkpilot/backgroundToolResults/backgroundToolResults.getters.ts +65 -65
  96. package/src/talkpilot/backgroundToolResults/backgroundToolResults.types.ts +23 -23
  97. package/src/talkpilot/backgroundToolResults/index.ts +2 -2
  98. package/src/talkpilot/callTokenUsage/__tests__/callTokenUsage.getters.spec.ts +57 -0
  99. package/src/talkpilot/callTokenUsage/callTokenUsage.getters.ts +42 -0
  100. package/src/talkpilot/callTokenUsage/callTokenUsage.types.ts +28 -0
  101. package/src/talkpilot/callTokenUsage/index.ts +2 -0
  102. package/src/talkpilot/calls/__tests__/callStats.utils.spec.ts +128 -128
  103. package/src/talkpilot/calls/__tests__/calls.dashboard.spec.ts +229 -229
  104. package/src/talkpilot/calls/__tests__/calls.spec.ts +471 -471
  105. package/src/talkpilot/calls/__tests__/calls.statistics.spec.ts +483 -483
  106. package/src/talkpilot/calls/calls.constants.ts +49 -49
  107. package/src/talkpilot/calls/calls.getters.ts +277 -277
  108. package/src/talkpilot/calls/calls.statistics.getters.ts +668 -668
  109. package/src/talkpilot/calls/calls.statistics.types.ts +48 -48
  110. package/src/talkpilot/calls/calls.types.ts +149 -149
  111. package/src/talkpilot/calls/dashboard/calls.dashboard.ts +295 -295
  112. package/src/talkpilot/calls/dashboard/calls.dashboard.types.ts +57 -57
  113. package/src/talkpilot/calls/index.ts +6 -6
  114. package/src/talkpilot/clientAudioBuffers/__tests__/clientAudioBuffer.getters.spec.ts +160 -160
  115. package/src/talkpilot/clientAudioBuffers/clientAudioBuffer.getters.ts +117 -117
  116. package/src/talkpilot/clientAudioBuffers/clientsAudioBuffers.types.ts +25 -25
  117. package/src/talkpilot/clientAudioBuffers/index.ts +2 -2
  118. package/src/talkpilot/clients/__tests__/clients.quota.spec.ts +123 -123
  119. package/src/talkpilot/clients/clients.getters.ts +19 -19
  120. package/src/talkpilot/clients/clients.quota.getters.ts +119 -119
  121. package/src/talkpilot/clients/clients.quota.types.ts +27 -27
  122. package/src/talkpilot/clients/clients.types.ts +18 -18
  123. package/src/talkpilot/clients/index.ts +4 -4
  124. package/src/talkpilot/clientsConfig/__tests__/clientsConfig.getters.spec.ts +423 -423
  125. package/src/talkpilot/clientsConfig/__tests__/clientsConfig.spec.ts +212 -212
  126. package/src/talkpilot/clientsConfig/clientsConfig.constants.ts +2 -2
  127. package/src/talkpilot/clientsConfig/clientsConfig.getters.ts +247 -247
  128. package/src/talkpilot/clientsConfig/clientsConfig.types.ts +137 -137
  129. package/src/talkpilot/clientsConfig/index.ts +3 -3
  130. package/src/talkpilot/contextNotes/__tests__/contextNotes.getters.spec.ts +217 -217
  131. package/src/talkpilot/contextNotes/contextNotes.getters.ts +85 -85
  132. package/src/talkpilot/contextNotes/contextNotes.types.ts +20 -20
  133. package/src/talkpilot/contextNotes/index.ts +2 -2
  134. package/src/talkpilot/flows/__tests__/flows.schema.spec.ts +124 -124
  135. package/src/talkpilot/flows/flows.getter.ts +34 -34
  136. package/src/talkpilot/flows/flows.schema.ts +180 -180
  137. package/src/talkpilot/flows/flows.types.ts +211 -211
  138. package/src/talkpilot/flows/index.ts +7 -7
  139. package/src/talkpilot/groups/__tests__/groups.spec.ts +90 -90
  140. package/src/talkpilot/groups/__tests__/phone.utils.spec.ts +32 -32
  141. package/src/talkpilot/groups/groups.getters.ts +30 -30
  142. package/src/talkpilot/groups/groups.types.ts +29 -29
  143. package/src/talkpilot/groups/index.ts +3 -3
  144. package/src/talkpilot/groups/phone.utils.ts +46 -46
  145. package/src/talkpilot/index.ts +32 -31
  146. package/src/talkpilot/leads/index.ts +2 -2
  147. package/src/talkpilot/leads/leads.getter.ts +6 -6
  148. package/src/talkpilot/leads/leads.schema.ts +33 -33
  149. package/src/talkpilot/leads/leads.types.ts +20 -20
  150. package/src/talkpilot/mongodb-client.ts +78 -78
  151. package/src/talkpilot/phone_numbers/__tests__/phone_numbers.spec.ts +530 -530
  152. package/src/talkpilot/phone_numbers/index.ts +2 -2
  153. package/src/talkpilot/phone_numbers/phone_numbers.getter.ts +240 -240
  154. package/src/talkpilot/phone_numbers/phone_numbers.schema.ts +17 -17
  155. package/src/talkpilot/phone_numbers/phone_numbers.types.ts +30 -30
  156. package/src/talkpilot/phone_numbers/phone_numbers.utils.ts +9 -9
  157. package/src/talkpilot/plans/__tests__/plans.spec.ts +70 -70
  158. package/src/talkpilot/plans/index.ts +2 -2
  159. package/src/talkpilot/plans/plans.getters.ts +132 -132
  160. package/src/talkpilot/plans/plans.types.ts +89 -89
  161. package/src/talkpilot/products/__tests__/products.getters.spec.ts +44 -44
  162. package/src/talkpilot/products/index.ts +2 -2
  163. package/src/talkpilot/products/products.getters.ts +12 -12
  164. package/src/talkpilot/products/products.types.ts +9 -9
  165. package/src/talkpilot/results/index.ts +7 -7
  166. package/src/talkpilot/results/results.getter.ts +39 -39
  167. package/src/talkpilot/results/results.schema.ts +25 -25
  168. package/src/talkpilot/results/results.types.ts +34 -34
  169. package/src/talkpilot/retry_analyze/__tests__/retryAnalyze.getters.spec.ts +156 -156
  170. package/src/talkpilot/retry_analyze/index.ts +2 -2
  171. package/src/talkpilot/retry_analyze/retryAnalyze.getters.ts +84 -84
  172. package/src/talkpilot/retry_analyze/retryAnalyze.types.ts +13 -13
  173. package/src/talkpilot/sessions/__tests__/sessions.spec.ts +147 -147
  174. package/src/talkpilot/sessions/index.ts +2 -2
  175. package/src/talkpilot/sessions/sessions.getter.ts +92 -92
  176. package/src/talkpilot/sessions/sessions.schema.ts +34 -34
  177. package/src/talkpilot/sessions/sessions.types.ts +30 -30
  178. package/src/talkpilot/subscriptions/__tests__/subscriptions.getters.utils.spec.ts +45 -45
  179. package/src/talkpilot/subscriptions/index.ts +3 -3
  180. package/src/talkpilot/subscriptions/subscriptions.getters.ts +146 -146
  181. package/src/talkpilot/subscriptions/subscriptions.getters.utils.ts +33 -33
  182. package/src/talkpilot/subscriptions/subscriptions.types.ts +66 -66
  183. package/src/talkpilot/utils/__tests__/query.utils.spec.ts +49 -49
  184. package/src/talkpilot/utils/query.utils.ts +21 -21
  185. package/src/test-utils/db-utils.ts +33 -33
  186. package/src/test-utils/factories/index.ts +18 -18
  187. package/src/test-utils/factories/municipal/cities.ts +16 -16
  188. package/src/test-utils/factories/municipal/departmentsSubjects.ts +37 -37
  189. package/src/test-utils/factories/municipal/muniIssues.ts +32 -32
  190. package/src/test-utils/factories/municipal/streets.ts +22 -22
  191. package/src/test-utils/factories/municipal/tickets.ts +39 -39
  192. package/src/test-utils/factories/talkpilot/agents.ts +19 -19
  193. package/src/test-utils/factories/talkpilot/calls.ts +37 -37
  194. package/src/test-utils/factories/talkpilot/clientAudioBuffers.ts +20 -20
  195. package/src/test-utils/factories/talkpilot/clientsConfig.ts +18 -18
  196. package/src/test-utils/factories/talkpilot/contextNotes.ts +40 -40
  197. package/src/test-utils/factories/talkpilot/flows.ts +33 -33
  198. package/src/test-utils/factories/talkpilot/groups.ts +33 -33
  199. package/src/test-utils/factories/talkpilot/phone_numbers.ts +22 -22
  200. package/src/test-utils/factories/talkpilot/sessions.ts +35 -35
  201. package/src/test-utils/factories/websitalk/knowledgeDocuments.ts +29 -29
  202. package/src/test-utils/factories/websitalk/scanResources.ts +26 -26
  203. package/src/test-utils/factories/websitalk/scans.ts +30 -30
  204. package/src/test-utils/factories/websitalk/websiteUrls.ts +17 -17
  205. package/src/utils/date.utils.ts +126 -126
  206. package/src/utils/shared.types.ts +4 -4
  207. package/src/utils/validation.ts +23 -23
  208. package/src/websitalk/index.ts +18 -18
  209. package/src/websitalk/knowledgeDocuments/__tests__/knowledgeDocuments.spec.ts +238 -238
  210. package/src/websitalk/knowledgeDocuments/index.ts +3 -3
  211. package/src/websitalk/knowledgeDocuments/knowledgeDocuments.constants.ts +26 -26
  212. package/src/websitalk/knowledgeDocuments/knowledgeDocuments.getters.ts +95 -95
  213. package/src/websitalk/knowledgeDocuments/knowledgeDocuments.types.ts +75 -75
  214. package/src/websitalk/mongodb-client.ts +61 -61
  215. package/src/websitalk/scanResources/__tests__/scanResources.spec.ts +267 -267
  216. package/src/websitalk/scanResources/index.ts +4 -4
  217. package/src/websitalk/scanResources/scanResources.constants.ts +60 -60
  218. package/src/websitalk/scanResources/scanResources.getters.ts +128 -128
  219. package/src/websitalk/scanResources/scanResources.types.ts +105 -105
  220. package/src/websitalk/scanResources/scanResources.utils.ts +31 -31
  221. package/src/websitalk/scans/__tests__/scans.spec.ts +362 -362
  222. package/src/websitalk/scans/index.ts +4 -4
  223. package/src/websitalk/scans/scans.constants.ts +18 -18
  224. package/src/websitalk/scans/scans.getters.ts +172 -172
  225. package/src/websitalk/scans/scans.types.ts +58 -58
  226. package/src/websitalk/scans/scans.utils.ts +5 -5
  227. package/src/websitalk/websiteUrls/__tests__/websiteUrls.spec.ts +77 -77
  228. package/src/websitalk/websiteUrls/index.ts +2 -2
  229. package/src/websitalk/websiteUrls/websiteUrls.getters.ts +65 -65
  230. package/src/websitalk/websiteUrls/websiteUrls.types.ts +13 -13
  231. package/tsconfig.json +23 -23
  232. package/dist/municipal/departmentsSubjects/departmentsSubjects.setters.d.ts +0 -10
  233. package/dist/municipal/departmentsSubjects/departmentsSubjects.setters.d.ts.map +0 -1
  234. package/dist/municipal/departmentsSubjects/departmentsSubjects.setters.js +0 -15
  235. package/dist/municipal/departmentsSubjects/departmentsSubjects.setters.js.map +0 -1
  236. package/dist/municipal/streets/streets.setters.d.ts +0 -10
  237. package/dist/municipal/streets/streets.setters.d.ts.map +0 -1
  238. package/dist/municipal/streets/streets.setters.js +0 -15
  239. package/dist/municipal/streets/streets.setters.js.map +0 -1
  240. package/dist/reconcile/index.d.ts +0 -5
  241. package/dist/reconcile/index.d.ts.map +0 -1
  242. package/dist/reconcile/index.js.map +0 -1
  243. package/dist/reconcile/reconcile.diff.d.ts +0 -4
  244. package/dist/reconcile/reconcile.diff.d.ts.map +0 -1
  245. package/dist/reconcile/reconcile.diff.js +0 -36
  246. package/dist/reconcile/reconcile.diff.js.map +0 -1
  247. package/dist/reconcile/reconcile.execute.d.ts +0 -7
  248. package/dist/reconcile/reconcile.execute.d.ts.map +0 -1
  249. package/dist/reconcile/reconcile.execute.js +0 -20
  250. package/dist/reconcile/reconcile.execute.js.map +0 -1
  251. package/dist/reconcile/reconcile.ops.d.ts +0 -12
  252. package/dist/reconcile/reconcile.ops.d.ts.map +0 -1
  253. package/dist/reconcile/reconcile.ops.js +0 -24
  254. package/dist/reconcile/reconcile.ops.js.map +0 -1
  255. package/dist/reconcile/reconcile.types.d.ts +0 -32
  256. package/dist/reconcile/reconcile.types.d.ts.map +0 -1
  257. package/dist/reconcile/reconcile.types.js.map +0 -1
@@ -1,2 +1,2 @@
1
- export * from "./websiteUrls.types";
2
- export * from "./websiteUrls.getters";
1
+ export * from "./websiteUrls.types";
2
+ export * from "./websiteUrls.getters";
@@ -1,65 +1,65 @@
1
- import { Collection, Filter, ObjectId as MongoObjectId } from "mongodb";
2
- import { getDb, ObjectId } from "../index";
3
- import type {
4
- CreateWebsiteUrlInput,
5
- WebsiteUrl,
6
- WebsiteUrlDoc,
7
- } from "./websiteUrls.types";
8
-
9
- export const getWebsiteUrlsCollection = (): Collection<WebsiteUrl> => {
10
- return getDb().collection<WebsiteUrl>("websiteUrls");
11
- };
12
-
13
- export const getWebsiteUrlsByClient = async (
14
- clientId: string,
15
- ): Promise<WebsiteUrlDoc[]> => {
16
- return getWebsiteUrlsCollection()
17
- .find({ clientId })
18
- .sort({ createdAt: 1 })
19
- .toArray();
20
- };
21
-
22
- export const getWebsiteUrlById = async (
23
- id: string,
24
- ): Promise<WebsiteUrlDoc | null> => {
25
- return getWebsiteUrlsCollection().findOne({ _id: new ObjectId(id) });
26
- };
27
-
28
- export const findWebsiteUrls = async (
29
- filter: Filter<WebsiteUrl> = {},
30
- ): Promise<WebsiteUrlDoc[]> => {
31
- return getWebsiteUrlsCollection().find(filter).toArray();
32
- };
33
-
34
- export const createWebsiteUrl = async (
35
- input: CreateWebsiteUrlInput,
36
- ): Promise<MongoObjectId> => {
37
- const now = new Date();
38
- const { insertedId } = await getWebsiteUrlsCollection().insertOne({
39
- clientId: input.clientId,
40
- name: input.name,
41
- baseUrl: input.baseUrl,
42
- createdAt: now,
43
- updatedAt: now,
44
- });
45
-
46
- return insertedId;
47
- };
48
-
49
- export const updateWebsiteUrl = async (
50
- id: string,
51
- updates: Partial<Pick<WebsiteUrl, "name" | "baseUrl">>,
52
- ): Promise<WebsiteUrlDoc | null> => {
53
- return getWebsiteUrlsCollection().findOneAndUpdate(
54
- { _id: new ObjectId(id) },
55
- { $set: { ...updates, updatedAt: new Date() } },
56
- { returnDocument: "after" },
57
- );
58
- };
59
-
60
- export const deleteWebsiteUrl = async (id: string): Promise<boolean> => {
61
- const result = await getWebsiteUrlsCollection().deleteOne({
62
- _id: new ObjectId(id),
63
- });
64
- return result.deletedCount === 1;
65
- };
1
+ import { Collection, Filter, ObjectId as MongoObjectId } from "mongodb";
2
+ import { getDb, ObjectId } from "../index";
3
+ import type {
4
+ CreateWebsiteUrlInput,
5
+ WebsiteUrl,
6
+ WebsiteUrlDoc,
7
+ } from "./websiteUrls.types";
8
+
9
+ export const getWebsiteUrlsCollection = (): Collection<WebsiteUrl> => {
10
+ return getDb().collection<WebsiteUrl>("websiteUrls");
11
+ };
12
+
13
+ export const getWebsiteUrlsByClient = async (
14
+ clientId: string,
15
+ ): Promise<WebsiteUrlDoc[]> => {
16
+ return getWebsiteUrlsCollection()
17
+ .find({ clientId })
18
+ .sort({ createdAt: 1 })
19
+ .toArray();
20
+ };
21
+
22
+ export const getWebsiteUrlById = async (
23
+ id: string,
24
+ ): Promise<WebsiteUrlDoc | null> => {
25
+ return getWebsiteUrlsCollection().findOne({ _id: new ObjectId(id) });
26
+ };
27
+
28
+ export const findWebsiteUrls = async (
29
+ filter: Filter<WebsiteUrl> = {},
30
+ ): Promise<WebsiteUrlDoc[]> => {
31
+ return getWebsiteUrlsCollection().find(filter).toArray();
32
+ };
33
+
34
+ export const createWebsiteUrl = async (
35
+ input: CreateWebsiteUrlInput,
36
+ ): Promise<MongoObjectId> => {
37
+ const now = new Date();
38
+ const { insertedId } = await getWebsiteUrlsCollection().insertOne({
39
+ clientId: input.clientId,
40
+ name: input.name,
41
+ baseUrl: input.baseUrl,
42
+ createdAt: now,
43
+ updatedAt: now,
44
+ });
45
+
46
+ return insertedId;
47
+ };
48
+
49
+ export const updateWebsiteUrl = async (
50
+ id: string,
51
+ updates: Partial<Pick<WebsiteUrl, "name" | "baseUrl">>,
52
+ ): Promise<WebsiteUrlDoc | null> => {
53
+ return getWebsiteUrlsCollection().findOneAndUpdate(
54
+ { _id: new ObjectId(id) },
55
+ { $set: { ...updates, updatedAt: new Date() } },
56
+ { returnDocument: "after" },
57
+ );
58
+ };
59
+
60
+ export const deleteWebsiteUrl = async (id: string): Promise<boolean> => {
61
+ const result = await getWebsiteUrlsCollection().deleteOne({
62
+ _id: new ObjectId(id),
63
+ });
64
+ return result.deletedCount === 1;
65
+ };
@@ -1,13 +1,13 @@
1
- import { ObjectId } from "mongodb";
2
-
3
- export type WebsiteUrl = {
4
- clientId: string;
5
- name: string;
6
- baseUrl: string;
7
- createdAt: Date;
8
- updatedAt: Date;
9
- };
10
-
11
- export type WebsiteUrlDoc = WebsiteUrl & { _id: ObjectId };
12
-
13
- export type CreateWebsiteUrlInput = Omit<WebsiteUrl, "createdAt" | "updatedAt">;
1
+ import { ObjectId } from "mongodb";
2
+
3
+ export type WebsiteUrl = {
4
+ clientId: string;
5
+ name: string;
6
+ baseUrl: string;
7
+ createdAt: Date;
8
+ updatedAt: Date;
9
+ };
10
+
11
+ export type WebsiteUrlDoc = WebsiteUrl & { _id: ObjectId };
12
+
13
+ export type CreateWebsiteUrlInput = Omit<WebsiteUrl, "createdAt" | "updatedAt">;
package/tsconfig.json CHANGED
@@ -1,23 +1,23 @@
1
- {
2
- "compilerOptions": {
3
- "target": "ES2022",
4
- "module": "Node16",
5
- "moduleResolution": "node16",
6
- "isolatedModules": true,
7
- "lib": ["ES2022"],
8
- "declaration": true,
9
- "declarationMap": true,
10
- "sourceMap": true,
11
- "outDir": "dist",
12
- "rootDir": "src",
13
- "strict": true,
14
- "esModuleInterop": true,
15
- "forceConsistentCasingInFileNames": true,
16
- "skipLibCheck": true,
17
- "resolveJsonModule": true,
18
- "experimentalDecorators": true,
19
- "emitDecoratorMetadata": true
20
- },
21
- "include": ["src/**/*"],
22
- "exclude": ["node_modules", "dist", "test", "**/*.test.ts", "**/__tests__/*", "**/*.spec.ts"]
23
- }
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2022",
4
+ "module": "Node16",
5
+ "moduleResolution": "node16",
6
+ "isolatedModules": true,
7
+ "lib": ["ES2022"],
8
+ "declaration": true,
9
+ "declarationMap": true,
10
+ "sourceMap": true,
11
+ "outDir": "dist",
12
+ "rootDir": "src",
13
+ "strict": true,
14
+ "esModuleInterop": true,
15
+ "forceConsistentCasingInFileNames": true,
16
+ "skipLibCheck": true,
17
+ "resolveJsonModule": true,
18
+ "experimentalDecorators": true,
19
+ "emitDecoratorMetadata": true
20
+ },
21
+ "include": ["src/**/*"],
22
+ "exclude": ["node_modules", "dist", "test", "**/*.test.ts", "**/__tests__/*", "**/*.spec.ts"]
23
+ }
@@ -1,10 +0,0 @@
1
- import { AnyBulkWriteOperation, BulkWriteOptions, BulkWriteResult } from "mongodb";
2
- import { DepartmentSubject } from "./departmentsSubjects.types";
3
- /**
4
- * Generic batch write for the departmentsSubjects collection — a thin passthrough to the
5
- * driver's bulkWrite, with no diffing/key-building/business logic. `operations` must be
6
- * non-empty (the driver throws on an empty batch). Errors (including partial failures under
7
- * `{ ordered: false }`) propagate unchanged, so callers can still catch `MongoBulkWriteError`.
8
- */
9
- export declare const bulkWriteDepartmentsSubjects: (operations: AnyBulkWriteOperation<DepartmentSubject>[], options?: BulkWriteOptions) => Promise<BulkWriteResult>;
10
- //# sourceMappingURL=departmentsSubjects.setters.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"departmentsSubjects.setters.d.ts","sourceRoot":"","sources":["../../../src/municipal/departmentsSubjects/departmentsSubjects.setters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AACnF,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAGhE;;;;;GAKG;AACH,eAAO,MAAM,4BAA4B,GACvC,YAAY,qBAAqB,CAAC,iBAAiB,CAAC,EAAE,EACtD,UAAU,gBAAgB,KACzB,OAAO,CAAC,eAAe,CAEzB,CAAC"}
@@ -1,15 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.bulkWriteDepartmentsSubjects = void 0;
4
- const departmentsSubjects_getters_1 = require("./departmentsSubjects.getters");
5
- /**
6
- * Generic batch write for the departmentsSubjects collection — a thin passthrough to the
7
- * driver's bulkWrite, with no diffing/key-building/business logic. `operations` must be
8
- * non-empty (the driver throws on an empty batch). Errors (including partial failures under
9
- * `{ ordered: false }`) propagate unchanged, so callers can still catch `MongoBulkWriteError`.
10
- */
11
- const bulkWriteDepartmentsSubjects = async (operations, options) => {
12
- return (0, departmentsSubjects_getters_1.getDepartmentsSubjectsCollection)().bulkWrite(operations, options);
13
- };
14
- exports.bulkWriteDepartmentsSubjects = bulkWriteDepartmentsSubjects;
15
- //# sourceMappingURL=departmentsSubjects.setters.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"departmentsSubjects.setters.js","sourceRoot":"","sources":["../../../src/municipal/departmentsSubjects/departmentsSubjects.setters.ts"],"names":[],"mappings":";;;AAEA,+EAAiF;AAEjF;;;;;GAKG;AACI,MAAM,4BAA4B,GAAG,KAAK,EAC/C,UAAsD,EACtD,OAA0B,EACA,EAAE;IAC5B,OAAO,IAAA,8DAAgC,GAAE,CAAC,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AAC3E,CAAC,CAAC;AALW,QAAA,4BAA4B,gCAKvC"}
@@ -1,10 +0,0 @@
1
- import { AnyBulkWriteOperation, BulkWriteOptions, BulkWriteResult } from "mongodb";
2
- import { Street } from "./streets.types";
3
- /**
4
- * Generic batch write for the streets collection — a thin passthrough to the driver's
5
- * bulkWrite, with no diffing/key-building/business logic. `operations` must be non-empty
6
- * (the driver throws on an empty batch). Errors (including partial failures under
7
- * `{ ordered: false }`) propagate unchanged, so callers can still catch `MongoBulkWriteError`.
8
- */
9
- export declare const bulkWriteStreets: (operations: AnyBulkWriteOperation<Street>[], options?: BulkWriteOptions) => Promise<BulkWriteResult>;
10
- //# sourceMappingURL=streets.setters.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"streets.setters.d.ts","sourceRoot":"","sources":["../../../src/municipal/streets/streets.setters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AACnF,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAGzC;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,GAC3B,YAAY,qBAAqB,CAAC,MAAM,CAAC,EAAE,EAC3C,UAAU,gBAAgB,KACzB,OAAO,CAAC,eAAe,CAEzB,CAAC"}
@@ -1,15 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.bulkWriteStreets = void 0;
4
- const streets_getters_1 = require("./streets.getters");
5
- /**
6
- * Generic batch write for the streets collection — a thin passthrough to the driver's
7
- * bulkWrite, with no diffing/key-building/business logic. `operations` must be non-empty
8
- * (the driver throws on an empty batch). Errors (including partial failures under
9
- * `{ ordered: false }`) propagate unchanged, so callers can still catch `MongoBulkWriteError`.
10
- */
11
- const bulkWriteStreets = async (operations, options) => {
12
- return (0, streets_getters_1.getStreetsCollection)().bulkWrite(operations, options);
13
- };
14
- exports.bulkWriteStreets = bulkWriteStreets;
15
- //# sourceMappingURL=streets.setters.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"streets.setters.js","sourceRoot":"","sources":["../../../src/municipal/streets/streets.setters.ts"],"names":[],"mappings":";;;AAEA,uDAAyD;AAEzD;;;;;GAKG;AACI,MAAM,gBAAgB,GAAG,KAAK,EACnC,UAA2C,EAC3C,OAA0B,EACA,EAAE;IAC5B,OAAO,IAAA,sCAAoB,GAAE,CAAC,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AAC/D,CAAC,CAAC;AALW,QAAA,gBAAgB,oBAK3B"}
@@ -1,5 +0,0 @@
1
- export * from "./reconcile.types";
2
- export * from "./reconcile.ops";
3
- export * from "./reconcile.diff";
4
- export * from "./reconcile.execute";
5
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/reconcile/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/reconcile/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oDAAkC;AAClC,kDAAgC;AAChC,mDAAiC;AACjC,sDAAoC"}
@@ -1,4 +0,0 @@
1
- import { Document } from "mongodb";
2
- import { ReconcileConfig, ReconcileDiffResult } from "./reconcile.types";
3
- export declare function computeReconcileDiff<TSource, TDb extends Document, TKey extends string | number>(config: ReconcileConfig<TSource, TDb, TKey>, now?: Date): ReconcileDiffResult<TDb>;
4
- //# sourceMappingURL=reconcile.diff.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"reconcile.diff.d.ts","sourceRoot":"","sources":["../../src/reconcile/reconcile.diff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAEzE,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,GAAG,SAAS,QAAQ,EAAE,IAAI,SAAS,MAAM,GAAG,MAAM,EAC9F,MAAM,EAAE,eAAe,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,EAC3C,GAAG,GAAE,IAAiB,GACrB,mBAAmB,CAAC,GAAG,CAAC,CA8C1B"}
@@ -1,36 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.computeReconcileDiff = computeReconcileDiff;
4
- function computeReconcileDiff(config, now = new Date()) {
5
- const { source, dbRecords, getSourceKey, getDbKey, buildInsertOp, buildUpdateOp, buildDeactivateOp, shouldDeactivate = () => true, } = config;
6
- const dbByKey = new Map(dbRecords.map((dbRecord) => [getDbKey(dbRecord), dbRecord]));
7
- const sourceKeys = new Set();
8
- const bulkOps = [];
9
- const counts = { inserted: 0, updated: 0, deactivated: 0, exists: 0 };
10
- for (const sourceRecord of source) {
11
- const key = getSourceKey(sourceRecord);
12
- sourceKeys.add(key);
13
- const dbRecord = dbByKey.get(key);
14
- if (!dbRecord) {
15
- bulkOps.push(buildInsertOp(sourceRecord, now));
16
- counts.inserted++;
17
- continue;
18
- }
19
- const updateOp = buildUpdateOp(sourceRecord, dbRecord, now);
20
- if (updateOp) {
21
- bulkOps.push(updateOp);
22
- counts.updated++;
23
- }
24
- else {
25
- counts.exists++;
26
- }
27
- }
28
- for (const dbRecord of dbRecords) {
29
- if (!sourceKeys.has(getDbKey(dbRecord)) && shouldDeactivate(dbRecord)) {
30
- bulkOps.push(buildDeactivateOp(dbRecord, now));
31
- counts.deactivated++;
32
- }
33
- }
34
- return { bulkOps, counts };
35
- }
36
- //# sourceMappingURL=reconcile.diff.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"reconcile.diff.js","sourceRoot":"","sources":["../../src/reconcile/reconcile.diff.ts"],"names":[],"mappings":";;AAGA,oDAiDC;AAjDD,SAAgB,oBAAoB,CAClC,MAA2C,EAC3C,MAAY,IAAI,IAAI,EAAE;IAEtB,MAAM,EACJ,MAAM,EACN,SAAS,EACT,YAAY,EACZ,QAAQ,EACR,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,gBAAgB,GAAG,GAAG,EAAE,CAAC,IAAI,GAC9B,GAAG,MAAM,CAAC;IAEX,MAAM,OAAO,GAAG,IAAI,GAAG,CAAY,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IAChG,MAAM,UAAU,GAAG,IAAI,GAAG,EAAQ,CAAC;IAEnC,MAAM,OAAO,GAAwC,EAAE,CAAC;IACxD,MAAM,MAAM,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IAEtE,KAAK,MAAM,YAAY,IAAI,MAAM,EAAE,CAAC;QAClC,MAAM,GAAG,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;QACvC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACpB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAElC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,CAAC;YAC/C,MAAM,CAAC,QAAQ,EAAE,CAAC;YAClB,SAAS;QACX,CAAC;QAED,MAAM,QAAQ,GAAG,aAAa,CAAC,YAAY,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC5D,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACvB,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,CAAC;IACH,CAAC;IAED,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC;YACtE,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;YAC/C,MAAM,CAAC,WAAW,EAAE,CAAC;QACvB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AAC7B,CAAC"}
@@ -1,7 +0,0 @@
1
- import { BulkWriteOptions, Collection, Document } from "mongodb";
2
- import { BulkWriteOp } from "./reconcile.types";
3
- export interface ExecuteReconcileBulkWriteResult {
4
- errors: string[];
5
- }
6
- export declare function executeReconcileBulkWrite<TDb extends Document>(collection: Collection<TDb>, bulkOps: BulkWriteOp<TDb>[], options?: BulkWriteOptions): Promise<ExecuteReconcileBulkWriteResult>;
7
- //# sourceMappingURL=reconcile.execute.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"reconcile.execute.d.ts","sourceRoot":"","sources":["../../src/reconcile/reconcile.execute.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,QAAQ,EAAuB,MAAM,SAAS,CAAC;AACtF,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,WAAW,+BAA+B;IAC9C,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,wBAAsB,yBAAyB,CAAC,GAAG,SAAS,QAAQ,EAClE,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,EAC3B,OAAO,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE,EAC3B,OAAO,GAAE,gBAAqC,GAC7C,OAAO,CAAC,+BAA+B,CAAC,CAa1C"}
@@ -1,20 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.executeReconcileBulkWrite = executeReconcileBulkWrite;
4
- const mongodb_1 = require("mongodb");
5
- async function executeReconcileBulkWrite(collection, bulkOps, options = { ordered: false }) {
6
- if (bulkOps.length === 0)
7
- return { errors: [] };
8
- try {
9
- await collection.bulkWrite(bulkOps, options);
10
- return { errors: [] };
11
- }
12
- catch (err) {
13
- if (err instanceof mongodb_1.MongoBulkWriteError) {
14
- const writeErrors = [err.writeErrors].flat();
15
- return { errors: writeErrors.map((writeError) => `Write error: ${writeError.errmsg}`) };
16
- }
17
- return { errors: [err instanceof Error ? err.message : String(err)] };
18
- }
19
- }
20
- //# sourceMappingURL=reconcile.execute.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"reconcile.execute.js","sourceRoot":"","sources":["../../src/reconcile/reconcile.execute.ts"],"names":[],"mappings":";;AAOA,8DAiBC;AAxBD,qCAAsF;AAO/E,KAAK,UAAU,yBAAyB,CAC7C,UAA2B,EAC3B,OAA2B,EAC3B,UAA4B,EAAE,OAAO,EAAE,KAAK,EAAE;IAE9C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IAEhD,IAAI,CAAC;QACH,MAAM,UAAU,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC7C,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IACxB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,6BAAmB,EAAE,CAAC;YACvC,MAAM,WAAW,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC;YAC7C,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,gBAAgB,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;QAC1F,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;IACxE,CAAC;AACH,CAAC"}
@@ -1,12 +0,0 @@
1
- import { Document, Filter } from "mongodb";
2
- import { BulkWriteOp } from "./reconcile.types";
3
- /**
4
- * updateOne with a plain $set — e.g. a deactivation:
5
- * buildSetOp({ _id }, { isActive: false, updatedAt: now })
6
- */
7
- export declare function buildSetOp<T extends Document>(filter: Filter<T>, setFields: Partial<T>): BulkWriteOp<T>;
8
- /**
9
- * updateOne with $set + $setOnInsert + upsert:true.
10
- */
11
- export declare function buildUpsertOp<T extends Document>(filter: Filter<T>, setFields: Partial<T>, setOnInsertFields?: Partial<T>): BulkWriteOp<T>;
12
- //# sourceMappingURL=reconcile.ops.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"reconcile.ops.d.ts","sourceRoot":"","sources":["../../src/reconcile/reconcile.ops.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,CAAC,SAAS,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAEvG;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,QAAQ,EAC9C,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EACjB,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,EACrB,iBAAiB,GAAE,OAAO,CAAC,CAAC,CAAM,GACjC,WAAW,CAAC,CAAC,CAAC,CAQhB"}
@@ -1,24 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.buildSetOp = buildSetOp;
4
- exports.buildUpsertOp = buildUpsertOp;
5
- /**
6
- * updateOne with a plain $set — e.g. a deactivation:
7
- * buildSetOp({ _id }, { isActive: false, updatedAt: now })
8
- */
9
- function buildSetOp(filter, setFields) {
10
- return { updateOne: { filter, update: { $set: setFields } } };
11
- }
12
- /**
13
- * updateOne with $set + $setOnInsert + upsert:true.
14
- */
15
- function buildUpsertOp(filter, setFields, setOnInsertFields = {}) {
16
- return {
17
- updateOne: {
18
- filter,
19
- update: { $set: setFields, $setOnInsert: setOnInsertFields },
20
- upsert: true,
21
- },
22
- };
23
- }
24
- //# sourceMappingURL=reconcile.ops.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"reconcile.ops.js","sourceRoot":"","sources":["../../src/reconcile/reconcile.ops.ts"],"names":[],"mappings":";;AAOA,gCAEC;AAKD,sCAYC;AAvBD;;;GAGG;AACH,SAAgB,UAAU,CAAqB,MAAiB,EAAE,SAAqB;IACrF,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;AAChE,CAAC;AAED;;GAEG;AACH,SAAgB,aAAa,CAC3B,MAAiB,EACjB,SAAqB,EACrB,oBAAgC,EAAE;IAElC,OAAO;QACL,SAAS,EAAE;YACT,MAAM;YACN,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,iBAAiB,EAAE;YAC5D,MAAM,EAAE,IAAI;SACb;KACF,CAAC;AACJ,CAAC"}
@@ -1,32 +0,0 @@
1
- import { AnyBulkWriteOperation, Document } from "mongodb";
2
- export type BulkWriteOp<T extends Document> = AnyBulkWriteOperation<T>;
3
- export interface ReconcileCounts {
4
- inserted: number;
5
- updated: number;
6
- deactivated: number;
7
- exists: number;
8
- }
9
- export interface ReconcileDiffResult<TDb extends Document> {
10
- bulkOps: BulkWriteOp<TDb>[];
11
- counts: ReconcileCounts;
12
- }
13
- export interface ReconcileConfig<TSource, TDb extends Document, TKey extends string | number> {
14
- source: TSource[];
15
- dbRecords: TDb[];
16
- getSourceKey: (source: TSource) => TKey;
17
- getDbKey: (dbRecord: TDb) => TKey;
18
- buildInsertOp: (source: TSource, now: Date) => BulkWriteOp<TDb>;
19
- /** Return null when unchanged — counted as `exists`, no op emitted. */
20
- buildUpdateOp: (source: TSource, existing: TDb, now: Date) => BulkWriteOp<TDb> | null;
21
- /**
22
- * Called for every dbRecord missing from source (and passing shouldDeactivate).
23
- * The caller decides the op shape entirely — typically via buildSetOp.
24
- */
25
- buildDeactivateOp: (dbRecord: TDb, now: Date) => BulkWriteOp<TDb>;
26
- /**
27
- * Whether a missing dbRecord should even be considered for deactivation.
28
- * Defaults to always true — core-db has no opinion on what "already inactive" means.
29
- */
30
- shouldDeactivate?: (dbRecord: TDb) => boolean;
31
- }
32
- //# sourceMappingURL=reconcile.types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"reconcile.types.d.ts","sourceRoot":"","sources":["../../src/reconcile/reconcile.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAE1D,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,QAAQ,IAAI,qBAAqB,CAAC,CAAC,CAAC,CAAC;AAEvE,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,mBAAmB,CAAC,GAAG,SAAS,QAAQ;IACvD,OAAO,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;IAC5B,MAAM,EAAE,eAAe,CAAC;CACzB;AAED,MAAM,WAAW,eAAe,CAAC,OAAO,EAAE,GAAG,SAAS,QAAQ,EAAE,IAAI,SAAS,MAAM,GAAG,MAAM;IAC1F,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,SAAS,EAAE,GAAG,EAAE,CAAC;IACjB,YAAY,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACxC,QAAQ,EAAE,CAAC,QAAQ,EAAE,GAAG,KAAK,IAAI,CAAC;IAClC,aAAa,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,KAAK,WAAW,CAAC,GAAG,CAAC,CAAC;IAChE,uEAAuE;IACvE,aAAa,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,WAAW,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;IACtF;;;OAGG;IACH,iBAAiB,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,WAAW,CAAC,GAAG,CAAC,CAAC;IAClE;;;OAGG;IACH,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,KAAK,OAAO,CAAC;CAC/C"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"reconcile.types.js","sourceRoot":"","sources":["../../src/reconcile/reconcile.types.ts"],"names":[],"mappings":""}