@dolusoft/hirebase-mcp 1.1.8

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 (413) hide show
  1. package/README.md +261 -0
  2. package/dist/application/dto/candidate-summary.d.ts +10 -0
  3. package/dist/application/dto/candidate-summary.js +2 -0
  4. package/dist/application/dto/candidate-summary.js.map +1 -0
  5. package/dist/application/dto/extracted-cv.d.ts +46 -0
  6. package/dist/application/dto/extracted-cv.js +2 -0
  7. package/dist/application/dto/extracted-cv.js.map +1 -0
  8. package/dist/application/dto/filter-input.d.ts +7 -0
  9. package/dist/application/dto/filter-input.js +2 -0
  10. package/dist/application/dto/filter-input.js.map +1 -0
  11. package/dist/application/dto/index.d.ts +5 -0
  12. package/dist/application/dto/index.js +2 -0
  13. package/dist/application/dto/index.js.map +1 -0
  14. package/dist/application/dto/search-results.d.ts +13 -0
  15. package/dist/application/dto/search-results.js +2 -0
  16. package/dist/application/dto/search-results.js.map +1 -0
  17. package/dist/application/dto/stats.d.ts +10 -0
  18. package/dist/application/dto/stats.js +2 -0
  19. package/dist/application/dto/stats.js.map +1 -0
  20. package/dist/application/ports/document-parser.d.ts +8 -0
  21. package/dist/application/ports/document-parser.js +2 -0
  22. package/dist/application/ports/document-parser.js.map +1 -0
  23. package/dist/application/ports/embedding-service.d.ts +4 -0
  24. package/dist/application/ports/embedding-service.js +2 -0
  25. package/dist/application/ports/embedding-service.js.map +1 -0
  26. package/dist/application/ports/export-service.d.ts +5 -0
  27. package/dist/application/ports/export-service.js +2 -0
  28. package/dist/application/ports/export-service.js.map +1 -0
  29. package/dist/application/ports/index.d.ts +4 -0
  30. package/dist/application/ports/index.js +2 -0
  31. package/dist/application/ports/index.js.map +1 -0
  32. package/dist/application/ports/structured-extractor.d.ts +4 -0
  33. package/dist/application/ports/structured-extractor.js +2 -0
  34. package/dist/application/ports/structured-extractor.js.map +1 -0
  35. package/dist/application/use-cases/add-cv.d.ts +16 -0
  36. package/dist/application/use-cases/add-cv.js +113 -0
  37. package/dist/application/use-cases/add-cv.js.map +1 -0
  38. package/dist/application/use-cases/add-job-posting.d.ts +17 -0
  39. package/dist/application/use-cases/add-job-posting.js +27 -0
  40. package/dist/application/use-cases/add-job-posting.js.map +1 -0
  41. package/dist/application/use-cases/add-pipeline-note.d.ts +15 -0
  42. package/dist/application/use-cases/add-pipeline-note.js +34 -0
  43. package/dist/application/use-cases/add-pipeline-note.js.map +1 -0
  44. package/dist/application/use-cases/add-to-pipeline.d.ts +18 -0
  45. package/dist/application/use-cases/add-to-pipeline.js +54 -0
  46. package/dist/application/use-cases/add-to-pipeline.js.map +1 -0
  47. package/dist/application/use-cases/bulk-add-cvs.d.ts +14 -0
  48. package/dist/application/use-cases/bulk-add-cvs.js +32 -0
  49. package/dist/application/use-cases/bulk-add-cvs.js.map +1 -0
  50. package/dist/application/use-cases/delete-cv.d.ts +10 -0
  51. package/dist/application/use-cases/delete-cv.js +21 -0
  52. package/dist/application/use-cases/delete-cv.js.map +1 -0
  53. package/dist/application/use-cases/export-results.d.ts +9 -0
  54. package/dist/application/use-cases/export-results.js +21 -0
  55. package/dist/application/use-cases/export-results.js.map +1 -0
  56. package/dist/application/use-cases/filter-candidates.d.ts +9 -0
  57. package/dist/application/use-cases/filter-candidates.js +51 -0
  58. package/dist/application/use-cases/filter-candidates.js.map +1 -0
  59. package/dist/application/use-cases/get-candidate-history.d.ts +25 -0
  60. package/dist/application/use-cases/get-candidate-history.js +36 -0
  61. package/dist/application/use-cases/get-candidate-history.js.map +1 -0
  62. package/dist/application/use-cases/get-cv-chunks.d.ts +15 -0
  63. package/dist/application/use-cases/get-cv-chunks.js +18 -0
  64. package/dist/application/use-cases/get-cv-chunks.js.map +1 -0
  65. package/dist/application/use-cases/get-cv-detail.d.ts +7 -0
  66. package/dist/application/use-cases/get-cv-detail.js +15 -0
  67. package/dist/application/use-cases/get-cv-detail.js.map +1 -0
  68. package/dist/application/use-cases/get-cv-versions.d.ts +9 -0
  69. package/dist/application/use-cases/get-cv-versions.js +18 -0
  70. package/dist/application/use-cases/get-cv-versions.js.map +1 -0
  71. package/dist/application/use-cases/get-pending-actions.d.ts +23 -0
  72. package/dist/application/use-cases/get-pending-actions.js +50 -0
  73. package/dist/application/use-cases/get-pending-actions.js.map +1 -0
  74. package/dist/application/use-cases/get-pipeline.d.ts +27 -0
  75. package/dist/application/use-cases/get-pipeline.js +40 -0
  76. package/dist/application/use-cases/get-pipeline.js.map +1 -0
  77. package/dist/application/use-cases/get-stats.d.ts +13 -0
  78. package/dist/application/use-cases/get-stats.js +50 -0
  79. package/dist/application/use-cases/get-stats.js.map +1 -0
  80. package/dist/application/use-cases/index.d.ts +23 -0
  81. package/dist/application/use-cases/index.js +24 -0
  82. package/dist/application/use-cases/index.js.map +1 -0
  83. package/dist/application/use-cases/list-cvs.d.ts +8 -0
  84. package/dist/application/use-cases/list-cvs.js +20 -0
  85. package/dist/application/use-cases/list-cvs.js.map +1 -0
  86. package/dist/application/use-cases/list-job-postings.d.ts +7 -0
  87. package/dist/application/use-cases/list-job-postings.js +10 -0
  88. package/dist/application/use-cases/list-job-postings.js.map +1 -0
  89. package/dist/application/use-cases/manage-tags.d.ts +7 -0
  90. package/dist/application/use-cases/manage-tags.js +36 -0
  91. package/dist/application/use-cases/manage-tags.js.map +1 -0
  92. package/dist/application/use-cases/match-candidates.d.ts +27 -0
  93. package/dist/application/use-cases/match-candidates.js +92 -0
  94. package/dist/application/use-cases/match-candidates.js.map +1 -0
  95. package/dist/application/use-cases/semantic-search.d.ts +11 -0
  96. package/dist/application/use-cases/semantic-search.js +40 -0
  97. package/dist/application/use-cases/semantic-search.js.map +1 -0
  98. package/dist/application/use-cases/set-pending-action.d.ts +13 -0
  99. package/dist/application/use-cases/set-pending-action.js +24 -0
  100. package/dist/application/use-cases/set-pending-action.js.map +1 -0
  101. package/dist/application/use-cases/update-cv.d.ts +17 -0
  102. package/dist/application/use-cases/update-cv.js +103 -0
  103. package/dist/application/use-cases/update-cv.js.map +1 -0
  104. package/dist/application/use-cases/update-job-posting.d.ts +19 -0
  105. package/dist/application/use-cases/update-job-posting.js +28 -0
  106. package/dist/application/use-cases/update-job-posting.js.map +1 -0
  107. package/dist/application/use-cases/update-pipeline-status.d.ts +14 -0
  108. package/dist/application/use-cases/update-pipeline-status.js +38 -0
  109. package/dist/application/use-cases/update-pipeline-status.js.map +1 -0
  110. package/dist/domain/entities/application-event.d.ts +11 -0
  111. package/dist/domain/entities/application-event.js +2 -0
  112. package/dist/domain/entities/application-event.js.map +1 -0
  113. package/dist/domain/entities/application.d.ts +13 -0
  114. package/dist/domain/entities/application.js +2 -0
  115. package/dist/domain/entities/application.js.map +1 -0
  116. package/dist/domain/entities/candidate.d.ts +26 -0
  117. package/dist/domain/entities/candidate.js +2 -0
  118. package/dist/domain/entities/candidate.js.map +1 -0
  119. package/dist/domain/entities/cv-chunk.d.ts +10 -0
  120. package/dist/domain/entities/cv-chunk.js +2 -0
  121. package/dist/domain/entities/cv-chunk.js.map +1 -0
  122. package/dist/domain/entities/cv-version.d.ts +7 -0
  123. package/dist/domain/entities/cv-version.js +2 -0
  124. package/dist/domain/entities/cv-version.js.map +1 -0
  125. package/dist/domain/entities/index.d.ts +6 -0
  126. package/dist/domain/entities/index.js +2 -0
  127. package/dist/domain/entities/index.js.map +1 -0
  128. package/dist/domain/entities/job-posting.d.ts +14 -0
  129. package/dist/domain/entities/job-posting.js +2 -0
  130. package/dist/domain/entities/job-posting.js.map +1 -0
  131. package/dist/domain/repositories/application-event-repository.d.ts +7 -0
  132. package/dist/domain/repositories/application-event-repository.js +2 -0
  133. package/dist/domain/repositories/application-event-repository.js.map +1 -0
  134. package/dist/domain/repositories/application-repository.d.ts +12 -0
  135. package/dist/domain/repositories/application-repository.js +2 -0
  136. package/dist/domain/repositories/application-repository.js.map +1 -0
  137. package/dist/domain/repositories/candidate-repository.d.ts +12 -0
  138. package/dist/domain/repositories/candidate-repository.js +2 -0
  139. package/dist/domain/repositories/candidate-repository.js.map +1 -0
  140. package/dist/domain/repositories/chunk-repository.d.ts +13 -0
  141. package/dist/domain/repositories/chunk-repository.js +2 -0
  142. package/dist/domain/repositories/chunk-repository.js.map +1 -0
  143. package/dist/domain/repositories/index.d.ts +6 -0
  144. package/dist/domain/repositories/index.js +2 -0
  145. package/dist/domain/repositories/index.js.map +1 -0
  146. package/dist/domain/repositories/job-posting-repository.d.ts +9 -0
  147. package/dist/domain/repositories/job-posting-repository.js +2 -0
  148. package/dist/domain/repositories/job-posting-repository.js.map +1 -0
  149. package/dist/domain/repositories/version-repository.d.ts +6 -0
  150. package/dist/domain/repositories/version-repository.js +2 -0
  151. package/dist/domain/repositories/version-repository.js.map +1 -0
  152. package/dist/domain/value-objects/certification.d.ts +5 -0
  153. package/dist/domain/value-objects/certification.js +2 -0
  154. package/dist/domain/value-objects/certification.js.map +1 -0
  155. package/dist/domain/value-objects/contact-info.d.ts +5 -0
  156. package/dist/domain/value-objects/contact-info.js +2 -0
  157. package/dist/domain/value-objects/contact-info.js.map +1 -0
  158. package/dist/domain/value-objects/education.d.ts +7 -0
  159. package/dist/domain/value-objects/education.js +2 -0
  160. package/dist/domain/value-objects/education.js.map +1 -0
  161. package/dist/domain/value-objects/experience.d.ts +7 -0
  162. package/dist/domain/value-objects/experience.js +2 -0
  163. package/dist/domain/value-objects/experience.js.map +1 -0
  164. package/dist/domain/value-objects/index.d.ts +7 -0
  165. package/dist/domain/value-objects/index.js +2 -0
  166. package/dist/domain/value-objects/index.js.map +1 -0
  167. package/dist/domain/value-objects/language.d.ts +4 -0
  168. package/dist/domain/value-objects/language.js +2 -0
  169. package/dist/domain/value-objects/language.js.map +1 -0
  170. package/dist/domain/value-objects/links.d.ts +6 -0
  171. package/dist/domain/value-objects/links.js +2 -0
  172. package/dist/domain/value-objects/links.js.map +1 -0
  173. package/dist/domain/value-objects/project.d.ts +5 -0
  174. package/dist/domain/value-objects/project.js +2 -0
  175. package/dist/domain/value-objects/project.js.map +1 -0
  176. package/dist/infrastructure/ai/index.d.ts +2 -0
  177. package/dist/infrastructure/ai/index.js +3 -0
  178. package/dist/infrastructure/ai/index.js.map +1 -0
  179. package/dist/infrastructure/ai/openai-embedding-service.d.ts +8 -0
  180. package/dist/infrastructure/ai/openai-embedding-service.js +39 -0
  181. package/dist/infrastructure/ai/openai-embedding-service.js.map +1 -0
  182. package/dist/infrastructure/ai/openai-structured-extractor.d.ts +9 -0
  183. package/dist/infrastructure/ai/openai-structured-extractor.js +163 -0
  184. package/dist/infrastructure/ai/openai-structured-extractor.js.map +1 -0
  185. package/dist/infrastructure/config/app-config.d.ts +9 -0
  186. package/dist/infrastructure/config/app-config.js +15 -0
  187. package/dist/infrastructure/config/app-config.js.map +1 -0
  188. package/dist/infrastructure/export/csv-export-service.d.ts +6 -0
  189. package/dist/infrastructure/export/csv-export-service.js +24 -0
  190. package/dist/infrastructure/export/csv-export-service.js.map +1 -0
  191. package/dist/infrastructure/parsers/docx-parser.d.ts +5 -0
  192. package/dist/infrastructure/parsers/docx-parser.js +17 -0
  193. package/dist/infrastructure/parsers/docx-parser.js.map +1 -0
  194. package/dist/infrastructure/parsers/index.d.ts +3 -0
  195. package/dist/infrastructure/parsers/index.js +4 -0
  196. package/dist/infrastructure/parsers/index.js.map +1 -0
  197. package/dist/infrastructure/parsers/ocr-service.d.ts +8 -0
  198. package/dist/infrastructure/parsers/ocr-service.js +65 -0
  199. package/dist/infrastructure/parsers/ocr-service.js.map +1 -0
  200. package/dist/infrastructure/parsers/pdf-parser.d.ts +5 -0
  201. package/dist/infrastructure/parsers/pdf-parser.js +44 -0
  202. package/dist/infrastructure/parsers/pdf-parser.js.map +1 -0
  203. package/dist/infrastructure/persistence/database.d.ts +20 -0
  204. package/dist/infrastructure/persistence/database.js +156 -0
  205. package/dist/infrastructure/persistence/database.js.map +1 -0
  206. package/dist/infrastructure/persistence/index.d.ts +6 -0
  207. package/dist/infrastructure/persistence/index.js +7 -0
  208. package/dist/infrastructure/persistence/index.js.map +1 -0
  209. package/dist/infrastructure/persistence/lancedb-application-event-repository.d.ts +16 -0
  210. package/dist/infrastructure/persistence/lancedb-application-event-repository.js +85 -0
  211. package/dist/infrastructure/persistence/lancedb-application-event-repository.js.map +1 -0
  212. package/dist/infrastructure/persistence/lancedb-application-repository.d.ts +21 -0
  213. package/dist/infrastructure/persistence/lancedb-application-repository.js +151 -0
  214. package/dist/infrastructure/persistence/lancedb-application-repository.js.map +1 -0
  215. package/dist/infrastructure/persistence/lancedb-candidate-repository.d.ts +21 -0
  216. package/dist/infrastructure/persistence/lancedb-candidate-repository.js +169 -0
  217. package/dist/infrastructure/persistence/lancedb-candidate-repository.js.map +1 -0
  218. package/dist/infrastructure/persistence/lancedb-chunk-repository.d.ts +18 -0
  219. package/dist/infrastructure/persistence/lancedb-chunk-repository.js +105 -0
  220. package/dist/infrastructure/persistence/lancedb-chunk-repository.js.map +1 -0
  221. package/dist/infrastructure/persistence/lancedb-job-posting-repository.d.ts +21 -0
  222. package/dist/infrastructure/persistence/lancedb-job-posting-repository.js +128 -0
  223. package/dist/infrastructure/persistence/lancedb-job-posting-repository.js.map +1 -0
  224. package/dist/infrastructure/persistence/lancedb-version-repository.d.ts +13 -0
  225. package/dist/infrastructure/persistence/lancedb-version-repository.js +62 -0
  226. package/dist/infrastructure/persistence/lancedb-version-repository.js.map +1 -0
  227. package/dist/interface/cli/index.d.ts +2 -0
  228. package/dist/interface/cli/index.js +17 -0
  229. package/dist/interface/cli/index.js.map +1 -0
  230. package/dist/interface/dashboard/call-context.d.ts +4 -0
  231. package/dist/interface/dashboard/call-context.js +26 -0
  232. package/dist/interface/dashboard/call-context.js.map +1 -0
  233. package/dist/interface/dashboard/event-bus.d.ts +7 -0
  234. package/dist/interface/dashboard/event-bus.js +16 -0
  235. package/dist/interface/dashboard/event-bus.js.map +1 -0
  236. package/dist/interface/dashboard/events.d.ts +30 -0
  237. package/dist/interface/dashboard/events.js +2 -0
  238. package/dist/interface/dashboard/events.js.map +1 -0
  239. package/dist/interface/dashboard/html.d.ts +1 -0
  240. package/dist/interface/dashboard/html.js +1007 -0
  241. package/dist/interface/dashboard/html.js.map +1 -0
  242. package/dist/interface/dashboard/public/200.html +1 -0
  243. package/dist/interface/dashboard/public/404.html +1 -0
  244. package/dist/interface/dashboard/public/_fonts/1ZTlEDqU4DtwDJiND8f6qaugUpa0RIDvQl-v7iM6l54-8KeALpAu2nWJknvJhMk31fqE06iajfSeiM57lsZAo5g.woff +0 -0
  245. package/dist/interface/dashboard/public/_fonts/1ZTlEDqU4DtwDJiND8f6qaugUpa0RIDvQl-v7iM6l54-CAyrLGU3kauAbzcFnj2Cv_iAPV8wT2NEvNmrA_77Up0.woff +0 -0
  246. package/dist/interface/dashboard/public/_fonts/1ZTlEDqU4DtwDJiND8f6qaugUpa0RIDvQl-v7iM6l54-Cbq5YGF_nsoQo6qYm9EhA3p-oINRUqlXhACZ2Wh4BBE.woff +0 -0
  247. package/dist/interface/dashboard/public/_fonts/1ZTlEDqU4DtwDJiND8f6qaugUpa0RIDvQl-v7iM6l54-G1pKsfAhfeIECsLbuPUckyz92yuHFKi9rmiwlRl8Tb0.woff +0 -0
  248. package/dist/interface/dashboard/public/_fonts/1ZTlEDqU4DtwDJiND8f6qaugUpa0RIDvQl-v7iM6l54-OnaIl8fChu9Cb4bpYiOA4dK_W7eeMCjXQOWR8tUhXJ0.woff +0 -0
  249. package/dist/interface/dashboard/public/_fonts/1ZTlEDqU4DtwDJiND8f6qaugUpa0RIDvQl-v7iM6l54-kzEiBeXQ06q7fC06p1Y4RaOpLlRWCnHcCcSaqFMJ6fc.woff +0 -0
  250. package/dist/interface/dashboard/public/_fonts/1ZTlEDqU4DtwDJiND8f6qaugUpa0RIDvQl-v7iM6l54-rmd8_oLeTXCNUhiFyy1UYsogNo6QYBr9dQHrhl_hLbs.woff +0 -0
  251. package/dist/interface/dashboard/public/_fonts/1ZTlEDqU4DtwDJiND8f6qaugUpa0RIDvQl-v7iM6l54-wjJHhPsTzX4mZm37l7bbvLDtOEIT1R38DKPlwV_Z34A.woff +0 -0
  252. package/dist/interface/dashboard/public/_fonts/57NSSoFy1VLVs2gqly8Ls9awBnZMFyXGrefpmqvdqmc-zJfbBtpgM4cDmcXBsqZNW79_kFnlpPd62b48glgdydA.woff2 +0 -0
  253. package/dist/interface/dashboard/public/_fonts/8VR2wSMN-3U4NbWAVYXlkRV6hA0jFBXP-0RtL3X7fko-x2gYI4qfmkRdxyQQUPaBZdZdgl1TeVrquF_TxHeM4lM.woff2 +0 -0
  254. package/dist/interface/dashboard/public/_fonts/GsKUclqeNLJ96g5AU593ug6yanivOiwjW_7zESNPChw-jHA4tBeM1bjF7LATGUpfBuSTyomIFrWBTzjF7txVYfg.woff2 +0 -0
  255. package/dist/interface/dashboard/public/_fonts/Ld1FnTo3yTIwDyGfTQ5-Fws9AWsCbKfMvgxduXr7JcY-W25bL8NF1fjpLRSOgJb7RoZPHqGQNwMTM7S9tHVoxx8.woff2 +0 -0
  256. package/dist/interface/dashboard/public/_fonts/NdzqRASp2bovDUhQT1IRE_EMqKJ2KYQdTCfFcBvL8yw-KhwZiS86o3fErOe5GGMExHUemmI_dBfaEFxjISZrBd0.woff2 +0 -0
  257. package/dist/interface/dashboard/public/_fonts/iTkrULNFJJkTvihIg1Vqi5IODRH_9btXCioVF5l98I8-AndUyau2HR2felA_ra8V2mutQgschhasE5FD1dXGJX8.woff2 +0 -0
  258. package/dist/interface/dashboard/public/_nuxt/BtFgTcXQ.js +30 -0
  259. package/dist/interface/dashboard/public/_nuxt/CdJZeyak.js +30 -0
  260. package/dist/interface/dashboard/public/_nuxt/D9vxbU2B.js +1 -0
  261. package/dist/interface/dashboard/public/_nuxt/DHg6ig_T.js +1 -0
  262. package/dist/interface/dashboard/public/_nuxt/DhFk2_Al.js +1 -0
  263. package/dist/interface/dashboard/public/_nuxt/DlAUqK2U.js +1 -0
  264. package/dist/interface/dashboard/public/_nuxt/DtX-aPBA.js +1 -0
  265. package/dist/interface/dashboard/public/_nuxt/DvCMYK3d.js +1 -0
  266. package/dist/interface/dashboard/public/_nuxt/builds/latest.json +1 -0
  267. package/dist/interface/dashboard/public/_nuxt/builds/meta/027020ec-4e7d-4fc7-8447-19800f7d0bac.json +1 -0
  268. package/dist/interface/dashboard/public/_nuxt/builds/meta/18e19101-a96b-41dc-b602-f9a8f013a036.json +1 -0
  269. package/dist/interface/dashboard/public/_nuxt/builds/meta/2fd3d0d3-6004-4659-9055-d27aa6656fd3.json +1 -0
  270. package/dist/interface/dashboard/public/_nuxt/builds/meta/54792d4b-ca55-4b5d-b0dd-1d7dc34de344.json +1 -0
  271. package/dist/interface/dashboard/public/_nuxt/builds/meta/5959a14b-2494-4e0d-be28-fef9adfd889d.json +1 -0
  272. package/dist/interface/dashboard/public/_nuxt/builds/meta/60cda583-d704-4d4e-b37e-7ab337e3b6cc.json +1 -0
  273. package/dist/interface/dashboard/public/_nuxt/builds/meta/64d05a43-99ec-4c22-934e-071b310b968f.json +1 -0
  274. package/dist/interface/dashboard/public/_nuxt/builds/meta/6c1632a5-f0af-41e3-9d88-12294e03a0b9.json +1 -0
  275. package/dist/interface/dashboard/public/_nuxt/builds/meta/6c80982c-5e2c-446c-aaf6-7000a976e493.json +1 -0
  276. package/dist/interface/dashboard/public/_nuxt/builds/meta/79161adb-748c-4d36-a031-a71899a56ecd.json +1 -0
  277. package/dist/interface/dashboard/public/_nuxt/builds/meta/84e5a87d-4ae5-48dd-8d5e-5b1fe89f7243.json +1 -0
  278. package/dist/interface/dashboard/public/_nuxt/builds/meta/86082677-a11d-4acf-ab04-c3c067a71622.json +1 -0
  279. package/dist/interface/dashboard/public/_nuxt/builds/meta/8892e611-c2b4-425b-a6a5-988314d8da4d.json +1 -0
  280. package/dist/interface/dashboard/public/_nuxt/builds/meta/9bfe6b22-73f8-4584-b13d-ed1df5600e12.json +1 -0
  281. package/dist/interface/dashboard/public/_nuxt/builds/meta/a39bf957-ddae-41a6-a183-08292363098b.json +1 -0
  282. package/dist/interface/dashboard/public/_nuxt/builds/meta/b0bf7fc4-02c1-46fd-acca-f4458feed978.json +1 -0
  283. package/dist/interface/dashboard/public/_nuxt/builds/meta/b2847d83-b695-45d4-9dca-d7498158a501.json +1 -0
  284. package/dist/interface/dashboard/public/_nuxt/builds/meta/c8382eda-1354-4f92-b6d0-5b5b9f43354a.json +1 -0
  285. package/dist/interface/dashboard/public/_nuxt/builds/meta/e707aa44-7202-413d-bcd5-1538b5b56570.json +1 -0
  286. package/dist/interface/dashboard/public/_nuxt/builds/meta/ea661002-05ab-4bfb-b02f-c91bb721c5e9.json +1 -0
  287. package/dist/interface/dashboard/public/_nuxt/builds/meta/f2f23a12-a792-480e-922a-ee8b73dc0310.json +1 -0
  288. package/dist/interface/dashboard/public/_nuxt/builds/meta/f6503b83-d731-40f8-9110-c1599663b3ba.json +1 -0
  289. package/dist/interface/dashboard/public/_nuxt/builds/meta/feac6d04-6bc5-4fa4-a241-79e897d7f8c1.json +1 -0
  290. package/dist/interface/dashboard/public/_nuxt/entry.BSUaoqsu.css +1 -0
  291. package/dist/interface/dashboard/public/_nuxt/entry.Bl31cpjT.css +1 -0
  292. package/dist/interface/dashboard/public/_nuxt/error-404.B6WzzNMA.css +1 -0
  293. package/dist/interface/dashboard/public/_nuxt/error-500.CVIcHofV.css +1 -0
  294. package/dist/interface/dashboard/public/_nuxt/index.BH5Gbe6q.css +1 -0
  295. package/dist/interface/dashboard/public/_nuxt/index.TQmbXYdV.css +1 -0
  296. package/dist/interface/dashboard/public/_nuxt/qq1iUjth.js +1 -0
  297. package/dist/interface/dashboard/public/favicon.ico +0 -0
  298. package/dist/interface/dashboard/public/index.html +1 -0
  299. package/dist/interface/dashboard/server.d.ts +11 -0
  300. package/dist/interface/dashboard/server.js +145 -0
  301. package/dist/interface/dashboard/server.js.map +1 -0
  302. package/dist/interface/dashboard/tool-wrapper.d.ts +4 -0
  303. package/dist/interface/dashboard/tool-wrapper.js +96 -0
  304. package/dist/interface/dashboard/tool-wrapper.js.map +1 -0
  305. package/dist/interface/mcp/server.d.ts +2 -0
  306. package/dist/interface/mcp/server.js +109 -0
  307. package/dist/interface/mcp/server.js.map +1 -0
  308. package/dist/interface/mcp/tools/add-cv.d.ts +3 -0
  309. package/dist/interface/mcp/tools/add-cv.js +21 -0
  310. package/dist/interface/mcp/tools/add-cv.js.map +1 -0
  311. package/dist/interface/mcp/tools/add-job-posting.d.ts +3 -0
  312. package/dist/interface/mcp/tools/add-job-posting.js +38 -0
  313. package/dist/interface/mcp/tools/add-job-posting.js.map +1 -0
  314. package/dist/interface/mcp/tools/add-pipeline-note.d.ts +3 -0
  315. package/dist/interface/mcp/tools/add-pipeline-note.js +32 -0
  316. package/dist/interface/mcp/tools/add-pipeline-note.js.map +1 -0
  317. package/dist/interface/mcp/tools/add-to-pipeline.d.ts +3 -0
  318. package/dist/interface/mcp/tools/add-to-pipeline.js +28 -0
  319. package/dist/interface/mcp/tools/add-to-pipeline.js.map +1 -0
  320. package/dist/interface/mcp/tools/bulk-add-cvs.d.ts +3 -0
  321. package/dist/interface/mcp/tools/bulk-add-cvs.js +28 -0
  322. package/dist/interface/mcp/tools/bulk-add-cvs.js.map +1 -0
  323. package/dist/interface/mcp/tools/delete-cv.d.ts +3 -0
  324. package/dist/interface/mcp/tools/delete-cv.js +20 -0
  325. package/dist/interface/mcp/tools/delete-cv.js.map +1 -0
  326. package/dist/interface/mcp/tools/delete-job-posting.d.ts +3 -0
  327. package/dist/interface/mcp/tools/delete-job-posting.js +27 -0
  328. package/dist/interface/mcp/tools/delete-job-posting.js.map +1 -0
  329. package/dist/interface/mcp/tools/export-results.d.ts +3 -0
  330. package/dist/interface/mcp/tools/export-results.js +23 -0
  331. package/dist/interface/mcp/tools/export-results.js.map +1 -0
  332. package/dist/interface/mcp/tools/filter-candidates.d.ts +3 -0
  333. package/dist/interface/mcp/tools/filter-candidates.js +32 -0
  334. package/dist/interface/mcp/tools/filter-candidates.js.map +1 -0
  335. package/dist/interface/mcp/tools/get-candidate-history.d.ts +3 -0
  336. package/dist/interface/mcp/tools/get-candidate-history.js +22 -0
  337. package/dist/interface/mcp/tools/get-candidate-history.js.map +1 -0
  338. package/dist/interface/mcp/tools/get-cv-chunks.d.ts +3 -0
  339. package/dist/interface/mcp/tools/get-cv-chunks.js +26 -0
  340. package/dist/interface/mcp/tools/get-cv-chunks.js.map +1 -0
  341. package/dist/interface/mcp/tools/get-cv-detail.d.ts +3 -0
  342. package/dist/interface/mcp/tools/get-cv-detail.js +23 -0
  343. package/dist/interface/mcp/tools/get-cv-detail.js.map +1 -0
  344. package/dist/interface/mcp/tools/get-cv-versions.d.ts +3 -0
  345. package/dist/interface/mcp/tools/get-cv-versions.js +20 -0
  346. package/dist/interface/mcp/tools/get-cv-versions.js.map +1 -0
  347. package/dist/interface/mcp/tools/get-job-posting.d.ts +3 -0
  348. package/dist/interface/mcp/tools/get-job-posting.js +26 -0
  349. package/dist/interface/mcp/tools/get-job-posting.js.map +1 -0
  350. package/dist/interface/mcp/tools/get-pending-actions.d.ts +3 -0
  351. package/dist/interface/mcp/tools/get-pending-actions.js +19 -0
  352. package/dist/interface/mcp/tools/get-pending-actions.js.map +1 -0
  353. package/dist/interface/mcp/tools/get-pipeline.d.ts +3 -0
  354. package/dist/interface/mcp/tools/get-pipeline.js +22 -0
  355. package/dist/interface/mcp/tools/get-pipeline.js.map +1 -0
  356. package/dist/interface/mcp/tools/get-server-status.d.ts +3 -0
  357. package/dist/interface/mcp/tools/get-server-status.js +38 -0
  358. package/dist/interface/mcp/tools/get-server-status.js.map +1 -0
  359. package/dist/interface/mcp/tools/get-stats.d.ts +3 -0
  360. package/dist/interface/mcp/tools/get-stats.js +19 -0
  361. package/dist/interface/mcp/tools/get-stats.js.map +1 -0
  362. package/dist/interface/mcp/tools/list-cvs.d.ts +3 -0
  363. package/dist/interface/mcp/tools/list-cvs.js +32 -0
  364. package/dist/interface/mcp/tools/list-cvs.js.map +1 -0
  365. package/dist/interface/mcp/tools/list-job-postings.d.ts +3 -0
  366. package/dist/interface/mcp/tools/list-job-postings.js +19 -0
  367. package/dist/interface/mcp/tools/list-job-postings.js.map +1 -0
  368. package/dist/interface/mcp/tools/manage-tags.d.ts +3 -0
  369. package/dist/interface/mcp/tools/manage-tags.js +24 -0
  370. package/dist/interface/mcp/tools/manage-tags.js.map +1 -0
  371. package/dist/interface/mcp/tools/match-candidates.d.ts +3 -0
  372. package/dist/interface/mcp/tools/match-candidates.js +23 -0
  373. package/dist/interface/mcp/tools/match-candidates.js.map +1 -0
  374. package/dist/interface/mcp/tools/reset-database.d.ts +3 -0
  375. package/dist/interface/mcp/tools/reset-database.js +35 -0
  376. package/dist/interface/mcp/tools/reset-database.js.map +1 -0
  377. package/dist/interface/mcp/tools/semantic-search.d.ts +3 -0
  378. package/dist/interface/mcp/tools/semantic-search.js +27 -0
  379. package/dist/interface/mcp/tools/semantic-search.js.map +1 -0
  380. package/dist/interface/mcp/tools/set-pending-action.d.ts +3 -0
  381. package/dist/interface/mcp/tools/set-pending-action.js +36 -0
  382. package/dist/interface/mcp/tools/set-pending-action.js.map +1 -0
  383. package/dist/interface/mcp/tools/update-cv.d.ts +3 -0
  384. package/dist/interface/mcp/tools/update-cv.js +23 -0
  385. package/dist/interface/mcp/tools/update-cv.js.map +1 -0
  386. package/dist/interface/mcp/tools/update-job-posting.d.ts +3 -0
  387. package/dist/interface/mcp/tools/update-job-posting.js +42 -0
  388. package/dist/interface/mcp/tools/update-job-posting.js.map +1 -0
  389. package/dist/interface/mcp/tools/update-pipeline-status.d.ts +3 -0
  390. package/dist/interface/mcp/tools/update-pipeline-status.js +41 -0
  391. package/dist/interface/mcp/tools/update-pipeline-status.js.map +1 -0
  392. package/dist/interface/mcp/types.d.ts +26 -0
  393. package/dist/interface/mcp/types.js +2 -0
  394. package/dist/interface/mcp/types.js.map +1 -0
  395. package/dist/shared/errors/index.d.ts +32 -0
  396. package/dist/shared/errors/index.js +56 -0
  397. package/dist/shared/errors/index.js.map +1 -0
  398. package/dist/shared/types/index.d.ts +19 -0
  399. package/dist/shared/types/index.js +2 -0
  400. package/dist/shared/types/index.js.map +1 -0
  401. package/dist/shared/utils/chunking.d.ts +3 -0
  402. package/dist/shared/utils/chunking.js +89 -0
  403. package/dist/shared/utils/chunking.js.map +1 -0
  404. package/dist/shared/utils/file-storage.d.ts +8 -0
  405. package/dist/shared/utils/file-storage.js +49 -0
  406. package/dist/shared/utils/file-storage.js.map +1 -0
  407. package/dist/shared/utils/index.d.ts +3 -0
  408. package/dist/shared/utils/index.js +4 -0
  409. package/dist/shared/utils/index.js.map +1 -0
  410. package/dist/shared/utils/text.d.ts +5 -0
  411. package/dist/shared/utils/text.js +21 -0
  412. package/dist/shared/utils/text.js.map +1 -0
  413. package/package.json +72 -0
