This repository hosts the Jobbernaut Tabs Backend, the synchronous logic layer responsible for CRUD operations and triggering asynchronous workflows.
- Jobbernaut Tabs Backend: A Kotlin Quarkus Lambda function that acts as the primary API handler.
- CRUD Operations: Reading and writing job application data to a relational database.
- Authentication: Handling LinkedIn OAuth flow and issuing signed JWTs for session management.
- Security: Validating incoming requests and generating presigned URLs for secure file access via cloud object storage.
- Orchestration Trigger: Initiating the Jobbernaut Director (Step Functions) execution when a user requests a new tailored resume.
- Runtime: Java (Containerized AWS Lambda with GraalVM native)
- Framework: JKotlin-based Quarkus
- Database: Relational database via JDBC connection pooling (TBD)
- Storage: Cloud object storage bucket for Tailor artifacts
- Auth: LinkedIn OAuth 2.0 + JWT
- CI/CD: GitHub Actions — build JAR, deploy to Lambda on push to main
- Dependencies: JDBC driver, JWT library, AWS SDK
| Method | Route | Description |
|---|---|---|
| POST | /auth/linkedin/callback | LinkedIn OAuth callback, returns JWT |
| GET | /jobs | Fetch all jobs for authenticated user |
| POST | /jobs | Add a new job |
| PUT | /jobs/{id} | Edit an existing job |
| DELETE | /jobs/{id} | Delete a job |
| PATCH | /jobs/{id}/archive | Archive a job |
| POST | /jobs/{id}/tailor | Trigger async Tailor pipeline (Step Functions) |
This project uses Quarkus, the Supersonic Subatomic Java Framework.
If you want to learn more about Quarkus, please visit its website: https://quarkus.io/.
You can run your application in dev mode that enables live coding using:
./mvnw quarkus:devNOTE: Quarkus now ships with a Dev UI, which is available in dev mode only at http://localhost:8080/q/dev/.
The application can be packaged using:
./mvnw packageIt produces the quarkus-run.jar file in the target/quarkus-app/ directory.
Be aware that it’s not an über-jar as the dependencies are copied into the target/quarkus-app/lib/ directory.
The application is now runnable using java -jar target/quarkus-app/quarkus-run.jar.
If you want to build an über-jar, execute the following command:
./mvnw package -Dquarkus.package.jar.type=uber-jarThe application, packaged as an über-jar, is now runnable using java -jar target/*-runner.jar.
You can create a native executable using:
./mvnw package -DnativeOr, if you don't have GraalVM installed, you can run the native executable build in a container using:
./mvnw package -Dnative -Dquarkus.native.container-build=trueYou can then execute your native executable with: ./target/jobbernaut-tabs-backend-1.0.0-SNAPSHOT-runner
If you want to learn more about building native executables, please consult https://quarkus.io/guides/maven-tooling.
- AWS Lambda HTTP (guide): Allow applications written for a servlet container to run in AWS Lambda
- Hibernate Validator (guide): Bean validation using Hibernate Validator and Jakarta Validation annotations
- SmallRye JWT (guide): Secure your applications with JSON Web Token
- Flyway (guide): Handle your database schema migrations
- SmallRye OpenAPI (guide): Generate OpenAPI schemas and serve Swagger UI for REST API documentation
- JDBC Driver - PostgreSQL (guide): Connect to the PostgreSQL database via JDBC
- Kotlin (guide): Write your services in Kotlin
- REST Jackson (guide): Jackson serialization support for Quarkus REST. This extension is not compatible with the quarkus-resteasy extension, or any of the extensions that depend on it
- Hibernate ORM with Panache and Kotlin (guide): Define your persistent model in Hibernate ORM with Panache
Create your first JPA entity
Related Hibernate with Panache in Kotlin section...
Easily start your REST Web Services