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.
Files changed (157) hide show
  1. package/.gitlab-ci.yml +20 -0
  2. package/README.md +65 -0
  3. package/docs/behind-api-client/easyjob/JobDescriptions/README.md +654 -0
  4. package/docs/behind-api-client/easyjob/README.md +647 -0
  5. package/docs/behind-api-client/easyjob/applicants/README.md +494 -0
  6. package/docs/behind-api-client/easyjob/applications/README.md +754 -0
  7. package/docs/behind-api-client/easyjob/candidateProfiles/README.md +940 -0
  8. package/docs/behind-api-client/easyjob/jd-candidate-questions/README.md +372 -0
  9. package/docs/behind-api-client/payments/payture/README.21.md +901 -0
  10. package/docs/behind-api-client/payments/payture/README.cards.md +1497 -0
  11. package/docs/behind-api-client/payments/payture/README.md +1497 -0
  12. package/docs/behind-api-client/payments/payture/README.rukitchen.md +396 -0
  13. package/docs/behind-api-client/payments/payture/README.subscriptions.md +1266 -0
  14. package/docs/behind-api-client/payments/stripe/README.flow.md +254 -0
  15. package/docs/behind-api-client/rag/storage/README.md +519 -0
  16. package/example.js +35 -0
  17. package/index.cjs +14 -0
  18. package/index.js +15 -0
  19. package/lib/behind-api-auth-client/BehindApiAuthClient.js +91 -0
  20. package/lib/behind-api-auth-client/authorisation/AuthorisationApp.js +9 -0
  21. package/lib/behind-api-auth-client/authorisation/AuthorisationV10.js +9 -0
  22. package/lib/behind-api-auth-client/authorisation/AuthorisationV10Code.js +30 -0
  23. package/lib/behind-api-auth-client/example.js +47 -0
  24. package/lib/behind-api-auth-client/package.json +9 -0
  25. package/lib/behind-api-client/BehindApiClient.js +137 -0
  26. package/lib/behind-api-client/chat/ChatApp.js +11 -0
  27. package/lib/behind-api-client/chat/ChatV10.js +13 -0
  28. package/lib/behind-api-client/chat/ChatV10Chat.js +87 -0
  29. package/lib/behind-api-client/chat/ChatV10Chats.js +14 -0
  30. package/lib/behind-api-client/chat/ChatV10Message.js +57 -0
  31. package/lib/behind-api-client/chat/ChatV20.js +11 -0
  32. package/lib/behind-api-client/chat/ChatV20Chat.js +14 -0
  33. package/lib/behind-api-client/chat/ChatV20Message.js +27 -0
  34. package/lib/behind-api-client/easyjob/EasyjobApp.js +9 -0
  35. package/lib/behind-api-client/easyjob/EasyjobV10.js +31 -0
  36. package/lib/behind-api-client/easyjob/EasyjobV10Answers.js +16 -0
  37. package/lib/behind-api-client/easyjob/EasyjobV10Applicants.js +29 -0
  38. package/lib/behind-api-client/easyjob/EasyjobV10Applications.js +39 -0
  39. package/lib/behind-api-client/easyjob/EasyjobV10CandidateProfileArtifacts.js +31 -0
  40. package/lib/behind-api-client/easyjob/EasyjobV10CandidateProfiles.js +99 -0
  41. package/lib/behind-api-client/easyjob/EasyjobV10Companies.js +36 -0
  42. package/lib/behind-api-client/easyjob/EasyjobV10Cv.js +15 -0
  43. package/lib/behind-api-client/easyjob/EasyjobV10Departments.js +37 -0
  44. package/lib/behind-api-client/easyjob/EasyjobV10JobDescriptionArtifacts.js +29 -0
  45. package/lib/behind-api-client/easyjob/EasyjobV10JobDescriptionCandidateQuestions.js +63 -0
  46. package/lib/behind-api-client/easyjob/EasyjobV10JobDescriptions.js +93 -0
  47. package/lib/behind-api-client/easyjob/EasyjobV10Reports.js +35 -0
  48. package/lib/behind-api-client/example.js +47 -0
  49. package/lib/behind-api-client/global/GlobalApp.js +9 -0
  50. package/lib/behind-api-client/global/GlobalV10.js +11 -0
  51. package/lib/behind-api-client/global/GlobalV10Sockets.js +16 -0
  52. package/lib/behind-api-client/global/GlobalV10Storage.js +29 -0
  53. package/lib/behind-api-client/gpt/GptApp.js +15 -0
  54. package/lib/behind-api-client/gpt/GptV10.js +15 -0
  55. package/lib/behind-api-client/gpt/GptV10Prompt.js +17 -0
  56. package/lib/behind-api-client/gpt/GptV10Request.js +16 -0
  57. package/lib/behind-api-client/gpt/GptV10Storedprompts.js +14 -0
  58. package/lib/behind-api-client/gpt/GptV10Whisper.js +23 -0
  59. package/lib/behind-api-client/gpt/GptV20.js +9 -0
  60. package/lib/behind-api-client/gpt/GptV20Prompt.js +15 -0
  61. package/lib/behind-api-client/gpt/GptV30.js +13 -0
  62. package/lib/behind-api-client/gpt/GptV30Chat.js +19 -0
  63. package/lib/behind-api-client/gpt/GptV30Prompt.js +41 -0
  64. package/lib/behind-api-client/gpt/GptV30Prompts.js +32 -0
  65. package/lib/behind-api-client/gpt/GptV40.js +11 -0
  66. package/lib/behind-api-client/gpt/GptV40Prompt.js +24 -0
  67. package/lib/behind-api-client/gpt/GptV40Prompts.js +30 -0
  68. package/lib/behind-api-client/mailer/MailerApp.js +11 -0
  69. package/lib/behind-api-client/mailer/MailerV10.js +15 -0
  70. package/lib/behind-api-client/mailer/MailerV10Bulk.js +21 -0
  71. package/lib/behind-api-client/mailer/MailerV10Message.js +83 -0
  72. package/lib/behind-api-client/mailer/MailerV10Settings.js +44 -0
  73. package/lib/behind-api-client/mailer/MailerV10Template.js +23 -0
  74. package/lib/behind-api-client/mailer/MailerV20.js +9 -0
  75. package/lib/behind-api-client/mailer/MailerV20Message.js +21 -0
  76. package/lib/behind-api-client/mastogram/MastogramApp.js +9 -0
  77. package/lib/behind-api-client/mastogram/MastogramV10.js +13 -0
  78. package/lib/behind-api-client/mastogram/MastogramV10Bluesky.js +42 -0
  79. package/lib/behind-api-client/mastogram/MastogramV10Mastodon.js +45 -0
  80. package/lib/behind-api-client/mastogram/MastogramV10Telegram.js +39 -0
  81. package/lib/behind-api-client/monitor/MonitorApp.js +9 -0
  82. package/lib/behind-api-client/monitor/MonitorV10.js +13 -0
  83. package/lib/behind-api-client/monitor/MonitorV10Finances.js +39 -0
  84. package/lib/behind-api-client/monitor/MonitorV10Record.js +15 -0
  85. package/lib/behind-api-client/monitor/MonitorV10Records.js +22 -0
  86. package/lib/behind-api-client/oauth/OauthApp.js +9 -0
  87. package/lib/behind-api-client/oauth/OauthV10.js +9 -0
  88. package/lib/behind-api-client/oauth/OauthV10Authorisation.js +15 -0
  89. package/lib/behind-api-client/package.json +9 -0
  90. package/lib/behind-api-client/payments/PaymentsApp.js +13 -0
  91. package/lib/behind-api-client/payments/PaymentsV10.js +15 -0
  92. package/lib/behind-api-client/payments/PaymentsV10Gift.js +32 -0
  93. package/lib/behind-api-client/payments/PaymentsV10Payture.js +30 -0
  94. package/lib/behind-api-client/payments/PaymentsV10Product.js +15 -0
  95. package/lib/behind-api-client/payments/PaymentsV10Telegram.js +44 -0
  96. package/lib/behind-api-client/payments/PaymentsV20.js +9 -0
  97. package/lib/behind-api-client/payments/PaymentsV20Payture.js +32 -0
  98. package/lib/behind-api-client/payments/PaymentsV21.js +15 -0
  99. package/lib/behind-api-client/payments/PaymentsV21Cards.js +14 -0
  100. package/lib/behind-api-client/payments/PaymentsV21Payture.js +29 -0
  101. package/lib/behind-api-client/payments/PaymentsV21Stripe.js +28 -0
  102. package/lib/behind-api-client/payments/PaymentsV21Subscriptions.js +21 -0
  103. package/lib/behind-api-client/questionnaire/QuestionnaireApp.js +9 -0
  104. package/lib/behind-api-client/questionnaire/QuestionnaireV10.js +9 -0
  105. package/lib/behind-api-client/questionnaire/QuestionnaireV10Form.js +22 -0
  106. package/lib/behind-api-client/raet/RaetApp.js +11 -0
  107. package/lib/behind-api-client/raet/RaetV10.js +21 -0
  108. package/lib/behind-api-client/raet/RaetV10Cv.js +87 -0
  109. package/lib/behind-api-client/raet/RaetV10Individual.js +43 -0
  110. package/lib/behind-api-client/raet/RaetV10Individuals.js +38 -0
  111. package/lib/behind-api-client/raet/RaetV10Jd.js +47 -0
  112. package/lib/behind-api-client/raet/RaetV10Project.js +61 -0
  113. package/lib/behind-api-client/raet/RaetV10Projects.js +14 -0
  114. package/lib/behind-api-client/raet/RaetV10Report.js +39 -0
  115. package/lib/behind-api-client/raet/RaetV20.js +11 -0
  116. package/lib/behind-api-client/raet/RaetV20Cv.js +31 -0
  117. package/lib/behind-api-client/raet/RaetV20Individuals.js +25 -0
  118. package/lib/behind-api-client/rag/RagApp.js +9 -0
  119. package/lib/behind-api-client/rag/RagV10.js +9 -0
  120. package/lib/behind-api-client/rag/RagV10Storage.js +27 -0
  121. package/lib/behind-api-client/ruKitchen/RuKitchenApp.js +9 -0
  122. package/lib/behind-api-client/ruKitchen/RuKitchenV10.js +11 -0
  123. package/lib/behind-api-client/ruKitchen/RuKitchenV10Importer.js +29 -0
  124. package/lib/behind-api-client/ruKitchen/RuKitchenV10SeoArticle.js +14 -0
  125. package/lib/behind-api-client/sales/SalesApp.js +11 -0
  126. package/lib/behind-api-client/sales/SalesV10.js +23 -0
  127. package/lib/behind-api-client/sales/SalesV10Catalogue.js +58 -0
  128. package/lib/behind-api-client/sales/SalesV10Categories.js +15 -0
  129. package/lib/behind-api-client/sales/SalesV10Companies.js +55 -0
  130. package/lib/behind-api-client/sales/SalesV10Company.js +120 -0
  131. package/lib/behind-api-client/sales/SalesV10Group.js +70 -0
  132. package/lib/behind-api-client/sales/SalesV10Groups.js +21 -0
  133. package/lib/behind-api-client/sales/SalesV10Logs.js +14 -0
  134. package/lib/behind-api-client/sales/SalesV10Notes.js +38 -0
  135. package/lib/behind-api-client/sales/SalesV20.js +11 -0
  136. package/lib/behind-api-client/sales/SalesV20Companies.js +26 -0
  137. package/lib/behind-api-client/sales/SalesV20Notes.js +17 -0
  138. package/lib/behind-api-client/sip/SipApp.js +9 -0
  139. package/lib/behind-api-client/sip/SipV10.js +15 -0
  140. package/lib/behind-api-client/sip/SipV10Call.js +83 -0
  141. package/lib/behind-api-client/sip/SipV10Phone.js +44 -0
  142. package/lib/behind-api-client/sip/SipV10Transcript.js +21 -0
  143. package/lib/behind-api-client/sip/SipV10Transcripts.js +21 -0
  144. package/lib/behind-api-client/storage/StorageApp.js +9 -0
  145. package/lib/behind-api-client/storage/StorageV10.js +11 -0
  146. package/lib/behind-api-client/storage/StorageV10File.js +35 -0
  147. package/lib/behind-api-client/storage/StorageV10Upload.js +21 -0
  148. package/lib/behind-api-client/tests/TestsApp.js +9 -0
  149. package/lib/behind-api-client/tests/TestsV10.js +15 -0
  150. package/lib/behind-api-client/tests/TestsV10Cases.js +29 -0
  151. package/lib/behind-api-client/tests/TestsV10CasesExtended.js +14 -0
  152. package/lib/behind-api-client/tests/TestsV10Core.js +14 -0
  153. package/lib/behind-api-client/tests/TestsV10Mail.js +14 -0
  154. package/lib/behind-api-client/tools/ToolsApp.js +9 -0
  155. package/lib/behind-api-client/tools/ToolsV10.js +9 -0
  156. package/lib/behind-api-client/tools/ToolsV10Pdf.js +30 -0
  157. package/package.json +25 -0
