@talkpilot/core-db 1.3.68 → 1.3.70

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 (245) 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 -816
  5. package/dist/talkpilot/calls/calls.getters.d.ts +2 -1
  6. package/dist/talkpilot/calls/calls.getters.d.ts.map +1 -1
  7. package/dist/talkpilot/calls/calls.getters.js +6 -1
  8. package/dist/talkpilot/calls/calls.getters.js.map +1 -1
  9. package/dist/talkpilot/calls/calls.types.d.ts +3 -1
  10. package/dist/talkpilot/calls/calls.types.d.ts.map +1 -1
  11. package/jest.config.js +20 -20
  12. package/package.json +46 -46
  13. package/src/__tests__/setup.ts +20 -20
  14. package/src/bulkWrite/__tests__/bulkWrite.spec.ts +65 -65
  15. package/src/bulkWrite/bulkWrite.ops.ts +45 -45
  16. package/src/bulkWrite/bulkWrite.types.ts +4 -4
  17. package/src/bulkWrite/index.ts +2 -2
  18. package/src/config.ts +9 -9
  19. package/src/configuration/index.ts +17 -17
  20. package/src/configuration/internalModels/index.ts +3 -3
  21. package/src/configuration/internalModels/internalModels.constants.ts +1 -1
  22. package/src/configuration/internalModels/internalModels.getters.ts +33 -33
  23. package/src/configuration/internalModels/internalModels.types.ts +12 -12
  24. package/src/configuration/models/__tests__/models.getters.spec.ts +67 -67
  25. package/src/configuration/models/index.ts +27 -27
  26. package/src/configuration/models/models.constants.ts +20 -20
  27. package/src/configuration/models/models.getters.ts +71 -71
  28. package/src/configuration/models/models.types.ts +80 -80
  29. package/src/configuration/mongodb-client.ts +62 -62
  30. package/src/configuration/prompts/index.ts +2 -2
  31. package/src/configuration/prompts/prompts.getters.ts +49 -49
  32. package/src/configuration/prompts/prompts.types.ts +11 -11
  33. package/src/connection.ts +81 -81
  34. package/src/index.ts +47 -47
  35. package/src/municipal/__tests__/validation.spec.ts +62 -62
  36. package/src/municipal/cities/cities.getters.ts +50 -50
  37. package/src/municipal/cities/cities.types.ts +11 -11
  38. package/src/municipal/cities/index.ts +2 -2
  39. package/src/municipal/departmentsSubjects/__tests__/departmentsSubjects.spec.ts +272 -272
  40. package/src/municipal/departmentsSubjects/departmentsSubjects.getters.ts +317 -317
  41. package/src/municipal/departmentsSubjects/departmentsSubjects.types.ts +73 -73
  42. package/src/municipal/departmentsSubjects/index.ts +9 -9
  43. package/src/municipal/index.ts +22 -22
  44. package/src/municipal/mongodb-client.ts +61 -61
  45. package/src/municipal/muniIssues/__tests__/muniIssues.setters.spec.ts +94 -94
  46. package/src/municipal/muniIssues/__tests__/muniIssues.setup.spec.ts +92 -92
  47. package/src/municipal/muniIssues/index.ts +17 -17
  48. package/src/municipal/muniIssues/muniIssues.constants.ts +18 -18
  49. package/src/municipal/muniIssues/muniIssues.getters.ts +24 -24
  50. package/src/municipal/muniIssues/muniIssues.schema.ts +66 -66
  51. package/src/municipal/muniIssues/muniIssues.setters.ts +24 -24
  52. package/src/municipal/muniIssues/muniIssues.setup.ts +65 -65
  53. package/src/municipal/muniIssues/muniIssues.types.ts +37 -37
  54. package/src/municipal/streets/__tests__/streets.spec.ts +253 -253
  55. package/src/municipal/streets/index.ts +2 -2
  56. package/src/municipal/streets/streets.getters.ts +140 -140
  57. package/src/municipal/streets/streets.types.ts +19 -19
  58. package/src/municipal/systemInstructions/__tests__/getters.spec.ts +113 -113
  59. package/src/municipal/systemInstructions/__tests__/setters.spec.ts +274 -274
  60. package/src/municipal/systemInstructions/index.ts +7 -7
  61. package/src/municipal/systemInstructions/instructions.getters.ts +57 -57
  62. package/src/municipal/systemInstructions/instructions.setters.ts +119 -119
  63. package/src/municipal/systemInstructions/instructions.types.ts +30 -30
  64. package/src/municipal/tickets/__tests__/tickets.getters.spec.ts +30 -30
  65. package/src/municipal/tickets/__tests__/tickets.statistics.spec.ts +99 -99
  66. package/src/municipal/tickets/index.ts +9 -9
  67. package/src/municipal/tickets/tickets.constants.ts +8 -8
  68. package/src/municipal/tickets/tickets.getters.ts +121 -121
  69. package/src/municipal/tickets/tickets.statistics.aggregation.ts +110 -110
  70. package/src/municipal/tickets/tickets.statistics.getters.ts +145 -145
  71. package/src/municipal/tickets/tickets.types.ts +54 -54
  72. package/src/municipal/utils/types.ts +11 -11
  73. package/src/talkpilot/__tests__/db.spec.ts +38 -38
  74. package/src/talkpilot/__tests__/mongodb-client.spec.ts +18 -18
  75. package/src/talkpilot/__tests__/validation.spec.ts +68 -68
  76. package/src/talkpilot/agents/__tests__/agents.getters.spec.ts +29 -29
  77. package/src/talkpilot/agents/agents.getters.ts +34 -34
  78. package/src/talkpilot/agents/agents.types.ts +14 -14
  79. package/src/talkpilot/agents/index.ts +2 -2
  80. package/src/talkpilot/backgroundToolResults/__tests__/backgroundToolResults.getters.spec.ts +147 -147
  81. package/src/talkpilot/backgroundToolResults/backgroundToolResults.getters.ts +65 -65
  82. package/src/talkpilot/backgroundToolResults/backgroundToolResults.types.ts +23 -23
  83. package/src/talkpilot/backgroundToolResults/index.ts +2 -2
  84. package/src/talkpilot/callTokenUsage/__tests__/callTokenUsage.getters.spec.ts +57 -57
  85. package/src/talkpilot/callTokenUsage/callTokenUsage.getters.ts +42 -42
  86. package/src/talkpilot/callTokenUsage/callTokenUsage.types.ts +28 -28
  87. package/src/talkpilot/callTokenUsage/index.ts +2 -2
  88. package/src/talkpilot/calls/__tests__/callStats.utils.spec.ts +128 -128
  89. package/src/talkpilot/calls/__tests__/calls.dashboard.spec.ts +229 -229
  90. package/src/talkpilot/calls/__tests__/calls.spec.ts +519 -471
  91. package/src/talkpilot/calls/__tests__/calls.statistics.spec.ts +483 -483
  92. package/src/talkpilot/calls/calls.constants.ts +49 -49
  93. package/src/talkpilot/calls/calls.getters.ts +295 -277
  94. package/src/talkpilot/calls/calls.statistics.getters.ts +668 -668
  95. package/src/talkpilot/calls/calls.statistics.types.ts +48 -48
  96. package/src/talkpilot/calls/calls.types.ts +154 -151
  97. package/src/talkpilot/calls/dashboard/calls.dashboard.ts +295 -295
  98. package/src/talkpilot/calls/dashboard/calls.dashboard.types.ts +57 -57
  99. package/src/talkpilot/calls/index.ts +6 -6
  100. package/src/talkpilot/clientAudioBuffers/__tests__/clientAudioBuffer.getters.spec.ts +160 -160
  101. package/src/talkpilot/clientAudioBuffers/clientAudioBuffer.getters.ts +117 -117
  102. package/src/talkpilot/clientAudioBuffers/clientsAudioBuffers.types.ts +25 -25
  103. package/src/talkpilot/clientAudioBuffers/index.ts +2 -2
  104. package/src/talkpilot/clients/__tests__/clients.quota.spec.ts +123 -123
  105. package/src/talkpilot/clients/clients.getters.ts +19 -19
  106. package/src/talkpilot/clients/clients.quota.getters.ts +119 -119
  107. package/src/talkpilot/clients/clients.quota.types.ts +27 -27
  108. package/src/talkpilot/clients/clients.types.ts +18 -18
  109. package/src/talkpilot/clients/index.ts +4 -4
  110. package/src/talkpilot/clientsConfig/__tests__/clientsConfig.getters.spec.ts +423 -423
  111. package/src/talkpilot/clientsConfig/__tests__/clientsConfig.spec.ts +212 -212
  112. package/src/talkpilot/clientsConfig/clientsConfig.constants.ts +2 -2
  113. package/src/talkpilot/clientsConfig/clientsConfig.getters.ts +247 -247
  114. package/src/talkpilot/clientsConfig/clientsConfig.types.ts +137 -137
  115. package/src/talkpilot/clientsConfig/index.ts +3 -3
  116. package/src/talkpilot/contextNotes/__tests__/contextNotes.getters.spec.ts +217 -217
  117. package/src/talkpilot/contextNotes/contextNotes.getters.ts +85 -85
  118. package/src/talkpilot/contextNotes/contextNotes.types.ts +20 -20
  119. package/src/talkpilot/contextNotes/index.ts +2 -2
  120. package/src/talkpilot/flows/__tests__/flows.schema.spec.ts +124 -124
  121. package/src/talkpilot/flows/flows.getter.ts +34 -34
  122. package/src/talkpilot/flows/flows.schema.ts +180 -180
  123. package/src/talkpilot/flows/flows.types.ts +211 -211
  124. package/src/talkpilot/flows/index.ts +7 -7
  125. package/src/talkpilot/groups/__tests__/groups.spec.ts +90 -90
  126. package/src/talkpilot/groups/__tests__/phone.utils.spec.ts +32 -32
  127. package/src/talkpilot/groups/groups.getters.ts +30 -30
  128. package/src/talkpilot/groups/groups.types.ts +29 -29
  129. package/src/talkpilot/groups/index.ts +3 -3
  130. package/src/talkpilot/groups/phone.utils.ts +46 -46
  131. package/src/talkpilot/index.ts +32 -32
  132. package/src/talkpilot/leads/index.ts +2 -2
  133. package/src/talkpilot/leads/leads.getter.ts +6 -6
  134. package/src/talkpilot/leads/leads.schema.ts +33 -33
  135. package/src/talkpilot/leads/leads.types.ts +20 -20
  136. package/src/talkpilot/mongodb-client.ts +78 -78
  137. package/src/talkpilot/phone_numbers/__tests__/phone_numbers.spec.ts +530 -530
  138. package/src/talkpilot/phone_numbers/index.ts +2 -2
  139. package/src/talkpilot/phone_numbers/phone_numbers.getter.ts +240 -240
  140. package/src/talkpilot/phone_numbers/phone_numbers.schema.ts +17 -17
  141. package/src/talkpilot/phone_numbers/phone_numbers.types.ts +30 -30
  142. package/src/talkpilot/phone_numbers/phone_numbers.utils.ts +9 -9
  143. package/src/talkpilot/plans/__tests__/plans.spec.ts +70 -70
  144. package/src/talkpilot/plans/index.ts +2 -2
  145. package/src/talkpilot/plans/plans.getters.ts +132 -132
  146. package/src/talkpilot/plans/plans.types.ts +89 -89
  147. package/src/talkpilot/products/__tests__/products.getters.spec.ts +44 -44
  148. package/src/talkpilot/products/index.ts +2 -2
  149. package/src/talkpilot/products/products.getters.ts +12 -12
  150. package/src/talkpilot/products/products.types.ts +9 -9
  151. package/src/talkpilot/results/index.ts +7 -7
  152. package/src/talkpilot/results/results.getter.ts +39 -39
  153. package/src/talkpilot/results/results.schema.ts +25 -25
  154. package/src/talkpilot/results/results.types.ts +34 -34
  155. package/src/talkpilot/retry_analyze/__tests__/retryAnalyze.getters.spec.ts +156 -156
  156. package/src/talkpilot/retry_analyze/index.ts +2 -2
  157. package/src/talkpilot/retry_analyze/retryAnalyze.getters.ts +84 -84
  158. package/src/talkpilot/retry_analyze/retryAnalyze.types.ts +13 -13
  159. package/src/talkpilot/sessions/__tests__/sessions.spec.ts +147 -147
  160. package/src/talkpilot/sessions/index.ts +2 -2
  161. package/src/talkpilot/sessions/sessions.getter.ts +92 -92
  162. package/src/talkpilot/sessions/sessions.schema.ts +34 -34
  163. package/src/talkpilot/sessions/sessions.types.ts +30 -30
  164. package/src/talkpilot/subscriptions/__tests__/subscriptions.getters.utils.spec.ts +45 -45
  165. package/src/talkpilot/subscriptions/index.ts +3 -3
  166. package/src/talkpilot/subscriptions/subscriptions.getters.ts +146 -146
  167. package/src/talkpilot/subscriptions/subscriptions.getters.utils.ts +33 -33
  168. package/src/talkpilot/subscriptions/subscriptions.types.ts +66 -66
  169. package/src/talkpilot/utils/__tests__/query.utils.spec.ts +49 -49
  170. package/src/talkpilot/utils/query.utils.ts +21 -21
  171. package/src/test-utils/db-utils.ts +33 -33
  172. package/src/test-utils/factories/index.ts +18 -18
  173. package/src/test-utils/factories/municipal/cities.ts +16 -16
  174. package/src/test-utils/factories/municipal/departmentsSubjects.ts +37 -37
  175. package/src/test-utils/factories/municipal/muniIssues.ts +32 -32
  176. package/src/test-utils/factories/municipal/streets.ts +22 -22
  177. package/src/test-utils/factories/municipal/tickets.ts +39 -39
  178. package/src/test-utils/factories/talkpilot/agents.ts +19 -19
  179. package/src/test-utils/factories/talkpilot/calls.ts +37 -37
  180. package/src/test-utils/factories/talkpilot/clientAudioBuffers.ts +20 -20
  181. package/src/test-utils/factories/talkpilot/clientsConfig.ts +18 -18
  182. package/src/test-utils/factories/talkpilot/contextNotes.ts +40 -40
  183. package/src/test-utils/factories/talkpilot/flows.ts +33 -33
  184. package/src/test-utils/factories/talkpilot/groups.ts +33 -33
  185. package/src/test-utils/factories/talkpilot/phone_numbers.ts +22 -22
  186. package/src/test-utils/factories/talkpilot/sessions.ts +35 -35
  187. package/src/test-utils/factories/websitalk/knowledgeDocuments.ts +29 -29
  188. package/src/test-utils/factories/websitalk/scanResources.ts +26 -26
  189. package/src/test-utils/factories/websitalk/scans.ts +30 -30
  190. package/src/test-utils/factories/websitalk/websiteUrls.ts +17 -17
  191. package/src/utils/date.utils.ts +126 -126
  192. package/src/utils/shared.types.ts +4 -4
  193. package/src/utils/validation.ts +23 -23
  194. package/src/websitalk/index.ts +18 -18
  195. package/src/websitalk/knowledgeDocuments/__tests__/knowledgeDocuments.spec.ts +238 -238
  196. package/src/websitalk/knowledgeDocuments/index.ts +3 -3
  197. package/src/websitalk/knowledgeDocuments/knowledgeDocuments.constants.ts +26 -26
  198. package/src/websitalk/knowledgeDocuments/knowledgeDocuments.getters.ts +95 -95
  199. package/src/websitalk/knowledgeDocuments/knowledgeDocuments.types.ts +75 -75
  200. package/src/websitalk/mongodb-client.ts +61 -61
  201. package/src/websitalk/scanResources/__tests__/scanResources.spec.ts +267 -267
  202. package/src/websitalk/scanResources/index.ts +4 -4
  203. package/src/websitalk/scanResources/scanResources.constants.ts +60 -60
  204. package/src/websitalk/scanResources/scanResources.getters.ts +128 -128
  205. package/src/websitalk/scanResources/scanResources.types.ts +105 -105
  206. package/src/websitalk/scanResources/scanResources.utils.ts +31 -31
  207. package/src/websitalk/scans/__tests__/scans.spec.ts +362 -362
  208. package/src/websitalk/scans/index.ts +4 -4
  209. package/src/websitalk/scans/scans.constants.ts +18 -18
  210. package/src/websitalk/scans/scans.getters.ts +172 -172
  211. package/src/websitalk/scans/scans.types.ts +58 -58
  212. package/src/websitalk/scans/scans.utils.ts +5 -5
  213. package/src/websitalk/websiteUrls/__tests__/websiteUrls.spec.ts +77 -77
  214. package/src/websitalk/websiteUrls/index.ts +2 -2
  215. package/src/websitalk/websiteUrls/websiteUrls.getters.ts +65 -65
  216. package/src/websitalk/websiteUrls/websiteUrls.types.ts +13 -13
  217. package/tsconfig.json +23 -23
  218. package/dist/municipal/departmentsSubjects/departmentsSubjects.setters.d.ts +0 -10
  219. package/dist/municipal/departmentsSubjects/departmentsSubjects.setters.d.ts.map +0 -1
  220. package/dist/municipal/departmentsSubjects/departmentsSubjects.setters.js +0 -15
  221. package/dist/municipal/departmentsSubjects/departmentsSubjects.setters.js.map +0 -1
  222. package/dist/municipal/streets/streets.setters.d.ts +0 -10
  223. package/dist/municipal/streets/streets.setters.d.ts.map +0 -1
  224. package/dist/municipal/streets/streets.setters.js +0 -15
  225. package/dist/municipal/streets/streets.setters.js.map +0 -1
  226. package/dist/reconcile/index.d.ts +0 -5
  227. package/dist/reconcile/index.d.ts.map +0 -1
  228. package/dist/reconcile/index.js +0 -21
  229. package/dist/reconcile/index.js.map +0 -1
  230. package/dist/reconcile/reconcile.diff.d.ts +0 -4
  231. package/dist/reconcile/reconcile.diff.d.ts.map +0 -1
  232. package/dist/reconcile/reconcile.diff.js +0 -36
  233. package/dist/reconcile/reconcile.diff.js.map +0 -1
  234. package/dist/reconcile/reconcile.execute.d.ts +0 -7
  235. package/dist/reconcile/reconcile.execute.d.ts.map +0 -1
  236. package/dist/reconcile/reconcile.execute.js +0 -20
  237. package/dist/reconcile/reconcile.execute.js.map +0 -1
  238. package/dist/reconcile/reconcile.ops.d.ts +0 -12
  239. package/dist/reconcile/reconcile.ops.d.ts.map +0 -1
  240. package/dist/reconcile/reconcile.ops.js +0 -24
  241. package/dist/reconcile/reconcile.ops.js.map +0 -1
  242. package/dist/reconcile/reconcile.types.d.ts +0 -32
  243. package/dist/reconcile/reconcile.types.d.ts.map +0 -1
  244. package/dist/reconcile/reconcile.types.js +0 -3
  245. package/dist/reconcile/reconcile.types.js.map +0 -1