@@ -0,0 +1,27 @@
1
+ import { nanoid } from 'nanoid';
2
+ export class AddJobPostingUseCase {
3
+ jobPostingRepo;
4
+ constructor(jobPostingRepo) {
5
+ this.jobPostingRepo = jobPostingRepo;
6
+ }
7
+ async execute(input) {
8
+ const now = new Date().toISOString();
9
+ const jobPosting = {
10
+ id: nanoid(),
11
+ title: input.title,
12
+ description: input.description,
13
+ rawText: input.rawText,
14
+ requirements: input.requirements,
15
+ requiredSkills: input.requiredSkills,
16
+ preferredSkills: input.preferredSkills ?? [],
17
+ location: input.location,
18
+ salaryRange: input.salaryRange,
19
+ status: 'open',
20
+ createdAt: now,
21
+ updatedAt: now,
22
+ };
23
+ await this.jobPostingRepo.save(jobPosting);
24
+ return jobPosting;
25
+ }
26
+ }
27
+ //# sourceMappingURL=add-job-posting.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-job-posting.js","sourceRoot":"","sources":["../../../src/application/use-cases/add-job-posting.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAehC,MAAM,OAAO,oBAAoB;IACX;IAApB,YAAoB,cAAqC;QAArC,mBAAc,GAAd,cAAc,CAAuB;IAAG,CAAC;IAE7D,KAAK,CAAC,OAAO,CAAC,KAAyB;QACrC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAErC,MAAM,UAAU,GAAe;YAC7B,EAAE,EAAE,MAAM,EAAE;YACZ,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,cAAc,EAAE,KAAK,CAAC,cAAc;YACpC,eAAe,EAAE,KAAK,CAAC,eAAe,IAAI,EAAE;YAC5C,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,MAAM,EAAE,MAAM;YACd,SAAS,EAAE,GAAG;YACd,SAAS,EAAE,GAAG;SACf,CAAC;QAEF,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC3C,OAAO,UAAU,CAAC;IACpB,CAAC;CACF"}
@@ -0,0 +1,15 @@
1
+ import type { IApplicationRepository } from '../../domain/repositories/application-repository.js';
2
+ import type { IApplicationEventRepository } from '../../domain/repositories/application-event-repository.js';
3
+ import type { ApplicationEvent, ApplicationEventType } from '../../domain/entities/application-event.js';
4
+ export interface AddPipelineNoteInput {
5
+ applicationId: string;
6
+ eventType: ApplicationEventType;
7
+ note: string;
8
+ scheduledAt?: string;
9
+ }
10
+ export declare class AddPipelineNoteUseCase {
11
+ private applicationRepo;
12
+ private eventRepo;
13
+ constructor(applicationRepo: IApplicationRepository, eventRepo: IApplicationEventRepository);
14
+ execute(input: AddPipelineNoteInput): Promise<ApplicationEvent>;
15
+ }
@@ -0,0 +1,34 @@
1
+ import { nanoid } from 'nanoid';
2
+ export class AddPipelineNoteUseCase {
3
+ applicationRepo;
4
+ eventRepo;
5
+ constructor(applicationRepo, eventRepo) {
6
+ this.applicationRepo = applicationRepo;
7
+ this.eventRepo = eventRepo;
8
+ }
9
+ async execute(input) {
10
+ const application = await this.applicationRepo.findById(input.applicationId);
11
+ if (!application) {
12
+ throw new Error(`Application not found: ${input.applicationId}`);
13
+ }
14
+ const now = new Date().toISOString();
15
+ // Append note to application
16
+ const updatedNotes = `${application.notes}\n[${now}] ${input.note}`.trim();
17
+ await this.applicationRepo.update({
18
+ ...application,
19
+ notes: updatedNotes,
20
+ updatedAt: now,
21
+ });
22
+ const event = {
23
+ id: nanoid(),
24
+ applicationId: input.applicationId,
25
+ eventType: input.eventType,
26
+ note: input.note,
27
+ scheduledAt: input.scheduledAt,
28
+ createdAt: now,
29
+ };
30
+ await this.eventRepo.save(event);
31
+ return event;
32
+ }
33
+ }
34
+ //# sourceMappingURL=add-pipeline-note.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-pipeline-note.js","sourceRoot":"","sources":["../../../src/application/use-cases/add-pipeline-note.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAYhC,MAAM,OAAO,sBAAsB;IAEvB;IACA;IAFV,YACU,eAAuC,EACvC,SAAsC;QADtC,oBAAe,GAAf,eAAe,CAAwB;QACvC,cAAS,GAAT,SAAS,CAA6B;IAC7C,CAAC;IAEJ,KAAK,CAAC,OAAO,CAAC,KAA2B;QACvC,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC7E,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,0BAA0B,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;QACnE,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAErC,6BAA6B;QAC7B,MAAM,YAAY,GAAG,GAAG,WAAW,CAAC,KAAK,MAAM,GAAG,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;QAC3E,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;YAChC,GAAG,WAAW;YACd,KAAK,EAAE,YAAY;YACnB,SAAS,EAAE,GAAG;SACf,CAAC,CAAC;QAEH,MAAM,KAAK,GAAqB;YAC9B,EAAE,EAAE,MAAM,EAAE;YACZ,aAAa,EAAE,KAAK,CAAC,aAAa;YAClC,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,SAAS,EAAE,GAAG;SACf,CAAC;QAEF,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEjC,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
@@ -0,0 +1,18 @@
1
+ import type { IApplicationRepository } from '../../domain/repositories/application-repository.js';
2
+ import type { IApplicationEventRepository } from '../../domain/repositories/application-event-repository.js';
3
+ import type { ICandidateRepository } from '../../domain/repositories/candidate-repository.js';
4
+ import type { IJobPostingRepository } from '../../domain/repositories/job-posting-repository.js';
5
+ import type { Application } from '../../domain/entities/application.js';
6
+ export interface AddToPipelineInput {
7
+ jobPostingId: string;
8
+ candidateId: string;
9
+ note?: string;
10
+ }
11
+ export declare class AddToPipelineUseCase {
12
+ private applicationRepo;
13
+ private eventRepo;
14
+ private candidateRepo;
15
+ private jobPostingRepo;
16
+ constructor(applicationRepo: IApplicationRepository, eventRepo: IApplicationEventRepository, candidateRepo: ICandidateRepository, jobPostingRepo: IJobPostingRepository);
17
+ execute(input: AddToPipelineInput): Promise<Application>;
18
+ }
@@ -0,0 +1,54 @@
1
+ import { nanoid } from 'nanoid';
2
+ export class AddToPipelineUseCase {
3
+ applicationRepo;
4
+ eventRepo;
5
+ candidateRepo;
6
+ jobPostingRepo;
7
+ constructor(applicationRepo, eventRepo, candidateRepo, jobPostingRepo) {
8
+ this.applicationRepo = applicationRepo;
9
+ this.eventRepo = eventRepo;
10
+ this.candidateRepo = candidateRepo;
11
+ this.jobPostingRepo = jobPostingRepo;
12
+ }
13
+ async execute(input) {
14
+ // Validate candidate exists
15
+ const candidate = await this.candidateRepo.findById(input.candidateId);
16
+ if (!candidate) {
17
+ throw new Error(`Candidate not found: ${input.candidateId}`);
18
+ }
19
+ // Validate job posting exists
20
+ const jobPosting = await this.jobPostingRepo.findById(input.jobPostingId);
21
+ if (!jobPosting) {
22
+ throw new Error(`Job posting not found: ${input.jobPostingId}`);
23
+ }
24
+ // Check if already in pipeline
25
+ const existing = await this.applicationRepo.findByJobAndCandidate(input.jobPostingId, input.candidateId);
26
+ if (existing) {
27
+ throw new Error(`Candidate "${candidate.name}" is already in pipeline for "${jobPosting.title}" (status: ${existing.status})`);
28
+ }
29
+ const now = new Date().toISOString();
30
+ const applicationId = nanoid();
31
+ const application = {
32
+ id: applicationId,
33
+ jobPostingId: input.jobPostingId,
34
+ candidateId: input.candidateId,
35
+ status: 'new',
36
+ notes: input.note ?? '',
37
+ createdAt: now,
38
+ updatedAt: now,
39
+ };
40
+ await this.applicationRepo.save(application);
41
+ // Log initial event
42
+ const event = {
43
+ id: nanoid(),
44
+ applicationId,
45
+ eventType: 'status_change',
46
+ toStatus: 'new',
47
+ note: input.note ?? 'Added to pipeline',
48
+ createdAt: now,
49
+ };
50
+ await this.eventRepo.save(event);
51
+ return application;
52
+ }
53
+ }
54
+ //# sourceMappingURL=add-to-pipeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-to-pipeline.js","sourceRoot":"","sources":["../../../src/application/use-cases/add-to-pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAchC,MAAM,OAAO,oBAAoB;IAErB;IACA;IACA;IACA;IAJV,YACU,eAAuC,EACvC,SAAsC,EACtC,aAAmC,EACnC,cAAqC;QAHrC,oBAAe,GAAf,eAAe,CAAwB;QACvC,cAAS,GAAT,SAAS,CAA6B;QACtC,kBAAa,GAAb,aAAa,CAAsB;QACnC,mBAAc,GAAd,cAAc,CAAuB;IAC5C,CAAC;IAEJ,KAAK,CAAC,OAAO,CAAC,KAAyB;QACrC,4BAA4B;QAC5B,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACvE,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,wBAAwB,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;QAC/D,CAAC;QAED,8BAA8B;QAC9B,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAC1E,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,0BAA0B,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;QAClE,CAAC;QAED,+BAA+B;QAC/B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,qBAAqB,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;QACzG,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,cAAc,SAAS,CAAC,IAAI,iCAAiC,UAAU,CAAC,KAAK,cAAc,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QACjI,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC;QAE/B,MAAM,WAAW,GAAgB;YAC/B,EAAE,EAAE,aAAa;YACjB,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,MAAM,EAAE,KAAK;YACb,KAAK,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE;YACvB,SAAS,EAAE,GAAG;YACd,SAAS,EAAE,GAAG;SACf,CAAC;QAEF,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAE7C,oBAAoB;QACpB,MAAM,KAAK,GAAqB;YAC9B,EAAE,EAAE,MAAM,EAAE;YACZ,aAAa;YACb,SAAS,EAAE,eAAe;YAC1B,QAAQ,EAAE,KAAK;YACf,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,mBAAmB;YACvC,SAAS,EAAE,GAAG;SACf,CAAC;QAEF,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEjC,OAAO,WAAW,CAAC;IACrB,CAAC;CACF"}
@@ -0,0 +1,14 @@
1
+ import type { Candidate } from '../../domain/entities/candidate.js';
2
+ import { AddCvUseCase } from './add-cv.js';
3
+ export interface BulkAddResult {
4
+ succeeded: Candidate[];
5
+ failed: {
6
+ file: string;
7
+ error: string;
8
+ }[];
9
+ }
10
+ export declare class BulkAddCvsUseCase {
11
+ private addCvUseCase;
12
+ constructor(addCvUseCase: AddCvUseCase);
13
+ execute(directoryPath: string): Promise<BulkAddResult>;
14
+ }
@@ -0,0 +1,32 @@
1
+ import { readdir } from 'node:fs/promises';
2
+ import { join } from 'node:path';
3
+ export class BulkAddCvsUseCase {
4
+ addCvUseCase;
5
+ constructor(addCvUseCase) {
6
+ this.addCvUseCase = addCvUseCase;
7
+ }
8
+ async execute(directoryPath) {
9
+ const entries = await readdir(directoryPath);
10
+ const cvFiles = entries.filter((f) => {
11
+ const ext = f.toLowerCase().split('.').pop();
12
+ return ext === 'pdf' || ext === 'docx';
13
+ });
14
+ const succeeded = [];
15
+ const failed = [];
16
+ for (const file of cvFiles) {
17
+ const filePath = join(directoryPath, file);
18
+ try {
19
+ const candidate = await this.addCvUseCase.execute(filePath);
20
+ succeeded.push(candidate);
21
+ }
22
+ catch (error) {
23
+ failed.push({
24
+ file,
25
+ error: error instanceof Error ? error.message : String(error),
26
+ });
27
+ }
28
+ }
29
+ return { succeeded, failed };
30
+ }
31
+ }
32
+ //# sourceMappingURL=bulk-add-cvs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bulk-add-cvs.js","sourceRoot":"","sources":["../../../src/application/use-cases/bulk-add-cvs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AASjC,MAAM,OAAO,iBAAiB;IACR;IAApB,YAAoB,YAA0B;QAA1B,iBAAY,GAAZ,YAAY,CAAc;IAAG,CAAC;IAElD,KAAK,CAAC,OAAO,CAAC,aAAqB;QACjC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;YACnC,MAAM,GAAG,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;YAC7C,OAAO,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,MAAM,CAAC;QACzC,CAAC,CAAC,CAAC;QAEH,MAAM,SAAS,GAAgB,EAAE,CAAC;QAClC,MAAM,MAAM,GAAsC,EAAE,CAAC;QAErD,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;YAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;YAC3C,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAC5D,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC5B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI;oBACJ,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;iBAC9D,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;IAC/B,CAAC;CACF"}
@@ -0,0 +1,10 @@
1
+ import type { ICandidateRepository } from '../../domain/repositories/candidate-repository.js';
2
+ import type { IChunkRepository } from '../../domain/repositories/chunk-repository.js';
3
+ import type { IVersionRepository } from '../../domain/repositories/version-repository.js';
4
+ export declare class DeleteCvUseCase {
5
+ private candidateRepo;
6
+ private chunkRepo;
7
+ private versionRepo;
8
+ constructor(candidateRepo: ICandidateRepository, chunkRepo: IChunkRepository, versionRepo: IVersionRepository);
9
+ execute(candidateId: string): Promise<void>;
10
+ }
@@ -0,0 +1,21 @@
1
+ import { CandidateNotFoundError } from '../../shared/errors/index.js';
2
+ export class DeleteCvUseCase {
3
+ candidateRepo;
4
+ chunkRepo;
5
+ versionRepo;
6
+ constructor(candidateRepo, chunkRepo, versionRepo) {
7
+ this.candidateRepo = candidateRepo;
8
+ this.chunkRepo = chunkRepo;
9
+ this.versionRepo = versionRepo;
10
+ }
11
+ async execute(candidateId) {
12
+ const candidate = await this.candidateRepo.findById(candidateId);
13
+ if (!candidate) {
14
+ throw new CandidateNotFoundError(candidateId);
15
+ }
16
+ await this.chunkRepo.deleteByCandidateId(candidateId);
17
+ await this.versionRepo.deleteByCandidateId(candidateId);
18
+ await this.candidateRepo.delete(candidateId);
19
+ }
20
+ }
21
+ //# sourceMappingURL=delete-cv.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete-cv.js","sourceRoot":"","sources":["../../../src/application/use-cases/delete-cv.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAEtE,MAAM,OAAO,eAAe;IAEhB;IACA;IACA;IAHV,YACU,aAAmC,EACnC,SAA2B,EAC3B,WAA+B;QAF/B,kBAAa,GAAb,aAAa,CAAsB;QACnC,cAAS,GAAT,SAAS,CAAkB;QAC3B,gBAAW,GAAX,WAAW,CAAoB;IACtC,CAAC;IAEJ,KAAK,CAAC,OAAO,CAAC,WAAmB;QAC/B,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QACjE,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,sBAAsB,CAAC,WAAW,CAAC,CAAC;QAChD,CAAC;QAED,MAAM,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;QACtD,MAAM,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;QACxD,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAC/C,CAAC;CACF"}
@@ -0,0 +1,9 @@
1
+ import type { ICandidateRepository } from '../../domain/repositories/candidate-repository.js';
2
+ import type { IExportService } from '../ports/export-service.js';
3
+ import type { ExportFormat } from '../../shared/types/index.js';
4
+ export declare class ExportResultsUseCase {
5
+ private candidateRepo;
6
+ private exportService;
7
+ constructor(candidateRepo: ICandidateRepository, exportService: IExportService);
8
+ execute(candidateIds: string[], format: ExportFormat): Promise<string>;
9
+ }
@@ -0,0 +1,21 @@
1
+ import { CandidateNotFoundError } from '../../shared/errors/index.js';
2
+ export class ExportResultsUseCase {
3
+ candidateRepo;
4
+ exportService;
5
+ constructor(candidateRepo, exportService) {
6
+ this.candidateRepo = candidateRepo;
7
+ this.exportService = exportService;
8
+ }
9
+ async execute(candidateIds, format) {
10
+ const candidates = [];
11
+ for (const id of candidateIds) {
12
+ const candidate = await this.candidateRepo.findById(id);
13
+ if (!candidate) {
14
+ throw new CandidateNotFoundError(id);
15
+ }
16
+ candidates.push(candidate);
17
+ }
18
+ return this.exportService.export(candidates, format);
19
+ }
20
+ }
21
+ //# sourceMappingURL=export-results.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export-results.js","sourceRoot":"","sources":["../../../src/application/use-cases/export-results.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAEtE,MAAM,OAAO,oBAAoB;IAErB;IACA;IAFV,YACU,aAAmC,EACnC,aAA6B;QAD7B,kBAAa,GAAb,aAAa,CAAsB;QACnC,kBAAa,GAAb,aAAa,CAAgB;IACpC,CAAC;IAEJ,KAAK,CAAC,OAAO,CAAC,YAAsB,EAAE,MAAoB;QACxD,MAAM,UAAU,GAAgB,EAAE,CAAC;QAEnC,KAAK,MAAM,EAAE,IAAI,YAAY,EAAE,CAAC;YAC9B,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YACxD,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,MAAM,IAAI,sBAAsB,CAAC,EAAE,CAAC,CAAC;YACvC,CAAC;YACD,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7B,CAAC;QAED,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACvD,CAAC;CACF"}
@@ -0,0 +1,9 @@
1
+ import type { ICandidateRepository } from '../../domain/repositories/candidate-repository.js';
2
+ import type { FilterInput } from '../dto/filter-input.js';
3
+ import type { CandidateSummaryDto } from '../dto/candidate-summary.js';
4
+ export declare class FilterCandidatesUseCase {
5
+ private candidateRepo;
6
+ constructor(candidateRepo: ICandidateRepository);
7
+ execute(input: FilterInput): Promise<CandidateSummaryDto[]>;
8
+ private toSummary;
9
+ }
@@ -0,0 +1,51 @@
1
+ import { escapeFilterValue } from '../../shared/utils/text.js';
2
+ export class FilterCandidatesUseCase {
3
+ candidateRepo;
4
+ constructor(candidateRepo) {
5
+ this.candidateRepo = candidateRepo;
6
+ }
7
+ async execute(input) {
8
+ const conditions = [];
9
+ if (input.skills && input.skills.length > 0) {
10
+ for (const skill of input.skills) {
11
+ conditions.push(`skills LIKE '%${escapeFilterValue(skill)}%'`);
12
+ }
13
+ }
14
+ if (input.location) {
15
+ conditions.push(`location LIKE '%${escapeFilterValue(input.location)}%'`);
16
+ }
17
+ if (input.minExperienceYears !== undefined) {
18
+ conditions.push(`experience_years >= ${input.minExperienceYears}`);
19
+ }
20
+ if (input.languages && input.languages.length > 0) {
21
+ for (const lang of input.languages) {
22
+ conditions.push(`languages LIKE '%${escapeFilterValue(lang)}%'`);
23
+ }
24
+ }
25
+ if (input.tags && input.tags.length > 0) {
26
+ for (const tag of input.tags) {
27
+ conditions.push(`tags LIKE '%${escapeFilterValue(tag)}%'`);
28
+ }
29
+ }
30
+ if (conditions.length === 0) {
31
+ const all = await this.candidateRepo.findAll();
32
+ return all.map(this.toSummary);
33
+ }
34
+ const whereClause = conditions.join(' AND ');
35
+ const candidates = await this.candidateRepo.filter(whereClause);
36
+ return candidates.map(this.toSummary);
37
+ }
38
+ toSummary(c) {
39
+ return {
40
+ id: c.id,
41
+ name: c.name,
42
+ email: c.contact.email,
43
+ location: c.contact.location,
44
+ skills: c.skills,
45
+ experienceYears: c.experienceYears,
46
+ tags: c.tags,
47
+ createdAt: c.createdAt,
48
+ };
49
+ }
50
+ }
51
+ //# sourceMappingURL=filter-candidates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter-candidates.js","sourceRoot":"","sources":["../../../src/application/use-cases/filter-candidates.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAE/D,MAAM,OAAO,uBAAuB;IACd;IAApB,YAAoB,aAAmC;QAAnC,kBAAa,GAAb,aAAa,CAAsB;IAAG,CAAC;IAE3D,KAAK,CAAC,OAAO,CAAC,KAAkB;QAC9B,MAAM,UAAU,GAAa,EAAE,CAAC;QAEhC,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5C,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBACjC,UAAU,CAAC,IAAI,CAAC,iBAAiB,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;QAED,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACnB,UAAU,CAAC,IAAI,CAAC,mBAAmB,iBAAiB,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC5E,CAAC;QAED,IAAI,KAAK,CAAC,kBAAkB,KAAK,SAAS,EAAE,CAAC;YAC3C,UAAU,CAAC,IAAI,CAAC,uBAAuB,KAAK,CAAC,kBAAkB,EAAE,CAAC,CAAC;QACrE,CAAC;QAED,IAAI,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClD,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;gBACnC,UAAU,CAAC,IAAI,CAAC,oBAAoB,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnE,CAAC;QACH,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxC,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;gBAC7B,UAAU,CAAC,IAAI,CAAC,eAAe,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;QAED,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;YAC/C,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACjC,CAAC;QAED,MAAM,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7C,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAChE,OAAO,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACxC,CAAC;IAEO,SAAS,CAAC,CAA8J;QAC9K,OAAO;YACL,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK;YACtB,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ;YAC5B,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,eAAe,EAAE,CAAC,CAAC,eAAe;YAClC,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,SAAS,EAAE,CAAC,CAAC,SAAS;SACvB,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,25 @@
1
+ import type { IApplicationRepository } from '../../domain/repositories/application-repository.js';
2
+ import type { IApplicationEventRepository } from '../../domain/repositories/application-event-repository.js';
3
+ import type { ICandidateRepository } from '../../domain/repositories/candidate-repository.js';
4
+ import type { IJobPostingRepository } from '../../domain/repositories/job-posting-repository.js';
5
+ import type { Application } from '../../domain/entities/application.js';
6
+ import type { ApplicationEvent } from '../../domain/entities/application-event.js';
7
+ export interface CandidateApplicationHistory {
8
+ application: Application;
9
+ jobTitle: string;
10
+ events: ApplicationEvent[];
11
+ }
12
+ export interface CandidateHistoryResult {
13
+ candidateId: string;
14
+ candidateName: string;
15
+ applications: CandidateApplicationHistory[];
16
+ totalApplications: number;
17
+ }
18
+ export declare class GetCandidateHistoryUseCase {
19
+ private applicationRepo;
20
+ private eventRepo;
21
+ private candidateRepo;
22
+ private jobPostingRepo;
23
+ constructor(applicationRepo: IApplicationRepository, eventRepo: IApplicationEventRepository, candidateRepo: ICandidateRepository, jobPostingRepo: IJobPostingRepository);
24
+ execute(candidateId: string): Promise<CandidateHistoryResult>;
25
+ }
@@ -0,0 +1,36 @@
1
+ export class GetCandidateHistoryUseCase {
2
+ applicationRepo;
3
+ eventRepo;
4
+ candidateRepo;
5
+ jobPostingRepo;
6
+ constructor(applicationRepo, eventRepo, candidateRepo, jobPostingRepo) {
7
+ this.applicationRepo = applicationRepo;
8
+ this.eventRepo = eventRepo;
9
+ this.candidateRepo = candidateRepo;
10
+ this.jobPostingRepo = jobPostingRepo;
11
+ }
12
+ async execute(candidateId) {
13
+ const candidate = await this.candidateRepo.findById(candidateId);
14
+ if (!candidate) {
15
+ throw new Error(`Candidate not found: ${candidateId}`);
16
+ }
17
+ const applications = await this.applicationRepo.findByCandidateId(candidateId);
18
+ const appHistories = [];
19
+ for (const app of applications) {
20
+ const jobPosting = await this.jobPostingRepo.findById(app.jobPostingId);
21
+ const events = await this.eventRepo.findByApplicationId(app.id);
22
+ appHistories.push({
23
+ application: app,
24
+ jobTitle: jobPosting?.title ?? 'Unknown',
25
+ events,
26
+ });
27
+ }
28
+ return {
29
+ candidateId,
30
+ candidateName: candidate.name,
31
+ applications: appHistories,
32
+ totalApplications: applications.length,
33
+ };
34
+ }
35
+ }
36
+ //# sourceMappingURL=get-candidate-history.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-candidate-history.js","sourceRoot":"","sources":["../../../src/application/use-cases/get-candidate-history.ts"],"names":[],"mappings":"AAoBA,MAAM,OAAO,0BAA0B;IAE3B;IACA;IACA;IACA;IAJV,YACU,eAAuC,EACvC,SAAsC,EACtC,aAAmC,EACnC,cAAqC;QAHrC,oBAAe,GAAf,eAAe,CAAwB;QACvC,cAAS,GAAT,SAAS,CAA6B;QACtC,kBAAa,GAAb,aAAa,CAAsB;QACnC,mBAAc,GAAd,cAAc,CAAuB;IAC5C,CAAC;IAEJ,KAAK,CAAC,OAAO,CAAC,WAAmB;QAC/B,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QACjE,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,wBAAwB,WAAW,EAAE,CAAC,CAAC;QACzD,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;QAE/E,MAAM,YAAY,GAAkC,EAAE,CAAC;QAEvD,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;YAC/B,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YACxE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAEhE,YAAY,CAAC,IAAI,CAAC;gBAChB,WAAW,EAAE,GAAG;gBAChB,QAAQ,EAAE,UAAU,EAAE,KAAK,IAAI,SAAS;gBACxC,MAAM;aACP,CAAC,CAAC;QACL,CAAC;QAED,OAAO;YACL,WAAW;YACX,aAAa,EAAE,SAAS,CAAC,IAAI;YAC7B,YAAY,EAAE,YAAY;YAC1B,iBAAiB,EAAE,YAAY,CAAC,MAAM;SACvC,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,15 @@
1
+ import type { IChunkRepository } from '../../domain/repositories/chunk-repository.js';
2
+ import type { SectionType } from '../../shared/types/index.js';
3
+ export interface ChunkDto {
4
+ id: string;
5
+ candidateId: string;
6
+ sectionType: string;
7
+ content: string;
8
+ metadata: Record<string, unknown>;
9
+ createdAt: string;
10
+ }
11
+ export declare class GetCvChunksUseCase {
12
+ private chunkRepo;
13
+ constructor(chunkRepo: IChunkRepository);
14
+ execute(candidateId: string, sectionType?: SectionType): Promise<ChunkDto[]>;
15
+ }
@@ -0,0 +1,18 @@
1
+ export class GetCvChunksUseCase {
2
+ chunkRepo;
3
+ constructor(chunkRepo) {
4
+ this.chunkRepo = chunkRepo;
5
+ }
6
+ async execute(candidateId, sectionType) {
7
+ const chunks = await this.chunkRepo.findByCandidateId(candidateId, sectionType);
8
+ return chunks.map((c) => ({
9
+ id: c.id,
10
+ candidateId: c.candidateId,
11
+ sectionType: c.sectionType,
12
+ content: c.content,
13
+ metadata: c.metadata,
14
+ createdAt: c.createdAt,
15
+ }));
16
+ }
17
+ }
18
+ //# sourceMappingURL=get-cv-chunks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-cv-chunks.js","sourceRoot":"","sources":["../../../src/application/use-cases/get-cv-chunks.ts"],"names":[],"mappings":"AAYA,MAAM,OAAO,kBAAkB;IACT;IAApB,YAAoB,SAA2B;QAA3B,cAAS,GAAT,SAAS,CAAkB;IAAG,CAAC;IAEnD,KAAK,CAAC,OAAO,CAAC,WAAmB,EAAE,WAAyB;QAC1D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QAChF,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACxB,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,SAAS,EAAE,CAAC,CAAC,SAAS;SACvB,CAAC,CAAC,CAAC;IACN,CAAC;CACF"}
@@ -0,0 +1,7 @@
1
+ import type { ICandidateRepository } from '../../domain/repositories/candidate-repository.js';
2
+ import type { Candidate } from '../../domain/entities/candidate.js';
3
+ export declare class GetCvDetailUseCase {
4
+ private candidateRepo;
5
+ constructor(candidateRepo: ICandidateRepository);
6
+ execute(candidateId: string): Promise<Candidate>;
7
+ }
@@ -0,0 +1,15 @@
1
+ import { CandidateNotFoundError } from '../../shared/errors/index.js';
2
+ export class GetCvDetailUseCase {
3
+ candidateRepo;
4
+ constructor(candidateRepo) {
5
+ this.candidateRepo = candidateRepo;
6
+ }
7
+ async execute(candidateId) {
8
+ const candidate = await this.candidateRepo.findById(candidateId);
9
+ if (!candidate) {
10
+ throw new CandidateNotFoundError(candidateId);
11
+ }
12
+ return candidate;
13
+ }
14
+ }
15
+ //# sourceMappingURL=get-cv-detail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-cv-detail.js","sourceRoot":"","sources":["../../../src/application/use-cases/get-cv-detail.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAEtE,MAAM,OAAO,kBAAkB;IACT;IAApB,YAAoB,aAAmC;QAAnC,kBAAa,GAAb,aAAa,CAAsB;IAAG,CAAC;IAE3D,KAAK,CAAC,OAAO,CAAC,WAAmB;QAC/B,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QACjE,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,sBAAsB,CAAC,WAAW,CAAC,CAAC;QAChD,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;CACF"}
@@ -0,0 +1,9 @@
1
+ import type { ICandidateRepository } from '../../domain/repositories/candidate-repository.js';
2
+ import type { IVersionRepository } from '../../domain/repositories/version-repository.js';
3
+ import type { CvVersion } from '../../domain/entities/cv-version.js';
4
+ export declare class GetCvVersionsUseCase {
5
+ private candidateRepo;
6
+ private versionRepo;
7
+ constructor(candidateRepo: ICandidateRepository, versionRepo: IVersionRepository);
8
+ execute(candidateId: string): Promise<CvVersion[]>;
9
+ }
@@ -0,0 +1,18 @@
1
+ import { CandidateNotFoundError } from '../../shared/errors/index.js';
2
+ export class GetCvVersionsUseCase {
3
+ candidateRepo;
4
+ versionRepo;
5
+ constructor(candidateRepo, versionRepo) {
6
+ this.candidateRepo = candidateRepo;
7
+ this.versionRepo = versionRepo;
8
+ }
9
+ async execute(candidateId) {
10
+ const candidate = await this.candidateRepo.findById(candidateId);
11
+ if (!candidate) {
12
+ throw new CandidateNotFoundError(candidateId);
13
+ }
14
+ const versions = await this.versionRepo.findByCandidateId(candidateId);
15
+ return versions.sort((a, b) => b.version - a.version);
16
+ }
17
+ }
18
+ //# sourceMappingURL=get-cv-versions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-cv-versions.js","sourceRoot":"","sources":["../../../src/application/use-cases/get-cv-versions.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAEtE,MAAM,OAAO,oBAAoB;IAErB;IACA;IAFV,YACU,aAAmC,EACnC,WAA+B;QAD/B,kBAAa,GAAb,aAAa,CAAsB;QACnC,gBAAW,GAAX,WAAW,CAAoB;IACtC,CAAC;IAEJ,KAAK,CAAC,OAAO,CAAC,WAAmB;QAC/B,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QACjE,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,sBAAsB,CAAC,WAAW,CAAC,CAAC;QAChD,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;QACvE,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;IACxD,CAAC;CACF"}
@@ -0,0 +1,23 @@
1
+ import type { IApplicationRepository } from '../../domain/repositories/application-repository.js';
2
+ import type { ICandidateRepository } from '../../domain/repositories/candidate-repository.js';
3
+ import type { IJobPostingRepository } from '../../domain/repositories/job-posting-repository.js';
4
+ import type { Application } from '../../domain/entities/application.js';
5
+ export interface PendingActionEntry {
6
+ application: Application;
7
+ candidateName: string;
8
+ jobTitle: string;
9
+ isOverdue: boolean;
10
+ daysUntilDue: number | null;
11
+ }
12
+ export interface PendingActionsResult {
13
+ overdue: PendingActionEntry[];
14
+ upcoming: PendingActionEntry[];
15
+ total: number;
16
+ }
17
+ export declare class GetPendingActionsUseCase {
18
+ private applicationRepo;
19
+ private candidateRepo;
20
+ private jobPostingRepo;
21
+ constructor(applicationRepo: IApplicationRepository, candidateRepo: ICandidateRepository, jobPostingRepo: IJobPostingRepository);
22
+ execute(): Promise<PendingActionsResult>;
23
+ }
@@ -0,0 +1,50 @@
1
+ export class GetPendingActionsUseCase {
2
+ applicationRepo;
3
+ candidateRepo;
4
+ jobPostingRepo;
5
+ constructor(applicationRepo, candidateRepo, jobPostingRepo) {
6
+ this.applicationRepo = applicationRepo;
7
+ this.candidateRepo = candidateRepo;
8
+ this.jobPostingRepo = jobPostingRepo;
9
+ }
10
+ async execute() {
11
+ const applications = await this.applicationRepo.findPendingActions();
12
+ const now = new Date();
13
+ const overdue = [];
14
+ const upcoming = [];
15
+ for (const app of applications) {
16
+ const candidate = await this.candidateRepo.findById(app.candidateId);
17
+ const jobPosting = await this.jobPostingRepo.findById(app.jobPostingId);
18
+ let isOverdue = false;
19
+ let daysUntilDue = null;
20
+ if (app.pendingActionDue) {
21
+ const dueDate = new Date(app.pendingActionDue);
22
+ const diffMs = dueDate.getTime() - now.getTime();
23
+ daysUntilDue = Math.ceil(diffMs / (1000 * 60 * 60 * 24));
24
+ isOverdue = daysUntilDue < 0;
25
+ }
26
+ const entry = {
27
+ application: app,
28
+ candidateName: candidate?.name ?? 'Unknown',
29
+ jobTitle: jobPosting?.title ?? 'Unknown',
30
+ isOverdue,
31
+ daysUntilDue,
32
+ };
33
+ if (isOverdue) {
34
+ overdue.push(entry);
35
+ }
36
+ else {
37
+ upcoming.push(entry);
38
+ }
39
+ }
40
+ // Sort overdue by most overdue first, upcoming by soonest due first
41
+ overdue.sort((a, b) => (a.daysUntilDue ?? 0) - (b.daysUntilDue ?? 0));
42
+ upcoming.sort((a, b) => (a.daysUntilDue ?? 999) - (b.daysUntilDue ?? 999));
43
+ return {
44
+ overdue,
45
+ upcoming,
46
+ total: overdue.length + upcoming.length,
47
+ };
48
+ }
49
+ }
50
+ //# sourceMappingURL=get-pending-actions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-pending-actions.js","sourceRoot":"","sources":["../../../src/application/use-cases/get-pending-actions.ts"],"names":[],"mappings":"AAmBA,MAAM,OAAO,wBAAwB;IAEzB;IACA;IACA;IAHV,YACU,eAAuC,EACvC,aAAmC,EACnC,cAAqC;QAFrC,oBAAe,GAAf,eAAe,CAAwB;QACvC,kBAAa,GAAb,aAAa,CAAsB;QACnC,mBAAc,GAAd,cAAc,CAAuB;IAC5C,CAAC;IAEJ,KAAK,CAAC,OAAO;QACX,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,kBAAkB,EAAE,CAAC;QAErE,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,OAAO,GAAyB,EAAE,CAAC;QACzC,MAAM,QAAQ,GAAyB,EAAE,CAAC;QAE1C,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;YAC/B,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YACrE,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAExE,IAAI,SAAS,GAAG,KAAK,CAAC;YACtB,IAAI,YAAY,GAAkB,IAAI,CAAC;YAEvC,IAAI,GAAG,CAAC,gBAAgB,EAAE,CAAC;gBACzB,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;gBAC/C,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC;gBACjD,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;gBACzD,SAAS,GAAG,YAAY,GAAG,CAAC,CAAC;YAC/B,CAAC;YAED,MAAM,KAAK,GAAuB;gBAChC,WAAW,EAAE,GAAG;gBAChB,aAAa,EAAE,SAAS,EAAE,IAAI,IAAI,SAAS;gBAC3C,QAAQ,EAAE,UAAU,EAAE,KAAK,IAAI,SAAS;gBACxC,SAAS;gBACT,YAAY;aACb,CAAC;YAEF,IAAI,SAAS,EAAE,CAAC;gBACd,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACtB,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;QAED,oEAAoE;QACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC;QACtE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,IAAI,GAAG,CAAC,CAAC,CAAC;QAE3E,OAAO;YACL,OAAO;YACP,QAAQ;YACR,KAAK,EAAE,OAAO,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM;SACxC,CAAC;IACJ,CAAC;CACF"}