Application Tracker

REST API SD week 12 - July, 30th 2021 - August 16,2021

Overview

Tired of bloated job application tracking apps? Me too. I wanted a simple, lightweight, easy to use job application tracking app. You can see some basic metrics about the app on the home page, gain some knowledge on the about page, and track your jobs after you login.

This REST API is a program the does CRUD operations on applications, users, and contacts using a MySQL database and connecting with Spring Data JPA/Hibernate.

This is hosted at http://3.139.183.62:8080/JobApplicationTracker/

REST Endpoints

Method URI Request Body Response Body Function
GET /login auth shows all users
POST /signup {
"username":"superboy89",
"password":"password"
}
User
400 bad input
409duplicate username
Create a user
PUT /api/user {
"id":1,
"username":"superboy89",
"password":"paasdfsad",
"role":"false",
"enabled":"false"
}
User Update user by id
POST /api/user/applications {
"name":"Postmana",
"applyDate":"2021-07-30",
"deadline":"2021-08-01",
"linkToJob":"https://www.google.com",
"description":"sweet",
"location":"anyway",
"salary":120000.0,
"interviewDate":"2021-08-09",
"jobTitle":"Developer"
}
the only required is name
Application Create new application for user
GET /api/user/applications List<Application> All applications by user
GET /api/user/applications/{appId} Application Single application by user and application id
PUT /api/user/applications {
"id":1,
"name":"Postmana",
"applyDate":"2021-07-30",
"deadline":"2021-08-01",
"linkToJob":"https://www.google.com",
"description":"sweet",
"location":"anyway",
"salary":120000.0,
"interviewDate":"2021-08-09",
"jobTitle":"Developer"
}
Can also take a status. If not set it defaults to not started
Application Update application for user
DEL /api/user/applications/{appId} void delete user application
GET /api/applications/{appId}/contact List<Contact> Show contacts for an application by id
POST /api/applications/{appId}/contact minimum
email
{
firstName":"Brandon",
"email":"bstine@gams.com",
"lastName":"Stine",
"phoneNumber":"8675309"
}
Contact Create new contact for application by id
PUT api/applications/{appId}/contact/ {"id":1,
"firstName":"Brandon",
"email":"bstine@gams.com",
"lastName":"Stine",
"phoneNumber":"8675309"
}
Contact Update existing contact on application by id
DEL /api/applications/{appId}/contact/{contactId} void Delete contact from application
GET api/user long total user count
GET api/applications long total application count

Technologies used

  • Java, Java Persistence API, REST API, Spring Boot, Gradle, MySQL Workbench, Postman, JSON, Tomcat, Javascript, Typescript, Angular, Tailwind CSS

Lessons learned

This project just enforced even more than I cant memorize everything. Reference material is golden for when you miss one small step. Creation of a JPA/Boot project still seems robust but it is getting easier. I was able to learn to use the MySQL workbench better, continue solidifying entity mapping, and learned something new about hibernate and lazy initialization that Eagerly fetching doesn't fix. This project was great practice for all the annotations.

The angular front end took way more time than I thought it would. I got to learn about responsive web design, tailwind css, and a host of issues that come from typescript. Overall I learned a lot from angular especially event bindings and model bindings.