Skip to content

release: v1.8.0 - #150

Merged
datvt243 merged 8 commits into
mainfrom
release/v1.8.0
Sep 26, 2026
Merged

datvt243 merged 8 commits into
mainfrom
release/v1.8.0

Conversation

@datvt243

Copy link
Copy Markdown
Owner

Commits

Closes #148.
Closes #146.
Closes #141.

datvt243 and others added 8 commits September 20, 2026 20:53
chore(release): sync v1.7.0 version bump back to staging
New stateless POST /api/v1/candidate/parse-linkedin-export endpoint
(issue #141, LinkedIn CSV path only -- PDF free-text parsing deliberately
deferred per the issue's own scope recommendation). Accepts a LinkedIn
"Data export" ZIP, parses Education.csv/Positions.csv (located anywhere
in the zip, since LinkedIn nests them in a dated folder) into this API's
own Education/Experience shapes, and returns them without persisting
anything -- the frontend maps the result into its existing create forms
for the user to review/edit before saving.

- src/candidate/parseLinkedInExport.service.ts (new): pure parsing logic,
  no I/O beyond the buffer. Case-insensitive header matching, best-effort
  Date.parse on LinkedIn's free-text date columns ("Present"/empty ->
  null + isCurrent true), blank rows filtered, throws INVALID_ZIP for a
  corrupt buffer, returns empty arrays (never throws) when the zip is
  valid but has neither CSV.
- src/middlewares/uploadLinkedInExport.middleware.ts (new): multer
  memoryStorage() (nothing written to disk) + .zip-only filter (mimetype
  AND extension) + 20MB cap, same error-wrapping pattern as
  uploadCV.middleware.ts.
- src/candidate/candidate.controller.ts: new fnParseLinkedInExport --
  missing file -> 400, INVALID_ZIP -> 400, any other error -> handleError
  (500, not swallowed).
- src/routers/api/v1/candidate.route.ts: route mounted, inherits
  verifyToken from the existing router-level /candidate mount.
- src/locales/{vi,en}.ts: new linkedinImport.* message keys.
- New deps via npm install: adm-zip + csv-parse (+ @types/adm-zip
  dev-only).
- Tests: 2 new suites -- parseLinkedInExport.service.test.ts (5 tests,
  real in-memory zip fixtures built with adm-zip itself) and
  candidate.controller.test.ts (4 tests, covers the missing-file/
  invalid-zip/unexpected-error branches).

npm test: 24/24 suites, 136/136 tests. npm run build: clean. Swagger spec
independently confirmed to resolve the new route + full response schema.

Node: add-linkedin-export-parse-endpoint, SEALED.
Evidence: agent-hub/evidence/{implementer,verifier}/2026-09-20/add-linkedin-export-parse-endpoint-*.md

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…-endpoint

feat(candidate): add LinkedIn export parsing endpoint for CV data import
Both docs had drifted since 1.0.0 and never mentioned Application
tracker (#132), CV Profiles multi-version (#133), LinkedIn export
parsing (#141), httpOnly cookie auth + CSRF (#119/#134), soft-delete
+restore (#121), vanity slug public profile (#120), visit tracking,
i18n (vi/en), or PDF export's json/docx formats.

- README.md: version bump 1.0.0 -> 1.7.0, refreshed Features/Tech
  Stack/Project Structure/Endpoints/Env sections.
- CLAUDE.md: refreshed middleware order, full API endpoint tables,
  Models table, Service Layer/Error Hierarchy/Security sections, and
  the __tests__ file list to match the real src/ tree.
- agent-hub/: backfilled node `update-project-docs` (was missing,
  found via /ship's SealedOnly gate) and its evidence.

npm test: 24/24 suites, 136/136 tests passed. npm run build: clean.

Node: update-project-docs (SEALED).
Evidence: agent-hub/evidence/implementer/2026-09-27/update-project-docs-plan.md,
agent-hub/evidence/verifier/2026-09-27/update-project-docs-seal.md

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
docs: sync README.md and CLAUDE.md with current codebase (v1.7.0)
…, emailVerified)

The update-project-docs/#146 doc-sync pass missed 3 real fields on
src/models/candidate.model.ts, found while writing the GitHub wiki's
Data-Models page: cvFile (uploaded-CV metadata), isPublic (gates the
public profile), emailVerified (informational, doesn't gate login).

npm test: 24/24 suites, 136/136 tests passed. npm run build: clean.

Node: fix-claude-md-candidate-model-fields (SEALED).
Evidence: agent-hub/evidence/implementer/2026-09-27/fix-claude-md-candidate-model-fields-plan.md,
agent-hub/evidence/verifier/2026-09-27/fix-claude-md-candidate-model-fields-seal.md

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
docs(CLAUDE.md): add missing Candidate model fields (cvFile, isPublic, emailVerified)
@datvt243
datvt243 merged commit a00716f into main Sep 26, 2026
3 checks passed
@datvt243
datvt243 deleted the release/v1.8.0 branch September 26, 2026 22:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant