eggi-ai-db-schema-2 0.1.1
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/CHANGELOG.md +750 -0
- package/README.md +660 -0
- package/dist/config/database.d.ts +28 -0
- package/dist/config/database.d.ts.map +1 -0
- package/dist/config/database.js +72 -0
- package/dist/config/database.js.map +1 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +199 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/database-service.d.ts +714 -0
- package/dist/lib/database-service.d.ts.map +1 -0
- package/dist/lib/database-service.js +1394 -0
- package/dist/lib/database-service.js.map +1 -0
- package/dist/lib/db-types.d.ts +167 -0
- package/dist/lib/db-types.d.ts.map +1 -0
- package/dist/lib/db-types.js +28 -0
- package/dist/lib/db-types.js.map +1 -0
- package/dist/lib/db.d.ts +58 -0
- package/dist/lib/db.d.ts.map +1 -0
- package/dist/lib/db.js +292 -0
- package/dist/lib/db.js.map +1 -0
- package/dist/lib/index.d.ts +11 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js +26 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/pg-client.d.ts +50 -0
- package/dist/lib/pg-client.d.ts.map +1 -0
- package/dist/lib/pg-client.js +106 -0
- package/dist/lib/pg-client.js.map +1 -0
- package/dist/lib/schema.d.ts +298 -0
- package/dist/lib/schema.d.ts.map +1 -0
- package/dist/lib/schema.js +12 -0
- package/dist/lib/schema.js.map +1 -0
- package/dist/migration-manager.d.ts +49 -0
- package/dist/migration-manager.d.ts.map +1 -0
- package/dist/migration-manager.js +282 -0
- package/dist/migration-manager.js.map +1 -0
- package/dist/queries/minimal-connections.d.ts +31 -0
- package/dist/queries/minimal-connections.d.ts.map +1 -0
- package/dist/queries/minimal-connections.js +143 -0
- package/dist/queries/minimal-connections.js.map +1 -0
- package/dist/schema.ts +340 -0
- package/dist/seed.d.ts +8 -0
- package/dist/seed.d.ts.map +1 -0
- package/dist/seed.js +40 -0
- package/dist/seed.js.map +1 -0
- package/dist/types/index.d.ts +7 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +23 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/types.d.ts +77 -0
- package/dist/types/types.d.ts.map +1 -0
- package/dist/types/types.js +3 -0
- package/dist/types/types.js.map +1 -0
- package/dist/utils/authenticated-user-operations.d.ts +110 -0
- package/dist/utils/authenticated-user-operations.d.ts.map +1 -0
- package/dist/utils/authenticated-user-operations.js +292 -0
- package/dist/utils/authenticated-user-operations.js.map +1 -0
- package/dist/utils/authentication-operations.d.ts +48 -0
- package/dist/utils/authentication-operations.d.ts.map +1 -0
- package/dist/utils/authentication-operations.js +172 -0
- package/dist/utils/authentication-operations.js.map +1 -0
- package/dist/utils/company-mapping-job-operations.d.ts +103 -0
- package/dist/utils/company-mapping-job-operations.d.ts.map +1 -0
- package/dist/utils/company-mapping-job-operations.js +413 -0
- package/dist/utils/company-mapping-job-operations.js.map +1 -0
- package/dist/utils/company-sheet-upload-operations.d.ts +53 -0
- package/dist/utils/company-sheet-upload-operations.d.ts.map +1 -0
- package/dist/utils/company-sheet-upload-operations.js +135 -0
- package/dist/utils/company-sheet-upload-operations.js.map +1 -0
- package/dist/utils/contact-operations.d.ts +70 -0
- package/dist/utils/contact-operations.d.ts.map +1 -0
- package/dist/utils/contact-operations.js +294 -0
- package/dist/utils/contact-operations.js.map +1 -0
- package/dist/utils/forager-linkedin-operations.d.ts +74 -0
- package/dist/utils/forager-linkedin-operations.d.ts.map +1 -0
- package/dist/utils/forager-linkedin-operations.js +778 -0
- package/dist/utils/forager-linkedin-operations.js.map +1 -0
- package/dist/utils/ghost-genius-linkedin-operations.d.ts +23 -0
- package/dist/utils/ghost-genius-linkedin-operations.d.ts.map +1 -0
- package/dist/utils/ghost-genius-linkedin-operations.js +282 -0
- package/dist/utils/ghost-genius-linkedin-operations.js.map +1 -0
- package/dist/utils/index.d.ts +29 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +77 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/introduction-request-operations.d.ts +160 -0
- package/dist/utils/introduction-request-operations.d.ts.map +1 -0
- package/dist/utils/introduction-request-operations.js +492 -0
- package/dist/utils/introduction-request-operations.js.map +1 -0
- package/dist/utils/invitation-operations.d.ts +141 -0
- package/dist/utils/invitation-operations.d.ts.map +1 -0
- package/dist/utils/invitation-operations.js +749 -0
- package/dist/utils/invitation-operations.js.map +1 -0
- package/dist/utils/linkedin-account-operations.d.ts +45 -0
- package/dist/utils/linkedin-account-operations.d.ts.map +1 -0
- package/dist/utils/linkedin-account-operations.js +279 -0
- package/dist/utils/linkedin-account-operations.js.map +1 -0
- package/dist/utils/linkedin-account-relationship-operations.d.ts +77 -0
- package/dist/utils/linkedin-account-relationship-operations.d.ts.map +1 -0
- package/dist/utils/linkedin-account-relationship-operations.js +274 -0
- package/dist/utils/linkedin-account-relationship-operations.js.map +1 -0
- package/dist/utils/linkedin-data-operations.d.ts +102 -0
- package/dist/utils/linkedin-data-operations.d.ts.map +1 -0
- package/dist/utils/linkedin-data-operations.js +613 -0
- package/dist/utils/linkedin-data-operations.js.map +1 -0
- package/dist/utils/linkedin-identifier-utils.d.ts +31 -0
- package/dist/utils/linkedin-identifier-utils.d.ts.map +1 -0
- package/dist/utils/linkedin-identifier-utils.js +63 -0
- package/dist/utils/linkedin-identifier-utils.js.map +1 -0
- package/dist/utils/linkedin-profile-cache.d.ts +131 -0
- package/dist/utils/linkedin-profile-cache.d.ts.map +1 -0
- package/dist/utils/linkedin-profile-cache.js +418 -0
- package/dist/utils/linkedin-profile-cache.js.map +1 -0
- package/dist/utils/llm-inference-job-operations.d.ts +116 -0
- package/dist/utils/llm-inference-job-operations.d.ts.map +1 -0
- package/dist/utils/llm-inference-job-operations.js +267 -0
- package/dist/utils/llm-inference-job-operations.js.map +1 -0
- package/dist/utils/mapping-job-operations.d.ts +272 -0
- package/dist/utils/mapping-job-operations.d.ts.map +1 -0
- package/dist/utils/mapping-job-operations.js +833 -0
- package/dist/utils/mapping-job-operations.js.map +1 -0
- package/dist/utils/mapping-operations.d.ts +80 -0
- package/dist/utils/mapping-operations.d.ts.map +1 -0
- package/dist/utils/mapping-operations.js +318 -0
- package/dist/utils/mapping-operations.js.map +1 -0
- package/dist/utils/on-demand-mapping-operations.d.ts +199 -0
- package/dist/utils/on-demand-mapping-operations.d.ts.map +1 -0
- package/dist/utils/on-demand-mapping-operations.js +728 -0
- package/dist/utils/on-demand-mapping-operations.js.map +1 -0
- package/dist/utils/onboarding-operations.d.ts +53 -0
- package/dist/utils/onboarding-operations.d.ts.map +1 -0
- package/dist/utils/onboarding-operations.js +223 -0
- package/dist/utils/onboarding-operations.js.map +1 -0
- package/dist/utils/organization-assignment-job-operations.d.ts +258 -0
- package/dist/utils/organization-assignment-job-operations.d.ts.map +1 -0
- package/dist/utils/organization-assignment-job-operations.js +881 -0
- package/dist/utils/organization-assignment-job-operations.js.map +1 -0
- package/dist/utils/organization-assignment-operations.d.ts +59 -0
- package/dist/utils/organization-assignment-operations.d.ts.map +1 -0
- package/dist/utils/organization-assignment-operations.js +130 -0
- package/dist/utils/organization-assignment-operations.js.map +1 -0
- package/dist/utils/organization-operations.d.ts +284 -0
- package/dist/utils/organization-operations.d.ts.map +1 -0
- package/dist/utils/organization-operations.js +1030 -0
- package/dist/utils/organization-operations.js.map +1 -0
- package/dist/utils/organization-relationship-operations.d.ts +79 -0
- package/dist/utils/organization-relationship-operations.d.ts.map +1 -0
- package/dist/utils/organization-relationship-operations.js +294 -0
- package/dist/utils/organization-relationship-operations.js.map +1 -0
- package/dist/utils/quota-operations.d.ts +107 -0
- package/dist/utils/quota-operations.d.ts.map +1 -0
- package/dist/utils/quota-operations.js +692 -0
- package/dist/utils/quota-operations.js.map +1 -0
- package/dist/utils/recursive-mapping-job-operations.d.ts +42 -0
- package/dist/utils/recursive-mapping-job-operations.d.ts.map +1 -0
- package/dist/utils/recursive-mapping-job-operations.js +169 -0
- package/dist/utils/recursive-mapping-job-operations.js.map +1 -0
- package/dist/utils/relationship-operations.d.ts +130 -0
- package/dist/utils/relationship-operations.d.ts.map +1 -0
- package/dist/utils/relationship-operations.js +329 -0
- package/dist/utils/relationship-operations.js.map +1 -0
- package/dist/utils/sales-pipeline-operations.d.ts +163 -0
- package/dist/utils/sales-pipeline-operations.d.ts.map +1 -0
- package/dist/utils/sales-pipeline-operations.js +725 -0
- package/dist/utils/sales-pipeline-operations.js.map +1 -0
- package/dist/utils/skills-operations.d.ts +117 -0
- package/dist/utils/skills-operations.d.ts.map +1 -0
- package/dist/utils/skills-operations.js +487 -0
- package/dist/utils/skills-operations.js.map +1 -0
- package/dist/utils/subscription-operations.d.ts +123 -0
- package/dist/utils/subscription-operations.d.ts.map +1 -0
- package/dist/utils/subscription-operations.js +391 -0
- package/dist/utils/subscription-operations.js.map +1 -0
- package/dist/utils/unipile-account-operations.d.ts +96 -0
- package/dist/utils/unipile-account-operations.d.ts.map +1 -0
- package/dist/utils/unipile-account-operations.js +255 -0
- package/dist/utils/unipile-account-operations.js.map +1 -0
- package/dist/utils/user-industry-operations.d.ts +80 -0
- package/dist/utils/user-industry-operations.d.ts.map +1 -0
- package/dist/utils/user-industry-operations.js +237 -0
- package/dist/utils/user-industry-operations.js.map +1 -0
- package/dist/utils/user-operations.d.ts +87 -0
- package/dist/utils/user-operations.d.ts.map +1 -0
- package/dist/utils/user-operations.js +212 -0
- package/dist/utils/user-operations.js.map +1 -0
- package/package.json +98 -0
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* =============================================================================
|
|
4
|
+
* LINKEDIN ACCOUNT RELATIONSHIP OPERATIONS UTILITIES
|
|
5
|
+
* =============================================================================
|
|
6
|
+
* Utility functions for creating and managing relationship scores between LinkedIn accounts
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.upsertLinkedInAccountRelationshipScore = upsertLinkedInAccountRelationshipScore;
|
|
10
|
+
exports.getLinkedInAccountRelationshipScore = getLinkedInAccountRelationshipScore;
|
|
11
|
+
exports.linkedInRelationshipExists = linkedInRelationshipExists;
|
|
12
|
+
exports.getLinkedInRelationshipByIdWithAccountsAndUsers = getLinkedInRelationshipByIdWithAccountsAndUsers;
|
|
13
|
+
const pg_client_1 = require("../lib/pg-client");
|
|
14
|
+
// =============================================================================
|
|
15
|
+
// LINKEDIN ACCOUNT RELATIONSHIP SCORE OPERATIONS
|
|
16
|
+
// =============================================================================
|
|
17
|
+
/**
|
|
18
|
+
* Creates or updates a relationship score between two LinkedIn accounts
|
|
19
|
+
* Automatically ensures linkedinAccountIdA < linkedinAccountIdB for consistency
|
|
20
|
+
*
|
|
21
|
+
* @param data - Relationship score creation data
|
|
22
|
+
* @returns Promise resolving to the created/updated relationship score
|
|
23
|
+
*/
|
|
24
|
+
async function upsertLinkedInAccountRelationshipScore(db, data) {
|
|
25
|
+
if (!data.linkedinAccountIdA ||
|
|
26
|
+
!data.linkedinAccountIdB ||
|
|
27
|
+
!data.mappingJobId ||
|
|
28
|
+
data.score < 0 ||
|
|
29
|
+
data.score > 100) {
|
|
30
|
+
throw new Error("Invalid data: linkedinAccountIdA, linkedinAccountIdB, mappingJobId are required and score must be 0-100");
|
|
31
|
+
}
|
|
32
|
+
if (data.linkedinAccountIdA === data.linkedinAccountIdB) {
|
|
33
|
+
throw new Error("Cannot create relationship score between the same LinkedIn account");
|
|
34
|
+
}
|
|
35
|
+
// Ensure linkedinAccountIdA < linkedinAccountIdB for consistency (bi-directional relationship)
|
|
36
|
+
const linkedinAccountIdA = Math.min(data.linkedinAccountIdA, data.linkedinAccountIdB);
|
|
37
|
+
const linkedinAccountIdB = Math.max(data.linkedinAccountIdA, data.linkedinAccountIdB);
|
|
38
|
+
try {
|
|
39
|
+
const sql = `
|
|
40
|
+
INSERT INTO linkedin.relationships (
|
|
41
|
+
linkedin_account_id_a,
|
|
42
|
+
linkedin_account_id_b,
|
|
43
|
+
score,
|
|
44
|
+
model_version,
|
|
45
|
+
analysis_type,
|
|
46
|
+
mapping_job_id,
|
|
47
|
+
metadata,
|
|
48
|
+
created_at
|
|
49
|
+
)
|
|
50
|
+
VALUES ($1, $2, $3, $4, $5, $6, $7, NOW())
|
|
51
|
+
ON CONFLICT (linkedin_account_id_a, linkedin_account_id_b, model_version, analysis_type, mapping_job_id)
|
|
52
|
+
DO UPDATE SET
|
|
53
|
+
score = EXCLUDED.score,
|
|
54
|
+
metadata = EXCLUDED.metadata,
|
|
55
|
+
created_at = NOW()
|
|
56
|
+
RETURNING
|
|
57
|
+
id,
|
|
58
|
+
linkedin_account_id_a,
|
|
59
|
+
linkedin_account_id_b,
|
|
60
|
+
score,
|
|
61
|
+
model_version,
|
|
62
|
+
analysis_type,
|
|
63
|
+
mapping_job_id,
|
|
64
|
+
metadata,
|
|
65
|
+
created_at
|
|
66
|
+
`;
|
|
67
|
+
const result = await (0, pg_client_1.queryOne)(db, sql, [
|
|
68
|
+
linkedinAccountIdA,
|
|
69
|
+
linkedinAccountIdB,
|
|
70
|
+
data.score,
|
|
71
|
+
data.modelVersion,
|
|
72
|
+
data.analysisType || "MESSAGE_ANALYSER",
|
|
73
|
+
data.mappingJobId,
|
|
74
|
+
JSON.stringify(data.metadata || {}),
|
|
75
|
+
]);
|
|
76
|
+
if (!result) {
|
|
77
|
+
throw new Error("Failed to upsert relationship score");
|
|
78
|
+
}
|
|
79
|
+
return result;
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
throw new Error(`Failed to upsert LinkedIn account relationship score: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Gets a relationship score between two LinkedIn accounts for a specific model version and analysis type
|
|
87
|
+
*
|
|
88
|
+
* @param linkedinAccountIdA - First LinkedIn account ID
|
|
89
|
+
* @param linkedinAccountIdB - Second LinkedIn account ID
|
|
90
|
+
* @param modelVersion - AI model version
|
|
91
|
+
* @param analysisType - Analysis type (defaults to 'MESSAGE_ANALYSER')
|
|
92
|
+
* @returns Promise resolving to relationship score or null if not found
|
|
93
|
+
*/
|
|
94
|
+
async function getLinkedInAccountRelationshipScore(db, linkedinAccountIdA, linkedinAccountIdB, modelVersion, analysisType = "MESSAGE_ANALYSER") {
|
|
95
|
+
if (linkedinAccountIdA === linkedinAccountIdB) {
|
|
96
|
+
throw new Error("Cannot get relationship score for the same LinkedIn account");
|
|
97
|
+
}
|
|
98
|
+
// Ensure linkedinAccountIdA < linkedinAccountIdB for consistency
|
|
99
|
+
const sortedLinkedInAccountIdA = Math.min(linkedinAccountIdA, linkedinAccountIdB);
|
|
100
|
+
const sortedLinkedInAccountIdB = Math.max(linkedinAccountIdA, linkedinAccountIdB);
|
|
101
|
+
const sql = `
|
|
102
|
+
SELECT
|
|
103
|
+
id,
|
|
104
|
+
linkedin_account_id_a,
|
|
105
|
+
linkedin_account_id_b,
|
|
106
|
+
score,
|
|
107
|
+
model_version,
|
|
108
|
+
analysis_type,
|
|
109
|
+
mapping_job_id,
|
|
110
|
+
metadata,
|
|
111
|
+
created_at
|
|
112
|
+
FROM linkedin.relationships
|
|
113
|
+
WHERE linkedin_account_id_a = $1
|
|
114
|
+
AND linkedin_account_id_b = $2
|
|
115
|
+
AND model_version = $3
|
|
116
|
+
AND analysis_type = $4
|
|
117
|
+
LIMIT 1
|
|
118
|
+
`;
|
|
119
|
+
return await (0, pg_client_1.queryOne)(db, sql, [sortedLinkedInAccountIdA, sortedLinkedInAccountIdB, modelVersion, analysisType]);
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Check if a LinkedIn relationship exists by ID
|
|
123
|
+
* Simple existence check without fetching full relationship data
|
|
124
|
+
*
|
|
125
|
+
* @param db - Database instance
|
|
126
|
+
* @param relationshipId - Relationship ID
|
|
127
|
+
* @returns true if relationship exists, false otherwise
|
|
128
|
+
*/
|
|
129
|
+
async function linkedInRelationshipExists(db, relationshipId) {
|
|
130
|
+
const sql = `
|
|
131
|
+
SELECT id FROM linkedin.relationships WHERE id = $1 LIMIT 1
|
|
132
|
+
`;
|
|
133
|
+
const result = await (0, pg_client_1.queryOne)(db, sql, [relationshipId]);
|
|
134
|
+
return result !== null;
|
|
135
|
+
}
|
|
136
|
+
async function getLinkedInRelationshipByIdWithAccountsAndUsers(db, relationshipId) {
|
|
137
|
+
const sql = `
|
|
138
|
+
SELECT
|
|
139
|
+
r.id,
|
|
140
|
+
r.linkedin_account_id_a,
|
|
141
|
+
r.linkedin_account_id_b,
|
|
142
|
+
r.score,
|
|
143
|
+
r.model_version,
|
|
144
|
+
r.analysis_type,
|
|
145
|
+
r.mapping_job_id,
|
|
146
|
+
r.metadata,
|
|
147
|
+
r.created_at,
|
|
148
|
+
-- Account A fields
|
|
149
|
+
la_a.id as account_a_id,
|
|
150
|
+
la_a.user_id as account_a_user_id,
|
|
151
|
+
la_a.linkedin_identifier_acoa as account_a_linkedin_identifier_acoa,
|
|
152
|
+
la_a.public_identifier as account_a_public_identifier,
|
|
153
|
+
la_a.forager_id as account_a_forager_id,
|
|
154
|
+
la_a.first_name as account_a_first_name,
|
|
155
|
+
la_a.last_name as account_a_last_name,
|
|
156
|
+
la_a.headline as account_a_headline,
|
|
157
|
+
la_a.summary as account_a_summary,
|
|
158
|
+
la_a.location as account_a_location,
|
|
159
|
+
COALESCE(la_a.profile_image_cloudfront_url, la_a.profile_picture_url) as account_a_profile_picture_url,
|
|
160
|
+
la_a.follower_count as account_a_follower_count,
|
|
161
|
+
la_a.connections_count as account_a_connections_count,
|
|
162
|
+
la_a.profiles_updated_at as account_a_profiles_updated_at,
|
|
163
|
+
la_a.created_at as account_a_created_at,
|
|
164
|
+
-- Account B fields
|
|
165
|
+
la_b.id as account_b_id,
|
|
166
|
+
la_b.user_id as account_b_user_id,
|
|
167
|
+
la_b.linkedin_identifier_acoa as account_b_linkedin_identifier_acoa,
|
|
168
|
+
la_b.public_identifier as account_b_public_identifier,
|
|
169
|
+
la_b.forager_id as account_b_forager_id,
|
|
170
|
+
la_b.first_name as account_b_first_name,
|
|
171
|
+
la_b.last_name as account_b_last_name,
|
|
172
|
+
la_b.headline as account_b_headline,
|
|
173
|
+
la_b.summary as account_b_summary,
|
|
174
|
+
la_b.location as account_b_location,
|
|
175
|
+
COALESCE(la_b.profile_image_cloudfront_url, la_b.profile_picture_url) as account_b_profile_picture_url,
|
|
176
|
+
la_b.follower_count as account_b_follower_count,
|
|
177
|
+
la_b.connections_count as account_b_connections_count,
|
|
178
|
+
la_b.profiles_updated_at as account_b_profiles_updated_at,
|
|
179
|
+
la_b.created_at as account_b_created_at,
|
|
180
|
+
-- User A fields
|
|
181
|
+
u_a.id as user_a_id,
|
|
182
|
+
u_a.given_name as user_a_given_name,
|
|
183
|
+
u_a.family_name as user_a_family_name,
|
|
184
|
+
u_a.summary as user_a_summary,
|
|
185
|
+
u_a.embedding_summary as user_a_embedding_summary,
|
|
186
|
+
u_a.embedding as user_a_embedding,
|
|
187
|
+
u_a.created_at as user_a_created_at,
|
|
188
|
+
-- User B fields
|
|
189
|
+
u_b.id as user_b_id,
|
|
190
|
+
u_b.given_name as user_b_given_name,
|
|
191
|
+
u_b.family_name as user_b_family_name,
|
|
192
|
+
u_b.summary as user_b_summary,
|
|
193
|
+
u_b.embedding_summary as user_b_embedding_summary,
|
|
194
|
+
u_b.embedding as user_b_embedding,
|
|
195
|
+
u_b.created_at as user_b_created_at
|
|
196
|
+
FROM linkedin.relationships r
|
|
197
|
+
INNER JOIN linkedin.accounts la_a ON r.linkedin_account_id_a = la_a.id
|
|
198
|
+
INNER JOIN linkedin.accounts la_b ON r.linkedin_account_id_b = la_b.id
|
|
199
|
+
LEFT JOIN public.users u_a ON la_a.user_id = u_a.id
|
|
200
|
+
LEFT JOIN public.users u_b ON la_b.user_id = u_b.id
|
|
201
|
+
WHERE r.id = $1
|
|
202
|
+
LIMIT 1
|
|
203
|
+
`;
|
|
204
|
+
const row = await (0, pg_client_1.queryOne)(db, sql, [relationshipId]);
|
|
205
|
+
if (!row) {
|
|
206
|
+
return null;
|
|
207
|
+
}
|
|
208
|
+
return {
|
|
209
|
+
id: row.id,
|
|
210
|
+
linkedinAccountIdA: row.linkedin_account_id_a,
|
|
211
|
+
linkedinAccountIdB: row.linkedin_account_id_b,
|
|
212
|
+
score: row.score,
|
|
213
|
+
modelVersion: row.model_version,
|
|
214
|
+
analysisType: row.analysis_type,
|
|
215
|
+
mappingJobId: row.mapping_job_id,
|
|
216
|
+
metadata: row.metadata,
|
|
217
|
+
createdAt: row.created_at,
|
|
218
|
+
linkedinAccountA: {
|
|
219
|
+
id: row.account_a_id,
|
|
220
|
+
userId: row.account_a_user_id,
|
|
221
|
+
linkedinIdentifierAcoa: row.account_a_linkedin_identifier_acoa,
|
|
222
|
+
publicIdentifier: row.account_a_public_identifier,
|
|
223
|
+
foragerId: row.account_a_forager_id,
|
|
224
|
+
firstName: row.account_a_first_name,
|
|
225
|
+
lastName: row.account_a_last_name,
|
|
226
|
+
headline: row.account_a_headline,
|
|
227
|
+
summary: row.account_a_summary,
|
|
228
|
+
location: row.account_a_location,
|
|
229
|
+
profilePictureUrl: row.account_a_profile_picture_url,
|
|
230
|
+
profileImageCloudFrontUrl: null,
|
|
231
|
+
followerCount: row.account_a_follower_count,
|
|
232
|
+
connectionsCount: row.account_a_connections_count,
|
|
233
|
+
profilesUpdatedAt: row.account_a_profiles_updated_at,
|
|
234
|
+
createdAt: row.account_a_created_at,
|
|
235
|
+
user: row.user_a_id ? {
|
|
236
|
+
id: row.user_a_id,
|
|
237
|
+
givenName: row.user_a_given_name,
|
|
238
|
+
familyName: row.user_a_family_name,
|
|
239
|
+
summary: row.user_a_summary,
|
|
240
|
+
embeddingSummary: row.user_a_embedding_summary,
|
|
241
|
+
embedding: row.user_a_embedding,
|
|
242
|
+
createdAt: row.user_a_created_at,
|
|
243
|
+
} : null,
|
|
244
|
+
},
|
|
245
|
+
linkedinAccountB: {
|
|
246
|
+
id: row.account_b_id,
|
|
247
|
+
userId: row.account_b_user_id,
|
|
248
|
+
linkedinIdentifierAcoa: row.account_b_linkedin_identifier_acoa,
|
|
249
|
+
publicIdentifier: row.account_b_public_identifier,
|
|
250
|
+
foragerId: row.account_b_forager_id,
|
|
251
|
+
firstName: row.account_b_first_name,
|
|
252
|
+
lastName: row.account_b_last_name,
|
|
253
|
+
headline: row.account_b_headline,
|
|
254
|
+
summary: row.account_b_summary,
|
|
255
|
+
location: row.account_b_location,
|
|
256
|
+
profilePictureUrl: row.account_b_profile_picture_url,
|
|
257
|
+
profileImageCloudFrontUrl: null,
|
|
258
|
+
followerCount: row.account_b_follower_count,
|
|
259
|
+
connectionsCount: row.account_b_connections_count,
|
|
260
|
+
profilesUpdatedAt: row.account_b_profiles_updated_at,
|
|
261
|
+
createdAt: row.account_b_created_at,
|
|
262
|
+
user: row.user_b_id ? {
|
|
263
|
+
id: row.user_b_id,
|
|
264
|
+
givenName: row.user_b_given_name,
|
|
265
|
+
familyName: row.user_b_family_name,
|
|
266
|
+
summary: row.user_b_summary,
|
|
267
|
+
embeddingSummary: row.user_b_embedding_summary,
|
|
268
|
+
embedding: row.user_b_embedding,
|
|
269
|
+
createdAt: row.user_b_created_at,
|
|
270
|
+
} : null,
|
|
271
|
+
},
|
|
272
|
+
};
|
|
273
|
+
}
|
|
274
|
+
//# sourceMappingURL=linkedin-account-relationship-operations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linkedin-account-relationship-operations.js","sourceRoot":"","sources":["../../src/utils/linkedin-account-relationship-operations.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* =============================================================================
|
|
3
|
+
* LINKEDIN DATA OPERATIONS - CONSOLIDATED SCHEMA
|
|
4
|
+
* =============================================================================
|
|
5
|
+
* High-level functions for storing complete LinkedIn profiles in the new consolidated schema
|
|
6
|
+
* These functions orchestrate multiple table inserts for our lambdas
|
|
7
|
+
*
|
|
8
|
+
* Migrated to native PostgreSQL queries for better performance and flexibility.
|
|
9
|
+
*/
|
|
10
|
+
import { Pool, PoolClient } from 'pg';
|
|
11
|
+
import { CompleteLinkedInProfileResult } from '../lib/db-types';
|
|
12
|
+
type Database = Pool | PoolClient | any;
|
|
13
|
+
/**
|
|
14
|
+
* Interface for complete LinkedIn profile data from LinkedIn data providers
|
|
15
|
+
*/
|
|
16
|
+
export interface LinkedInProfileData {
|
|
17
|
+
provider_id?: string;
|
|
18
|
+
public_identifier?: string;
|
|
19
|
+
first_name?: string;
|
|
20
|
+
last_name?: string;
|
|
21
|
+
headline?: string;
|
|
22
|
+
summary?: string;
|
|
23
|
+
location?: string;
|
|
24
|
+
profile_picture_url?: string;
|
|
25
|
+
profile_picture?: string;
|
|
26
|
+
follower_count?: number;
|
|
27
|
+
connections_count?: number;
|
|
28
|
+
skills?: Array<{
|
|
29
|
+
skillName: string;
|
|
30
|
+
}>;
|
|
31
|
+
work_experience?: Array<{
|
|
32
|
+
position?: string;
|
|
33
|
+
company?: string;
|
|
34
|
+
company_id?: string;
|
|
35
|
+
company_linkedin_url?: string;
|
|
36
|
+
location?: string;
|
|
37
|
+
employment_type?: string;
|
|
38
|
+
description?: string;
|
|
39
|
+
is_current?: boolean;
|
|
40
|
+
start_date?: string;
|
|
41
|
+
end_date?: string;
|
|
42
|
+
skills?: Array<{
|
|
43
|
+
skillName: string;
|
|
44
|
+
}>;
|
|
45
|
+
}>;
|
|
46
|
+
education?: Array<{
|
|
47
|
+
degree?: string;
|
|
48
|
+
school?: string;
|
|
49
|
+
school_id?: string;
|
|
50
|
+
field_of_study?: string;
|
|
51
|
+
grade?: string;
|
|
52
|
+
description?: string;
|
|
53
|
+
activities_and_societies?: string;
|
|
54
|
+
school_linkedin_url?: string;
|
|
55
|
+
start_date?: string;
|
|
56
|
+
end_date?: string;
|
|
57
|
+
skills?: Array<{
|
|
58
|
+
skillName: string;
|
|
59
|
+
}>;
|
|
60
|
+
}>;
|
|
61
|
+
certifications?: Array<{
|
|
62
|
+
name?: string;
|
|
63
|
+
authority?: string;
|
|
64
|
+
license_number?: string;
|
|
65
|
+
url?: string;
|
|
66
|
+
start_date?: string;
|
|
67
|
+
end_date?: string;
|
|
68
|
+
}>;
|
|
69
|
+
projects?: Array<{
|
|
70
|
+
title?: string;
|
|
71
|
+
description?: string;
|
|
72
|
+
url?: string;
|
|
73
|
+
start_date?: string;
|
|
74
|
+
end_date?: string;
|
|
75
|
+
}>;
|
|
76
|
+
contact_info?: Array<{
|
|
77
|
+
type: 'EMAIL' | 'PHONE_NUMBER' | 'URL';
|
|
78
|
+
value: string;
|
|
79
|
+
source?: string;
|
|
80
|
+
}>;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Store complete LinkedIn profile data using Forager ID as primary identifier
|
|
84
|
+
* This is the new primary function for Forager-based profiles
|
|
85
|
+
*/
|
|
86
|
+
export declare function storeCompleteLinkedInProfileByForagerId(db: Database, foragerId: number, profileData: LinkedInProfileData, userId?: number, userWasCreated?: boolean): Promise<CompleteLinkedInProfileResult>;
|
|
87
|
+
/**
|
|
88
|
+
* Store complete LinkedIn profile data using ACoA identifier (for Ghost Genius profiles)
|
|
89
|
+
* This is the primary function for Ghost Genius-based profiles that don't have a Forager ID
|
|
90
|
+
*/
|
|
91
|
+
export declare function storeCompleteLinkedInProfileByAcoa(db: Database, linkedinIdentifierAcoa: string, profileData: LinkedInProfileData, userId?: number, userWasCreated?: boolean): Promise<CompleteLinkedInProfileResult>;
|
|
92
|
+
/**
|
|
93
|
+
* Refresh complete LinkedIn profile data by Forager ID
|
|
94
|
+
* This function drops all existing related data and re-inserts fresh data
|
|
95
|
+
*/
|
|
96
|
+
export declare function refreshCompleteLinkedInProfileByForagerId(db: Database, foragerId: number, profileData: LinkedInProfileData, userId?: number): Promise<CompleteLinkedInProfileResult>;
|
|
97
|
+
/**
|
|
98
|
+
* Get complete LinkedIn profile data for an account
|
|
99
|
+
*/
|
|
100
|
+
export declare function getCompleteLinkedInProfile(db: Database, linkedinAccountId: number): Promise<CompleteLinkedInProfileResult | null>;
|
|
101
|
+
export {};
|
|
102
|
+
//# sourceMappingURL=linkedin-data-operations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linkedin-data-operations.d.ts","sourceRoot":"","sources":["../../src/utils/linkedin-data-operations.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAGtC,OAAO,EAAmB,6BAA6B,EAAE,MAAM,iBAAiB,CAAC;AAejF,KAAK,QAAQ,GAAG,IAAI,GAAG,UAAU,GAAG,GAAG,CAAC;AAiBxC;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAElC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAG3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,MAAM,CAAC,EAAE,KAAK,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC,CAAC;IACH,eAAe,CAAC,EAAE,KAAK,CAAC;QACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,oBAAoB,CAAC,EAAE,MAAM,CAAC;QAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,KAAK,CAAC;YAAE,SAAS,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACvC,CAAC,CAAC;IACH,SAAS,CAAC,EAAE,KAAK,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,wBAAwB,CAAC,EAAE,MAAM,CAAC;QAClC,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,KAAK,CAAC;YAAE,SAAS,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACvC,CAAC,CAAC;IACH,cAAc,CAAC,EAAE,KAAK,CAAC;QACrB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC,CAAC;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC,CAAC;IACH,YAAY,CAAC,EAAE,KAAK,CAAC;QACnB,IAAI,EAAE,OAAO,GAAG,cAAc,GAAG,KAAK,CAAC;QACvC,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;CACJ;AAMD;;;GAGG;AACH,wBAAsB,uCAAuC,CAC3D,EAAE,EAAE,QAAQ,EACZ,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,mBAAmB,EAChC,MAAM,CAAC,EAAE,MAAM,EACf,cAAc,GAAE,OAAe,GAC9B,OAAO,CAAC,6BAA6B,CAAC,CAoFxC;AAED;;;GAGG;AACH,wBAAsB,kCAAkC,CACtD,EAAE,EAAE,QAAQ,EACZ,sBAAsB,EAAE,MAAM,EAC9B,WAAW,EAAE,mBAAmB,EAChC,MAAM,CAAC,EAAE,MAAM,EACf,cAAc,GAAE,OAAe,GAC9B,OAAO,CAAC,6BAA6B,CAAC,CAgIxC;AAED;;;GAGG;AACH,wBAAsB,yCAAyC,CAC7D,EAAE,EAAE,QAAQ,EACZ,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,mBAAmB,EAChC,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,6BAA6B,CAAC,CAwFxC;AA8ED;;GAEG;AACH,wBAAsB,0BAA0B,CAC9C,EAAE,EAAE,QAAQ,EACZ,iBAAiB,EAAE,MAAM,GACxB,OAAO,CAAC,6BAA6B,GAAG,IAAI,CAAC,CAiE/C"}
|