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.
Files changed (188) hide show
  1. package/CHANGELOG.md +750 -0
  2. package/README.md +660 -0
  3. package/dist/config/database.d.ts +28 -0
  4. package/dist/config/database.d.ts.map +1 -0
  5. package/dist/config/database.js +72 -0
  6. package/dist/config/database.js.map +1 -0
  7. package/dist/index.d.ts +28 -0
  8. package/dist/index.d.ts.map +1 -0
  9. package/dist/index.js +199 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/lib/database-service.d.ts +714 -0
  12. package/dist/lib/database-service.d.ts.map +1 -0
  13. package/dist/lib/database-service.js +1394 -0
  14. package/dist/lib/database-service.js.map +1 -0
  15. package/dist/lib/db-types.d.ts +167 -0
  16. package/dist/lib/db-types.d.ts.map +1 -0
  17. package/dist/lib/db-types.js +28 -0
  18. package/dist/lib/db-types.js.map +1 -0
  19. package/dist/lib/db.d.ts +58 -0
  20. package/dist/lib/db.d.ts.map +1 -0
  21. package/dist/lib/db.js +292 -0
  22. package/dist/lib/db.js.map +1 -0
  23. package/dist/lib/index.d.ts +11 -0
  24. package/dist/lib/index.d.ts.map +1 -0
  25. package/dist/lib/index.js +26 -0
  26. package/dist/lib/index.js.map +1 -0
  27. package/dist/lib/pg-client.d.ts +50 -0
  28. package/dist/lib/pg-client.d.ts.map +1 -0
  29. package/dist/lib/pg-client.js +106 -0
  30. package/dist/lib/pg-client.js.map +1 -0
  31. package/dist/lib/schema.d.ts +298 -0
  32. package/dist/lib/schema.d.ts.map +1 -0
  33. package/dist/lib/schema.js +12 -0
  34. package/dist/lib/schema.js.map +1 -0
  35. package/dist/migration-manager.d.ts +49 -0
  36. package/dist/migration-manager.d.ts.map +1 -0
  37. package/dist/migration-manager.js +282 -0
  38. package/dist/migration-manager.js.map +1 -0
  39. package/dist/queries/minimal-connections.d.ts +31 -0
  40. package/dist/queries/minimal-connections.d.ts.map +1 -0
  41. package/dist/queries/minimal-connections.js +143 -0
  42. package/dist/queries/minimal-connections.js.map +1 -0
  43. package/dist/schema.ts +340 -0
  44. package/dist/seed.d.ts +8 -0
  45. package/dist/seed.d.ts.map +1 -0
  46. package/dist/seed.js +40 -0
  47. package/dist/seed.js.map +1 -0
  48. package/dist/types/index.d.ts +7 -0
  49. package/dist/types/index.d.ts.map +1 -0
  50. package/dist/types/index.js +23 -0
  51. package/dist/types/index.js.map +1 -0
  52. package/dist/types/types.d.ts +77 -0
  53. package/dist/types/types.d.ts.map +1 -0
  54. package/dist/types/types.js +3 -0
  55. package/dist/types/types.js.map +1 -0
  56. package/dist/utils/authenticated-user-operations.d.ts +110 -0
  57. package/dist/utils/authenticated-user-operations.d.ts.map +1 -0
  58. package/dist/utils/authenticated-user-operations.js +292 -0
  59. package/dist/utils/authenticated-user-operations.js.map +1 -0
  60. package/dist/utils/authentication-operations.d.ts +48 -0
  61. package/dist/utils/authentication-operations.d.ts.map +1 -0
  62. package/dist/utils/authentication-operations.js +172 -0
  63. package/dist/utils/authentication-operations.js.map +1 -0
  64. package/dist/utils/company-mapping-job-operations.d.ts +103 -0
  65. package/dist/utils/company-mapping-job-operations.d.ts.map +1 -0
  66. package/dist/utils/company-mapping-job-operations.js +413 -0
  67. package/dist/utils/company-mapping-job-operations.js.map +1 -0
  68. package/dist/utils/company-sheet-upload-operations.d.ts +53 -0
  69. package/dist/utils/company-sheet-upload-operations.d.ts.map +1 -0
  70. package/dist/utils/company-sheet-upload-operations.js +135 -0
  71. package/dist/utils/company-sheet-upload-operations.js.map +1 -0
  72. package/dist/utils/contact-operations.d.ts +70 -0
  73. package/dist/utils/contact-operations.d.ts.map +1 -0
  74. package/dist/utils/contact-operations.js +294 -0
  75. package/dist/utils/contact-operations.js.map +1 -0
  76. package/dist/utils/forager-linkedin-operations.d.ts +74 -0
  77. package/dist/utils/forager-linkedin-operations.d.ts.map +1 -0
  78. package/dist/utils/forager-linkedin-operations.js +778 -0
  79. package/dist/utils/forager-linkedin-operations.js.map +1 -0
  80. package/dist/utils/ghost-genius-linkedin-operations.d.ts +23 -0
  81. package/dist/utils/ghost-genius-linkedin-operations.d.ts.map +1 -0
  82. package/dist/utils/ghost-genius-linkedin-operations.js +282 -0
  83. package/dist/utils/ghost-genius-linkedin-operations.js.map +1 -0
  84. package/dist/utils/index.d.ts +29 -0
  85. package/dist/utils/index.d.ts.map +1 -0
  86. package/dist/utils/index.js +77 -0
  87. package/dist/utils/index.js.map +1 -0
  88. package/dist/utils/introduction-request-operations.d.ts +160 -0
  89. package/dist/utils/introduction-request-operations.d.ts.map +1 -0
  90. package/dist/utils/introduction-request-operations.js +492 -0
  91. package/dist/utils/introduction-request-operations.js.map +1 -0
  92. package/dist/utils/invitation-operations.d.ts +141 -0
  93. package/dist/utils/invitation-operations.d.ts.map +1 -0
  94. package/dist/utils/invitation-operations.js +749 -0
  95. package/dist/utils/invitation-operations.js.map +1 -0
  96. package/dist/utils/linkedin-account-operations.d.ts +45 -0
  97. package/dist/utils/linkedin-account-operations.d.ts.map +1 -0
  98. package/dist/utils/linkedin-account-operations.js +279 -0
  99. package/dist/utils/linkedin-account-operations.js.map +1 -0
  100. package/dist/utils/linkedin-account-relationship-operations.d.ts +77 -0
  101. package/dist/utils/linkedin-account-relationship-operations.d.ts.map +1 -0
  102. package/dist/utils/linkedin-account-relationship-operations.js +274 -0
  103. package/dist/utils/linkedin-account-relationship-operations.js.map +1 -0
  104. package/dist/utils/linkedin-data-operations.d.ts +102 -0
  105. package/dist/utils/linkedin-data-operations.d.ts.map +1 -0
  106. package/dist/utils/linkedin-data-operations.js +613 -0
  107. package/dist/utils/linkedin-data-operations.js.map +1 -0
  108. package/dist/utils/linkedin-identifier-utils.d.ts +31 -0
  109. package/dist/utils/linkedin-identifier-utils.d.ts.map +1 -0
  110. package/dist/utils/linkedin-identifier-utils.js +63 -0
  111. package/dist/utils/linkedin-identifier-utils.js.map +1 -0
  112. package/dist/utils/linkedin-profile-cache.d.ts +131 -0
  113. package/dist/utils/linkedin-profile-cache.d.ts.map +1 -0
  114. package/dist/utils/linkedin-profile-cache.js +418 -0
  115. package/dist/utils/linkedin-profile-cache.js.map +1 -0
  116. package/dist/utils/llm-inference-job-operations.d.ts +116 -0
  117. package/dist/utils/llm-inference-job-operations.d.ts.map +1 -0
  118. package/dist/utils/llm-inference-job-operations.js +267 -0
  119. package/dist/utils/llm-inference-job-operations.js.map +1 -0
  120. package/dist/utils/mapping-job-operations.d.ts +272 -0
  121. package/dist/utils/mapping-job-operations.d.ts.map +1 -0
  122. package/dist/utils/mapping-job-operations.js +833 -0
  123. package/dist/utils/mapping-job-operations.js.map +1 -0
  124. package/dist/utils/mapping-operations.d.ts +80 -0
  125. package/dist/utils/mapping-operations.d.ts.map +1 -0
  126. package/dist/utils/mapping-operations.js +318 -0
  127. package/dist/utils/mapping-operations.js.map +1 -0
  128. package/dist/utils/on-demand-mapping-operations.d.ts +199 -0
  129. package/dist/utils/on-demand-mapping-operations.d.ts.map +1 -0
  130. package/dist/utils/on-demand-mapping-operations.js +728 -0
  131. package/dist/utils/on-demand-mapping-operations.js.map +1 -0
  132. package/dist/utils/onboarding-operations.d.ts +53 -0
  133. package/dist/utils/onboarding-operations.d.ts.map +1 -0
  134. package/dist/utils/onboarding-operations.js +223 -0
  135. package/dist/utils/onboarding-operations.js.map +1 -0
  136. package/dist/utils/organization-assignment-job-operations.d.ts +258 -0
  137. package/dist/utils/organization-assignment-job-operations.d.ts.map +1 -0
  138. package/dist/utils/organization-assignment-job-operations.js +881 -0
  139. package/dist/utils/organization-assignment-job-operations.js.map +1 -0
  140. package/dist/utils/organization-assignment-operations.d.ts +59 -0
  141. package/dist/utils/organization-assignment-operations.d.ts.map +1 -0
  142. package/dist/utils/organization-assignment-operations.js +130 -0
  143. package/dist/utils/organization-assignment-operations.js.map +1 -0
  144. package/dist/utils/organization-operations.d.ts +284 -0
  145. package/dist/utils/organization-operations.d.ts.map +1 -0
  146. package/dist/utils/organization-operations.js +1030 -0
  147. package/dist/utils/organization-operations.js.map +1 -0
  148. package/dist/utils/organization-relationship-operations.d.ts +79 -0
  149. package/dist/utils/organization-relationship-operations.d.ts.map +1 -0
  150. package/dist/utils/organization-relationship-operations.js +294 -0
  151. package/dist/utils/organization-relationship-operations.js.map +1 -0
  152. package/dist/utils/quota-operations.d.ts +107 -0
  153. package/dist/utils/quota-operations.d.ts.map +1 -0
  154. package/dist/utils/quota-operations.js +692 -0
  155. package/dist/utils/quota-operations.js.map +1 -0
  156. package/dist/utils/recursive-mapping-job-operations.d.ts +42 -0
  157. package/dist/utils/recursive-mapping-job-operations.d.ts.map +1 -0
  158. package/dist/utils/recursive-mapping-job-operations.js +169 -0
  159. package/dist/utils/recursive-mapping-job-operations.js.map +1 -0
  160. package/dist/utils/relationship-operations.d.ts +130 -0
  161. package/dist/utils/relationship-operations.d.ts.map +1 -0
  162. package/dist/utils/relationship-operations.js +329 -0
  163. package/dist/utils/relationship-operations.js.map +1 -0
  164. package/dist/utils/sales-pipeline-operations.d.ts +163 -0
  165. package/dist/utils/sales-pipeline-operations.d.ts.map +1 -0
  166. package/dist/utils/sales-pipeline-operations.js +725 -0
  167. package/dist/utils/sales-pipeline-operations.js.map +1 -0
  168. package/dist/utils/skills-operations.d.ts +117 -0
  169. package/dist/utils/skills-operations.d.ts.map +1 -0
  170. package/dist/utils/skills-operations.js +487 -0
  171. package/dist/utils/skills-operations.js.map +1 -0
  172. package/dist/utils/subscription-operations.d.ts +123 -0
  173. package/dist/utils/subscription-operations.d.ts.map +1 -0
  174. package/dist/utils/subscription-operations.js +391 -0
  175. package/dist/utils/subscription-operations.js.map +1 -0
  176. package/dist/utils/unipile-account-operations.d.ts +96 -0
  177. package/dist/utils/unipile-account-operations.d.ts.map +1 -0
  178. package/dist/utils/unipile-account-operations.js +255 -0
  179. package/dist/utils/unipile-account-operations.js.map +1 -0
  180. package/dist/utils/user-industry-operations.d.ts +80 -0
  181. package/dist/utils/user-industry-operations.d.ts.map +1 -0
  182. package/dist/utils/user-industry-operations.js +237 -0
  183. package/dist/utils/user-industry-operations.js.map +1 -0
  184. package/dist/utils/user-operations.d.ts +87 -0
  185. package/dist/utils/user-operations.d.ts.map +1 -0
  186. package/dist/utils/user-operations.js +212 -0
  187. package/dist/utils/user-operations.js.map +1 -0
  188. package/package.json +98 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sales-pipeline-operations.js","sourceRoot":"","sources":["../../src/utils/sales-pipeline-operations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,117 @@
