node-behind-api-client 2.0.48
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/.gitlab-ci.yml +20 -0
- package/README.md +65 -0
- package/docs/behind-api-client/easyjob/JobDescriptions/README.md +654 -0
- package/docs/behind-api-client/easyjob/README.md +647 -0
- package/docs/behind-api-client/easyjob/applicants/README.md +494 -0
- package/docs/behind-api-client/easyjob/applications/README.md +754 -0
- package/docs/behind-api-client/easyjob/candidateProfiles/README.md +940 -0
- package/docs/behind-api-client/easyjob/jd-candidate-questions/README.md +372 -0
- package/docs/behind-api-client/payments/payture/README.21.md +901 -0
- package/docs/behind-api-client/payments/payture/README.cards.md +1497 -0
- package/docs/behind-api-client/payments/payture/README.md +1497 -0
- package/docs/behind-api-client/payments/payture/README.rukitchen.md +396 -0
- package/docs/behind-api-client/payments/payture/README.subscriptions.md +1266 -0
- package/docs/behind-api-client/payments/stripe/README.flow.md +254 -0
- package/docs/behind-api-client/rag/storage/README.md +519 -0
- package/example.js +35 -0
- package/index.cjs +14 -0
- package/index.js +15 -0
- package/lib/behind-api-auth-client/BehindApiAuthClient.js +91 -0
- package/lib/behind-api-auth-client/authorisation/AuthorisationApp.js +9 -0
- package/lib/behind-api-auth-client/authorisation/AuthorisationV10.js +9 -0
- package/lib/behind-api-auth-client/authorisation/AuthorisationV10Code.js +30 -0
- package/lib/behind-api-auth-client/example.js +47 -0
- package/lib/behind-api-auth-client/package.json +9 -0
- package/lib/behind-api-client/BehindApiClient.js +137 -0
- package/lib/behind-api-client/chat/ChatApp.js +11 -0
- package/lib/behind-api-client/chat/ChatV10.js +13 -0
- package/lib/behind-api-client/chat/ChatV10Chat.js +87 -0
- package/lib/behind-api-client/chat/ChatV10Chats.js +14 -0
- package/lib/behind-api-client/chat/ChatV10Message.js +57 -0
- package/lib/behind-api-client/chat/ChatV20.js +11 -0
- package/lib/behind-api-client/chat/ChatV20Chat.js +14 -0
- package/lib/behind-api-client/chat/ChatV20Message.js +27 -0
- package/lib/behind-api-client/easyjob/EasyjobApp.js +9 -0
- package/lib/behind-api-client/easyjob/EasyjobV10.js +31 -0
- package/lib/behind-api-client/easyjob/EasyjobV10Answers.js +16 -0
- package/lib/behind-api-client/easyjob/EasyjobV10Applicants.js +29 -0
- package/lib/behind-api-client/easyjob/EasyjobV10Applications.js +39 -0
- package/lib/behind-api-client/easyjob/EasyjobV10CandidateProfileArtifacts.js +31 -0
- package/lib/behind-api-client/easyjob/EasyjobV10CandidateProfiles.js +99 -0
- package/lib/behind-api-client/easyjob/EasyjobV10Companies.js +36 -0
- package/lib/behind-api-client/easyjob/EasyjobV10Cv.js +15 -0
- package/lib/behind-api-client/easyjob/EasyjobV10Departments.js +37 -0
- package/lib/behind-api-client/easyjob/EasyjobV10JobDescriptionArtifacts.js +29 -0
- package/lib/behind-api-client/easyjob/EasyjobV10JobDescriptionCandidateQuestions.js +63 -0
- package/lib/behind-api-client/easyjob/EasyjobV10JobDescriptions.js +93 -0
- package/lib/behind-api-client/easyjob/EasyjobV10Reports.js +35 -0
- package/lib/behind-api-client/example.js +47 -0
- package/lib/behind-api-client/global/GlobalApp.js +9 -0
- package/lib/behind-api-client/global/GlobalV10.js +11 -0
- package/lib/behind-api-client/global/GlobalV10Sockets.js +16 -0
- package/lib/behind-api-client/global/GlobalV10Storage.js +29 -0
- package/lib/behind-api-client/gpt/GptApp.js +15 -0
- package/lib/behind-api-client/gpt/GptV10.js +15 -0
- package/lib/behind-api-client/gpt/GptV10Prompt.js +17 -0
- package/lib/behind-api-client/gpt/GptV10Request.js +16 -0
- package/lib/behind-api-client/gpt/GptV10Storedprompts.js +14 -0
- package/lib/behind-api-client/gpt/GptV10Whisper.js +23 -0
- package/lib/behind-api-client/gpt/GptV20.js +9 -0
- package/lib/behind-api-client/gpt/GptV20Prompt.js +15 -0
- package/lib/behind-api-client/gpt/GptV30.js +13 -0
- package/lib/behind-api-client/gpt/GptV30Chat.js +19 -0
- package/lib/behind-api-client/gpt/GptV30Prompt.js +41 -0
- package/lib/behind-api-client/gpt/GptV30Prompts.js +32 -0
- package/lib/behind-api-client/gpt/GptV40.js +11 -0
- package/lib/behind-api-client/gpt/GptV40Prompt.js +24 -0
- package/lib/behind-api-client/gpt/GptV40Prompts.js +30 -0
- package/lib/behind-api-client/mailer/MailerApp.js +11 -0
- package/lib/behind-api-client/mailer/MailerV10.js +15 -0
- package/lib/behind-api-client/mailer/MailerV10Bulk.js +21 -0
- package/lib/behind-api-client/mailer/MailerV10Message.js +83 -0
- package/lib/behind-api-client/mailer/MailerV10Settings.js +44 -0
- package/lib/behind-api-client/mailer/MailerV10Template.js +23 -0
- package/lib/behind-api-client/mailer/MailerV20.js +9 -0
- package/lib/behind-api-client/mailer/MailerV20Message.js +21 -0
- package/lib/behind-api-client/mastogram/MastogramApp.js +9 -0
- package/lib/behind-api-client/mastogram/MastogramV10.js +13 -0
- package/lib/behind-api-client/mastogram/MastogramV10Bluesky.js +42 -0
- package/lib/behind-api-client/mastogram/MastogramV10Mastodon.js +45 -0
- package/lib/behind-api-client/mastogram/MastogramV10Telegram.js +39 -0
- package/lib/behind-api-client/monitor/MonitorApp.js +9 -0
- package/lib/behind-api-client/monitor/MonitorV10.js +13 -0
- package/lib/behind-api-client/monitor/MonitorV10Finances.js +39 -0
- package/lib/behind-api-client/monitor/MonitorV10Record.js +15 -0
- package/lib/behind-api-client/monitor/MonitorV10Records.js +22 -0
- package/lib/behind-api-client/oauth/OauthApp.js +9 -0
- package/lib/behind-api-client/oauth/OauthV10.js +9 -0
- package/lib/behind-api-client/oauth/OauthV10Authorisation.js +15 -0
- package/lib/behind-api-client/package.json +9 -0
- package/lib/behind-api-client/payments/PaymentsApp.js +13 -0
- package/lib/behind-api-client/payments/PaymentsV10.js +15 -0
- package/lib/behind-api-client/payments/PaymentsV10Gift.js +32 -0
- package/lib/behind-api-client/payments/PaymentsV10Payture.js +30 -0
- package/lib/behind-api-client/payments/PaymentsV10Product.js +15 -0
- package/lib/behind-api-client/payments/PaymentsV10Telegram.js +44 -0
- package/lib/behind-api-client/payments/PaymentsV20.js +9 -0
- package/lib/behind-api-client/payments/PaymentsV20Payture.js +32 -0
- package/lib/behind-api-client/payments/PaymentsV21.js +15 -0
- package/lib/behind-api-client/payments/PaymentsV21Cards.js +14 -0
- package/lib/behind-api-client/payments/PaymentsV21Payture.js +29 -0
- package/lib/behind-api-client/payments/PaymentsV21Stripe.js +28 -0
- package/lib/behind-api-client/payments/PaymentsV21Subscriptions.js +21 -0
- package/lib/behind-api-client/questionnaire/QuestionnaireApp.js +9 -0
- package/lib/behind-api-client/questionnaire/QuestionnaireV10.js +9 -0
- package/lib/behind-api-client/questionnaire/QuestionnaireV10Form.js +22 -0
- package/lib/behind-api-client/raet/RaetApp.js +11 -0
- package/lib/behind-api-client/raet/RaetV10.js +21 -0
- package/lib/behind-api-client/raet/RaetV10Cv.js +87 -0
- package/lib/behind-api-client/raet/RaetV10Individual.js +43 -0
- package/lib/behind-api-client/raet/RaetV10Individuals.js +38 -0
- package/lib/behind-api-client/raet/RaetV10Jd.js +47 -0
- package/lib/behind-api-client/raet/RaetV10Project.js +61 -0
- package/lib/behind-api-client/raet/RaetV10Projects.js +14 -0
- package/lib/behind-api-client/raet/RaetV10Report.js +39 -0
- package/lib/behind-api-client/raet/RaetV20.js +11 -0
- package/lib/behind-api-client/raet/RaetV20Cv.js +31 -0
- package/lib/behind-api-client/raet/RaetV20Individuals.js +25 -0
- package/lib/behind-api-client/rag/RagApp.js +9 -0
- package/lib/behind-api-client/rag/RagV10.js +9 -0
- package/lib/behind-api-client/rag/RagV10Storage.js +27 -0
- package/lib/behind-api-client/ruKitchen/RuKitchenApp.js +9 -0
- package/lib/behind-api-client/ruKitchen/RuKitchenV10.js +11 -0
- package/lib/behind-api-client/ruKitchen/RuKitchenV10Importer.js +29 -0
- package/lib/behind-api-client/ruKitchen/RuKitchenV10SeoArticle.js +14 -0
- package/lib/behind-api-client/sales/SalesApp.js +11 -0
- package/lib/behind-api-client/sales/SalesV10.js +23 -0
- package/lib/behind-api-client/sales/SalesV10Catalogue.js +58 -0
- package/lib/behind-api-client/sales/SalesV10Categories.js +15 -0
- package/lib/behind-api-client/sales/SalesV10Companies.js +55 -0
- package/lib/behind-api-client/sales/SalesV10Company.js +120 -0
- package/lib/behind-api-client/sales/SalesV10Group.js +70 -0
- package/lib/behind-api-client/sales/SalesV10Groups.js +21 -0
- package/lib/behind-api-client/sales/SalesV10Logs.js +14 -0
- package/lib/behind-api-client/sales/SalesV10Notes.js +38 -0
- package/lib/behind-api-client/sales/SalesV20.js +11 -0
- package/lib/behind-api-client/sales/SalesV20Companies.js +26 -0
- package/lib/behind-api-client/sales/SalesV20Notes.js +17 -0
- package/lib/behind-api-client/sip/SipApp.js +9 -0
- package/lib/behind-api-client/sip/SipV10.js +15 -0
- package/lib/behind-api-client/sip/SipV10Call.js +83 -0
- package/lib/behind-api-client/sip/SipV10Phone.js +44 -0
- package/lib/behind-api-client/sip/SipV10Transcript.js +21 -0
- package/lib/behind-api-client/sip/SipV10Transcripts.js +21 -0
- package/lib/behind-api-client/storage/StorageApp.js +9 -0
- package/lib/behind-api-client/storage/StorageV10.js +11 -0
- package/lib/behind-api-client/storage/StorageV10File.js +35 -0
- package/lib/behind-api-client/storage/StorageV10Upload.js +21 -0
- package/lib/behind-api-client/tests/TestsApp.js +9 -0
- package/lib/behind-api-client/tests/TestsV10.js +15 -0
- package/lib/behind-api-client/tests/TestsV10Cases.js +29 -0
- package/lib/behind-api-client/tests/TestsV10CasesExtended.js +14 -0
- package/lib/behind-api-client/tests/TestsV10Core.js +14 -0
- package/lib/behind-api-client/tests/TestsV10Mail.js +14 -0
- package/lib/behind-api-client/tools/ToolsApp.js +9 -0
- package/lib/behind-api-client/tools/ToolsV10.js +9 -0
- package/lib/behind-api-client/tools/ToolsV10Pdf.js +30 -0
- package/package.json +25 -0
|
@@ -0,0 +1,940 @@
|
|
|
1
|
+
# Candidate Profiles API Extension
|
|
2
|
+
|
|
3
|
+
This document extends the main EasyJob JavaScript API Client Documentation with detailed information about the Candidate Profiles API methods.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
The Candidate Profiles API allows you to manage comprehensive candidate profiles throughout the job application process. This includes creating and updating candidate profiles, managing profile sections (education, experience, skills, etc.), parsing resumes from PDFs, and maintaining profile status. Each user can have only one active (non-deleted) candidate profile.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Candidate Profiles API
|
|
12
|
+
|
|
13
|
+
### behindAPI.easyjob.V10.candidateProfiles.create()
|
|
14
|
+
Creates a new candidate profile record for the authenticated user. Each user can have only one non-deleted profile.
|
|
15
|
+
|
|
16
|
+
**Parameters:**
|
|
17
|
+
- None required (uses authenticated user's session)
|
|
18
|
+
|
|
19
|
+
**Usage:**
|
|
20
|
+
```javascript
|
|
21
|
+
const result = await behindAPI.easyjob.V10.candidateProfiles.create();
|
|
22
|
+
|
|
23
|
+
// Response:
|
|
24
|
+
{
|
|
25
|
+
success: true,
|
|
26
|
+
data: {
|
|
27
|
+
profile_id: "aa0e8400-e29b-41d4-a716-446655440005"
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### behindAPI.easyjob.V10.candidateProfiles.get()
|
|
33
|
+
Retrieves the candidate profile for the current user. If no profile exists, automatically creates one and returns it.
|
|
34
|
+
|
|
35
|
+
**Parameters:**
|
|
36
|
+
- None required (uses authenticated user's session)
|
|
37
|
+
|
|
38
|
+
**Usage:**
|
|
39
|
+
```javascript
|
|
40
|
+
const result = await behindAPI.easyjob.V10.candidateProfiles.get();
|
|
41
|
+
|
|
42
|
+
// Response:
|
|
43
|
+
{
|
|
44
|
+
success: true,
|
|
45
|
+
data: {
|
|
46
|
+
id: "aa0e8400-e29b-41d4-a716-446655440005",
|
|
47
|
+
user_id: "550e8400-e29b-41d4-a716-446655440001",
|
|
48
|
+
profile_data: {
|
|
49
|
+
first_name: "John",
|
|
50
|
+
last_name: "Doe",
|
|
51
|
+
email: "john.doe@example.com",
|
|
52
|
+
phone: "+1-555-123-4567",
|
|
53
|
+
location: "New York, NY",
|
|
54
|
+
summary: "Experienced software developer with expertise in full-stack development...",
|
|
55
|
+
linkedin_url: "https://linkedin.com/in/johndoe",
|
|
56
|
+
portfolio_url: "https://johndoe.dev"
|
|
57
|
+
},
|
|
58
|
+
facts: {
|
|
59
|
+
total_experience_years: 5,
|
|
60
|
+
education_level: "masters",
|
|
61
|
+
skills_match_percentage: 85,
|
|
62
|
+
last_updated: "2024-01-20T09:15:00Z"
|
|
63
|
+
},
|
|
64
|
+
education: [
|
|
65
|
+
{
|
|
66
|
+
institution: "MIT",
|
|
67
|
+
degree: "Master of Science",
|
|
68
|
+
field_of_study: "Computer Science",
|
|
69
|
+
start_year: 2017,
|
|
70
|
+
end_year: 2019,
|
|
71
|
+
gpa: 3.8,
|
|
72
|
+
honors: "Magna Cum Laude"
|
|
73
|
+
}
|
|
74
|
+
],
|
|
75
|
+
job_experience: [
|
|
76
|
+
{
|
|
77
|
+
company: "Tech Corp",
|
|
78
|
+
position: "Senior Software Engineer",
|
|
79
|
+
start_date: "2020-01-15",
|
|
80
|
+
end_date: "2024-01-15",
|
|
81
|
+
current: false,
|
|
82
|
+
description: "Led development of microservices architecture...",
|
|
83
|
+
technologies: ["React", "Node.js", "AWS", "Docker"],
|
|
84
|
+
achievements: ["Reduced deployment time by 60%", "Led team of 5 developers"]
|
|
85
|
+
}
|
|
86
|
+
],
|
|
87
|
+
hard_skills: [
|
|
88
|
+
{
|
|
89
|
+
skill: "JavaScript",
|
|
90
|
+
level: "Expert",
|
|
91
|
+
years_experience: 6
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
skill: "React",
|
|
95
|
+
level: "Advanced",
|
|
96
|
+
years_experience: 4
|
|
97
|
+
}
|
|
98
|
+
],
|
|
99
|
+
soft_skills: [
|
|
100
|
+
{
|
|
101
|
+
skill: "Leadership",
|
|
102
|
+
level: "Advanced"
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
skill: "Communication",
|
|
106
|
+
level: "Expert"
|
|
107
|
+
}
|
|
108
|
+
],
|
|
109
|
+
certificates: [
|
|
110
|
+
{
|
|
111
|
+
name: "AWS Certified Solutions Architect",
|
|
112
|
+
issuing_organization: "Amazon Web Services",
|
|
113
|
+
issue_date: "2023-06-15",
|
|
114
|
+
expiry_date: "2026-06-15",
|
|
115
|
+
credential_id: "AWS-CSA-12345"
|
|
116
|
+
}
|
|
117
|
+
],
|
|
118
|
+
languages: [
|
|
119
|
+
{
|
|
120
|
+
language: "English",
|
|
121
|
+
proficiency: "Native"
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
language: "Spanish",
|
|
125
|
+
proficiency: "Conversational"
|
|
126
|
+
}
|
|
127
|
+
],
|
|
128
|
+
status: "active",
|
|
129
|
+
created_at: "2024-01-15T10:30:00Z",
|
|
130
|
+
updated_at: "2024-01-20T09:15:00Z",
|
|
131
|
+
deleted: false
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### behindAPI.easyjob.V10.candidateProfiles.update(profileId, profileData)
|
|
137
|
+
Updates a candidate profile with new profile data.
|
|
138
|
+
|
|
139
|
+
**Parameters:**
|
|
140
|
+
- `profileId` (string, required) - The candidate profile UUID to update
|
|
141
|
+
- `profileData` (object, required) - The profile data object containing fields to update
|
|
142
|
+
|
|
143
|
+
**Usage:**
|
|
144
|
+
```javascript
|
|
145
|
+
const profileData = {
|
|
146
|
+
name: "John Doe",
|
|
147
|
+
summary: "Senior Software Developer and Team Lead with extensive experience in Java, PHP, Android, and full-stack development, leading teams, and building web applications and CMS solutions.",
|
|
148
|
+
contacts: {
|
|
149
|
+
emails: ["john.doe@example.com"],
|
|
150
|
+
phones: ["+1-555-123-4567"],
|
|
151
|
+
websites: [{
|
|
152
|
+
url: "https://www.linkedin.com/in/johndoe/",
|
|
153
|
+
type: "linkedin"
|
|
154
|
+
}],
|
|
155
|
+
addresses: [{
|
|
156
|
+
city: "New York",
|
|
157
|
+
country: "US"
|
|
158
|
+
}]
|
|
159
|
+
},
|
|
160
|
+
interests: []
|
|
161
|
+
};
|
|
162
|
+
|
|
163
|
+
const result = await behindAPI.easyjob.V10.candidateProfiles.update(
|
|
164
|
+
"aa0e8400-e29b-41d4-a716-446655440005",
|
|
165
|
+
profileData
|
|
166
|
+
);
|
|
167
|
+
|
|
168
|
+
// Response:
|
|
169
|
+
{
|
|
170
|
+
success: true
|
|
171
|
+
}
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
### behindAPI.easyjob.V10.candidateProfiles.delete(profileId)
|
|
175
|
+
Soft deletes a candidate profile record (sets deleted flag to TRUE rather than permanently removing the record).
|
|
176
|
+
|
|
177
|
+
**Parameters:**
|
|
178
|
+
- `profileId` (string, required) - The candidate profile UUID to delete
|
|
179
|
+
|
|
180
|
+
**Usage:**
|
|
181
|
+
```javascript
|
|
182
|
+
const result = await behindAPI.easyjob.V10.candidateProfiles.delete("aa0e8400-e29b-41d4-a716-446655440005");
|
|
183
|
+
|
|
184
|
+
// Response:
|
|
185
|
+
{
|
|
186
|
+
success: true
|
|
187
|
+
}
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
### behindAPI.easyjob.V10.candidateProfiles.updateEducation(profileId, education)
|
|
191
|
+
Updates the education section of a candidate profile.
|
|
192
|
+
|
|
193
|
+
**Parameters:**
|
|
194
|
+
- `profileId` (string, required) - The candidate profile UUID to update
|
|
195
|
+
- `education` (object, required) - The education data object containing education records
|
|
196
|
+
|
|
197
|
+
**Usage:**
|
|
198
|
+
```javascript
|
|
199
|
+
const educationData = {
|
|
200
|
+
education: [
|
|
201
|
+
{
|
|
202
|
+
degree: "Master of Science in Computer Science",
|
|
203
|
+
skills: [],
|
|
204
|
+
end_date: null,
|
|
205
|
+
location: {city: "", country: "US"},
|
|
206
|
+
start_date: "2019-01-01",
|
|
207
|
+
education_name: "",
|
|
208
|
+
institution_name: "Stanford University"
|
|
209
|
+
}
|
|
210
|
+
]
|
|
211
|
+
};
|
|
212
|
+
|
|
213
|
+
const result = await behindAPI.easyjob.V10.candidateProfiles.updateEducation(
|
|
214
|
+
"aa0e8400-e29b-41d4-a716-446655440005",
|
|
215
|
+
educationData
|
|
216
|
+
);
|
|
217
|
+
|
|
218
|
+
// Response:
|
|
219
|
+
{
|
|
220
|
+
success: true
|
|
221
|
+
}
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
### behindAPI.easyjob.V10.candidateProfiles.updateJobExperience(profileId, jobExperience)
|
|
225
|
+
Updates the job experience section of a candidate profile.
|
|
226
|
+
|
|
227
|
+
**Parameters:**
|
|
228
|
+
- `profileId` (string, required) - The candidate profile UUID to update
|
|
229
|
+
- `jobExperience` (object, required) - The job experience data object containing work history
|
|
230
|
+
|
|
231
|
+
**Usage:**
|
|
232
|
+
```javascript
|
|
233
|
+
const jobExperienceData = {
|
|
234
|
+
job_experience: [
|
|
235
|
+
{
|
|
236
|
+
roles: [{
|
|
237
|
+
name: "Senior Software Developer",
|
|
238
|
+
skills: [{
|
|
239
|
+
name: "Java",
|
|
240
|
+
category: "language",
|
|
241
|
+
experience: "Java for Android ECG applications."
|
|
242
|
+
}, {
|
|
243
|
+
name: "Android Studio",
|
|
244
|
+
category: "tool",
|
|
245
|
+
experience: "Android Studio for application development."
|
|
246
|
+
}],
|
|
247
|
+
description: "Built applications for data processing and presentation; implemented applications for reports, activity tracking, and testing; developed and maintained a CMS.",
|
|
248
|
+
responsibilities: [
|
|
249
|
+
"Develop applications (back end/front end) for data processing in Java.",
|
|
250
|
+
"Receive data from devices in real time, pre-process it, and send it to a server for post-processing, storage, and return to the application for presentation."
|
|
251
|
+
]
|
|
252
|
+
}, {
|
|
253
|
+
name: "Team Lead",
|
|
254
|
+
skills: [{
|
|
255
|
+
name: "Team leadership",
|
|
256
|
+
category: "soft_skill",
|
|
257
|
+
experience: "Led a team of up to 10 developers."
|
|
258
|
+
}],
|
|
259
|
+
description: "Led up to 10 developers, handling planning, task allocation, progress tracking, reporting, code reviews, and testing.",
|
|
260
|
+
responsibilities: [
|
|
261
|
+
"Receive assignments from management, assess them, and build time schedules.",
|
|
262
|
+
"Split workload into tasks, assign to team members, track progress, and report to management."
|
|
263
|
+
]
|
|
264
|
+
}],
|
|
265
|
+
end_date: null,
|
|
266
|
+
location: {city: "New York", country: "US"},
|
|
267
|
+
position: "Senior Software Developer and Team Lead",
|
|
268
|
+
start_date: "2020-02-01",
|
|
269
|
+
description: "Developed web applications with real-time data processing and server integration; led a team of up to 10 developers; developed and maintained a PHP/JavaScript CMS using MySQL.",
|
|
270
|
+
company_name: "Tech Solutions Inc",
|
|
271
|
+
project_name: ""
|
|
272
|
+
}
|
|
273
|
+
]
|
|
274
|
+
};
|
|
275
|
+
|
|
276
|
+
const result = await behindAPI.easyjob.V10.candidateProfiles.updateJobExperience(
|
|
277
|
+
"aa0e8400-e29b-41d4-a716-446655440005",
|
|
278
|
+
jobExperienceData
|
|
279
|
+
);
|
|
280
|
+
|
|
281
|
+
// Response:
|
|
282
|
+
{
|
|
283
|
+
success: true
|
|
284
|
+
}
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
### behindAPI.easyjob.V10.candidateProfiles.updateHardSkills(profileId, hardSkills)
|
|
288
|
+
Updates the hard skills section of a candidate profile.
|
|
289
|
+
|
|
290
|
+
**Parameters:**
|
|
291
|
+
- `profileId` (string, required) - The candidate profile UUID to update
|
|
292
|
+
- `hardSkills` (object, required) - The hard skills data object containing technical skills
|
|
293
|
+
|
|
294
|
+
**Usage:**
|
|
295
|
+
```javascript
|
|
296
|
+
const hardSkillsData = {
|
|
297
|
+
hard_skills: [
|
|
298
|
+
{
|
|
299
|
+
name: "Java 7+",
|
|
300
|
+
level: 8,
|
|
301
|
+
category: "language",
|
|
302
|
+
experience: "Developed web applications and server components for data processing."
|
|
303
|
+
},
|
|
304
|
+
{
|
|
305
|
+
name: "JavaScript",
|
|
306
|
+
level: 8,
|
|
307
|
+
category: "language",
|
|
308
|
+
experience: "Used for web front end; CMS development with PHP and JavaScript."
|
|
309
|
+
},
|
|
310
|
+
{
|
|
311
|
+
name: "PHP 5.5.6+",
|
|
312
|
+
level: 8,
|
|
313
|
+
category: "language",
|
|
314
|
+
experience: "Developed and maintained a content management system using PHP and MySQL."
|
|
315
|
+
},
|
|
316
|
+
{
|
|
317
|
+
name: "Android Studio 2+",
|
|
318
|
+
level: 6,
|
|
319
|
+
category: "tool",
|
|
320
|
+
experience: "Primary IDE for Android Java development."
|
|
321
|
+
},
|
|
322
|
+
{
|
|
323
|
+
name: "MySQL",
|
|
324
|
+
level: 6,
|
|
325
|
+
category: "database",
|
|
326
|
+
experience: "Used in CMS development and data storage."
|
|
327
|
+
}
|
|
328
|
+
]
|
|
329
|
+
};
|
|
330
|
+
|
|
331
|
+
const result = await behindAPI.easyjob.V10.candidateProfiles.updateHardSkills(
|
|
332
|
+
"aa0e8400-e29b-41d4-a716-446655440005",
|
|
333
|
+
hardSkillsData
|
|
334
|
+
);
|
|
335
|
+
|
|
336
|
+
// Response:
|
|
337
|
+
{
|
|
338
|
+
success: true
|
|
339
|
+
}
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
### behindAPI.easyjob.V10.candidateProfiles.updateSoftSkills(profileId, softSkills)
|
|
343
|
+
Updates the soft skills section of a candidate profile.
|
|
344
|
+
|
|
345
|
+
**Parameters:**
|
|
346
|
+
- `profileId` (string, required) - The candidate profile UUID to update
|
|
347
|
+
- `softSkills` (object, required) - The soft skills data object containing interpersonal skills
|
|
348
|
+
|
|
349
|
+
**Usage:**
|
|
350
|
+
```javascript
|
|
351
|
+
const softSkillsData = {
|
|
352
|
+
soft_skills: [
|
|
353
|
+
{
|
|
354
|
+
skill: "Leadership",
|
|
355
|
+
level: "Expert"
|
|
356
|
+
},
|
|
357
|
+
{
|
|
358
|
+
skill: "Communication",
|
|
359
|
+
level: "Expert"
|
|
360
|
+
},
|
|
361
|
+
{
|
|
362
|
+
skill: "Problem Solving",
|
|
363
|
+
level: "Advanced"
|
|
364
|
+
},
|
|
365
|
+
{
|
|
366
|
+
skill: "Team Collaboration",
|
|
367
|
+
level: "Expert"
|
|
368
|
+
},
|
|
369
|
+
{
|
|
370
|
+
skill: "Project Management",
|
|
371
|
+
level: "Advanced"
|
|
372
|
+
}
|
|
373
|
+
]
|
|
374
|
+
};
|
|
375
|
+
|
|
376
|
+
const result = await behindAPI.easyjob.V10.candidateProfiles.updateSoftSkills(
|
|
377
|
+
"aa0e8400-e29b-41d4-a716-446655440005",
|
|
378
|
+
softSkillsData
|
|
379
|
+
);
|
|
380
|
+
|
|
381
|
+
// Response:
|
|
382
|
+
{
|
|
383
|
+
success: true
|
|
384
|
+
}
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
### behindAPI.easyjob.V10.candidateProfiles.updateCertificates(profileId, certificates)
|
|
388
|
+
Updates the certificates section of a candidate profile.
|
|
389
|
+
|
|
390
|
+
**Parameters:**
|
|
391
|
+
- `profileId` (string, required) - The candidate profile UUID to update
|
|
392
|
+
- `certificates` (object, required) - The certificates data object containing professional certifications
|
|
393
|
+
|
|
394
|
+
**Usage:**
|
|
395
|
+
```javascript
|
|
396
|
+
const certificatesData = {
|
|
397
|
+
certificates: [
|
|
398
|
+
{
|
|
399
|
+
date: "2023-06-15",
|
|
400
|
+
name: "Master of Science in Computer Science",
|
|
401
|
+
description: "Diploma recognized by accredited university",
|
|
402
|
+
institution: "Stanford University, United States"
|
|
403
|
+
}
|
|
404
|
+
]
|
|
405
|
+
};
|
|
406
|
+
|
|
407
|
+
const result = await behindAPI.easyjob.V10.candidateProfiles.updateCertificates(
|
|
408
|
+
"aa0e8400-e29b-41d4-a716-446655440005",
|
|
409
|
+
certificatesData
|
|
410
|
+
);
|
|
411
|
+
|
|
412
|
+
// Response:
|
|
413
|
+
{
|
|
414
|
+
success: true
|
|
415
|
+
}
|
|
416
|
+
```
|
|
417
|
+
|
|
418
|
+
### behindAPI.easyjob.V10.candidateProfiles.updateLanguages(profileId, languages)
|
|
419
|
+
Updates the languages section of a candidate profile.
|
|
420
|
+
|
|
421
|
+
**Parameters:**
|
|
422
|
+
- `profileId` (string, required) - The candidate profile UUID to update
|
|
423
|
+
- `languages` (object, required) - The languages data object containing language proficiencies
|
|
424
|
+
|
|
425
|
+
**Usage:**
|
|
426
|
+
```javascript
|
|
427
|
+
const languagesData = {
|
|
428
|
+
languages: [
|
|
429
|
+
{
|
|
430
|
+
level: "native_bilingual",
|
|
431
|
+
language: "English"
|
|
432
|
+
},
|
|
433
|
+
{
|
|
434
|
+
level: "advanced",
|
|
435
|
+
language: "Spanish"
|
|
436
|
+
},
|
|
437
|
+
{
|
|
438
|
+
level: "intermediate",
|
|
439
|
+
language: "French"
|
|
440
|
+
}
|
|
441
|
+
]
|
|
442
|
+
};
|
|
443
|
+
|
|
444
|
+
const result = await behindAPI.easyjob.V10.candidateProfiles.updateLanguages(
|
|
445
|
+
"aa0e8400-e29b-41d4-a716-446655440005",
|
|
446
|
+
languagesData
|
|
447
|
+
);
|
|
448
|
+
|
|
449
|
+
// Response:
|
|
450
|
+
{
|
|
451
|
+
success: true
|
|
452
|
+
}
|
|
453
|
+
```
|
|
454
|
+
|
|
455
|
+
### behindAPI.easyjob.V10.candidateProfiles.parseFromPdf(url)
|
|
456
|
+
Parses a PDF resume from a URL and stores the extracted text content as a candidate profile artifact.
|
|
457
|
+
|
|
458
|
+
**Parameters:**
|
|
459
|
+
- `url` (string, required) - The URL of the PDF resume to parse
|
|
460
|
+
|
|
461
|
+
**Usage:**
|
|
462
|
+
```javascript
|
|
463
|
+
const result = await behindAPI.easyjob.V10.candidateProfiles.parseFromPdf(
|
|
464
|
+
"https://example.com/resumes/john-doe-resume.pdf"
|
|
465
|
+
);
|
|
466
|
+
|
|
467
|
+
// Response:
|
|
468
|
+
{
|
|
469
|
+
success: true,
|
|
470
|
+
data: {
|
|
471
|
+
artifact_id: "bb0e8400-e29b-41d4-a716-446655440007",
|
|
472
|
+
candidate_profile_id: "aa0e8400-e29b-41d4-a716-446655440005",
|
|
473
|
+
content: "JOHN DOE\nSenior Software Engineer\n\nEXPERIENCE\nGoogle Inc. - Senior Software Engineer (2021-Present)...",
|
|
474
|
+
source: "https://example.com/resumes/john-doe-resume.pdf",
|
|
475
|
+
type: "cv",
|
|
476
|
+
created_at: "2024-01-20T14:30:00Z"
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
```
|
|
480
|
+
|
|
481
|
+
### behindAPI.easyjob.V10.candidateProfiles.updateStatus(profileId, status)
|
|
482
|
+
Updates the status of a candidate profile with user permission validation.
|
|
483
|
+
|
|
484
|
+
**Parameters:**
|
|
485
|
+
- `profileId` (string, required) - The candidate profile UUID to update
|
|
486
|
+
- `status` (string, required) - The new status value
|
|
487
|
+
|
|
488
|
+
**Common Status Values:**
|
|
489
|
+
- `"active"` - Profile is active and visible
|
|
490
|
+
- `"inactive"` - Profile is temporarily inactive
|
|
491
|
+
- `"private"` - Profile is private and not searchable
|
|
492
|
+
- `"pending_verification"` - Profile is awaiting verification
|
|
493
|
+
- `"verified"` - Profile has been verified
|
|
494
|
+
- `"suspended"` - Profile has been suspended
|
|
495
|
+
|
|
496
|
+
**Usage:**
|
|
497
|
+
```javascript
|
|
498
|
+
const result = await behindAPI.easyjob.V10.candidateProfiles.updateStatus(
|
|
499
|
+
"aa0e8400-e29b-41d4-a716-446655440005",
|
|
500
|
+
"verified"
|
|
501
|
+
);
|
|
502
|
+
|
|
503
|
+
// Response:
|
|
504
|
+
{
|
|
505
|
+
success: true
|
|
506
|
+
}
|
|
507
|
+
```
|
|
508
|
+
|
|
509
|
+
---
|
|
510
|
+
|
|
511
|
+
## Data Structure Reference
|
|
512
|
+
|
|
513
|
+
### Profile Data Object (from contacts)
|
|
514
|
+
The main profile information parsed from resume includes:
|
|
515
|
+
|
|
516
|
+
```json
|
|
517
|
+
{
|
|
518
|
+
"name": "John Doe",
|
|
519
|
+
"summary": "Senior Software Developer and Team Lead with extensive experience in Java, PHP, Android, and full-stack development, leading teams, and building web applications and CMS solutions.",
|
|
520
|
+
"contacts": {
|
|
521
|
+
"emails": ["john.doe@example.com"],
|
|
522
|
+
"phones": ["+1-555-123-4567"],
|
|
523
|
+
"websites": [{
|
|
524
|
+
"url": "https://www.linkedin.com/in/johndoe/",
|
|
525
|
+
"type": "linkedin"
|
|
526
|
+
}],
|
|
527
|
+
"addresses": [{
|
|
528
|
+
"city": "New York",
|
|
529
|
+
"country": "US"
|
|
530
|
+
}]
|
|
531
|
+
},
|
|
532
|
+
"interests": []
|
|
533
|
+
}
|
|
534
|
+
```
|
|
535
|
+
|
|
536
|
+
### Education Object
|
|
537
|
+
Each education entry includes:
|
|
538
|
+
|
|
539
|
+
- `degree` (string) - Full degree title
|
|
540
|
+
- `skills` (array) - Skills learned during education (usually empty from parsing)
|
|
541
|
+
- `end_date` (string|null) - End date in YYYY-MM-DD format
|
|
542
|
+
- `location` (object) - Location with city and country
|
|
543
|
+
- `start_date` (string) - Start date in YYYY-MM-DD format
|
|
544
|
+
- `education_name` (string) - Additional education details (often empty)
|
|
545
|
+
- `institution_name` (string) - Name of educational institution
|
|
546
|
+
|
|
547
|
+
**Example:**
|
|
548
|
+
```json
|
|
549
|
+
{
|
|
550
|
+
"degree": "Master of Science in Computer Science",
|
|
551
|
+
"skills": [],
|
|
552
|
+
"end_date": null,
|
|
553
|
+
"location": {"city": "", "country": "US"},
|
|
554
|
+
"start_date": "2019-01-01",
|
|
555
|
+
"education_name": "",
|
|
556
|
+
"institution_name": "Stanford University"
|
|
557
|
+
}
|
|
558
|
+
```
|
|
559
|
+
|
|
560
|
+
### Job Experience Object
|
|
561
|
+
Each job experience entry includes:
|
|
562
|
+
|
|
563
|
+
- `roles` (array) - Array of roles within the position
|
|
564
|
+
- `name` (string) - Role title
|
|
565
|
+
- `skills` (array) - Skills used in this role
|
|
566
|
+
- `name` (string) - Skill name
|
|
567
|
+
- `category` (string) - Skill category (language, tool, database, etc.)
|
|
568
|
+
- `experience` (string) - Description of how skill was used
|
|
569
|
+
- `description` (string) - Role description
|
|
570
|
+
- `responsibilities` (array) - List of specific responsibilities
|
|
571
|
+
- `end_date` (string|null) - End date in YYYY-MM-DD format (null if current)
|
|
572
|
+
- `location` (object) - Location with city and country
|
|
573
|
+
- `position` (string) - Overall position title
|
|
574
|
+
- `start_date` (string) - Start date in YYYY-MM-DD format
|
|
575
|
+
- `description` (string) - Overall position description
|
|
576
|
+
- `company_name` (string) - Company name
|
|
577
|
+
- `project_name` (string) - Project name (often empty)
|
|
578
|
+
|
|
579
|
+
**Example:**
|
|
580
|
+
```json
|
|
581
|
+
{
|
|
582
|
+
"roles": [{
|
|
583
|
+
"name": "Senior Software Developer",
|
|
584
|
+
"skills": [{
|
|
585
|
+
"name": "Java",
|
|
586
|
+
"category": "language",
|
|
587
|
+
"experience": "Java for Android ECG applications."
|
|
588
|
+
}],
|
|
589
|
+
"description": "Built Android applications for ECG data processing...",
|
|
590
|
+
"responsibilities": ["Develop applications (back end/front end) for electrocardiography in Java."]
|
|
591
|
+
}],
|
|
592
|
+
"end_date": null,
|
|
593
|
+
"location": {"city": "Prague", "country": "CZ"},
|
|
594
|
+
"position": "Senior Software Developer and Team Lead",
|
|
595
|
+
"start_date": "2011-02-01",
|
|
596
|
+
"company_name": "Future Product Design"
|
|
597
|
+
}
|
|
598
|
+
```
|
|
599
|
+
|
|
600
|
+
### Skills Objects (Hard Skills and All Skills)
|
|
601
|
+
Each skill entry includes:
|
|
602
|
+
|
|
603
|
+
- `name` (string) - Name of the skill
|
|
604
|
+
- `level` (number) - Proficiency level (1-10 scale)
|
|
605
|
+
- `category` (string) - Skill category (language, framework, tool, database, platform, etc.)
|
|
606
|
+
- `experience` (string) - Description of experience with this skill
|
|
607
|
+
|
|
608
|
+
**Example:**
|
|
609
|
+
```json
|
|
610
|
+
{
|
|
611
|
+
"name": "Java 7+",
|
|
612
|
+
"level": 8,
|
|
613
|
+
"category": "language",
|
|
614
|
+
"experience": "Developed Android applications and server components for ECG data processing."
|
|
615
|
+
}
|
|
616
|
+
```
|
|
617
|
+
|
|
618
|
+
### Certificates Object
|
|
619
|
+
Each certificate entry includes:
|
|
620
|
+
|
|
621
|
+
- `date` (string) - Date in YYYY-MM-DD format
|
|
622
|
+
- `name` (string) - Certificate name
|
|
623
|
+
- `description` (string) - Certificate description
|
|
624
|
+
- `institution` (string) - Issuing institution
|
|
625
|
+
|
|
626
|
+
**Example:**
|
|
627
|
+
```json
|
|
628
|
+
{
|
|
629
|
+
"date": "2021-06-15",
|
|
630
|
+
"name": "Master of Science in Computer Science",
|
|
631
|
+
"description": "Diploma recognized by accredited university",
|
|
632
|
+
"institution": "Stanford University, United States"
|
|
633
|
+
}
|
|
634
|
+
```
|
|
635
|
+
|
|
636
|
+
### Languages Object
|
|
637
|
+
Each language entry includes:
|
|
638
|
+
|
|
639
|
+
- `level` (string) - Proficiency level (native_bilingual, advanced, intermediate, basic)
|
|
640
|
+
- `language` (string) - Language name
|
|
641
|
+
|
|
642
|
+
**Example:**
|
|
643
|
+
```json
|
|
644
|
+
{
|
|
645
|
+
"level": "advanced",
|
|
646
|
+
"language": "Spanish"
|
|
647
|
+
}
|
|
648
|
+
```
|
|
649
|
+
|
|
650
|
+
### Facts Object
|
|
651
|
+
Computed facts about the candidate:
|
|
652
|
+
|
|
653
|
+
- `total_experience_years` (number) - Total years of professional experience
|
|
654
|
+
- `education_level` (string) - Highest education level achieved
|
|
655
|
+
- `skills_match_percentage` (number) - Percentage match for job requirements
|
|
656
|
+
- `last_updated` (timestamp) - When facts were last computed
|
|
657
|
+
|
|
658
|
+
---
|
|
659
|
+
|
|
660
|
+
## Complete Usage Example
|
|
661
|
+
|
|
662
|
+
```javascript
|
|
663
|
+
// Complete workflow for managing a candidate profile
|
|
664
|
+
async function manageCompleteProfile() {
|
|
665
|
+
try {
|
|
666
|
+
// 1. Get or create candidate profile
|
|
667
|
+
let profile = await behindAPI.easyjob.V10.candidateProfiles.get();
|
|
668
|
+
|
|
669
|
+
if (!profile.success) {
|
|
670
|
+
console.error("Failed to retrieve profile");
|
|
671
|
+
return;
|
|
672
|
+
}
|
|
673
|
+
|
|
674
|
+
console.log(`Working with profile: ${profile.data.id}`);
|
|
675
|
+
const profileId = profile.data.id;
|
|
676
|
+
|
|
677
|
+
// 2. Update basic profile information
|
|
678
|
+
const basicInfo = {
|
|
679
|
+
first_name: "Jane",
|
|
680
|
+
last_name: "Smith",
|
|
681
|
+
email: "jane.smith@email.com",
|
|
682
|
+
phone: "+1-555-987-6543",
|
|
683
|
+
location: "San Francisco, CA",
|
|
684
|
+
summary: "Experienced full-stack developer with a passion for creating scalable web applications and leading high-performing teams.",
|
|
685
|
+
linkedin_url: "https://linkedin.com/in/janesmith",
|
|
686
|
+
portfolio_url: "https://janesmith.dev"
|
|
687
|
+
};
|
|
688
|
+
|
|
689
|
+
await behindAPI.easyjob.V10.candidateProfiles.update(profileId, basicInfo);
|
|
690
|
+
console.log("✓ Updated basic profile information");
|
|
691
|
+
|
|
692
|
+
// 3. Add education history
|
|
693
|
+
const education = {
|
|
694
|
+
education: [
|
|
695
|
+
{
|
|
696
|
+
institution: "University of California, Berkeley",
|
|
697
|
+
degree: "Bachelor of Science",
|
|
698
|
+
field_of_study: "Computer Science",
|
|
699
|
+
start_year: 2016,
|
|
700
|
+
end_year: 2020,
|
|
701
|
+
gpa: 3.8,
|
|
702
|
+
honors: "Magna Cum Laude"
|
|
703
|
+
}
|
|
704
|
+
]
|
|
705
|
+
};
|
|
706
|
+
|
|
707
|
+
await behindAPI.easyjob.V10.candidateProfiles.updateEducation(profileId, education);
|
|
708
|
+
console.log("✓ Updated education section");
|
|
709
|
+
|
|
710
|
+
// 4. Add work experience
|
|
711
|
+
const jobExperience = {
|
|
712
|
+
job_experience: [
|
|
713
|
+
{
|
|
714
|
+
company: "TechCorp Inc",
|
|
715
|
+
position: "Senior Full Stack Developer",
|
|
716
|
+
start_date: "2022-01-15",
|
|
717
|
+
end_date: null,
|
|
718
|
+
current: true,
|
|
719
|
+
description: "Leading development of microservices architecture and mentoring junior developers in a fast-paced startup environment.",
|
|
720
|
+
technologies: ["React", "Node.js", "PostgreSQL", "AWS", "Docker"],
|
|
721
|
+
achievements: [
|
|
722
|
+
"Reduced page load times by 45% through optimization",
|
|
723
|
+
"Led team of 4 developers",
|
|
724
|
+
"Implemented automated testing reducing bugs by 60%"
|
|
725
|
+
]
|
|
726
|
+
},
|
|
727
|
+
{
|
|
728
|
+
company: "Digital Solutions LLC",
|
|
729
|
+
position: "Full Stack Developer",
|
|
730
|
+
start_date: "2020-06-01",
|
|
731
|
+
end_date: "2021-12-31",
|
|
732
|
+
current: false,
|
|
733
|
+
description: "Developed and maintained web applications for various clients using modern JavaScript frameworks.",
|
|
734
|
+
technologies: ["Vue.js", "Express.js", "MySQL", "MongoDB"],
|
|
735
|
+
achievements: [
|
|
736
|
+
"Delivered 15+ client projects on time",
|
|
737
|
+
"Improved client satisfaction scores by 25%"
|
|
738
|
+
]
|
|
739
|
+
}
|
|
740
|
+
]
|
|
741
|
+
};
|
|
742
|
+
|
|
743
|
+
await behindAPI.easyjob.V10.candidateProfiles.updateJobExperience(profileId, jobExperience);
|
|
744
|
+
console.log("✓ Updated job experience section");
|
|
745
|
+
|
|
746
|
+
// 5. Add technical skills
|
|
747
|
+
const hardSkills = {
|
|
748
|
+
hard_skills: [
|
|
749
|
+
{ skill: "JavaScript", level: "Expert", years_experience: 5 },
|
|
750
|
+
{ skill: "React", level: "Expert", years_experience: 4 },
|
|
751
|
+
{ skill: "Node.js", level: "Advanced", years_experience: 4 },
|
|
752
|
+
{ skill: "Python", level: "Intermediate", years_experience: 2 },
|
|
753
|
+
{ skill: "AWS", level: "Advanced", years_experience: 3 },
|
|
754
|
+
{ skill: "PostgreSQL", level: "Advanced", years_experience: 3 },
|
|
755
|
+
{ skill: "Docker", level: "Intermediate", years_experience: 2 }
|
|
756
|
+
]
|
|
757
|
+
};
|
|
758
|
+
|
|
759
|
+
await behindAPI.easyjob.V10.candidateProfiles.updateHardSkills(profileId, hardSkills);
|
|
760
|
+
console.log("✓ Updated technical skills");
|
|
761
|
+
|
|
762
|
+
// 6. Add soft skills
|
|
763
|
+
const softSkills = {
|
|
764
|
+
soft_skills: [
|
|
765
|
+
{ skill: "Leadership", level: "Advanced" },
|
|
766
|
+
{ skill: "Communication", level: "Expert" },
|
|
767
|
+
{ skill: "Problem Solving", level: "Expert" },
|
|
768
|
+
{ skill: "Team Collaboration", level: "Expert" },
|
|
769
|
+
{ skill: "Mentoring", level: "Advanced" }
|
|
770
|
+
]
|
|
771
|
+
};
|
|
772
|
+
|
|
773
|
+
await behindAPI.easyjob.V10.candidateProfiles.updateSoftSkills(profileId, softSkills);
|
|
774
|
+
console.log("✓ Updated soft skills");
|
|
775
|
+
|
|
776
|
+
// 7. Add certifications
|
|
777
|
+
const certificates = {
|
|
778
|
+
certificates: [
|
|
779
|
+
{
|
|
780
|
+
name: "AWS Certified Developer - Associate",
|
|
781
|
+
issuing_organization: "Amazon Web Services",
|
|
782
|
+
issue_date: "2023-03-15",
|
|
783
|
+
expiry_date: "2026-03-15",
|
|
784
|
+
credential_id: "AWS-DEV-12345"
|
|
785
|
+
},
|
|
786
|
+
{
|
|
787
|
+
name: "Certified ScrumMaster",
|
|
788
|
+
issuing_organization: "Scrum Alliance",
|
|
789
|
+
issue_date: "2022-09-20",
|
|
790
|
+
expiry_date: "2024-09-20",
|
|
791
|
+
credential_id: "CSM-67890"
|
|
792
|
+
}
|
|
793
|
+
]
|
|
794
|
+
};
|
|
795
|
+
|
|
796
|
+
await behindAPI.easyjob.V10.candidateProfiles.updateCertificates(profileId, certificates);
|
|
797
|
+
console.log("✓ Updated certifications");
|
|
798
|
+
|
|
799
|
+
// 8. Add language skills
|
|
800
|
+
const languages = {
|
|
801
|
+
languages: [
|
|
802
|
+
{ language: "English", proficiency: "Native" },
|
|
803
|
+
{ language: "Spanish", proficiency: "Conversational" },
|
|
804
|
+
{ language: "French", proficiency: "Basic" }
|
|
805
|
+
]
|
|
806
|
+
};
|
|
807
|
+
|
|
808
|
+
await behindAPI.easyjob.V10.candidateProfiles.updateLanguages(profileId, languages);
|
|
809
|
+
console.log("✓ Updated language skills");
|
|
810
|
+
|
|
811
|
+
// 9. Update profile status
|
|
812
|
+
await behindAPI.easyjob.V10.candidateProfiles.updateStatus(profileId, "active");
|
|
813
|
+
console.log("✓ Profile status set to active");
|
|
814
|
+
|
|
815
|
+
// 10. Get the complete updated profile
|
|
816
|
+
const updatedProfile = await behindAPI.easyjob.V10.candidateProfiles.get();
|
|
817
|
+
console.log("=== Profile Update Complete ===");
|
|
818
|
+
console.log(`Profile ID: ${updatedProfile.data.id}`);
|
|
819
|
+
console.log(`Name: ${updatedProfile.data.profile_data.first_name} ${updatedProfile.data.profile_data.last_name}`);
|
|
820
|
+
console.log(`Status: ${updatedProfile.data.status}`);
|
|
821
|
+
console.log(`Total Skills: ${updatedProfile.data.hard_skills?.length || 0} technical, ${updatedProfile.data.soft_skills?.length || 0} soft`);
|
|
822
|
+
console.log(`Experience: ${updatedProfile.data.job_experience?.length || 0} positions`);
|
|
823
|
+
console.log(`Education: ${updatedProfile.data.education?.length || 0} degrees`);
|
|
824
|
+
console.log(`Certifications: ${updatedProfile.data.certificates?.length || 0} certificates`);
|
|
825
|
+
console.log(`Languages: ${updatedProfile.data.languages?.length || 0} languages`);
|
|
826
|
+
|
|
827
|
+
} catch (error) {
|
|
828
|
+
console.error("Error managing profile:", error);
|
|
829
|
+
}
|
|
830
|
+
}
|
|
831
|
+
|
|
832
|
+
// Example: Resume parsing workflow
|
|
833
|
+
async function parseAndEnhanceProfile(resumeUrl) {
|
|
834
|
+
try {
|
|
835
|
+
// 1. Parse resume from PDF
|
|
836
|
+
console.log("Parsing resume from PDF...");
|
|
837
|
+
const parseResult = await behindAPI.easyjob.V10.candidateProfiles.parseFromPdf(resumeUrl);
|
|
838
|
+
|
|
839
|
+
if (!parseResult.success) {
|
|
840
|
+
console.error("Failed to parse resume");
|
|
841
|
+
return;
|
|
842
|
+
}
|
|
843
|
+
|
|
844
|
+
console.log("✓ Resume parsed successfully");
|
|
845
|
+
console.log(`Artifact ID: ${parseResult.data.artifact_id}`);
|
|
846
|
+
console.log(`Profile ID: ${parseResult.data.candidate_profile_id}`);
|
|
847
|
+
|
|
848
|
+
// 2. Review extracted content
|
|
849
|
+
const extractedText = parseResult.data.content;
|
|
850
|
+
console.log("Extracted text preview:", extractedText.substring(0, 200) + "...");
|
|
851
|
+
|
|
852
|
+
// 3. Get current profile to see if it was auto-populated
|
|
853
|
+
const profile = await behindAPI.easyjob.V10.candidateProfiles.get();
|
|
854
|
+
|
|
855
|
+
if (profile.success) {
|
|
856
|
+
console.log("Current profile status:");
|
|
857
|
+
console.log(`- Has education: ${profile.data.education?.length > 0 ? 'Yes' : 'No'}`);
|
|
858
|
+
console.log(`- Has experience: ${profile.data.job_experience?.length > 0 ? 'Yes' : 'No'}`);
|
|
859
|
+
console.log(`- Has skills: ${profile.data.hard_skills?.length > 0 ? 'Yes' : 'No'}`);
|
|
860
|
+
}
|
|
861
|
+
|
|
862
|
+
// 4. Manual enhancement after parsing (if needed)
|
|
863
|
+
// You could use the extracted text to suggest profile improvements
|
|
864
|
+
// or integrate with AI services to auto-populate profile sections
|
|
865
|
+
|
|
866
|
+
return parseResult.data;
|
|
867
|
+
|
|
868
|
+
} catch (error) {
|
|
869
|
+
console.error("Error parsing resume:", error);
|
|
870
|
+
return null;
|
|
871
|
+
}
|
|
872
|
+
}
|
|
873
|
+
|
|
874
|
+
// Example: Profile validation and scoring
|
|
875
|
+
async function validateAndScoreProfile() {
|
|
876
|
+
try {
|
|
877
|
+
const profile = await behindAPI.easyjob.V10.candidateProfiles.get();
|
|
878
|
+
|
|
879
|
+
if (!profile.success) {
|
|
880
|
+
console.error("Failed to retrieve profile");
|
|
881
|
+
return;
|
|
882
|
+
}
|
|
883
|
+
|
|
884
|
+
const data = profile.data;
|
|
885
|
+
const score = {
|
|
886
|
+
completeness: 0,
|
|
887
|
+
sections: {},
|
|
888
|
+
recommendations: []
|
|
889
|
+
};
|
|
890
|
+
|
|
891
|
+
// Check basic information completeness
|
|
892
|
+
const basicFields = ['first_name', 'last_name', 'email', 'phone', 'location', 'summary'];
|
|
893
|
+
const completedBasic = basicFields.filter(field =>
|
|
894
|
+
data.profile_data && data.profile_data[field] && data.profile_data[field].trim()
|
|
895
|
+
).length;
|
|
896
|
+
|
|
897
|
+
score.sections.basic_info = (completedBasic / basicFields.length) * 100;
|
|
898
|
+
|
|
899
|
+
if (completedBasic < basicFields.length) {
|
|
900
|
+
score.recommendations.push("Complete all basic profile information");
|
|
901
|
+
}
|
|
902
|
+
|
|
903
|
+
// Check education
|
|
904
|
+
const hasEducation = data.education && data.education.length > 0;
|
|
905
|
+
score.sections.education = hasEducation ? 100 : 0;
|
|
906
|
+
|
|
907
|
+
if (!hasEducation) {
|
|
908
|
+
score.recommendations.push("Add education background");
|
|
909
|
+
}
|
|
910
|
+
|
|
911
|
+
// Check work experience
|
|
912
|
+
const hasExperience = data.job_experience && data.job_experience.length > 0;
|
|
913
|
+
score.sections.job_experience = hasExperience ? 100 : 0;
|
|
914
|
+
|
|
915
|
+
if (!hasExperience) {
|
|
916
|
+
score.recommendations.push("Add work experience");
|
|
917
|
+
} else if (data.job_experience.length < 2) {
|
|
918
|
+
score.recommendations.push("Consider adding more work experience entries");
|
|
919
|
+
}
|
|
920
|
+
|
|
921
|
+
// Check skills
|
|
922
|
+
const hasHardSkills = data.hard_skills && data.hard_skills.length >= 5;
|
|
923
|
+
const hasSoftSkills = data.soft_skills && data.soft_skills.length >= 3;
|
|
924
|
+
|
|
925
|
+
score.sections.hard_skills = hasHardSkills ? 100 : (data.hard_skills?.length || 0) * 20;
|
|
926
|
+
score.sections.soft_skills = hasSoftSkills ? 100 : (data.soft_skills?.length || 0) * 33;
|
|
927
|
+
|
|
928
|
+
if (!hasHardSkills) {
|
|
929
|
+
score.recommendations.push("Add at least 5 technical skills");
|
|
930
|
+
}
|
|
931
|
+
if (!hasSoftSkills) {
|
|
932
|
+
score.recommendations.push("Add at least 3 soft skills");
|
|
933
|
+
}
|
|
934
|
+
|
|
935
|
+
// Check certifications
|
|
936
|
+
const hasCertificates = data.certificates && data.certificates.length > 0;
|
|
937
|
+
score.sections.certificates = hasCertificates ? 100 : 0;
|
|
938
|
+
|
|
939
|
+
if (!hasCertificates) {
|
|
940
|
+
score.recommendations.push("Consider adding professional certifications");
|