Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 34 additions & 0 deletions .github/workflows/gradle.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
# This workflow will build a Java project with Gradle and cache/restore any dependencies to improve the workflow execution time
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-gradle

name: Java CI with Gradle

on:
push:
branches: [ "master" ]
pull_request:
branches: [ "master" ]

permissions:
contents: read

jobs:
build:

runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v3
- name: Set up JDK 11
uses: actions/setup-java@v3
with:
java-version: '11'
distribution: 'temurin'
- name: Build with Gradle
uses: gradle/gradle-build-action@67421db6bd0bf253fb4bd25b31ebb98943c375e1
with:
arguments: build
2 changes: 2 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ repositories {
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'mysql:mysql-connector-java'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
testImplementation('org.springframework.boot:spring-boot-starter-test') {
exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
Expand Down
17 changes: 15 additions & 2 deletions queries.sql
Original file line number Diff line number Diff line change
@@ -1,7 +1,20 @@
-- Part 1: Test it with SQL

/* SHOW COLUMNS FROM job
Field: id TYPE: int
Field: employer TYPE: VARCHAR
Field: name TYPE: VARCHAR
Field: skills TYPE: VARCHAR */
-- Part 2: Test it with SQL
SELECT NAME
FROM employer
WHERE location = "St. Louis City";

-- Part 3: Test it with SQL

-- Part 4: Test it with SQL
DROP TABLE Job;

-- Part 4: Test it with SQL
SELECT * FROM skill
LEFT JOIN job_skills ON skill.id = job_skills.skills_id
WHERE job_skills.jobs_id IS NOT NULL
ORDER BY name ASC;
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package org.launchcode.techjobs.persistent.controllers;

import org.launchcode.techjobs.persistent.models.Employer;
import org.launchcode.techjobs.persistent.models.data.EmployerRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.Errors;
Expand All @@ -13,6 +15,16 @@
@RequestMapping("employers")
public class EmployerController {

@Autowired
private EmployerRepository employerRepository;

//displays a list of all employers in db//
@GetMapping("")
public String index(Model model){
model.addAttribute("employers", employerRepository.findAll());
return "employers/index";
}


@GetMapping("add")
public String displayAddEmployerForm(Model model) {
Expand All @@ -25,16 +37,17 @@ public String processAddEmployerForm(@ModelAttribute @Valid Employer newEmployer
Errors errors, Model model) {

if (errors.hasErrors()) {
model.addAttribute(new Employer());
return "employers/add";
}

employerRepository.save(newEmployer);
return "redirect:";
}

@GetMapping("view/{employerId}")
public String displayViewEmployer(Model model, @PathVariable int employerId) {

Optional optEmployer = null;
Optional optEmployer = employerRepository.findById(employerId);
if (optEmployer.isPresent()) {
Employer employer = (Employer) optEmployer.get();
model.addAttribute("employer", employer);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,51 +1,95 @@
package org.launchcode.techjobs.persistent.controllers;


import com.fasterxml.jackson.annotation.JsonTypeInfo;
import org.launchcode.techjobs.persistent.models.Employer;
import org.launchcode.techjobs.persistent.models.Job;
import org.launchcode.techjobs.persistent.models.Skill;
import org.launchcode.techjobs.persistent.models.data.EmployerRepository;
import org.launchcode.techjobs.persistent.models.data.JobRepository;
import org.launchcode.techjobs.persistent.models.data.SkillRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.Errors;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import java.util.List;
import java.util.Optional;

import static java.util.Optional.empty;

/**
* Created by LaunchCode
*/
@Controller
public class HomeController {

@Autowired
private EmployerRepository employerRepository;
@Autowired
private JobRepository jobRepository;
@Autowired
private SkillRepository skillRepository;


@RequestMapping("")
public String index(Model model) {

model.addAttribute("title", "My Jobs");
// model.addAttribute("jobs", jobRepository.findAll());

return "index";
}

@GetMapping("add")
public String displayAddJobForm(Model model) {
model.addAttribute("title", "Add Job");
model.addAttribute("employers", employerRepository.findAll());
model.addAttribute("skills", skillRepository.findAll());
model.addAttribute(new Job());
return "add";
}

@PostMapping("add")
public String processAddJobForm(@ModelAttribute @Valid Job newJob,
Errors errors, Model model, @RequestParam int employerId, @RequestParam List<Integer> skills) {
Errors errors, Model model, @RequestParam int employerId, @RequestParam List<Integer> skills) {

if (errors.hasErrors()) {
model.addAttribute("title", "Add Job");
model.addAttribute("employers", employerRepository.findAll());
model.addAttribute("skills", skillRepository.findAll());
model.addAttribute(new Job());
return "add";
}

// model.addAttribute("skills", skillRepository.findAllById(skills));

// Optional<Employer> result = employerRepository.findById(employerId);
//
// Employer employer = (Employer) result.get();
// model.addAttribute("employer", employer);
// }
Employer chosenEmployer = employerRepository.findById(employerId).orElse(new Employer("No Location"));
newJob.setEmployer(chosenEmployer);

List<Skill> skillObjs = (List<Skill>) skillRepository.findAllById(skills);
newJob.setSkills(skillObjs);
jobRepository.save(newJob);
return "redirect:";
}

@GetMapping("view/{jobId}")
public String displayViewJob(Model model, @PathVariable int jobId) {

return "view";
Optional optJob = jobRepository.findById(jobId);
if (optJob.isPresent()) {
Job job = (Job) optJob.get();
model.addAttribute("job", job);
return "view";
} else {
return "redirect:../";
}
}


Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
package org.launchcode.techjobs.persistent.controllers;

import org.launchcode.techjobs.persistent.models.Job;
import org.launchcode.techjobs.persistent.models.Skill;
import org.launchcode.techjobs.persistent.models.data.EmployerRepository;
import org.launchcode.techjobs.persistent.models.data.JobRepository;
import org.launchcode.techjobs.persistent.models.JobData;
import org.launchcode.techjobs.persistent.models.data.SkillRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
Expand All @@ -16,10 +19,14 @@
*/
@Controller
@RequestMapping(value = "list")
public class ListController {
public class ListController {

@Autowired
private JobRepository jobRepository;
@Autowired
private EmployerRepository employerRepository;
@Autowired
private SkillRepository skillRepository;

static HashMap<String, String> columnChoices = new HashMap<>();

Expand All @@ -33,6 +40,9 @@ public ListController () {

@RequestMapping("")
public String list(Model model) {
model.addAttribute("employers", employerRepository.findAll());
model.addAttribute("skills", skillRepository.findAll());
// model.addAttribute("jobs", jobRepository.findAll());

return "list";
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package org.launchcode.techjobs.persistent.controllers;

import org.launchcode.techjobs.persistent.models.Employer;
import org.launchcode.techjobs.persistent.models.Skill;
import org.launchcode.techjobs.persistent.models.data.SkillRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.Errors;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import java.util.Optional;

@Controller
@RequestMapping("skills")
public class SkillController {
@Autowired
private SkillRepository skillRepository;

@GetMapping("")
public String index(Model model){
model.addAttribute("skills", skillRepository.findAll());
return "skills/index";
}


@GetMapping("add")
public String displayAddSkillForm(Model model) {
model.addAttribute(new Skill());
return "skills/add";
}

@PostMapping("add")
public String processAddSkillForm(@ModelAttribute @Valid Skill newSkill,
Errors errors, Model model) {

if (errors.hasErrors()) {
return "skills/add";
}
skillRepository.save(newSkill);
return "redirect:";
}

@GetMapping("view/{skillId}")
public String displayViewSkill(Model model, @PathVariable int skillId) {

Optional optSkill = skillRepository.findById(skillId);
if (optSkill.isPresent()) {
Skill skill = (Skill) optSkill.get();
model.addAttribute("skill", skill);
return "skills/view";
} else {
return "redirect:../";
}
}
}

Original file line number Diff line number Diff line change
@@ -1,14 +1,30 @@
package org.launchcode.techjobs.persistent.models;

import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
import java.util.Objects;


@MappedSuperclass
public abstract class AbstractEntity {


@Id
@GeneratedValue
private int id;

@NotBlank(message = "This is a required field. Must not be blank.")
@Size(min = 3, max = 120, message = "Name must be between 3 and 120 characters.")
private String name;



public void setId(int id) {
this.id = id;
}

public int getId() {
return id;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,40 @@
package org.launchcode.techjobs.persistent.models;

import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
import java.util.ArrayList;
import java.util.List;

@Entity
public class Employer extends AbstractEntity {

@NotBlank(message = "This is a required field. Must not be blank.")
@Size(min = 3, max = 120, message = "Name must be between 3 and 120 characters.")
private String location;

@OneToMany
@JoinColumn(name = "employer_id")
private final List<Job> jobs = new ArrayList<>();

public Employer(String location) {
this.location = location;
}

public Employer() {
}

public String getLocation() {
return location;
}

public void setLocation(String location) {
this.location = location;
}

public List<Job> getJobs() {
return jobs;
}
}
Loading