1
+ /**
2
+ * =============================================================================
3
+ * NORMALIZED SKILLS OPERATIONS - CRITICAL UTILITY FUNCTIONS
4
+ * =============================================================================
5
+ *
6
+ * This module provides essential functions for managing the normalized skills
7
+ * architecture with the central skills table and junction tables.
8
+ *
9
+ * ARCHITECTURE:
10
+ * - linkedin.skills: Master skills table (all unique skills)
11
+ * - linkedin.profile_skills: Junction table linking profiles to skills
12
+ * - linkedin.work_experience_skills: Junction table linking jobs to skills
13
+ * - linkedin.education_skills: Junction table linking education to skills
14
+ *
15
+ * All skill names are normalized to lowercase for consistency.
16
+ */
17
+ import { Pool, PoolClient } from 'pg';
18
+ import type { Database, DatabaseOrTransaction } from "../lib/db";
19
+ export type SkillCategory = "technical" | "soft" | "industry" | "ai_ml" | "data" | "cloud" | "management" | "design" | "marketing" | "sales" | "other";
20
+ export interface SkillInput {
21
+ name: string;
22
+ }
23
+ /**
24
+ * Maximum allowed length for skill names
25
+ */
26
+ export declare const MAX_SKILL_NAME_LENGTH = 50;
27
+ /**
28
+ * Validate skill name length and format
29
+ * @param skillName - The skill name to validate
30
+ * @returns Object with isValid boolean and error message if invalid
31
+ */
32
+ export declare function validateSkillName(skillName: string): {
33
+ isValid: boolean;
34
+ error?: string;
35
+ };
36
+ export interface ProfileSkillInput {
37
+ skillName: string;
38
+ }
39
+ export interface WorkExperienceSkillInput {
40
+ skillName: string;
41
+ }
42
+ export interface EducationSkillInput {
43
+ skillName: string;
44
+ }
45
+ /**
46
+ * Find or create a skill in the central skills table
47
+ * Normalizes skill name to lowercase for consistency and validates length
48
+ */
49
+ export declare function findOrCreateSkill(db: Database | Pool | PoolClient, skillName: string, category?: SkillCategory): Promise<{
50
+ id: number;
51
+ name: string;
52
+ }>;
53
+ /**
54
+ * Batch find or create multiple skills - OPTIMIZED VERSION
55
+ * Uses bulk queries instead of sequential processing for 10x+ performance improvement
56
+ * Validates all skill names before processing
57
+ */
58
+ export declare function findOrCreateSkills(db: DatabaseOrTransaction | Pool | PoolClient, skillInputs: SkillInput[]): Promise<Array<{
59
+ id: number;
60
+ name: string;
61
+ }>>;
62
+ /**
63
+ * Add skills to a LinkedIn profile - OPTIMIZED BATCH VERSION
64
+ * Uses bulk operations for 10x+ performance improvement
65
+ */
66
+ export declare function addProfileSkills(db: DatabaseOrTransaction | Pool | PoolClient, linkedinAccountId: number, skillInputs: ProfileSkillInput[]): Promise<{
67
+ added: number;
68
+ errors: string[];
69
+ }>;
70
+ /**
71
+ * Get all skills for a LinkedIn account
72
+ */
73
+ export declare function getProfileSkills(db: Database | Pool | PoolClient, linkedinAccountId: number): Promise<Array<{
74
+ skillId: number;
75
+ skillName: string;
76
+ }>>;
77
+ /**
78
+ * Add skills to a work experience entry - OPTIMIZED BATCH VERSION
79
+ * Uses bulk operations for 10x+ performance improvement
80
+ */
81
+ export declare function addWorkExperienceSkills(db: DatabaseOrTransaction | Pool | PoolClient, workExperienceId: number, skillInputs: WorkExperienceSkillInput[]): Promise<{
82
+ added: number;
83
+ errors: string[];
84
+ }>;
85
+ /**
86
+ * Add skills to an education entry (with bulk operations)
87
+ * Uses bulk operations for 10x+ performance improvement
88
+ */
89
+ export declare function addEducationSkills(db: DatabaseOrTransaction | Pool | PoolClient, educationId: number, skillInputs: EducationSkillInput[]): Promise<{
90
+ added: number;
91
+ errors: string[];
92
+ }>;
93
+ /**
94
+ * Get all skills for an education entry
95
+ */
96
+ export declare function getEducationSkills(db: Database | Pool | PoolClient, educationId: number): Promise<Array<{
97
+ skill: {
98
+ id: number;
99
+ name: string;
100
+ };
101
+ }>>;
102
+ /**
103
+ * Get all skills for a work experience entry
104
+ */
105
+ export declare function getWorkExperienceSkills(db: Database | Pool | PoolClient, workExperienceId: number): Promise<Array<{
106
+ skillId: number;
107
+ skillName: string;
108
+ }>>;
109
+ /**
110
+ * Get the most popular skills across all profiles
111
+ */
112
+ export declare function getPopularSkills(db: Database | Pool | PoolClient, limit?: number): Promise<Array<{
113
+ skillId: number;
114
+ skillName: string;
115
+ profileCount: number;
116
+ }>>;
117
+ //# sourceMappingURL=skills-operations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills-operations.d.ts","sourceRoot":"","sources":["../../src/utils/skills-operations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,487 @@
1
+ "use strict";
2
+ /**
3
+ * =============================================================================
4
+ * NORMALIZED SKILLS OPERATIONS - CRITICAL UTILITY FUNCTIONS
5
+ * =============================================================================
6
+ *
7
+ * This module provides essential functions for managing the normalized skills
8
+ * architecture with the central skills table and junction tables.
9
+ *
10
+ * ARCHITECTURE:
11
+ * - linkedin.skills: Master skills table (all unique skills)
12
+ * - linkedin.profile_skills: Junction table linking profiles to skills
13
+ * - linkedin.work_experience_skills: Junction table linking jobs to skills
14
+ * - linkedin.education_skills: Junction table linking education to skills
15
+ *
16
+ * All skill names are normalized to lowercase for consistency.
17
+ */
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.MAX_SKILL_NAME_LENGTH = void 0;
20
+ exports.validateSkillName = validateSkillName;
21
+ exports.findOrCreateSkill = findOrCreateSkill;
22
+ exports.findOrCreateSkills = findOrCreateSkills;
23
+ exports.addProfileSkills = addProfileSkills;
24
+ exports.getProfileSkills = getProfileSkills;
25
+ exports.addWorkExperienceSkills = addWorkExperienceSkills;
26
+ exports.addEducationSkills = addEducationSkills;
27
+ exports.getEducationSkills = getEducationSkills;
28
+ exports.getWorkExperienceSkills = getWorkExperienceSkills;
29
+ exports.getPopularSkills = getPopularSkills;
30
+ const pg_client_1 = require("../lib/pg-client");
31
+ const db_1 = require("../lib/db");
32
+ // =============================================================================
33
+ // VALIDATION
34
+ // =============================================================================
35
+ /**
36
+ * Maximum allowed length for skill names
37
+ */
38
+ exports.MAX_SKILL_NAME_LENGTH = 50;
39
+ /**
40
+ * Validate skill name length and format
41
+ * @param skillName - The skill name to validate
42
+ * @returns Object with isValid boolean and error message if invalid
43
+ */
44
+ function validateSkillName(skillName) {
45
+ const trimmedName = skillName.trim();
46
+ if (trimmedName.length === 0) {
47
+ return { isValid: false, error: "Skill name cannot be empty" };
48
+ }
49
+ if (trimmedName.length > exports.MAX_SKILL_NAME_LENGTH) {
50
+ return {
51
+ isValid: false,
52
+ error: `Skill name exceeds maximum length of ${exports.MAX_SKILL_NAME_LENGTH} characters (current: ${trimmedName.length})`,
53
+ };
54
+ }
55
+ return { isValid: true };
56
+ }
57
+ // =============================================================================
58
+ // CORE SKILL OPERATIONS
59
+ // =============================================================================
60
+ /**
61
+ * Find or create a skill in the central skills table
62
+ * Normalizes skill name to lowercase for consistency and validates length
63
+ */
64
+ async function findOrCreateSkill(db, skillName, category) {
65
+ // Validate skill name first
66
+ const validation = validateSkillName(skillName);
67
+ if (!validation.isValid) {
68
+ throw new Error(`Invalid skill name: ${validation.error}`);
69
+ }
70
+ const normalizedName = skillName.trim().toLowerCase();
71
+ // Try to find existing skill
72
+ const existingSql = `SELECT id, name FROM linkedin.skills WHERE name = $1 LIMIT 1`;
73
+ const existing = await (0, pg_client_1.queryOne)(db, existingSql, [normalizedName]);
74
+ if (existing) {
75
+ return {
76
+ id: existing.id,
77
+ name: existing.name,
78
+ };
79
+ }
80
+ // Create new skill
81
+ const skillValues = {
82
+ name: normalizedName,
83
+ };
84
+ (0, db_1.debugLogDbOperation)("insert", "skills", skillValues);
85
+ const insertSql = `
86
+ INSERT INTO linkedin.skills (name, created_at)
87
+ VALUES ($1, NOW())
88
+ RETURNING id, name
89
+ `;
90
+ const newSkill = await (0, pg_client_1.queryOne)(db, insertSql, [normalizedName]);
91
+ if (!newSkill) {
92
+ throw new Error(`Failed to create skill: ${normalizedName}`);
93
+ }
94
+ (0, db_1.debugLogDbOperation)("insert", "skills", skillValues, newSkill);
95
+ return {
96
+ id: newSkill.id,
97
+ name: newSkill.name,
98
+ };
99
+ }
100
+ /**
101
+ * Batch find or create multiple skills - OPTIMIZED VERSION
102
+ * Uses bulk queries instead of sequential processing for 10x+ performance improvement
103
+ * Validates all skill names before processing
104
+ */
105
+ async function findOrCreateSkills(db, skillInputs) {
106
+ if (skillInputs.length === 0)
107
+ return [];
108
+ // Validate all skill names first
109
+ const validationErrors = [];
110
+ skillInputs.forEach((input, index) => {
111
+ const validation = validateSkillName(input.name);
112
+ if (!validation.isValid) {
113
+ validationErrors.push(`Skill ${index + 1} (${input.name}): ${validation.error}`);
114
+ }
115
+ });
116
+ if (validationErrors.length > 0) {
117
+ throw new Error(`Invalid skill names found:\n${validationErrors.join("\n")}`);
118
+ }
119
+ const normalizedInputs = skillInputs.map(input => ({
120
+ name: input.name.trim().toLowerCase(),
121
+ }));
122
+ // Deduplicate inputs to prevent "ON CONFLICT DO UPDATE command cannot affect row a second time" error
123
+ const uniqueInputsMap = new Map();
124
+ normalizedInputs.forEach(input => {
125
+ if (!uniqueInputsMap.has(input.name)) {
126
+ uniqueInputsMap.set(input.name, input);
127
+ }
128
+ });
129
+ const uniqueInputs = Array.from(uniqueInputsMap.values());
130
+ const skillNames = uniqueInputs.map(input => input.name);
131
+ // 1. Batch find existing skills
132
+ const placeholders = skillNames.map((_, i) => `$${i + 1}`).join(', ');
133
+ const selectSql = `SELECT id, name FROM linkedin.skills WHERE name IN (${placeholders})`;
134
+ const existingSkills = await (0, pg_client_1.query)(db, selectSql, skillNames);
135
+ const existingSkillMap = new Map(existingSkills.map(skill => [skill.name, skill]));
136
+ // 2. Identify missing skills
137
+ const missingSkills = uniqueInputs.filter(input => !existingSkillMap.has(input.name));
138
+ // 3. Batch create missing skills with conflict handling
139
+ if (missingSkills.length > 0) {
140
+ try {
141
+ const skillsToInsert = missingSkills.map(skill => ({
142
+ name: skill.name,
143
+ }));
144
+ (0, db_1.debugLogDbOperation)("insert", "skills", skillsToInsert, undefined, {
145
+ operation: "batch_create_skills",
146
+ count: missingSkills.length,
147
+ });
148
+ // Build VALUES clause for batch insert
149
+ const values = [];
150
+ const params = [];
151
+ let paramIndex = 1;
152
+ skillsToInsert.forEach((skill) => {
153
+ values.push(`($${paramIndex}, NOW())`);
154
+ params.push(skill.name);
155
+ paramIndex++;
156
+ });
157
+ const insertSql = `
158
+ INSERT INTO linkedin.skills (name, created_at)
159
+ VALUES ${values.join(', ')}
160
+ ON CONFLICT (name) DO NOTHING
161
+ RETURNING id, name
162
+ `;
163
+ const newSkills = await (0, pg_client_1.query)(db, insertSql, params);
164
+ (0, db_1.debugLogDbOperation)("insert", "skills", skillsToInsert, newSkills, {
165
+ operation: "batch_create_skills",
166
+ count: missingSkills.length,
167
+ inserted_count: newSkills.length,
168
+ });
169
+ // Add new skills to the map
170
+ newSkills.forEach(skill => {
171
+ existingSkillMap.set(skill.name, skill);
172
+ });
173
+ // Re-query for any skills that were created by another concurrent request
174
+ if (newSkills.length < missingSkills.length) {
175
+ const stillMissingNames = missingSkills
176
+ .filter(skill => !existingSkillMap.has(skill.name))
177
+ .map(skill => skill.name);
178
+ if (stillMissingNames.length > 0) {
179
+ const placeholders = stillMissingNames.map((_, i) => `$${i + 1}`).join(', ');
180
+ const requerySql = `SELECT id, name FROM linkedin.skills WHERE name IN (${placeholders})`;
181
+ const concurrentlyCreatedSkills = await (0, pg_client_1.query)(db, requerySql, stillMissingNames);
182
+ concurrentlyCreatedSkills.forEach(skill => {
183
+ existingSkillMap.set(skill.name, skill);
184
+ });
185
+ }
186
+ }
187
+ }
188
+ catch (error) {
189
+ // If batch insert fails completely, fall back to individual skill lookup
190
+ console.warn("Batch skill insert failed, falling back to individual lookups:", error);
191
+ for (const skill of missingSkills) {
192
+ try {
193
+ const lookupSql = `SELECT id, name FROM linkedin.skills WHERE name = $1 LIMIT 1`;
194
+ const existingSkill = await (0, pg_client_1.queryOne)(db, lookupSql, [skill.name]);
195
+ if (existingSkill) {
196
+ existingSkillMap.set(skill.name, existingSkill);
197
+ }
198
+ }
199
+ catch (lookupError) {
200
+ console.warn(`Failed to lookup skill ${skill.name}:`, lookupError);
201
+ }
202
+ }
203
+ }
204
+ }
205
+ // 4. Return results in the same order as original input (including duplicates)
206
+ return normalizedInputs.map(input => {
207
+ const skill = existingSkillMap.get(input.name);
208
+ return {
209
+ id: skill.id,
210
+ name: skill.name,
211
+ };
212
+ });
213
+ }
214
+ // =============================================================================
215
+ // PROFILE SKILLS OPERATIONS
216
+ // =============================================================================
217
+ /**
218
+ * Add skills to a LinkedIn profile - OPTIMIZED BATCH VERSION
219
+ * Uses bulk operations for 10x+ performance improvement
220
+ */
221
+ async function addProfileSkills(db, linkedinAccountId, skillInputs) {
222
+ if (skillInputs.length === 0)
223
+ return { added: 0, errors: [] };
224
+ const errors = [];
225
+ try {
226
+ // Clear existing skills for this LinkedIn account
227
+ const deleteSql = `DELETE FROM linkedin.profile_skills WHERE linkedin_account_id = $1`;
228
+ await (0, pg_client_1.execute)(db, deleteSql, [linkedinAccountId]);
229
+ // Batch find or create all skills
230
+ const skillRecords = await findOrCreateSkills(db, skillInputs.map(input => {
231
+ const skillInput = { name: input.skillName };
232
+ return skillInput;
233
+ }));
234
+ // Create skill ID map for fast lookup
235
+ const skillMap = new Map(skillRecords.map((skill, index) => [
236
+ skillInputs[index].skillName.trim().toLowerCase(),
237
+ skill,
238
+ ]));
239
+ // Batch insert profile-skill associations
240
+ const associations = skillInputs
241
+ .map(input => {
242
+ const skill = skillMap.get(input.skillName.trim().toLowerCase());
243
+ if (!skill)
244
+ return null;
245
+ return {
246
+ linkedinAccountId,
247
+ skillId: skill.id,
248
+ };
249
+ })
250
+ .filter((item) => item !== null);
251
+ if (associations.length > 0) {
252
+ (0, db_1.debugLogDbOperation)("insert", "linkedin.profile_skills", associations, undefined, {
253
+ operation: "onConflictDoNothing",
254
+ linkedinAccountId: linkedinAccountId,
255
+ });
256
+ // Build VALUES clause for batch insert
257
+ const values = [];
258
+ const params = [];
259
+ let paramIndex = 1;
260
+ associations.forEach((assoc) => {
261
+ values.push(`($${paramIndex}, $${paramIndex + 1}, NOW())`);
262
+ params.push(assoc.linkedinAccountId, assoc.skillId);
263
+ paramIndex += 2;
264
+ });
265
+ const insertSql = `
266
+ INSERT INTO linkedin.profile_skills (linkedin_account_id, skill_id, created_at)
267
+ VALUES ${values.join(', ')}
268
+ ON CONFLICT (linkedin_account_id, skill_id) DO NOTHING
269
+ `;
270
+ await (0, pg_client_1.execute)(db, insertSql, params);
271
+ (0, db_1.debugLogDbOperation)("insert", "linkedin.profile_skills", associations, undefined, {
272
+ operation: "completed",
273
+ linkedinAccountId: linkedinAccountId,
274
+ });
275
+ }
276
+ return { added: associations.length, errors };
277
+ }
278
+ catch (error) {
279
+ errors.push(`Failed to batch process profile skills: ${error}`);
280
+ return { added: 0, errors };
281
+ }
282
+ }
283
+ /**
284
+ * Get all skills for a LinkedIn account
285
+ */
286
+ async function getProfileSkills(db, linkedinAccountId) {
287
+ const sql = `
288
+ SELECT s.id as skill_id, s.name as skill_name
289
+ FROM linkedin.profile_skills ps
290
+ INNER JOIN linkedin.skills s ON ps.skill_id = s.id
291
+ WHERE ps.linkedin_account_id = $1
292
+ ORDER BY s.name ASC
293
+ `;
294
+ const results = await (0, pg_client_1.query)(db, sql, [linkedinAccountId]);
295
+ return results.map(r => ({
296
+ skillId: r.skill_id,
297
+ skillName: r.skill_name,
298
+ }));
299
+ }
300
+ // =============================================================================
301
+ // WORK EXPERIENCE SKILLS OPERATIONS
302
+ // =============================================================================
303
+ /**
304
+ * Add skills to a work experience entry - OPTIMIZED BATCH VERSION
305
+ * Uses bulk operations for 10x+ performance improvement
306
+ */
307
+ async function addWorkExperienceSkills(db, workExperienceId, skillInputs) {
308
+ if (skillInputs.length === 0)
309
+ return { added: 0, errors: [] };
310
+ const errors = [];
311
+ try {
312
+ // Clear existing skills for this work experience
313
+ const deleteSql = `DELETE FROM linkedin.work_experience_skills WHERE work_experience_id = $1`;
314
+ await (0, pg_client_1.execute)(db, deleteSql, [workExperienceId]);
315
+ // Batch find or create all skills
316
+ const skillRecords = await findOrCreateSkills(db, skillInputs.map(input => {
317
+ const skillInput = { name: input.skillName };
318
+ return skillInput;
319
+ }));
320
+ // Create skill ID map for fast lookup
321
+ const skillMap = new Map(skillRecords.map((skill, index) => [
322
+ skillInputs[index].skillName.trim().toLowerCase(),
323
+ skill,
324
+ ]));
325
+ // Batch insert work-experience-skill associations
326
+ const associations = skillInputs
327
+ .map(input => {
328
+ const skill = skillMap.get(input.skillName.trim().toLowerCase());
329
+ if (!skill)
330
+ return null;
331
+ return {
332
+ workExperienceId,
333
+ skillId: skill.id,
334
+ };
335
+ })
336
+ .filter((item) => item !== null);
337
+ if (associations.length > 0) {
338
+ // Build VALUES clause for batch insert
339
+ const values = [];
340
+ const params = [];
341
+ let paramIndex = 1;
342
+ associations.forEach((assoc) => {
343
+ values.push(`($${paramIndex}, $${paramIndex + 1}, NOW())`);
344
+ params.push(assoc.workExperienceId, assoc.skillId);
345
+ paramIndex += 2;
346
+ });
347
+ const insertSql = `
348
+ INSERT INTO linkedin.work_experience_skills (work_experience_id, skill_id, created_at)
349
+ VALUES ${values.join(', ')}
350
+ ON CONFLICT (work_experience_id, skill_id) DO NOTHING
351
+ `;
352
+ await (0, pg_client_1.execute)(db, insertSql, params);
353
+ }
354
+ return { added: associations.length, errors };
355
+ }
356
+ catch (error) {
357
+ errors.push(`Failed to batch process work experience skills: ${error}`);
358
+ return { added: 0, errors };
359
+ }
360
+ }
361
+ /**
362
+ * Add skills to an education entry (with bulk operations)
363
+ * Uses bulk operations for 10x+ performance improvement
364
+ */
365
+ async function addEducationSkills(db, educationId, skillInputs) {
366
+ if (skillInputs.length === 0)
367
+ return { added: 0, errors: [] };
368
+ const errors = [];
369
+ try {
370
+ // Clear existing skills for this education
371
+ const deleteSql = `DELETE FROM linkedin.education_skills WHERE education_id = $1`;
372
+ await (0, pg_client_1.execute)(db, deleteSql, [educationId]);
373
+ // Batch find or create all skills
374
+ const skillRecords = await findOrCreateSkills(db, skillInputs.map(input => {
375
+ const skillInput = { name: input.skillName };
376
+ return skillInput;
377
+ }));
378
+ // Create skill ID map for fast lookup
379
+ const skillMap = new Map(skillRecords.map((skill, index) => [
380
+ skillInputs[index].skillName.trim().toLowerCase(),
381
+ skill,
382
+ ]));
383
+ // Batch insert education-skill associations
384
+ const associations = skillInputs
385
+ .map(input => {
386
+ const skill = skillMap.get(input.skillName.trim().toLowerCase());
387
+ if (!skill)
388
+ return null;
389
+ return {
390
+ educationId,
391
+ skillId: skill.id,
392
+ };
393
+ })
394
+ .filter((item) => item !== null);
395
+ if (associations.length > 0) {
396
+ // Build VALUES clause for batch insert
397
+ const values = [];
398
+ const params = [];
399
+ let paramIndex = 1;
400
+ associations.forEach((assoc) => {
401
+ values.push(`($${paramIndex}, $${paramIndex + 1}, NOW())`);
402
+ params.push(assoc.educationId, assoc.skillId);
403
+ paramIndex += 2;
404
+ });
405
+ const insertSql = `
406
+ INSERT INTO linkedin.education_skills (education_id, skill_id, created_at)
407
+ VALUES ${values.join(', ')}
408
+ ON CONFLICT (education_id, skill_id) DO NOTHING
409
+ `;
410
+ await (0, pg_client_1.execute)(db, insertSql, params);
411
+ }
412
+ return { added: associations.length, errors };
413
+ }
414
+ catch (error) {
415
+ errors.push(`Failed to batch process education skills: ${error}`);
416
+ return { added: 0, errors };
417
+ }
418
+ }
419
+ /**
420
+ * Get all skills for an education entry
421
+ */
422
+ async function getEducationSkills(db, educationId) {
423
+ const sql = `
424
+ SELECT s.id, s.name
425
+ FROM linkedin.education_skills es
426
+ INNER JOIN linkedin.skills s ON es.skill_id = s.id
427
+ WHERE es.education_id = $1
428
+ ORDER BY s.name ASC
429
+ `;
430
+ const results = await (0, pg_client_1.query)(db, sql, [educationId]);
431
+ return results.map(r => ({
432
+ skill: {
433
+ id: r.id,
434
+ name: r.name,
435
+ },
436
+ }));
437
+ }
438
+ /**
439
+ * Get all skills for a work experience entry
440
+ */
441
+ async function getWorkExperienceSkills(db, workExperienceId) {
442
+ const sql = `
443
+ SELECT s.id as skill_id, s.name as skill_name
444
+ FROM linkedin.work_experience_skills wes
445
+ INNER JOIN linkedin.skills s ON wes.skill_id = s.id
446
+ WHERE wes.work_experience_id = $1
447
+ ORDER BY s.name ASC
448
+ `;
449
+ const results = await (0, pg_client_1.query)(db, sql, [workExperienceId]);
450
+ return results.map(r => ({
451
+ skillId: r.skill_id,
452
+ skillName: r.skill_name,
453
+ }));
454
+ }
455
+ // =============================================================================
456
+ // ANALYTICS & INSIGHTS
457
+ // =============================================================================
458
+ /**
459
+ * Get the most popular skills across all profiles
460
+ */
461
+ async function getPopularSkills(db, limit = 50) {
462
+ const sql = `
463
+ SELECT
464
+ s.id as skill_id,
465
+ s.name as skill_name,
466
+ COUNT(DISTINCT ps.linkedin_account_id) as profile_count
467
+ FROM linkedin.skills s
468
+ INNER JOIN linkedin.profile_skills ps ON s.id = ps.skill_id
469
+ GROUP BY s.id, s.name
470
+ ORDER BY COUNT(DISTINCT ps.linkedin_account_id) DESC
471
+ LIMIT $1
472
+ `;
473
+ const results = await (0, pg_client_1.query)(db, sql, [limit]);
474
+ return results.map(r => ({
475
+ skillId: r.skill_id,
476
+ skillName: r.skill_name,
477
+ profileCount: parseInt(r.profile_count),
478
+ }));
479
+ }
480
+ // =============================================================================
481
+ // DEPRECATED EXPORTS - CLEANED UP
482
+ // =============================================================================
483
+ // findSimilarProfiles - REMOVED (unused complex maintenance function)
484
+ // getAllSkillsWithStats - REMOVED (unused maintenance function)
485
+ // cleanupUnusedSkills - REMOVED (unused maintenance function)
486
+ // getSkillsByCategory - REMOVED (unused maintenance function)
487
+ //# sourceMappingURL=skills-operations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills-operations.js","sourceRoot":"","sources":["../../src/utils/skills-operations.ts"],"names":[],"mappings":"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"}