@@ -1,57 +1,57 @@
1
- import { CityName, getDb, ObjectId } from "../index";
2
- import { Collection, Filter } from "mongodb";
3
- import { MIS_SystemInstruction, MIS_Tool } from "./instructions.types";
4
-
5
- export const getSystemInstructionsCollection =
6
- (): Collection<MIS_SystemInstruction> => {
7
- return getDb().collection<MIS_SystemInstruction>("system_instructions");
8
- };
9
- /**
10
- * Find system instructions by filter
11
- * @param filter filter to apply
12
- * @returns array of system instructions
13
- */
14
- export const findSystemInstructions = async (
15
- filter: Filter<MIS_SystemInstruction> = {},
16
- ): Promise<MIS_SystemInstruction[]> => {
17
- return await getSystemInstructionsCollection().find(filter).toArray();
18
- };
19
-
20
- /**
21
- * Get system instruction by id
22
- * @param id system instruction id
23
- * @returns system instruction or null if not found
24
- */
25
- export const getSystemInstructionById = async (
26
- id: string,
27
- ): Promise<MIS_SystemInstruction | null> => {
28
- return await getSystemInstructionsCollection().findOne({
29
- _id: new ObjectId(id),
30
- });
31
- };
32
- /**
33
- * Get all active system instructions for a city
34
- * @param cityName city name
35
- * @returns array of active system instructions
36
- */
37
- export const getActiveSystemInstructionsByCity = async (
38
- cityName: CityName,
39
- ): Promise<MIS_SystemInstruction[]> => {
40
- return await getSystemInstructionsCollection()
41
- .find({ cityName, isActive: true })
42
- .toArray();
43
- };
44
- /**
45
- * Get system instructions by tool and city
46
- * @param cityName city name
47
- * @param toolName tool name
48
- * @returns array of system instructions
49
- */
50
- export const getSystemInstructionsByToolAndCity = async (
51
- cityName: CityName,
52
- toolName: MIS_Tool,
53
- ): Promise<MIS_SystemInstruction[]> => {
54
- return await getSystemInstructionsCollection()
55
- .find({ cityName: cityName, tool: toolName })
56
- .toArray();
57
- };
1
+ import { CityName, getDb, ObjectId } from "../index";
2
+ import { Collection, Filter } from "mongodb";
3
+ import { MIS_SystemInstruction, MIS_Tool } from "./instructions.types";
4
+
5
+ export const getSystemInstructionsCollection =
6
+ (): Collection<MIS_SystemInstruction> => {
7
+ return getDb().collection<MIS_SystemInstruction>("system_instructions");
8
+ };
9
+ /**
10
+ * Find system instructions by filter
11
+ * @param filter filter to apply
12
+ * @returns array of system instructions
13
+ */
14
+ export const findSystemInstructions = async (
15
+ filter: Filter<MIS_SystemInstruction> = {},
16
+ ): Promise<MIS_SystemInstruction[]> => {
17
+ return await getSystemInstructionsCollection().find(filter).toArray();
18
+ };
19
+
20
+ /**
21
+ * Get system instruction by id
22
+ * @param id system instruction id
23
+ * @returns system instruction or null if not found
24
+ */
25
+ export const getSystemInstructionById = async (
26
+ id: string,
27
+ ): Promise<MIS_SystemInstruction | null> => {
28
+ return await getSystemInstructionsCollection().findOne({
29
+ _id: new ObjectId(id),
30
+ });
31
+ };
32
+ /**
33
+ * Get all active system instructions for a city
34
+ * @param cityName city name
35
+ * @returns array of active system instructions
36
+ */
37
+ export const getActiveSystemInstructionsByCity = async (
38
+ cityName: CityName,
39
+ ): Promise<MIS_SystemInstruction[]> => {
40
+ return await getSystemInstructionsCollection()
41
+ .find({ cityName, isActive: true })
42
+ .toArray();
43
+ };
44
+ /**
45
+ * Get system instructions by tool and city
46
+ * @param cityName city name
47
+ * @param toolName tool name
48
+ * @returns array of system instructions
49
+ */
50
+ export const getSystemInstructionsByToolAndCity = async (
51
+ cityName: CityName,
52
+ toolName: MIS_Tool,
53
+ ): Promise<MIS_SystemInstruction[]> => {
54
+ return await getSystemInstructionsCollection()
55
+ .find({ cityName: cityName, tool: toolName })
56
+ .toArray();
57
+ };
@@ -1,119 +1,119 @@
1
- import { ObjectId } from "../index";
2
- import { ObjectId as MongoObjectId } from "mongodb";
3
- import {
4
- MIS_SystemInstruction,
5
- MIS_TOOLS,
6
- QUERY_TYPES,
7
- } from "./instructions.types";
8
- import { getSystemInstructionsCollection } from "./instructions.getters";
9
-
10
- /**
11
- * Validate system instruction data
12
- * @param data partial system instruction data
13
- * @throws Error if tool or queryType is invalid
14
- */
15
- const validateInstructionData = (data: Partial<MIS_SystemInstruction>) => {
16
- if (
17
- data.tool &&
18
- !(Object.values(MIS_TOOLS) as string[]).includes(data.tool)
19
- ) {
20
- throw new Error(
21
- `Invalid tool value: ${data.tool}. Allowed values are: ${Object.values(MIS_TOOLS).join(", ")}`,
22
- );
23
- }
24
- if (
25
- data.queryType &&
26
- !(Object.values(QUERY_TYPES) as string[]).includes(data.queryType)
27
- ) {
28
- throw new Error(
29
- `Invalid queryType value: ${data.queryType}. Allowed values are: ${Object.values(QUERY_TYPES).join(", ")}`,
30
- );
31
- }
32
- };
33
-
34
- /**
35
- * Create a new system instruction
36
- * @param instructionData system instruction data
37
- * @returns inserted system instruction id
38
- */
39
- export const createSystemInstruction = async (
40
- instructionData: Omit<
41
- MIS_SystemInstruction,
42
- "_id" | "createdAt" | "updatedAt"
43
- >,
44
- ): Promise<MongoObjectId> => {
45
- validateInstructionData(instructionData as Partial<MIS_SystemInstruction>);
46
- const instruction: Omit<MIS_SystemInstruction, "_id"> = {
47
- //append doc metadata to user provided data
48
- ...instructionData,
49
- createdAt: new Date(),
50
- updatedAt: new Date(),
51
- };
52
- const { insertedId } = await getSystemInstructionsCollection().insertOne(
53
- instruction as MIS_SystemInstruction,
54
- );
55
- return insertedId;
56
- };
57
-
58
- /**
59
- * Update a system instruction by id
60
- * @param id system instruction id
61
- * @param data partial system instruction data
62
- * @returns updated system instruction or null if not found
63
- */
64
- export const updateSystemInstruction = async (
65
- id: string,
66
- data: Partial<Omit<MIS_SystemInstruction, "_id" | "createdAt" | "updatedAt">>,
67
- ): Promise<MIS_SystemInstruction | null> => {
68
- validateInstructionData(data as Partial<MIS_SystemInstruction>);
69
- const result = await getSystemInstructionsCollection().findOneAndUpdate(
70
- { _id: new ObjectId(id) },
71
- { $set: { ...data, updatedAt: new Date() } },
72
- { returnDocument: "after" },
73
- );
74
- return result || null;
75
- };
76
-
77
- /**
78
- * Delete a system instruction by id
79
- * @param id system instruction id
80
- * @returns true if deleted, false otherwise
81
- */
82
- export const deleteSystemInstruction = async (id: string): Promise<boolean> => {
83
- const result = await getSystemInstructionsCollection().deleteOne({
84
- _id: new ObjectId(id),
85
- });
86
- return result.deletedCount > 0;
87
- };
88
- /**
89
- * Activate a system instruction by id, sets isActive to true.
90
- * Does not check the current instruction state, calling this on an active instruction will do nothing.
91
- * @param id system instruction id
92
- * @returns true on success, false otherwise
93
- */
94
- export const activateSystemInstruction = async (
95
- id: string,
96
- ): Promise<boolean> => {
97
- const result = await getSystemInstructionsCollection().findOneAndUpdate(
98
- { _id: new ObjectId(id) },
99
- { $set: { isActive: true } },
100
- { returnDocument: "after" },
101
- );
102
- return Boolean(result);
103
- };
104
- /**
105
- * Deactivate a system instruction by id, sets isActive to false.
106
- * Does not check the current instruction state, calling this on a deactivated instruction will do nothing.
107
- * @param id system instruction id
108
- * @returns true on success, false otherwise
109
- */
110
- export const deactivateSystemInstruction = async (
111
- id: string,
112
- ): Promise<boolean> => {
113
- const result = await getSystemInstructionsCollection().findOneAndUpdate(
114
- { _id: new ObjectId(id) },
115
- { $set: { isActive: false } },
116
- { returnDocument: "after" },
117
- );
118
- return Boolean(result);
119
- };
1
+ import { ObjectId } from "../index";
2
+ import { ObjectId as MongoObjectId } from "mongodb";
3
+ import {
4
+ MIS_SystemInstruction,
5
+ MIS_TOOLS,
6
+ QUERY_TYPES,
7
+ } from "./instructions.types";
8
+ import { getSystemInstructionsCollection } from "./instructions.getters";
9
+
10
+ /**
11
+ * Validate system instruction data
12
+ * @param data partial system instruction data
13
+ * @throws Error if tool or queryType is invalid
14
+ */
15
+ const validateInstructionData = (data: Partial<MIS_SystemInstruction>) => {
16
+ if (
17
+ data.tool &&
18
+ !(Object.values(MIS_TOOLS) as string[]).includes(data.tool)
19
+ ) {
20
+ throw new Error(
21
+ `Invalid tool value: ${data.tool}. Allowed values are: ${Object.values(MIS_TOOLS).join(", ")}`,
22
+ );
23
+ }
24
+ if (
25
+ data.queryType &&
26
+ !(Object.values(QUERY_TYPES) as string[]).includes(data.queryType)
27
+ ) {
28
+ throw new Error(
29
+ `Invalid queryType value: ${data.queryType}. Allowed values are: ${Object.values(QUERY_TYPES).join(", ")}`,
30
+ );
31
+ }
32
+ };
33
+
34
+ /**
35
+ * Create a new system instruction
36
+ * @param instructionData system instruction data
37
+ * @returns inserted system instruction id
38
+ */
39
+ export const createSystemInstruction = async (
40
+ instructionData: Omit<
41
+ MIS_SystemInstruction,
42
+ "_id" | "createdAt" | "updatedAt"
43
+ >,
44
+ ): Promise<MongoObjectId> => {
45
+ validateInstructionData(instructionData as Partial<MIS_SystemInstruction>);
46
+ const instruction: Omit<MIS_SystemInstruction, "_id"> = {
47
+ //append doc metadata to user provided data
48
+ ...instructionData,
49
+ createdAt: new Date(),
50
+ updatedAt: new Date(),
51
+ };
52
+ const { insertedId } = await getSystemInstructionsCollection().insertOne(
53
+ instruction as MIS_SystemInstruction,
54
+ );
55
+ return insertedId;
56
+ };
57
+
58
+ /**
59
+ * Update a system instruction by id
60
+ * @param id system instruction id
61
+ * @param data partial system instruction data
62
+ * @returns updated system instruction or null if not found
63
+ */
64
+ export const updateSystemInstruction = async (
65
+ id: string,
66
+ data: Partial<Omit<MIS_SystemInstruction, "_id" | "createdAt" | "updatedAt">>,
67
+ ): Promise<MIS_SystemInstruction | null> => {
68
+ validateInstructionData(data as Partial<MIS_SystemInstruction>);
69
+ const result = await getSystemInstructionsCollection().findOneAndUpdate(
70
+ { _id: new ObjectId(id) },
71
+ { $set: { ...data, updatedAt: new Date() } },
72
+ { returnDocument: "after" },
73
+ );
74
+ return result || null;
75
+ };
76
+
77
+ /**
78
+ * Delete a system instruction by id
79
+ * @param id system instruction id
80
+ * @returns true if deleted, false otherwise
81
+ */
82
+ export const deleteSystemInstruction = async (id: string): Promise<boolean> => {
83
+ const result = await getSystemInstructionsCollection().deleteOne({
84
+ _id: new ObjectId(id),
85
+ });
86
+ return result.deletedCount > 0;
87
+ };
88
+ /**
89
+ * Activate a system instruction by id, sets isActive to true.
90
+ * Does not check the current instruction state, calling this on an active instruction will do nothing.
91
+ * @param id system instruction id
92
+ * @returns true on success, false otherwise
93
+ */
94
+ export const activateSystemInstruction = async (
95
+ id: string,
96
+ ): Promise<boolean> => {
97
+ const result = await getSystemInstructionsCollection().findOneAndUpdate(
98
+ { _id: new ObjectId(id) },
99
+ { $set: { isActive: true } },
100
+ { returnDocument: "after" },
101
+ );
102
+ return Boolean(result);
103
+ };
104
+ /**
105
+ * Deactivate a system instruction by id, sets isActive to false.
106
+ * Does not check the current instruction state, calling this on a deactivated instruction will do nothing.
107
+ * @param id system instruction id
108
+ * @returns true on success, false otherwise
109
+ */
110
+ export const deactivateSystemInstruction = async (
111
+ id: string,
112
+ ): Promise<boolean> => {
113
+ const result = await getSystemInstructionsCollection().findOneAndUpdate(
114
+ { _id: new ObjectId(id) },
115
+ { $set: { isActive: false } },
116
+ { returnDocument: "after" },
117
+ );
118
+ return Boolean(result);
119
+ };
@@ -1,30 +1,30 @@
1
- import { ObjectId } from "mongodb";
2
-
3
- import { CityName } from "../utils/types";
4
-
5
- export const MIS_TOOLS = {
6
- findStreet: "findStreet",
7
- findSubject: "findSubject",
8
- } as const;
9
-
10
- export const QUERY_TYPES = {
11
- exactlyOne: "exactlyOne",
12
- any: "any",
13
- all: "all",
14
- none: "none",
15
- } as const;
16
-
17
- export type MIS_Tool = (typeof MIS_TOOLS)[keyof typeof MIS_TOOLS];
18
- export type QueryType = (typeof QUERY_TYPES)[keyof typeof QUERY_TYPES];
19
-
20
- export type MIS_SystemInstruction = {
21
- _id: ObjectId;
22
- createdAt: Date;
23
- updatedAt: Date;
24
- cityName: CityName;
25
- instruction: string;
26
- isActive: boolean;
27
- tool: MIS_Tool;
28
- queryType: QueryType;
29
- tags?: string[]; //no tags implies all wildcard (?)
30
- };
1
+ import { ObjectId } from "mongodb";
2
+
3
+ import { CityName } from "../utils/types";
4
+
5
+ export const MIS_TOOLS = {
6
+ findStreet: "findStreet",
7
+ findSubject: "findSubject",
8
+ } as const;
9
+
10
+ export const QUERY_TYPES = {
11
+ exactlyOne: "exactlyOne",
12
+ any: "any",
13
+ all: "all",
14
+ none: "none",
15
+ } as const;
16
+
17
+ export type MIS_Tool = (typeof MIS_TOOLS)[keyof typeof MIS_TOOLS];
18
+ export type QueryType = (typeof QUERY_TYPES)[keyof typeof QUERY_TYPES];
19
+
20
+ export type MIS_SystemInstruction = {
21
+ _id: ObjectId;
22
+ createdAt: Date;
23
+ updatedAt: Date;
24
+ cityName: CityName;
25
+ instruction: string;
26
+ isActive: boolean;
27
+ tool: MIS_Tool;
28
+ queryType: QueryType;
29
+ tags?: string[]; //no tags implies all wildcard (?)
30
+ };
@@ -1,30 +1,30 @@
1
- import { findTicketsByCallSid } from "../tickets.getters";
2
- import { setDb } from "../../index";
3
- import { Db, Collection } from "mongodb";
4
- import { createTicket } from "../../../test-utils/factories";
5
-
6
- describe("tickets getters", () => {
7
- let mockDb: Partial<Db>;
8
- let mockCollection: Partial<Collection>;
9
-
10
- beforeEach(() => {
11
- const mockTicket = createTicket({ callSid: "123" });
12
- mockCollection = {
13
- find: jest.fn().mockReturnValue({
14
- toArray: jest.fn().mockResolvedValue([mockTicket]),
15
- }),
16
- };
17
- mockDb = {
18
- collection: jest.fn().mockReturnValue(mockCollection),
19
- };
20
- setDb(mockDb as Db);
21
- });
22
-
23
- it("findTicketsByCallSid should return tickets for the given callSid", async () => {
24
- const result = await findTicketsByCallSid("123");
25
-
26
- expect(mockDb.collection).toHaveBeenCalledWith("tickets");
27
- expect(mockCollection.find).toHaveBeenCalledWith({ callSid: "123" });
28
- expect(result[0].callSid).toBe("123");
29
- });
30
- });
1
+ import { findTicketsByCallSid } from "../tickets.getters";
2
+ import { setDb } from "../../index";
3
+ import { Db, Collection } from "mongodb";
4
+ import { createTicket } from "../../../test-utils/factories";
5
+
6
+ describe("tickets getters", () => {
7
+ let mockDb: Partial<Db>;
8
+ let mockCollection: Partial<Collection>;
9
+
10
+ beforeEach(() => {
11
+ const mockTicket = createTicket({ callSid: "123" });
12
+ mockCollection = {
13
+ find: jest.fn().mockReturnValue({
14
+ toArray: jest.fn().mockResolvedValue([mockTicket]),
15
+ }),
16
+ };
17
+ mockDb = {
18
+ collection: jest.fn().mockReturnValue(mockCollection),
19
+ };
20
+ setDb(mockDb as Db);
21
+ });
22
+
23
+ it("findTicketsByCallSid should return tickets for the given callSid", async () => {
24
+ const result = await findTicketsByCallSid("123");
25
+
26
+ expect(mockDb.collection).toHaveBeenCalledWith("tickets");
27
+ expect(mockCollection.find).toHaveBeenCalledWith({ callSid: "123" });
28
+ expect(result[0].callSid).toBe("123");
29
+ });
30
+ });