@@ -0,0 +1,654 @@
1
+ # Job Descriptions API Extension
2
+
3
+ This document extends the main EasyJob JavaScript API Client Documentation with detailed information about the Job Descriptions API methods.
4
+
5
+ ## Overview
6
+
7
+ The Job Descriptions API allows you to manage job postings throughout their lifecycle. This includes creating, updating, publishing, and managing job descriptions, as well as controlling their status and visibility to potential candidates.
8
+
9
+ ---
10
+
11
+ ## Job Descriptions API
12
+
13
+ ### behindAPI.easyjob.V10.jobDescriptions.create(departmentId, title, description)
14
+ Creates a new job description record within a specified department.
15
+
16
+ **Parameters:**
17
+ - `departmentId` (string, required) - The department UUID where the job description belongs
18
+ - `title` (string, required) - The title of the job description
19
+ - `description` (string, optional) - The detailed description text of the job
20
+
21
+ **Usage:**
22
+ ```javascript
23
+ const result = await behindAPI.easyjob.V10.jobDescriptions.create(
24
+ "550e8400-e29b-41d4-a716-446655440001",
25
+ "Senior Software Engineer",
26
+ "We are looking for an experienced software engineer to join our team..."
27
+ );
28
+
29
+ // Response:
30
+ {
31
+ success: true,
32
+ data: {
33
+ job_description_id: "770e8400-e29b-41d4-a716-446655440002"
34
+ }
35
+ }
36
+ ```
37
+
38
+ ### behindAPI.easyjob.V10.jobDescriptions.get(jobDescriptionId)
39
+ Retrieves detailed information for a specific job description.
40
+
41
+ **Parameters:**
42
+ - `jobDescriptionId` (string, required) - The job description UUID to retrieve
43
+
44
+ **Usage:**
45
+ ```javascript
46
+ const result = await behindAPI.easyjob.V10.jobDescriptions.get("770e8400-e29b-41d4-a716-446655440002");
47
+
48
+ // Response:
49
+ {
50
+ success: true,
51
+ data: {
52
+ job_description_id: "770e8400-e29b-41d4-a716-446655440002",
53
+ department_id: "550e8400-e29b-41d4-a716-446655440001",
54
+ title: "Senior Software Engineer",
55
+ description: "We are looking for an experienced software engineer...",
56
+ status: "draft",
57
+ published: false,
58
+ published_at: null,
59
+ deadline_at: null,
60
+ closed: false,
61
+ closed_at: null,
62
+ deleted: false,
63
+ created_at: "2024-01-15T10:30:00Z",
64
+ updated_at: "2024-01-15T10:30:00Z",
65
+ created_by: "user123",
66
+ data: {}
67
+ }
68
+ }
69
+ ```
70
+
71
+ ### behindAPI.easyjob.V10.jobDescriptions.getList(departmentId)
72
+ Retrieves a list of all job descriptions for a specific department.
73
+
74
+ **Parameters:**
75
+ - `departmentId` (string, required) - The department UUID to get job descriptions for
76
+
77
+ **Usage:**
78
+ ```javascript
79
+ const result = await behindAPI.easyjob.V10.jobDescriptions.getList("550e8400-e29b-41d4-a716-446655440001");
80
+
81
+ // Response:
82
+ {
83
+ success: true,
84
+ data: [
85
+ {
86
+ job_description_id: "770e8400-e29b-41d4-a716-446655440002",
87
+ department_id: "550e8400-e29b-41d4-a716-446655440001",
88
+ title: "Senior Software Engineer",
89
+ description: "We are looking for an experienced software engineer...",
90
+ status: "published",
91
+ published: true,
92
+ published_at: "2024-01-20T09:00:00Z",
93
+ deadline_at: "2024-02-20T23:59:59Z",
94
+ closed: false,
95
+ created_at: "2024-01-15T10:30:00Z",
96
+ updated_at: "2024-01-20T09:00:00Z"
97
+ },
98
+ {
99
+ job_description_id: "880e8400-e29b-41d4-a716-446655440003",
100
+ department_id: "550e8400-e29b-41d4-a716-446655440001",
101
+ title: "Frontend Developer",
102
+ description: "Join our frontend team to build amazing user experiences...",
103
+ status: "draft",
104
+ published: false,
105
+ published_at: null,
106
+ deadline_at: null,
107
+ closed: false,
108
+ created_at: "2024-01-18T14:15:00Z",
109
+ updated_at: "2024-01-18T14:15:00Z"
110
+ }
111
+ ]
112
+ }
113
+ ```
114
+
115
+ ### behindAPI.easyjob.V10.jobDescriptions.getUnauthorised(jobDescriptionId)
116
+ Retrieves a specific job description without requiring authorization - used for public job listings.
117
+
118
+ **Parameters:**
119
+ - `jobDescriptionId` (string, required) - The job description UUID to retrieve
120
+
121
+ **Usage:**
122
+ ```javascript
123
+ const result = await behindAPI.easyjob.V10.jobDescriptions.getUnauthorised("770e8400-e29b-41d4-a716-446655440002");
124
+
125
+ // Response:
126
+ {
127
+ success: true,
128
+ data: {
129
+ job_description_id: "770e8400-e29b-41d4-a716-446655440002",
130
+ title: "Senior Software Engineer",
131
+ description: "We are looking for an experienced software engineer...",
132
+ published_at: "2024-01-20T09:00:00Z",
133
+ deadline_at: "2024-02-20T23:59:59Z",
134
+ department_name: "Engineering"
135
+ }
136
+ }
137
+ ```
138
+
139
+ ### behindAPI.easyjob.V10.jobDescriptions.update(jobDescriptionId, title, description, publishedAt, deadlineAt)
140
+ Updates an existing job description with optional parameters.
141
+
142
+ **Parameters:**
143
+ - `jobDescriptionId` (string, required) - The job description UUID to update
144
+ - `title` (string, optional) - The new job title
145
+ - `description` (string, optional) - The new job description text
146
+ - `publishedAt` (string, optional) - ISO 8601 timestamp for publication date
147
+ - `deadlineAt` (string, optional) - ISO 8601 timestamp for application deadline
148
+
149
+ **Usage:**
150
+ ```javascript
151
+ const result = await behindAPI.easyjob.V10.jobDescriptions.update(
152
+ "770e8400-e29b-41d4-a716-446655440002",
153
+ "Senior Full-Stack Engineer",
154
+ "Updated job description with new requirements...",
155
+ "2024-01-25T09:00:00Z",
156
+ "2024-03-01T23:59:59Z"
157
+ );
158
+
159
+ // Response:
160
+ {
161
+ success: true
162
+ }
163
+ ```
164
+
165
+ ### behindAPI.easyjob.V10.jobDescriptions.updateData(jobDescriptionId, data)
166
+ Updates the custom data object associated with a job description.
167
+
168
+ **Parameters:**
169
+ - `jobDescriptionId` (string, required) - The job description UUID to update
170
+ - `data` (object, required) - Custom data object to store with the job description
171
+
172
+ **Usage:**
173
+ ```javascript
174
+ const customData = {
175
+ requirements: {
176
+ experience_years: 5,
177
+ required_skills: ["JavaScript", "React", "Node.js"],
178
+ preferred_skills: ["AWS", "Docker", "Kubernetes"]
179
+ },
180
+ benefits: ["Health Insurance", "401k", "Remote Work"],
181
+ salary_range: {
182
+ min: 90000,
183
+ max: 130000,
184
+ currency: "USD"
185
+ }
186
+ };
187
+
188
+ const result = await behindAPI.easyjob.V10.jobDescriptions.updateData(
189
+ "770e8400-e29b-41d4-a716-446655440002",
190
+ customData
191
+ );
192
+
193
+ // Response:
194
+ {
195
+ success: true
196
+ }
197
+ ```
198
+
199
+ ### behindAPI.easyjob.V10.jobDescriptions.textUpdate(jobDescriptionId, text)
200
+ Updates the text content of a job description.
201
+
202
+ **Parameters:**
203
+ - `jobDescriptionId` (string, required) - The job description UUID to update
204
+ - `text` (string, required) - The new text content
205
+
206
+ **Usage:**
207
+ ```javascript
208
+ const result = await behindAPI.easyjob.V10.jobDescriptions.textUpdate(
209
+ "770e8400-e29b-41d4-a716-446655440002",
210
+ "Updated job description with comprehensive details about the role..."
211
+ );
212
+
213
+ // Response:
214
+ {
215
+ success: true
216
+ }
217
+ ```
218
+
219
+ ### behindAPI.easyjob.V10.jobDescriptions.publish(jobDescriptionId)
220
+ Publishes a job description, making it visible to potential candidates.
221
+
222
+ **Parameters:**
223
+ - `jobDescriptionId` (string, required) - The job description UUID to publish
224
+
225
+ **Usage:**
226
+ ```javascript
227
+ const result = await behindAPI.easyjob.V10.jobDescriptions.publish("770e8400-e29b-41d4-a716-446655440002");
228
+
229
+ // Response:
230
+ {
231
+ success: true
232
+ }
233
+ ```
234
+
235
+ ### behindAPI.easyjob.V10.jobDescriptions.close(jobDescriptionId)
236
+ Closes a job description, preventing new applications while preserving existing data.
237
+
238
+ **Parameters:**
239
+ - `jobDescriptionId` (string, required) - The job description UUID to close
240
+
241
+ **Usage:**
242
+ ```javascript
243
+ const result = await behindAPI.easyjob.V10.jobDescriptions.close("770e8400-e29b-41d4-a716-446655440002");
244
+
245
+ // Response:
246
+ {
247
+ success: true
248
+ }
249
+ ```
250
+
251
+ ### behindAPI.easyjob.V10.jobDescriptions.updateStatus(jobDescriptionId, status)
252
+ Updates the status of a job description with user permission validation.
253
+
254
+ **Parameters:**
255
+ - `jobDescriptionId` (string, required) - The job description UUID to update
256
+ - `status` (string, required) - The new status value
257
+
258
+ **Common Status Values:**
259
+ - `"draft"` - Job is in draft state
260
+ - `"published"` - Job is published and visible
261
+ - `"closed"` - Job is closed to new applications
262
+ - `"on_hold"` - Job posting is temporarily paused
263
+ - `"cancelled"` - Job posting has been cancelled
264
+
265
+ **Usage:**
266
+ ```javascript
267
+ const result = await behindAPI.easyjob.V10.jobDescriptions.updateStatus(
268
+ "770e8400-e29b-41d4-a716-446655440002",
269
+ "on_hold"
270
+ );
271
+
272
+ // Response:
273
+ {
274
+ success: true
275
+ }
276
+ ```
277
+
278
+ ### behindAPI.easyjob.V10.jobDescriptions.delete(jobDescriptionId)
279
+ Soft deletes a job description (sets deleted flag to true).
280
+
281
+ **Parameters:**
282
+ - `jobDescriptionId` (string, required) - The job description UUID to delete
283
+
284
+ **Usage:**
285
+ ```javascript
286
+ const result = await behindAPI.easyjob.V10.jobDescriptions.delete("770e8400-e29b-41d4-a716-446655440002");
287
+
288
+ // Response:
289
+ {
290
+ success: true
291
+ }
292
+ ```
293
+
294
+ ---
295
+
296
+ ## Data Structure Reference
297
+
298
+ ### Job Description Object
299
+ The complete job description object includes:
300
+
301
+ **Core Fields:**
302
+ - `job_description_id` (UUID) - Unique identifier for the job description
303
+ - `department_id` (UUID) - The department this job belongs to
304
+ - `title` (string) - Job title
305
+ - `description` (string) - Detailed job description text
306
+ - `status` (string) - Current status (draft, published, closed, etc.)
307
+ - `data` (object) - Custom data object for additional information
308
+
309
+ **Publication Fields:**
310
+ - `published` (boolean) - Whether the job is published
311
+ - `published_at` (timestamp) - When the job was published
312
+ - `deadline_at` (timestamp) - Application deadline
313
+
314
+ **State Management:**
315
+ - `closed` (boolean) - Whether the job is closed
316
+ - `closed_at` (timestamp) - When the job was closed
317
+ - `deleted` (boolean) - Whether the job is deleted
318
+
319
+ **Audit Fields:**
320
+ - `created_at` (timestamp) - Creation timestamp
321
+ - `updated_at` (timestamp) - Last update timestamp
322
+ - `created_by` (string) - User who created the job
323
+
324
+ ---
325
+
326
+ ## Complete Usage Example
327
+
328
+ ```javascript
329
+ // Complete workflow for managing job descriptions
330
+ async function manageJobDescriptions(departmentId) {
331
+ try {
332
+ // 1. Create a new job description
333
+ const newJob = await behindAPI.easyjob.V10.jobDescriptions.create(
334
+ departmentId,
335
+ "Senior DevOps Engineer",
336
+ "We are seeking a experienced DevOps engineer to join our infrastructure team..."
337
+ );
338
+
339
+ if (!newJob.success) {
340
+ console.error("Failed to create job description");
341
+ return;
342
+ }
343
+
344
+ const jobId = newJob.data.job_description_id;
345
+ console.log(`Created job description: ${jobId}`);
346
+
347
+ // 2. Add custom data with requirements and benefits
348
+ const jobData = {
349
+ requirements: {
350
+ experience_years: 5,
351
+ required_skills: ["Docker", "Kubernetes", "AWS", "Terraform"],
352
+ certifications: ["AWS Certified DevOps Engineer"]
353
+ },
354
+ benefits: [
355
+ "Competitive salary",
356
+ "Health, dental, and vision insurance",
357
+ "401(k) with company match",
358
+ "Flexible work arrangements",
359
+ "Professional development budget"
360
+ ],
361
+ salary_range: {
362
+ min: 100000,
363
+ max: 140000,
364
+ currency: "USD"
365
+ },
366
+ location: {
367
+ type: "hybrid",
368
+ office_location: "San Francisco, CA",
369
+ remote_percentage: 50
370
+ }
371
+ };
372
+
373
+ const dataUpdate = await behindAPI.easyjob.V10.jobDescriptions.updateData(jobId, jobData);
374
+ if (dataUpdate.success) {
375
+ console.log("Added custom job data");
376
+ }
377
+
378
+ // 3. Update the job description with more details
379
+ const detailedDescription = `
380
+ # Senior DevOps Engineer
381
+
382
+ ## About the Role
383
+ Join our growing infrastructure team to build and maintain scalable, reliable systems that power our applications.
384
+
385
+ ## Key Responsibilities
386
+ - Design and implement CI/CD pipelines
387
+ - Manage cloud infrastructure on AWS
388
+ - Monitor system performance and reliability
389
+ - Collaborate with development teams on deployment strategies
390
+ - Implement security best practices
391
+
392
+ ## Requirements
393
+ - 5+ years of DevOps experience
394
+ - Strong experience with containerization (Docker, Kubernetes)
395
+ - Proficiency with Infrastructure as Code (Terraform, CloudFormation)
396
+ - Experience with monitoring tools (Prometheus, Grafana, ELK stack)
397
+ - Strong scripting skills (Python, Bash)
398
+
399
+ ## Nice to Have
400
+ - AWS certification
401
+ - Experience with service mesh technologies
402
+ - Knowledge of GitOps practices
403
+ `;
404
+
405
+ const updateResult = await behindAPI.easyjob.V10.jobDescriptions.update(
406
+ jobId,
407
+ "Senior DevOps Engineer",
408
+ detailedDescription,
409
+ null, // published_at - will be set when published
410
+ "2024-03-15T23:59:59Z" // deadline_at
411
+ );
412
+
413
+ if (updateResult.success) {
414
+ console.log("Updated job description details");
415
+ }
416
+
417
+ // 4. Publish the job description
418
+ const publishResult = await behindAPI.easyjob.V10.jobDescriptions.publish(jobId);
419
+ if (publishResult.success) {
420
+ console.log("Job description published successfully");
421
+ }
422
+
423
+ // 5. Get the updated job description
424
+ const finalJob = await behindAPI.easyjob.V10.jobDescriptions.get(jobId);
425
+ if (finalJob.success) {
426
+ console.log("Final job description:", finalJob.data);
427
+ }
428
+
429
+ return jobId;
430
+
431
+ } catch (error) {
432
+ console.error("Error managing job descriptions:", error);
433
+ }
434
+ }
435
+
436
+ // Example: Bulk operations on job descriptions
437
+ async function bulkManageJobs(departmentId) {
438
+ try {
439
+ // Get all job descriptions for the department
440
+ const jobsList = await behindAPI.easyjob.V10.jobDescriptions.getList(departmentId);
441
+
442
+ if (!jobsList.success) {
443
+ console.error("Failed to retrieve jobs list");
444
+ return;
445
+ }
446
+
447
+ console.log(`Found ${jobsList.data.length} job descriptions`);
448
+
449
+ // Process each job description
450
+ for (const job of jobsList.data) {
451
+ console.log(`\nProcessing job: ${job.title}`);
452
+ console.log(`Status: ${job.status}`);
453
+ console.log(`Published: ${job.published}`);
454
+
455
+ // Close jobs that have passed their deadline
456
+ if (job.deadline_at && new Date(job.deadline_at) < new Date() && !job.closed) {
457
+ const closeResult = await behindAPI.easyjob.V10.jobDescriptions.close(job.job_description_id);
458
+ if (closeResult.success) {
459
+ console.log(` → Closed expired job: ${job.title}`);
460
+ }
461
+ }
462
+
463
+ // Publish draft jobs that are ready
464
+ if (job.status === "draft" && job.description && job.description.length > 100) {
465
+ const publishResult = await behindAPI.easyjob.V10.jobDescriptions.publish(job.job_description_id);
466
+ if (publishResult.success) {
467
+ console.log(` → Published job: ${job.title}`);
468
+ }
469
+ }
470
+ }
471
+
472
+ // Generate summary report
473
+ const summary = {
474
+ total: jobsList.data.length,
475
+ published: jobsList.data.filter(job => job.published).length,
476
+ draft: jobsList.data.filter(job => !job.published && !job.closed).length,
477
+ closed: jobsList.data.filter(job => job.closed).length,
478
+ expired: jobsList.data.filter(job =>
479
+ job.deadline_at && new Date(job.deadline_at) < new Date()
480
+ ).length
481
+ };
482
+
483
+ console.log("\n=== Department Job Summary ===");
484
+ console.log(`Total Jobs: ${summary.total}`);
485
+ console.log(`Published: ${summary.published}`);
486
+ console.log(`Draft: ${summary.draft}`);
487
+ console.log(`Closed: ${summary.closed}`);
488
+ console.log(`Expired: ${summary.expired}`);
489
+
490
+ return summary;
491
+
492
+ } catch (error) {
493
+ console.error("Error in bulk job management:", error);
494
+ }
495
+ }
496
+
497
+ // Example: Job template system
498
+ async function createJobFromTemplate(departmentId, templateName, customizations = {}) {
499
+ const templates = {
500
+ "software_engineer": {
501
+ title: "Software Engineer",
502
+ description: "Join our engineering team to build innovative software solutions...",
503
+ data: {
504
+ requirements: {
505
+ experience_years: 3,
506
+ required_skills: ["JavaScript", "React", "Node.js"],
507
+ education: "Bachelor's degree in Computer Science or related field"
508
+ },
509
+ benefits: ["Health Insurance", "401k", "Flexible Hours"]
510
+ }
511
+ },
512
+ "product_manager": {
513
+ title: "Product Manager",
514
+ description: "Lead product development from conception to launch...",
515
+ data: {
516
+ requirements: {
517
+ experience_years: 5,
518
+ required_skills: ["Product Strategy", "Data Analysis", "User Research"],
519
+ education: "Bachelor's degree in Business, Engineering, or related field"
520
+ },
521
+ benefits: ["Health Insurance", "401k", "Stock Options"]
522
+ }
523
+ },
524
+ "designer": {
525
+ title: "UX/UI Designer",
526
+ description: "Create beautiful and intuitive user experiences...",
527
+ data: {
528
+ requirements: {
529
+ experience_years: 3,
530
+ required_skills: ["Figma", "Adobe Creative Suite", "User Research"],
531
+ portfolio: "Required"
532
+ },
533
+ benefits: ["Health Insurance", "401k", "Creative Budget"]
534
+ }
535
+ }
536
+ };
537
+
538
+ const template = templates[templateName];
539
+ if (!template) {
540
+ throw new Error(`Template "${templateName}" not found`);
541
+ }
542
+
543
+ try {
544
+ // Create job from template
545
+ const job = await behindAPI.easyjob.V10.jobDescriptions.create(
546
+ departmentId,
547
+ customizations.title || template.title,
548
+ customizations.description || template.description
549
+ );
550
+
551
+ if (!job.success) {
552
+ throw new Error("Failed to create job from template");
553
+ }
554
+
555
+ const jobId = job.data.job_description_id;
556
+
557
+ // Apply template data with customizations
558
+ const finalData = {
559
+ ...template.data,
560
+ ...customizations.data
561
+ };
562
+
563
+ await behindAPI.easyjob.V10.jobDescriptions.updateData(jobId, finalData);
564
+
565
+ // Set deadline if provided
566
+ if (customizations.deadline_at) {
567
+ await behindAPI.easyjob.V10.jobDescriptions.update(
568
+ jobId,
569
+ null, null, null,
570
+ customizations.deadline_at
571
+ );
572
+ }
573
+
574
+ console.log(`Created job from template "${templateName}": ${jobId}`);
575
+ return jobId;
576
+
577
+ } catch (error) {
578
+ console.error("Error creating job from template:", error);
579
+ throw error;
580
+ }
581
+ }
582
+
583
+ // Usage examples:
584
+ // Create a senior-level software engineer position
585
+ const seniorEngJobId = await createJobFromTemplate(
586
+ "550e8400-e29b-41d4-a716-446655440001",
587
+ "software_engineer",
588
+ {
589
+ title: "Senior Software Engineer",
590
+ data: {
591
+ requirements: {
592
+ experience_years: 7,
593
+ required_skills: ["JavaScript", "React", "Node.js", "AWS", "Docker"],
594
+ leadership: "Experience mentoring junior developers"
595
+ },
596
+ salary_range: {
597
+ min: 120000,
598
+ max: 160000,
599
+ currency: "USD"
600
+ }
601
+ },
602
+ deadline_at: "2024-04-01T23:59:59Z"
603
+ }
604
+ );
605
+ ```
606
+
607
+ ---
608
+
609
+ ## Best Practices
610
+
611
+ 1. **Lifecycle Management**: Use a consistent workflow: create → update → publish → manage → close. Always validate job descriptions before publishing.
612
+
613
+ 2. **Data Organization**: Use the `updateData()` method to store structured information like requirements, benefits, and salary ranges for better searchability and filtering.
614
+
615
+ 3. **Publishing Strategy**: Review job descriptions thoroughly before publishing. Once published, jobs become visible to candidates.
616
+
617
+ 4. **Deadline Management**: Always set realistic application deadlines and monitor for expired jobs that need to be closed.
618
+
619
+ 5. **Template Usage**: Create reusable job templates for common positions to ensure consistency and save time.
620
+
621
+ 6. **Status Tracking**: Implement automated workflows to track job status and lifecycle events.
622
+
623
+ ---
624
+
625
+ ## Error Handling
626
+
627
+ All methods return a response object with a `success` boolean property. When `success` is `false`, a `message` property will contain the error description.
628
+
629
+ ```javascript
630
+ // Example error handling
631
+ const result = await behindAPI.easyjob.V10.jobDescriptions.get(invalidJobId);
632
+
633
+ if (!result.success) {
634
+ console.error("Error retrieving job description:", result.message);
635
+ // Handle the error appropriately
636
+ return;
637
+ }
638
+
639
+ // Process successful result
640
+ const jobData = result.data;
641
+ ```
642
+
643
+ ---
644
+
645
+ ## Integration Notes
646
+
647
+ The Job Descriptions API works seamlessly with other EasyJob APIs:
648
+
649
+ - **Departments**: Job descriptions belong to departments and inherit permissions
650
+ - **Applicants**: Applications are linked to specific job descriptions
651
+ - **Job Description Candidate Questions**: Custom questions can be attached to job descriptions
652
+ - **Candidate Profiles**: Applicant profiles can be filtered based on job requirements stored in the data field
653
+
654
+ The API supports both authorized operations (for internal management) and unauthorized access (for public job listings), enabling flexible integration with career pages and job boards.