@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.
- package/README.md +261 -0
- package/dist/application/dto/candidate-summary.d.ts +10 -0
- package/dist/application/dto/candidate-summary.js +2 -0
- package/dist/application/dto/candidate-summary.js.map +1 -0
- package/dist/application/dto/extracted-cv.d.ts +46 -0
- package/dist/application/dto/extracted-cv.js +2 -0
- package/dist/application/dto/extracted-cv.js.map +1 -0
- package/dist/application/dto/filter-input.d.ts +7 -0
- package/dist/application/dto/filter-input.js +2 -0
- package/dist/application/dto/filter-input.js.map +1 -0
- package/dist/application/dto/index.d.ts +5 -0
- package/dist/application/dto/index.js +2 -0
- package/dist/application/dto/index.js.map +1 -0
- package/dist/application/dto/search-results.d.ts +13 -0
- package/dist/application/dto/search-results.js +2 -0
- package/dist/application/dto/search-results.js.map +1 -0
- package/dist/application/dto/stats.d.ts +10 -0
- package/dist/application/dto/stats.js +2 -0
- package/dist/application/dto/stats.js.map +1 -0
- package/dist/application/ports/document-parser.d.ts +8 -0
- package/dist/application/ports/document-parser.js +2 -0
- package/dist/application/ports/document-parser.js.map +1 -0
- package/dist/application/ports/embedding-service.d.ts +4 -0
- package/dist/application/ports/embedding-service.js +2 -0
- package/dist/application/ports/embedding-service.js.map +1 -0
- package/dist/application/ports/export-service.d.ts +5 -0
- package/dist/application/ports/export-service.js +2 -0
- package/dist/application/ports/export-service.js.map +1 -0
- package/dist/application/ports/index.d.ts +4 -0
- package/dist/application/ports/index.js +2 -0
- package/dist/application/ports/index.js.map +1 -0
- package/dist/application/ports/structured-extractor.d.ts +4 -0
- package/dist/application/ports/structured-extractor.js +2 -0
- package/dist/application/ports/structured-extractor.js.map +1 -0
- package/dist/application/use-cases/add-cv.d.ts +16 -0
- package/dist/application/use-cases/add-cv.js +113 -0
- package/dist/application/use-cases/add-cv.js.map +1 -0
- package/dist/application/use-cases/add-job-posting.d.ts +17 -0
- package/dist/application/use-cases/add-job-posting.js +27 -0
- package/dist/application/use-cases/add-job-posting.js.map +1 -0
- package/dist/application/use-cases/add-pipeline-note.d.ts +15 -0
- package/dist/application/use-cases/add-pipeline-note.js +34 -0
- package/dist/application/use-cases/add-pipeline-note.js.map +1 -0
- package/dist/application/use-cases/add-to-pipeline.d.ts +18 -0
- package/dist/application/use-cases/add-to-pipeline.js +54 -0
- package/dist/application/use-cases/add-to-pipeline.js.map +1 -0
- package/dist/application/use-cases/bulk-add-cvs.d.ts +14 -0
- package/dist/application/use-cases/bulk-add-cvs.js +32 -0
- package/dist/application/use-cases/bulk-add-cvs.js.map +1 -0
- package/dist/application/use-cases/delete-cv.d.ts +10 -0
- package/dist/application/use-cases/delete-cv.js +21 -0
- package/dist/application/use-cases/delete-cv.js.map +1 -0
- package/dist/application/use-cases/export-results.d.ts +9 -0
- package/dist/application/use-cases/export-results.js +21 -0
- package/dist/application/use-cases/export-results.js.map +1 -0
- package/dist/application/use-cases/filter-candidates.d.ts +9 -0
- package/dist/application/use-cases/filter-candidates.js +51 -0
- package/dist/application/use-cases/filter-candidates.js.map +1 -0
- package/dist/application/use-cases/get-candidate-history.d.ts +25 -0
- package/dist/application/use-cases/get-candidate-history.js +36 -0
- package/dist/application/use-cases/get-candidate-history.js.map +1 -0
- package/dist/application/use-cases/get-cv-chunks.d.ts +15 -0
- package/dist/application/use-cases/get-cv-chunks.js +18 -0
- package/dist/application/use-cases/get-cv-chunks.js.map +1 -0
- package/dist/application/use-cases/get-cv-detail.d.ts +7 -0
- package/dist/application/use-cases/get-cv-detail.js +15 -0
- package/dist/application/use-cases/get-cv-detail.js.map +1 -0
- package/dist/application/use-cases/get-cv-versions.d.ts +9 -0
- package/dist/application/use-cases/get-cv-versions.js +18 -0
- package/dist/application/use-cases/get-cv-versions.js.map +1 -0
- package/dist/application/use-cases/get-pending-actions.d.ts +23 -0
- package/dist/application/use-cases/get-pending-actions.js +50 -0
- package/dist/application/use-cases/get-pending-actions.js.map +1 -0
- package/dist/application/use-cases/get-pipeline.d.ts +27 -0
- package/dist/application/use-cases/get-pipeline.js +40 -0
- package/dist/application/use-cases/get-pipeline.js.map +1 -0
- package/dist/application/use-cases/get-stats.d.ts +13 -0
- package/dist/application/use-cases/get-stats.js +50 -0
- package/dist/application/use-cases/get-stats.js.map +1 -0
- package/dist/application/use-cases/index.d.ts +23 -0
- package/dist/application/use-cases/index.js +24 -0
- package/dist/application/use-cases/index.js.map +1 -0
- package/dist/application/use-cases/list-cvs.d.ts +8 -0
- package/dist/application/use-cases/list-cvs.js +20 -0
- package/dist/application/use-cases/list-cvs.js.map +1 -0
- package/dist/application/use-cases/list-job-postings.d.ts +7 -0
- package/dist/application/use-cases/list-job-postings.js +10 -0
- package/dist/application/use-cases/list-job-postings.js.map +1 -0
- package/dist/application/use-cases/manage-tags.d.ts +7 -0
- package/dist/application/use-cases/manage-tags.js +36 -0
- package/dist/application/use-cases/manage-tags.js.map +1 -0
- package/dist/application/use-cases/match-candidates.d.ts +27 -0
- package/dist/application/use-cases/match-candidates.js +92 -0
- package/dist/application/use-cases/match-candidates.js.map +1 -0
- package/dist/application/use-cases/semantic-search.d.ts +11 -0
- package/dist/application/use-cases/semantic-search.js +40 -0
- package/dist/application/use-cases/semantic-search.js.map +1 -0
- package/dist/application/use-cases/set-pending-action.d.ts +13 -0
- package/dist/application/use-cases/set-pending-action.js +24 -0
- package/dist/application/use-cases/set-pending-action.js.map +1 -0
- package/dist/application/use-cases/update-cv.d.ts +17 -0
- package/dist/application/use-cases/update-cv.js +103 -0
- package/dist/application/use-cases/update-cv.js.map +1 -0
- package/dist/application/use-cases/update-job-posting.d.ts +19 -0
- package/dist/application/use-cases/update-job-posting.js +28 -0
- package/dist/application/use-cases/update-job-posting.js.map +1 -0
- package/dist/application/use-cases/update-pipeline-status.d.ts +14 -0
- package/dist/application/use-cases/update-pipeline-status.js +38 -0
- package/dist/application/use-cases/update-pipeline-status.js.map +1 -0
- package/dist/domain/entities/application-event.d.ts +11 -0
- package/dist/domain/entities/application-event.js +2 -0
- package/dist/domain/entities/application-event.js.map +1 -0
- package/dist/domain/entities/application.d.ts +13 -0
- package/dist/domain/entities/application.js +2 -0
- package/dist/domain/entities/application.js.map +1 -0
- package/dist/domain/entities/candidate.d.ts +26 -0
- package/dist/domain/entities/candidate.js +2 -0
- package/dist/domain/entities/candidate.js.map +1 -0
- package/dist/domain/entities/cv-chunk.d.ts +10 -0
- package/dist/domain/entities/cv-chunk.js +2 -0
- package/dist/domain/entities/cv-chunk.js.map +1 -0
- package/dist/domain/entities/cv-version.d.ts +7 -0
- package/dist/domain/entities/cv-version.js +2 -0
- package/dist/domain/entities/cv-version.js.map +1 -0
- package/dist/domain/entities/index.d.ts +6 -0
- package/dist/domain/entities/index.js +2 -0
- package/dist/domain/entities/index.js.map +1 -0
- package/dist/domain/entities/job-posting.d.ts +14 -0
- package/dist/domain/entities/job-posting.js +2 -0
- package/dist/domain/entities/job-posting.js.map +1 -0
- package/dist/domain/repositories/application-event-repository.d.ts +7 -0
- package/dist/domain/repositories/application-event-repository.js +2 -0
- package/dist/domain/repositories/application-event-repository.js.map +1 -0
- package/dist/domain/repositories/application-repository.d.ts +12 -0
- package/dist/domain/repositories/application-repository.js +2 -0
- package/dist/domain/repositories/application-repository.js.map +1 -0
- package/dist/domain/repositories/candidate-repository.d.ts +12 -0
- package/dist/domain/repositories/candidate-repository.js +2 -0
- package/dist/domain/repositories/candidate-repository.js.map +1 -0
- package/dist/domain/repositories/chunk-repository.d.ts +13 -0
- package/dist/domain/repositories/chunk-repository.js +2 -0
- package/dist/domain/repositories/chunk-repository.js.map +1 -0
- package/dist/domain/repositories/index.d.ts +6 -0
- package/dist/domain/repositories/index.js +2 -0
- package/dist/domain/repositories/index.js.map +1 -0
- package/dist/domain/repositories/job-posting-repository.d.ts +9 -0
- package/dist/domain/repositories/job-posting-repository.js +2 -0
- package/dist/domain/repositories/job-posting-repository.js.map +1 -0
- package/dist/domain/repositories/version-repository.d.ts +6 -0
- package/dist/domain/repositories/version-repository.js +2 -0
- package/dist/domain/repositories/version-repository.js.map +1 -0
- package/dist/domain/value-objects/certification.d.ts +5 -0
- package/dist/domain/value-objects/certification.js +2 -0
- package/dist/domain/value-objects/certification.js.map +1 -0
- package/dist/domain/value-objects/contact-info.d.ts +5 -0
- package/dist/domain/value-objects/contact-info.js +2 -0
- package/dist/domain/value-objects/contact-info.js.map +1 -0
- package/dist/domain/value-objects/education.d.ts +7 -0
- package/dist/domain/value-objects/education.js +2 -0
- package/dist/domain/value-objects/education.js.map +1 -0
- package/dist/domain/value-objects/experience.d.ts +7 -0
- package/dist/domain/value-objects/experience.js +2 -0
- package/dist/domain/value-objects/experience.js.map +1 -0
- package/dist/domain/value-objects/index.d.ts +7 -0
- package/dist/domain/value-objects/index.js +2 -0
- package/dist/domain/value-objects/index.js.map +1 -0
- package/dist/domain/value-objects/language.d.ts +4 -0
- package/dist/domain/value-objects/language.js +2 -0
- package/dist/domain/value-objects/language.js.map +1 -0
- package/dist/domain/value-objects/links.d.ts +6 -0
- package/dist/domain/value-objects/links.js +2 -0
- package/dist/domain/value-objects/links.js.map +1 -0
- package/dist/domain/value-objects/project.d.ts +5 -0
- package/dist/domain/value-objects/project.js +2 -0
- package/dist/domain/value-objects/project.js.map +1 -0
- package/dist/infrastructure/ai/index.d.ts +2 -0
- package/dist/infrastructure/ai/index.js +3 -0
- package/dist/infrastructure/ai/index.js.map +1 -0
- package/dist/infrastructure/ai/openai-embedding-service.d.ts +8 -0
- package/dist/infrastructure/ai/openai-embedding-service.js +39 -0
- package/dist/infrastructure/ai/openai-embedding-service.js.map +1 -0
- package/dist/infrastructure/ai/openai-structured-extractor.d.ts +9 -0
- package/dist/infrastructure/ai/openai-structured-extractor.js +163 -0
- package/dist/infrastructure/ai/openai-structured-extractor.js.map +1 -0
- package/dist/infrastructure/config/app-config.d.ts +9 -0
- package/dist/infrastructure/config/app-config.js +15 -0
- package/dist/infrastructure/config/app-config.js.map +1 -0
- package/dist/infrastructure/export/csv-export-service.d.ts +6 -0
- package/dist/infrastructure/export/csv-export-service.js +24 -0
- package/dist/infrastructure/export/csv-export-service.js.map +1 -0
- package/dist/infrastructure/parsers/docx-parser.d.ts +5 -0
- package/dist/infrastructure/parsers/docx-parser.js +17 -0
- package/dist/infrastructure/parsers/docx-parser.js.map +1 -0
- package/dist/infrastructure/parsers/index.d.ts +3 -0
- package/dist/infrastructure/parsers/index.js +4 -0
- package/dist/infrastructure/parsers/index.js.map +1 -0
- package/dist/infrastructure/parsers/ocr-service.d.ts +8 -0
- package/dist/infrastructure/parsers/ocr-service.js +65 -0
- package/dist/infrastructure/parsers/ocr-service.js.map +1 -0
- package/dist/infrastructure/parsers/pdf-parser.d.ts +5 -0
- package/dist/infrastructure/parsers/pdf-parser.js +44 -0
- package/dist/infrastructure/parsers/pdf-parser.js.map +1 -0
- package/dist/infrastructure/persistence/database.d.ts +20 -0
- package/dist/infrastructure/persistence/database.js +156 -0
- package/dist/infrastructure/persistence/database.js.map +1 -0
- package/dist/infrastructure/persistence/index.d.ts +6 -0
- package/dist/infrastructure/persistence/index.js +7 -0
- package/dist/infrastructure/persistence/index.js.map +1 -0
- package/dist/infrastructure/persistence/lancedb-application-event-repository.d.ts +16 -0
- package/dist/infrastructure/persistence/lancedb-application-event-repository.js +85 -0
- package/dist/infrastructure/persistence/lancedb-application-event-repository.js.map +1 -0
- package/dist/infrastructure/persistence/lancedb-application-repository.d.ts +21 -0
- package/dist/infrastructure/persistence/lancedb-application-repository.js +151 -0
- package/dist/infrastructure/persistence/lancedb-application-repository.js.map +1 -0
- package/dist/infrastructure/persistence/lancedb-candidate-repository.d.ts +21 -0
- package/dist/infrastructure/persistence/lancedb-candidate-repository.js +169 -0
- package/dist/infrastructure/persistence/lancedb-candidate-repository.js.map +1 -0
- package/dist/infrastructure/persistence/lancedb-chunk-repository.d.ts +18 -0
- package/dist/infrastructure/persistence/lancedb-chunk-repository.js +105 -0
- package/dist/infrastructure/persistence/lancedb-chunk-repository.js.map +1 -0
- package/dist/infrastructure/persistence/lancedb-job-posting-repository.d.ts +21 -0
- package/dist/infrastructure/persistence/lancedb-job-posting-repository.js +128 -0
- package/dist/infrastructure/persistence/lancedb-job-posting-repository.js.map +1 -0
- package/dist/infrastructure/persistence/lancedb-version-repository.d.ts +13 -0
- package/dist/infrastructure/persistence/lancedb-version-repository.js +62 -0
- package/dist/infrastructure/persistence/lancedb-version-repository.js.map +1 -0
- package/dist/interface/cli/index.d.ts +2 -0
- package/dist/interface/cli/index.js +17 -0
- package/dist/interface/cli/index.js.map +1 -0
- package/dist/interface/dashboard/call-context.d.ts +4 -0
- package/dist/interface/dashboard/call-context.js +26 -0
- package/dist/interface/dashboard/call-context.js.map +1 -0
- package/dist/interface/dashboard/event-bus.d.ts +7 -0
- package/dist/interface/dashboard/event-bus.js +16 -0
- package/dist/interface/dashboard/event-bus.js.map +1 -0
- package/dist/interface/dashboard/events.d.ts +30 -0
- package/dist/interface/dashboard/events.js +2 -0
- package/dist/interface/dashboard/events.js.map +1 -0
- package/dist/interface/dashboard/html.d.ts +1 -0
- package/dist/interface/dashboard/html.js +1007 -0
- package/dist/interface/dashboard/html.js.map +1 -0
- package/dist/interface/dashboard/public/200.html +1 -0
- package/dist/interface/dashboard/public/404.html +1 -0
- package/dist/interface/dashboard/public/_fonts/1ZTlEDqU4DtwDJiND8f6qaugUpa0RIDvQl-v7iM6l54-8KeALpAu2nWJknvJhMk31fqE06iajfSeiM57lsZAo5g.woff +0 -0
- package/dist/interface/dashboard/public/_fonts/1ZTlEDqU4DtwDJiND8f6qaugUpa0RIDvQl-v7iM6l54-CAyrLGU3kauAbzcFnj2Cv_iAPV8wT2NEvNmrA_77Up0.woff +0 -0
- package/dist/interface/dashboard/public/_fonts/1ZTlEDqU4DtwDJiND8f6qaugUpa0RIDvQl-v7iM6l54-Cbq5YGF_nsoQo6qYm9EhA3p-oINRUqlXhACZ2Wh4BBE.woff +0 -0
- package/dist/interface/dashboard/public/_fonts/1ZTlEDqU4DtwDJiND8f6qaugUpa0RIDvQl-v7iM6l54-G1pKsfAhfeIECsLbuPUckyz92yuHFKi9rmiwlRl8Tb0.woff +0 -0
- package/dist/interface/dashboard/public/_fonts/1ZTlEDqU4DtwDJiND8f6qaugUpa0RIDvQl-v7iM6l54-OnaIl8fChu9Cb4bpYiOA4dK_W7eeMCjXQOWR8tUhXJ0.woff +0 -0
- package/dist/interface/dashboard/public/_fonts/1ZTlEDqU4DtwDJiND8f6qaugUpa0RIDvQl-v7iM6l54-kzEiBeXQ06q7fC06p1Y4RaOpLlRWCnHcCcSaqFMJ6fc.woff +0 -0
- package/dist/interface/dashboard/public/_fonts/1ZTlEDqU4DtwDJiND8f6qaugUpa0RIDvQl-v7iM6l54-rmd8_oLeTXCNUhiFyy1UYsogNo6QYBr9dQHrhl_hLbs.woff +0 -0
- package/dist/interface/dashboard/public/_fonts/1ZTlEDqU4DtwDJiND8f6qaugUpa0RIDvQl-v7iM6l54-wjJHhPsTzX4mZm37l7bbvLDtOEIT1R38DKPlwV_Z34A.woff +0 -0
- package/dist/interface/dashboard/public/_fonts/57NSSoFy1VLVs2gqly8Ls9awBnZMFyXGrefpmqvdqmc-zJfbBtpgM4cDmcXBsqZNW79_kFnlpPd62b48glgdydA.woff2 +0 -0
- package/dist/interface/dashboard/public/_fonts/8VR2wSMN-3U4NbWAVYXlkRV6hA0jFBXP-0RtL3X7fko-x2gYI4qfmkRdxyQQUPaBZdZdgl1TeVrquF_TxHeM4lM.woff2 +0 -0
- package/dist/interface/dashboard/public/_fonts/GsKUclqeNLJ96g5AU593ug6yanivOiwjW_7zESNPChw-jHA4tBeM1bjF7LATGUpfBuSTyomIFrWBTzjF7txVYfg.woff2 +0 -0
- package/dist/interface/dashboard/public/_fonts/Ld1FnTo3yTIwDyGfTQ5-Fws9AWsCbKfMvgxduXr7JcY-W25bL8NF1fjpLRSOgJb7RoZPHqGQNwMTM7S9tHVoxx8.woff2 +0 -0
- package/dist/interface/dashboard/public/_fonts/NdzqRASp2bovDUhQT1IRE_EMqKJ2KYQdTCfFcBvL8yw-KhwZiS86o3fErOe5GGMExHUemmI_dBfaEFxjISZrBd0.woff2 +0 -0
- package/dist/interface/dashboard/public/_fonts/iTkrULNFJJkTvihIg1Vqi5IODRH_9btXCioVF5l98I8-AndUyau2HR2felA_ra8V2mutQgschhasE5FD1dXGJX8.woff2 +0 -0
- package/dist/interface/dashboard/public/_nuxt/BtFgTcXQ.js +30 -0
- package/dist/interface/dashboard/public/_nuxt/CdJZeyak.js +30 -0
- package/dist/interface/dashboard/public/_nuxt/D9vxbU2B.js +1 -0
- package/dist/interface/dashboard/public/_nuxt/DHg6ig_T.js +1 -0
- package/dist/interface/dashboard/public/_nuxt/DhFk2_Al.js +1 -0
- package/dist/interface/dashboard/public/_nuxt/DlAUqK2U.js +1 -0
- package/dist/interface/dashboard/public/_nuxt/DtX-aPBA.js +1 -0
- package/dist/interface/dashboard/public/_nuxt/DvCMYK3d.js +1 -0
- package/dist/interface/dashboard/public/_nuxt/builds/latest.json +1 -0
- package/dist/interface/dashboard/public/_nuxt/builds/meta/027020ec-4e7d-4fc7-8447-19800f7d0bac.json +1 -0
- package/dist/interface/dashboard/public/_nuxt/builds/meta/18e19101-a96b-41dc-b602-f9a8f013a036.json +1 -0
- package/dist/interface/dashboard/public/_nuxt/builds/meta/2fd3d0d3-6004-4659-9055-d27aa6656fd3.json +1 -0
- package/dist/interface/dashboard/public/_nuxt/builds/meta/54792d4b-ca55-4b5d-b0dd-1d7dc34de344.json +1 -0
- package/dist/interface/dashboard/public/_nuxt/builds/meta/5959a14b-2494-4e0d-be28-fef9adfd889d.json +1 -0
- package/dist/interface/dashboard/public/_nuxt/builds/meta/60cda583-d704-4d4e-b37e-7ab337e3b6cc.json +1 -0
- package/dist/interface/dashboard/public/_nuxt/builds/meta/64d05a43-99ec-4c22-934e-071b310b968f.json +1 -0
- package/dist/interface/dashboard/public/_nuxt/builds/meta/6c1632a5-f0af-41e3-9d88-12294e03a0b9.json +1 -0
- package/dist/interface/dashboard/public/_nuxt/builds/meta/6c80982c-5e2c-446c-aaf6-7000a976e493.json +1 -0
- package/dist/interface/dashboard/public/_nuxt/builds/meta/79161adb-748c-4d36-a031-a71899a56ecd.json +1 -0
- package/dist/interface/dashboard/public/_nuxt/builds/meta/84e5a87d-4ae5-48dd-8d5e-5b1fe89f7243.json +1 -0
- package/dist/interface/dashboard/public/_nuxt/builds/meta/86082677-a11d-4acf-ab04-c3c067a71622.json +1 -0
- package/dist/interface/dashboard/public/_nuxt/builds/meta/8892e611-c2b4-425b-a6a5-988314d8da4d.json +1 -0
- package/dist/interface/dashboard/public/_nuxt/builds/meta/9bfe6b22-73f8-4584-b13d-ed1df5600e12.json +1 -0
- package/dist/interface/dashboard/public/_nuxt/builds/meta/a39bf957-ddae-41a6-a183-08292363098b.json +1 -0
- package/dist/interface/dashboard/public/_nuxt/builds/meta/b0bf7fc4-02c1-46fd-acca-f4458feed978.json +1 -0
- package/dist/interface/dashboard/public/_nuxt/builds/meta/b2847d83-b695-45d4-9dca-d7498158a501.json +1 -0
- package/dist/interface/dashboard/public/_nuxt/builds/meta/c8382eda-1354-4f92-b6d0-5b5b9f43354a.json +1 -0
- package/dist/interface/dashboard/public/_nuxt/builds/meta/e707aa44-7202-413d-bcd5-1538b5b56570.json +1 -0
- package/dist/interface/dashboard/public/_nuxt/builds/meta/ea661002-05ab-4bfb-b02f-c91bb721c5e9.json +1 -0
- package/dist/interface/dashboard/public/_nuxt/builds/meta/f2f23a12-a792-480e-922a-ee8b73dc0310.json +1 -0
- package/dist/interface/dashboard/public/_nuxt/builds/meta/f6503b83-d731-40f8-9110-c1599663b3ba.json +1 -0
- package/dist/interface/dashboard/public/_nuxt/builds/meta/feac6d04-6bc5-4fa4-a241-79e897d7f8c1.json +1 -0
- package/dist/interface/dashboard/public/_nuxt/entry.BSUaoqsu.css +1 -0
- package/dist/interface/dashboard/public/_nuxt/entry.Bl31cpjT.css +1 -0
- package/dist/interface/dashboard/public/_nuxt/error-404.B6WzzNMA.css +1 -0
- package/dist/interface/dashboard/public/_nuxt/error-500.CVIcHofV.css +1 -0
- package/dist/interface/dashboard/public/_nuxt/index.BH5Gbe6q.css +1 -0
- package/dist/interface/dashboard/public/_nuxt/index.TQmbXYdV.css +1 -0
- package/dist/interface/dashboard/public/_nuxt/qq1iUjth.js +1 -0
- package/dist/interface/dashboard/public/favicon.ico +0 -0
- package/dist/interface/dashboard/public/index.html +1 -0
- package/dist/interface/dashboard/server.d.ts +11 -0
- package/dist/interface/dashboard/server.js +145 -0
- package/dist/interface/dashboard/server.js.map +1 -0
- package/dist/interface/dashboard/tool-wrapper.d.ts +4 -0
- package/dist/interface/dashboard/tool-wrapper.js +96 -0
- package/dist/interface/dashboard/tool-wrapper.js.map +1 -0
- package/dist/interface/mcp/server.d.ts +2 -0
- package/dist/interface/mcp/server.js +109 -0
- package/dist/interface/mcp/server.js.map +1 -0
- package/dist/interface/mcp/tools/add-cv.d.ts +3 -0
- package/dist/interface/mcp/tools/add-cv.js +21 -0
- package/dist/interface/mcp/tools/add-cv.js.map +1 -0
- package/dist/interface/mcp/tools/add-job-posting.d.ts +3 -0
- package/dist/interface/mcp/tools/add-job-posting.js +38 -0
- package/dist/interface/mcp/tools/add-job-posting.js.map +1 -0
- package/dist/interface/mcp/tools/add-pipeline-note.d.ts +3 -0
- package/dist/interface/mcp/tools/add-pipeline-note.js +32 -0
- package/dist/interface/mcp/tools/add-pipeline-note.js.map +1 -0
- package/dist/interface/mcp/tools/add-to-pipeline.d.ts +3 -0
- package/dist/interface/mcp/tools/add-to-pipeline.js +28 -0
- package/dist/interface/mcp/tools/add-to-pipeline.js.map +1 -0
- package/dist/interface/mcp/tools/bulk-add-cvs.d.ts +3 -0
- package/dist/interface/mcp/tools/bulk-add-cvs.js +28 -0
- package/dist/interface/mcp/tools/bulk-add-cvs.js.map +1 -0
- package/dist/interface/mcp/tools/delete-cv.d.ts +3 -0
- package/dist/interface/mcp/tools/delete-cv.js +20 -0
- package/dist/interface/mcp/tools/delete-cv.js.map +1 -0
- package/dist/interface/mcp/tools/delete-job-posting.d.ts +3 -0
- package/dist/interface/mcp/tools/delete-job-posting.js +27 -0
- package/dist/interface/mcp/tools/delete-job-posting.js.map +1 -0
- package/dist/interface/mcp/tools/export-results.d.ts +3 -0
- package/dist/interface/mcp/tools/export-results.js +23 -0
- package/dist/interface/mcp/tools/export-results.js.map +1 -0
- package/dist/interface/mcp/tools/filter-candidates.d.ts +3 -0
- package/dist/interface/mcp/tools/filter-candidates.js +32 -0
- package/dist/interface/mcp/tools/filter-candidates.js.map +1 -0
- package/dist/interface/mcp/tools/get-candidate-history.d.ts +3 -0
- package/dist/interface/mcp/tools/get-candidate-history.js +22 -0
- package/dist/interface/mcp/tools/get-candidate-history.js.map +1 -0
- package/dist/interface/mcp/tools/get-cv-chunks.d.ts +3 -0
- package/dist/interface/mcp/tools/get-cv-chunks.js +26 -0
- package/dist/interface/mcp/tools/get-cv-chunks.js.map +1 -0
- package/dist/interface/mcp/tools/get-cv-detail.d.ts +3 -0
- package/dist/interface/mcp/tools/get-cv-detail.js +23 -0
- package/dist/interface/mcp/tools/get-cv-detail.js.map +1 -0
- package/dist/interface/mcp/tools/get-cv-versions.d.ts +3 -0
- package/dist/interface/mcp/tools/get-cv-versions.js +20 -0
- package/dist/interface/mcp/tools/get-cv-versions.js.map +1 -0
- package/dist/interface/mcp/tools/get-job-posting.d.ts +3 -0
- package/dist/interface/mcp/tools/get-job-posting.js +26 -0
- package/dist/interface/mcp/tools/get-job-posting.js.map +1 -0
- package/dist/interface/mcp/tools/get-pending-actions.d.ts +3 -0
- package/dist/interface/mcp/tools/get-pending-actions.js +19 -0
- package/dist/interface/mcp/tools/get-pending-actions.js.map +1 -0
- package/dist/interface/mcp/tools/get-pipeline.d.ts +3 -0
- package/dist/interface/mcp/tools/get-pipeline.js +22 -0
- package/dist/interface/mcp/tools/get-pipeline.js.map +1 -0
- package/dist/interface/mcp/tools/get-server-status.d.ts +3 -0
- package/dist/interface/mcp/tools/get-server-status.js +38 -0
- package/dist/interface/mcp/tools/get-server-status.js.map +1 -0
- package/dist/interface/mcp/tools/get-stats.d.ts +3 -0
- package/dist/interface/mcp/tools/get-stats.js +19 -0
- package/dist/interface/mcp/tools/get-stats.js.map +1 -0
- package/dist/interface/mcp/tools/list-cvs.d.ts +3 -0
- package/dist/interface/mcp/tools/list-cvs.js +32 -0
- package/dist/interface/mcp/tools/list-cvs.js.map +1 -0
- package/dist/interface/mcp/tools/list-job-postings.d.ts +3 -0
- package/dist/interface/mcp/tools/list-job-postings.js +19 -0
- package/dist/interface/mcp/tools/list-job-postings.js.map +1 -0
- package/dist/interface/mcp/tools/manage-tags.d.ts +3 -0
- package/dist/interface/mcp/tools/manage-tags.js +24 -0
- package/dist/interface/mcp/tools/manage-tags.js.map +1 -0
- package/dist/interface/mcp/tools/match-candidates.d.ts +3 -0
- package/dist/interface/mcp/tools/match-candidates.js +23 -0
- package/dist/interface/mcp/tools/match-candidates.js.map +1 -0
- package/dist/interface/mcp/tools/reset-database.d.ts +3 -0
- package/dist/interface/mcp/tools/reset-database.js +35 -0
- package/dist/interface/mcp/tools/reset-database.js.map +1 -0
- package/dist/interface/mcp/tools/semantic-search.d.ts +3 -0
- package/dist/interface/mcp/tools/semantic-search.js +27 -0
- package/dist/interface/mcp/tools/semantic-search.js.map +1 -0
- package/dist/interface/mcp/tools/set-pending-action.d.ts +3 -0
- package/dist/interface/mcp/tools/set-pending-action.js +36 -0
- package/dist/interface/mcp/tools/set-pending-action.js.map +1 -0
- package/dist/interface/mcp/tools/update-cv.d.ts +3 -0
- package/dist/interface/mcp/tools/update-cv.js +23 -0
- package/dist/interface/mcp/tools/update-cv.js.map +1 -0
- package/dist/interface/mcp/tools/update-job-posting.d.ts +3 -0
- package/dist/interface/mcp/tools/update-job-posting.js +42 -0
- package/dist/interface/mcp/tools/update-job-posting.js.map +1 -0
- package/dist/interface/mcp/tools/update-pipeline-status.d.ts +3 -0
- package/dist/interface/mcp/tools/update-pipeline-status.js +41 -0
- package/dist/interface/mcp/tools/update-pipeline-status.js.map +1 -0
- package/dist/interface/mcp/types.d.ts +26 -0
- package/dist/interface/mcp/types.js +2 -0
- package/dist/interface/mcp/types.js.map +1 -0
- package/dist/shared/errors/index.d.ts +32 -0
- package/dist/shared/errors/index.js +56 -0
- package/dist/shared/errors/index.js.map +1 -0
- package/dist/shared/types/index.d.ts +19 -0
- package/dist/shared/types/index.js +2 -0
- package/dist/shared/types/index.js.map +1 -0
- package/dist/shared/utils/chunking.d.ts +3 -0
- package/dist/shared/utils/chunking.js +89 -0
- package/dist/shared/utils/chunking.js.map +1 -0
- package/dist/shared/utils/file-storage.d.ts +8 -0
- package/dist/shared/utils/file-storage.js +49 -0
- package/dist/shared/utils/file-storage.js.map +1 -0
- package/dist/shared/utils/index.d.ts +3 -0
- package/dist/shared/utils/index.js +4 -0
- package/dist/shared/utils/index.js.map +1 -0
- package/dist/shared/utils/text.d.ts +5 -0
- package/dist/shared/utils/text.js +21 -0
- package/dist/shared/utils/text.js.map +1 -0
- 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"}
|