Skip to content

Latest commit

 

History

History
101 lines (78 loc) · 4.85 KB

File metadata and controls

101 lines (78 loc) · 4.85 KB

Applicant_Tracking_Software

Applicant Tracking Software (CV Matcher)

Purpose

This repository contains a small applicant-tracking system (ATS) proof-of-concept that matches CVs to job descriptions using AI-assisted matching and a reviewer workflow. It provides a frontend UI and a Spring Boot backend which persists data to PostgreSQL and applies schema migrations with Flyway.

Architecture Overview

  • Frontend: ats-frontend — Vite + Vue 3 application that provides candidate, job, and reviewer UIs.
  • Backend: cv-job-ai-matcher/backend — Spring Boot 3.3.5 application (Java 17) exposing a REST API, using Spring Data JPA, Flyway for migrations, and PostgreSQL as the primary datastore.
  • Database: PostgreSQL (expected database name cv_matcher). Flyway migration scripts live under src/main/resources/db/migration inside the backend.
  • AI / Models: The backend integrates with an LLM endpoint (configured with ollama.base-url / OLLAMA_BASE_URL) and can use OpenAI-style models for scoring and matching.

Implementation Details

  • Project layout (backend): standard Spring Boot modules: controller, service, repository, model, dto, config, and exception packages. Persistence uses JPA entities and repositories.
  • Migrations: Flyway runs at startup to apply SQL migrations. Because Flyway opens a DB connection at application startup, the database must be reachable before mvn spring-boot:run completes.
  • Configuration: Core settings are in backend/src/main/resources/application.yml. Important values:
    • spring.datasource.url — default jdbc:postgresql://localhost:5433/cv_matcher
    • spring.datasource.username — default postgres
    • spring.datasource.password — default postgres
    • ollama.base-url — local LLM host default http://localhost:11434

Run / Development

  • Start PostgreSQL (example using Docker):
docker run -d --name cv_pg -e POSTGRES_PASSWORD=postgres -e POSTGRES_USER=postgres -e POSTGRES_DB=cv_matcher -p 5433:5432 postgres:15
  • Then run the backend:
cd cv-job-ai-matcher/backend
mvn spring-boot:run
  • Alternatively, map SPRING_DATASOURCE_URL/SPRING_DATASOURCE_USERNAME/SPRING_DATASOURCE_PASSWORD environment variables to point to any existing Postgres instance.

API Endpoints (summary)

Note: paths are relative to the backend server root (default port 8080). The following is a concise list of public REST endpoints and their typical input/output shapes.

  • Register user

    • Method: POST /api/auth/register
    • Input (JSON): { "username": "string", "email": "string", "password": "string" }
    • Output (201): { "id": number, "username": "string", "email": "string" }
  • Login

    • Method: POST /api/auth/login
    • Input (JSON): { "username": "string", "password": "string" }
    • Output (200): { "token": "jwt-token-string" }
  • Upload CV

    • Method: POST /api/cvs/upload
    • Input: multipart/form-data with file (PDF) and optional userId
    • Output (201): { "id": number, "filename": "string", "uploadedAt": "ISO8601" }
  • Get CV by id

    • Method: GET /api/cvs/{id}
    • Output (200): { "id": number, "filename": "string", "textExtract": "string", "metadata": {...} }
  • Create Job

    • Method: POST /api/jobs
    • Input (JSON): { "title": "string", "description": "string", "ownerId": number }
    • Output (201): { "id": number, "title": "string", "description": "string" }
  • List Jobs

    • Method: GET /api/jobs
    • Output (200): [ { "id": number, "title": "string", ... }, ... ]
  • Create Match

    • Method: POST /api/matches
    • Input (JSON): { "cvId": number, "jobId": number }
    • Output (201): { "id": number, "score": number, "explanation": "string" }
  • Reviewer Reports

    • Method: GET /api/reviewer/{reviewerId}/reports
    • Output (200): [ { "reportId": number, "matchId": number, "feedback": null|{...} }, ... ]

Where inputs are simplified DTOs — see the backend/src/main/java/com/cvmatcher/dto package for exact field names and validation rules.

Notes and Troubleshooting

  • If Flyway fails at startup with a DB connection error, ensure the Postgres container is running and reachable at the host/port in application.yml (the default is host localhost, port 5433).
  • If you prefer automatic DB startup, add a docker-compose.yml that defines a db service and run it before mvn spring-boot:run, or use a small wrapper script:
docker compose up -d db || docker run -d --name cv_pg -e POSTGRES_PASSWORD=postgres -e POSTGRES_DB=cv_matcher -p 5433:5432 postgres:15
mvn spring-boot:run

Further reading

  • Backend services: cv-job-ai-matcher/backend
  • Frontend: ats-frontend

If you want, I can add a docker-compose.yml and a run script to this repo so the DB starts automatically when developing.