@talkpilot/core-db 1.3.84 → 1.3.85
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.cursor/rules/development.mdc +65 -65
- package/AGENTS.md +49 -49
- package/DEVELOPMENT.md +141 -141
- package/README.md +846 -847
- package/dist/configuration/gptLive.seed.d.ts +2 -0
- package/dist/configuration/gptLive.seed.d.ts.map +1 -0
- package/dist/configuration/gptLive.seed.js +59 -0
- package/dist/configuration/gptLive.seed.js.map +1 -0
- package/dist/municipal/muniIssues/index.d.ts +2 -3
- package/dist/municipal/muniIssues/index.d.ts.map +1 -1
- package/dist/municipal/muniIssues/index.js +1 -4
- package/dist/municipal/muniIssues/index.js.map +1 -1
- package/dist/municipal/muniIssues/muniIssues.constants.d.ts +0 -2
- package/dist/municipal/muniIssues/muniIssues.constants.d.ts.map +1 -1
- package/dist/municipal/muniIssues/muniIssues.constants.js +1 -8
- package/dist/municipal/muniIssues/muniIssues.constants.js.map +1 -1
- package/dist/municipal/muniIssues/muniIssues.getters.d.ts +1 -4
- package/dist/municipal/muniIssues/muniIssues.getters.d.ts.map +1 -1
- package/dist/municipal/muniIssues/muniIssues.getters.js +1 -35
- package/dist/municipal/muniIssues/muniIssues.getters.js.map +1 -1
- package/dist/municipal/muniIssues/muniIssues.schema.d.ts.map +1 -1
- package/dist/municipal/muniIssues/muniIssues.schema.js +0 -17
- package/dist/municipal/muniIssues/muniIssues.schema.js.map +1 -1
- package/dist/municipal/muniIssues/muniIssues.setters.d.ts +1 -3
- package/dist/municipal/muniIssues/muniIssues.setters.d.ts.map +1 -1
- package/dist/municipal/muniIssues/muniIssues.setters.js +2 -46
- package/dist/municipal/muniIssues/muniIssues.setters.js.map +1 -1
- package/dist/municipal/muniIssues/muniIssues.types.d.ts +2 -22
- package/dist/municipal/muniIssues/muniIssues.types.d.ts.map +1 -1
- package/dist/talkpilot/clients/clients.quota.constants.d.ts +2 -0
- package/dist/talkpilot/clients/clients.quota.constants.d.ts.map +1 -0
- package/dist/talkpilot/clients/clients.quota.constants.js +5 -0
- package/dist/talkpilot/clients/clients.quota.constants.js.map +1 -0
- package/dist/talkpilot/clients/clients.quota.utils.d.ts +8 -0
- package/dist/talkpilot/clients/clients.quota.utils.d.ts.map +1 -0
- package/dist/talkpilot/clients/clients.quota.utils.js +45 -0
- package/dist/talkpilot/clients/clients.quota.utils.js.map +1 -0
- package/dist/talkpilot/contextNotes/contextNotes.getters.d.ts +7 -1
- package/dist/talkpilot/contextNotes/contextNotes.getters.d.ts.map +1 -1
- package/dist/talkpilot/contextNotes/contextNotes.getters.js +37 -1
- package/dist/talkpilot/contextNotes/contextNotes.getters.js.map +1 -1
- package/dist/talkpilot/contextNotes/contextNotes.types.d.ts +6 -0
- package/dist/talkpilot/contextNotes/contextNotes.types.d.ts.map +1 -1
- package/jest.config.js +20 -20
- package/package.json +46 -46
- package/src/__tests__/setup.ts +20 -20
- package/src/bulkWrite/__tests__/bulkWrite.spec.ts +65 -65
- package/src/bulkWrite/bulkWrite.ops.ts +45 -45
- package/src/bulkWrite/bulkWrite.types.ts +4 -4
- package/src/bulkWrite/index.ts +2 -2
- package/src/config.ts +9 -9
- package/src/configuration/index.ts +17 -17
- package/src/configuration/internalModels/index.ts +3 -3
- package/src/configuration/internalModels/internalModels.constants.ts +1 -1
- package/src/configuration/internalModels/internalModels.getters.ts +33 -33
- package/src/configuration/internalModels/internalModels.types.ts +12 -12
- package/src/configuration/models/__tests__/models.getters.spec.ts +67 -67
- package/src/configuration/models/index.ts +27 -27
- package/src/configuration/models/models.constants.ts +20 -20
- package/src/configuration/models/models.getters.ts +71 -71
- package/src/configuration/models/models.types.ts +80 -80
- package/src/configuration/mongodb-client.ts +62 -62
- package/src/configuration/prompts/index.ts +2 -2
- package/src/configuration/prompts/prompts.getters.ts +49 -49
- package/src/configuration/prompts/prompts.types.ts +11 -11
- package/src/connection.ts +81 -81
- package/src/index.ts +48 -48
- package/src/municipal/__tests__/validation.spec.ts +62 -62
- package/src/municipal/cities/cities.getters.ts +50 -50
- package/src/municipal/cities/cities.types.ts +11 -11
- package/src/municipal/cities/index.ts +2 -2
- package/src/municipal/departmentsSubjects/__tests__/departmentsSubjects.spec.ts +272 -272
- package/src/municipal/departmentsSubjects/departmentsSubjects.getters.ts +317 -317
- package/src/municipal/departmentsSubjects/departmentsSubjects.types.ts +73 -73
- package/src/municipal/departmentsSubjects/index.ts +9 -9
- package/src/municipal/index.ts +23 -23
- package/src/municipal/mongodb-client.ts +61 -61
- package/src/municipal/muniIssues/__tests__/muniIssues.setters.spec.ts +94 -219
- package/src/municipal/muniIssues/__tests__/muniIssues.setup.spec.ts +92 -93
- package/src/municipal/muniIssues/index.ts +17 -24
- package/src/municipal/muniIssues/muniIssues.constants.ts +18 -27
- package/src/municipal/muniIssues/muniIssues.getters.ts +24 -73
- package/src/municipal/muniIssues/muniIssues.schema.ts +66 -85
- package/src/municipal/muniIssues/muniIssues.setters.ts +24 -87
- package/src/municipal/muniIssues/muniIssues.setup.ts +65 -65
- package/src/municipal/muniIssues/muniIssues.types.ts +37 -67
- package/src/municipal/residents/__tests__/residents.spec.ts +92 -92
- package/src/municipal/residents/index.ts +4 -4
- package/src/municipal/residents/residents.constants.ts +2 -2
- package/src/municipal/residents/residents.getters.ts +42 -42
- package/src/municipal/residents/residents.schema.ts +28 -28
- package/src/municipal/residents/residents.types.ts +17 -17
- package/src/municipal/streets/__tests__/streets.spec.ts +253 -253
- package/src/municipal/streets/index.ts +2 -2
- package/src/municipal/streets/streets.getters.ts +140 -140
- package/src/municipal/streets/streets.types.ts +19 -19
- package/src/municipal/systemInstructions/__tests__/getters.spec.ts +113 -113
- package/src/municipal/systemInstructions/__tests__/setters.spec.ts +274 -274
- package/src/municipal/systemInstructions/index.ts +7 -7
- package/src/municipal/systemInstructions/instructions.getters.ts +57 -57
- package/src/municipal/systemInstructions/instructions.setters.ts +119 -119
- package/src/municipal/systemInstructions/instructions.types.ts +30 -30
- package/src/municipal/tickets/__tests__/tickets.getters.spec.ts +30 -30
- package/src/municipal/tickets/__tests__/tickets.statistics.spec.ts +99 -99
- package/src/municipal/tickets/index.ts +9 -9
- package/src/municipal/tickets/tickets.constants.ts +8 -8
- package/src/municipal/tickets/tickets.getters.ts +121 -121
- package/src/municipal/tickets/tickets.statistics.aggregation.ts +110 -110
- package/src/municipal/tickets/tickets.statistics.getters.ts +145 -145
- package/src/municipal/tickets/tickets.types.ts +54 -54
- package/src/municipal/utils/types.ts +11 -11
- package/src/talkpilot/__tests__/db.spec.ts +38 -38
- package/src/talkpilot/__tests__/mongodb-client.spec.ts +18 -18
- package/src/talkpilot/__tests__/validation.spec.ts +68 -68
- package/src/talkpilot/agents/__tests__/agents.getters.spec.ts +29 -29
- package/src/talkpilot/agents/agents.getters.ts +34 -34
- package/src/talkpilot/agents/agents.types.ts +14 -14
- package/src/talkpilot/agents/index.ts +2 -2
- package/src/talkpilot/backgroundToolResults/__tests__/backgroundToolResults.getters.spec.ts +147 -147
- package/src/talkpilot/backgroundToolResults/backgroundToolResults.getters.ts +65 -65
- package/src/talkpilot/backgroundToolResults/backgroundToolResults.types.ts +23 -23
- package/src/talkpilot/backgroundToolResults/index.ts +2 -2
- package/src/talkpilot/callTokenUsage/__tests__/callTokenUsage.getters.spec.ts +57 -57
- package/src/talkpilot/callTokenUsage/callTokenUsage.getters.ts +42 -42
- package/src/talkpilot/callTokenUsage/callTokenUsage.types.ts +28 -28
- package/src/talkpilot/callTokenUsage/index.ts +2 -2
- package/src/talkpilot/calls/__tests__/callStats.utils.spec.ts +128 -128
- package/src/talkpilot/calls/__tests__/calls.dashboard.spec.ts +229 -229
- package/src/talkpilot/calls/__tests__/calls.spec.ts +519 -519
- package/src/talkpilot/calls/__tests__/calls.statistics.spec.ts +483 -483
- package/src/talkpilot/calls/calls.constants.ts +57 -57
- package/src/talkpilot/calls/calls.getters.ts +295 -295
- package/src/talkpilot/calls/calls.statistics.getters.ts +668 -668
- package/src/talkpilot/calls/calls.statistics.types.ts +48 -48
- package/src/talkpilot/calls/calls.types.ts +168 -168
- package/src/talkpilot/calls/dashboard/calls.dashboard.ts +295 -295
- package/src/talkpilot/calls/dashboard/calls.dashboard.types.ts +57 -57
- package/src/talkpilot/calls/index.ts +6 -6
- package/src/talkpilot/clientAudioBuffers/__tests__/clientAudioBuffer.getters.spec.ts +160 -160
- package/src/talkpilot/clientAudioBuffers/clientAudioBuffer.getters.ts +117 -117
- package/src/talkpilot/clientAudioBuffers/clientsAudioBuffers.types.ts +25 -25
- package/src/talkpilot/clientAudioBuffers/index.ts +2 -2
- package/src/talkpilot/clients/__tests__/clients.quota.spec.ts +123 -123
- package/src/talkpilot/clients/clients.getters.ts +19 -19
- package/src/talkpilot/clients/clients.quota.getters.ts +119 -119
- package/src/talkpilot/clients/clients.quota.types.ts +27 -27
- package/src/talkpilot/clients/clients.types.ts +18 -18
- package/src/talkpilot/clients/index.ts +4 -4
- package/src/talkpilot/clientsConfig/__tests__/clientsConfig.getters.spec.ts +423 -423
- package/src/talkpilot/clientsConfig/__tests__/clientsConfig.spec.ts +212 -212
- package/src/talkpilot/clientsConfig/clientsConfig.constants.ts +2 -2
- package/src/talkpilot/clientsConfig/clientsConfig.getters.ts +247 -247
- package/src/talkpilot/clientsConfig/clientsConfig.types.ts +137 -137
- package/src/talkpilot/clientsConfig/index.ts +3 -3
- package/src/talkpilot/contextNotes/__tests__/contextNotes.getters.spec.ts +358 -217
- package/src/talkpilot/contextNotes/contextNotes.getters.ts +159 -85
- package/src/talkpilot/contextNotes/contextNotes.types.ts +27 -20
- package/src/talkpilot/contextNotes/index.ts +2 -2
- package/src/talkpilot/flows/__tests__/flows.schema.spec.ts +152 -152
- package/src/talkpilot/flows/flows.getter.ts +34 -34
- package/src/talkpilot/flows/flows.schema.ts +196 -196
- package/src/talkpilot/flows/flows.types.ts +220 -220
- package/src/talkpilot/flows/index.ts +7 -7
- package/src/talkpilot/groups/__tests__/groups.spec.ts +90 -90
- package/src/talkpilot/groups/__tests__/phone.utils.spec.ts +32 -32
- package/src/talkpilot/groups/groups.getters.ts +30 -30
- package/src/talkpilot/groups/groups.types.ts +29 -29
- package/src/talkpilot/groups/index.ts +3 -3
- package/src/talkpilot/groups/phone.utils.ts +46 -46
- package/src/talkpilot/index.ts +32 -32
- package/src/talkpilot/leads/index.ts +2 -2
- package/src/talkpilot/leads/leads.getter.ts +6 -6
- package/src/talkpilot/leads/leads.schema.ts +33 -33
- package/src/talkpilot/leads/leads.types.ts +20 -20
- package/src/talkpilot/mongodb-client.ts +78 -78
- package/src/talkpilot/phone_numbers/__tests__/phone_numbers.spec.ts +530 -530
- package/src/talkpilot/phone_numbers/index.ts +2 -2
- package/src/talkpilot/phone_numbers/phone_numbers.getter.ts +240 -240
- package/src/talkpilot/phone_numbers/phone_numbers.schema.ts +17 -17
- package/src/talkpilot/phone_numbers/phone_numbers.types.ts +30 -30
- package/src/talkpilot/phone_numbers/phone_numbers.utils.ts +9 -9
- package/src/talkpilot/plans/__tests__/plans.spec.ts +70 -70
- package/src/talkpilot/plans/index.ts +2 -2
- package/src/talkpilot/plans/plans.getters.ts +132 -132
- package/src/talkpilot/plans/plans.types.ts +89 -89
- package/src/talkpilot/products/__tests__/products.getters.spec.ts +44 -44
- package/src/talkpilot/products/index.ts +2 -2
- package/src/talkpilot/products/products.getters.ts +12 -12
- package/src/talkpilot/products/products.types.ts +9 -9
- package/src/talkpilot/results/index.ts +7 -7
- package/src/talkpilot/results/results.getter.ts +39 -39
- package/src/talkpilot/results/results.schema.ts +25 -25
- package/src/talkpilot/results/results.types.ts +34 -34
- package/src/talkpilot/retry_analyze/__tests__/retryAnalyze.getters.spec.ts +156 -156
- package/src/talkpilot/retry_analyze/index.ts +2 -2
- package/src/talkpilot/retry_analyze/retryAnalyze.getters.ts +84 -84
- package/src/talkpilot/retry_analyze/retryAnalyze.types.ts +13 -13
- package/src/talkpilot/sessions/__tests__/sessions.spec.ts +147 -147
- package/src/talkpilot/sessions/index.ts +2 -2
- package/src/talkpilot/sessions/sessions.getter.ts +92 -92
- package/src/talkpilot/sessions/sessions.schema.ts +34 -34
- package/src/talkpilot/sessions/sessions.types.ts +30 -30
- package/src/talkpilot/subscriptions/__tests__/subscriptions.getters.utils.spec.ts +45 -45
- package/src/talkpilot/subscriptions/index.ts +3 -3
- package/src/talkpilot/subscriptions/subscriptions.getters.ts +146 -146
- package/src/talkpilot/subscriptions/subscriptions.getters.utils.ts +33 -33
- package/src/talkpilot/subscriptions/subscriptions.types.ts +66 -66
- package/src/talkpilot/utils/__tests__/query.utils.spec.ts +49 -49
- package/src/talkpilot/utils/query.utils.ts +21 -21
- package/src/test-utils/db-utils.ts +33 -33
- package/src/test-utils/factories/index.ts +19 -19
- package/src/test-utils/factories/municipal/cities.ts +16 -16
- package/src/test-utils/factories/municipal/departmentsSubjects.ts +37 -37
- package/src/test-utils/factories/municipal/muniIssues.ts +32 -32
- package/src/test-utils/factories/municipal/residents.ts +20 -20
- package/src/test-utils/factories/municipal/streets.ts +22 -22
- package/src/test-utils/factories/municipal/tickets.ts +39 -39
- package/src/test-utils/factories/talkpilot/agents.ts +19 -19
- package/src/test-utils/factories/talkpilot/calls.ts +37 -37
- package/src/test-utils/factories/talkpilot/clientAudioBuffers.ts +20 -20
- package/src/test-utils/factories/talkpilot/clientsConfig.ts +18 -18
- package/src/test-utils/factories/talkpilot/contextNotes.ts +40 -40
- package/src/test-utils/factories/talkpilot/flows.ts +33 -33
- package/src/test-utils/factories/talkpilot/groups.ts +33 -33
- package/src/test-utils/factories/talkpilot/phone_numbers.ts +22 -22
- package/src/test-utils/factories/talkpilot/sessions.ts +35 -35
- package/src/test-utils/factories/websitalk/knowledgeDocuments.ts +29 -29
- package/src/test-utils/factories/websitalk/scanResources.ts +26 -26
- package/src/test-utils/factories/websitalk/scans.ts +30 -30
- package/src/test-utils/factories/websitalk/websiteUrls.ts +17 -17
- package/src/utils/date.utils.ts +126 -126
- package/src/utils/shared.types.ts +4 -4
- package/src/utils/validation.ts +23 -23
- package/src/websitalk/index.ts +18 -18
- package/src/websitalk/knowledgeDocuments/__tests__/knowledgeDocuments.spec.ts +238 -238
- package/src/websitalk/knowledgeDocuments/index.ts +3 -3
- package/src/websitalk/knowledgeDocuments/knowledgeDocuments.constants.ts +26 -26
- package/src/websitalk/knowledgeDocuments/knowledgeDocuments.getters.ts +95 -95
- package/src/websitalk/knowledgeDocuments/knowledgeDocuments.types.ts +75 -75
- package/src/websitalk/mongodb-client.ts +61 -61
- package/src/websitalk/scanResources/__tests__/scanResources.spec.ts +267 -267
- package/src/websitalk/scanResources/index.ts +4 -4
- package/src/websitalk/scanResources/scanResources.constants.ts +60 -60
- package/src/websitalk/scanResources/scanResources.getters.ts +128 -128
- package/src/websitalk/scanResources/scanResources.types.ts +105 -105
- package/src/websitalk/scanResources/scanResources.utils.ts +31 -31
- package/src/websitalk/scans/__tests__/scans.spec.ts +362 -362
- package/src/websitalk/scans/index.ts +4 -4
- package/src/websitalk/scans/scans.constants.ts +18 -18
- package/src/websitalk/scans/scans.getters.ts +172 -172
- package/src/websitalk/scans/scans.types.ts +58 -58
- package/src/websitalk/scans/scans.utils.ts +5 -5
- package/src/websitalk/websiteUrls/__tests__/websiteUrls.spec.ts +77 -77
- package/src/websitalk/websiteUrls/index.ts +2 -2
- package/src/websitalk/websiteUrls/websiteUrls.getters.ts +65 -65
- package/src/websitalk/websiteUrls/websiteUrls.types.ts +13 -13
- package/tsconfig.json +23 -23
- package/dist/municipal/muniIssues/muniIssues.utils.d.ts +0 -3
- package/dist/municipal/muniIssues/muniIssues.utils.d.ts.map +0 -1
- package/dist/municipal/muniIssues/muniIssues.utils.js +0 -6
- package/dist/municipal/muniIssues/muniIssues.utils.js.map +0 -1
- package/src/municipal/muniIssues/__tests__/muniIssues.getters.spec.ts +0 -87
- package/src/municipal/muniIssues/__tests__/muniIssues.utils.spec.ts +0 -17
- package/src/municipal/muniIssues/muniIssues.utils.ts +0 -6
|
@@ -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 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"muniIssues.utils.d.ts","sourceRoot":"","sources":["../../../src/municipal/muniIssues/muniIssues.utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,eAAO,MAAM,2BAA2B,GACtC,WAAW,iBAAiB,KAC3B,OACgE,CAAC"}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.hasMuniIssueResponseContent = void 0;
|
|
4
|
-
const hasMuniIssueResponseContent = (response) => Boolean(response?.text) || (response?.imageUrls?.length ?? 0) > 0;
|
|
5
|
-
exports.hasMuniIssueResponseContent = hasMuniIssueResponseContent;
|
|
6
|
-
//# sourceMappingURL=muniIssues.utils.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"muniIssues.utils.js","sourceRoot":"","sources":["../../../src/municipal/muniIssues/muniIssues.utils.ts"],"names":[],"mappings":";;;AAEO,MAAM,2BAA2B,GAAG,CACzC,QAA4B,EACnB,EAAE,CACX,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AAHvD,QAAA,2BAA2B,+BAG4B"}
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
import { ObjectId } from "mongodb";
|
|
2
|
-
import { createMuniIssue, setMuniIssueResponse } from "../muniIssues.setters";
|
|
3
|
-
import {
|
|
4
|
-
countMuniIssuesByClient,
|
|
5
|
-
findMuniIssuesByClient,
|
|
6
|
-
generateMuniIssueId,
|
|
7
|
-
getMuniIssueByIdForClient,
|
|
8
|
-
getMuniIssuesCollection,
|
|
9
|
-
} from "../muniIssues.getters";
|
|
10
|
-
import { createMuniIssueInput } from "../../../test-utils/factories";
|
|
11
|
-
|
|
12
|
-
const CLIENT = "client-a";
|
|
13
|
-
|
|
14
|
-
const createIssue = async (clientId = CLIENT) =>
|
|
15
|
-
(await createMuniIssue(createMuniIssueInput({ clientId }), generateMuniIssueId())).toString();
|
|
16
|
-
|
|
17
|
-
describe("muniIssues getters (complaint tracking)", () => {
|
|
18
|
-
describe("findMuniIssuesByClient / countMuniIssuesByClient", () => {
|
|
19
|
-
it("should return only the client's tracked issues, newest first", async () => {
|
|
20
|
-
const older = await createIssue();
|
|
21
|
-
const newer = await createIssue();
|
|
22
|
-
// Both can land in the same millisecond; make the order explicit.
|
|
23
|
-
await getMuniIssuesCollection().updateOne(
|
|
24
|
-
{ _id: new ObjectId(older) },
|
|
25
|
-
{ $set: { createdAt: new Date(Date.now() - 60_000) } },
|
|
26
|
-
);
|
|
27
|
-
await createIssue("client-b");
|
|
28
|
-
// An issue created before complaint tracking has no status.
|
|
29
|
-
await getMuniIssuesCollection().insertOne({
|
|
30
|
-
...createMuniIssueInput({ clientId: CLIENT }),
|
|
31
|
-
_id: generateMuniIssueId(),
|
|
32
|
-
jira: { key: "CP-legacy", syncStatus: "created" },
|
|
33
|
-
createdAt: new Date(),
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
const issues = await findMuniIssuesByClient(CLIENT);
|
|
37
|
-
|
|
38
|
-
expect(issues.map((i) => i._id.toString())).toEqual([newer, older]);
|
|
39
|
-
expect(await countMuniIssuesByClient(CLIENT)).toBe(2);
|
|
40
|
-
});
|
|
41
|
-
|
|
42
|
-
it("should filter by answered and apply skip/limit", async () => {
|
|
43
|
-
const answered = await createIssue();
|
|
44
|
-
await createIssue();
|
|
45
|
-
await createIssue();
|
|
46
|
-
await setMuniIssueResponse(answered, CLIENT, { status: "resolved", text: "Done" });
|
|
47
|
-
|
|
48
|
-
expect(await countMuniIssuesByClient(CLIENT, { answered: true })).toBe(1);
|
|
49
|
-
expect(await countMuniIssuesByClient(CLIENT, { answered: false })).toBe(2);
|
|
50
|
-
expect(
|
|
51
|
-
(await findMuniIssuesByClient(CLIENT, { answered: true }))[0]._id.toString(),
|
|
52
|
-
).toBe(answered);
|
|
53
|
-
expect(await findMuniIssuesByClient(CLIENT, { skip: 1, limit: 1 })).toHaveLength(1);
|
|
54
|
-
});
|
|
55
|
-
|
|
56
|
-
it("should treat a response with only images as answered and a cleared response as waiting", async () => {
|
|
57
|
-
const imagesOnly = await createIssue();
|
|
58
|
-
const cleared = await createIssue();
|
|
59
|
-
const textOnly = await createIssue();
|
|
60
|
-
await setMuniIssueResponse(imagesOnly, CLIENT, {
|
|
61
|
-
status: "resolved",
|
|
62
|
-
text: "",
|
|
63
|
-
imageUrls: ["https://example.com/a.png"],
|
|
64
|
-
});
|
|
65
|
-
await setMuniIssueResponse(cleared, CLIENT, { status: "resolved", text: "Done" });
|
|
66
|
-
await setMuniIssueResponse(cleared, CLIENT, { status: "resolved", text: "", imageUrls: [] });
|
|
67
|
-
await setMuniIssueResponse(textOnly, CLIENT, { status: "resolved", text: "Done" });
|
|
68
|
-
|
|
69
|
-
const answered = await findMuniIssuesByClient(CLIENT, { answered: true });
|
|
70
|
-
const waiting = await findMuniIssuesByClient(CLIENT, { answered: false });
|
|
71
|
-
|
|
72
|
-
expect(answered.map((i) => i._id.toString()).sort()).toEqual([imagesOnly, textOnly].sort());
|
|
73
|
-
expect(waiting.map((i) => i._id.toString())).toEqual([cleared]);
|
|
74
|
-
expect(await countMuniIssuesByClient(CLIENT, { answered: false })).toBe(1);
|
|
75
|
-
});
|
|
76
|
-
});
|
|
77
|
-
|
|
78
|
-
describe("getMuniIssueByIdForClient", () => {
|
|
79
|
-
it("should return the issue only for its own client", async () => {
|
|
80
|
-
const id = await createIssue();
|
|
81
|
-
|
|
82
|
-
expect((await getMuniIssueByIdForClient(id, CLIENT))?._id.toString()).toBe(id);
|
|
83
|
-
expect(await getMuniIssueByIdForClient(id, "client-b")).toBeNull();
|
|
84
|
-
expect(await getMuniIssueByIdForClient("not-a-valid-id", CLIENT)).toBeNull();
|
|
85
|
-
});
|
|
86
|
-
});
|
|
87
|
-
});
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { hasMuniIssueResponseContent } from "../muniIssues.utils";
|
|
2
|
-
|
|
3
|
-
describe("hasMuniIssueResponseContent", () => {
|
|
4
|
-
const base = { createdAt: new Date() };
|
|
5
|
-
|
|
6
|
-
it("should be true for text, images, or both", () => {
|
|
7
|
-
expect(hasMuniIssueResponseContent({ ...base, text: "Done" })).toBe(true);
|
|
8
|
-
expect(hasMuniIssueResponseContent({ ...base, text: "", imageUrls: ["a"] })).toBe(true);
|
|
9
|
-
expect(hasMuniIssueResponseContent({ ...base, text: "Done", imageUrls: ["a"] })).toBe(true);
|
|
10
|
-
});
|
|
11
|
-
|
|
12
|
-
it("should be false for no response or an empty one", () => {
|
|
13
|
-
expect(hasMuniIssueResponseContent(undefined)).toBe(false);
|
|
14
|
-
expect(hasMuniIssueResponseContent({ ...base, text: "" })).toBe(false);
|
|
15
|
-
expect(hasMuniIssueResponseContent({ ...base, text: "", imageUrls: [] })).toBe(false);
|
|
16
|
-
});
|
|
17
|
-
});
|