diff --git a/src/main/java/io/zipcoder/persistenceapp/department/Department.java b/src/main/java/io/zipcoder/persistenceapp/department/Department.java new file mode 100644 index 0000000..5dfefb9 --- /dev/null +++ b/src/main/java/io/zipcoder/persistenceapp/department/Department.java @@ -0,0 +1,51 @@ +package io.zipcoder.persistenceapp.department; + +import io.zipcoder.persistenceapp.employee.Employee; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; + +@Entity +public class Department { + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Long depId; + private String depName; + private Employee depManager; + + public Department() { + } + + public Department(Long depId, String depName, Employee depManager) { + this.depId = depId; + this.depName = depName; + this.depManager = depManager; + } + + public Long getDepId() { + return depId; + } + + public void setDepId(Long depId) { + this.depId = depId; + } + + public String getDepName() { + return depName; + } + + public void setDepName(String depName) { + this.depName = depName; + } + + public Employee getDepManager() { + return depManager; + } + + public void setDepManager(Employee depManager) { + this.depManager = depManager; + } +} diff --git a/src/main/java/io/zipcoder/persistenceapp/department/DepartmentController.java b/src/main/java/io/zipcoder/persistenceapp/department/DepartmentController.java new file mode 100644 index 0000000..4d85fd4 --- /dev/null +++ b/src/main/java/io/zipcoder/persistenceapp/department/DepartmentController.java @@ -0,0 +1,45 @@ +package io.zipcoder.persistenceapp.department; + + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequestMapping(value = "/dep") +public class DepartmentController { + + @Autowired + DepartmentService service; + + @PostMapping("/dept/create") + public ResponseEntity create( + @RequestBody Department department) { + return new ResponseEntity<>(service.create(department), HttpStatus.CREATED); + } + + @GetMapping("/dept/{id}") + public ResponseEntity findById( + @PathVariable Long id) { + return new ResponseEntity<>(service.read(id), HttpStatus.OK); + } + + @GetMapping("/dept/depts") + public ResponseEntity> findAll() { + return new ResponseEntity<>(service.readAll(), HttpStatus.OK); + } + + @PutMapping("/dept/update/{id}") + public ResponseEntity update( + @PathVariable Long id, + @RequestBody Department department) { + return new ResponseEntity<>(service.updateManager(id, department), HttpStatus.OK); + } + + @DeleteMapping("/dept/delete/{id}") + public ResponseEntity delete( + @PathVariable Long id) { + return new ResponseEntity<>(service.delete(id), HttpStatus.OK); + } +} diff --git a/src/main/java/io/zipcoder/persistenceapp/department/DepartmentRepo.java b/src/main/java/io/zipcoder/persistenceapp/department/DepartmentRepo.java new file mode 100644 index 0000000..c38f090 --- /dev/null +++ b/src/main/java/io/zipcoder/persistenceapp/department/DepartmentRepo.java @@ -0,0 +1,8 @@ +package io.zipcoder.persistenceapp.department; + +import org.springframework.data.repository.CrudRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface DepartmentRepo extends CrudRepository { +} diff --git a/src/main/java/io/zipcoder/persistenceapp/department/DepartmentService.java b/src/main/java/io/zipcoder/persistenceapp/department/DepartmentService.java new file mode 100644 index 0000000..629f8a8 --- /dev/null +++ b/src/main/java/io/zipcoder/persistenceapp/department/DepartmentService.java @@ -0,0 +1,54 @@ +package io.zipcoder.persistenceapp.department; + + +import io.zipcoder.persistenceapp.employee.Employee; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class DepartmentService { + + @Autowired + private DepartmentRepo repo; + + public Department create(Department dep) { + return repo.save(dep); + } + + public Department read(Long id) { + return repo.findOne(id); + } + + public List readAll() { + Iterable departmentIterable = repo.findAll(); + List depList = new ArrayList<>(); + departmentIterable.forEach(depList::add); + return depList; + } + + // could integrate passing an Employee through name to update manager + public Department updateManager(Long id, Department department) { + Department inDb = read(id); + inDb.setDepManager(department.getDepManager()); + inDb = repo.save(inDb); + return inDb; + } + + public Department delete(Long id) { + Department dep = read(id); + repo.delete(dep); + return dep; + } + + public Department delete(Department dep) { + return delete(dep.getDepId()); + } + + public List delete(List listToDelete) { + listToDelete.forEach(repo::delete); + return listToDelete; + } +} diff --git a/src/main/java/io/zipcoder/persistenceapp/employee/Employee.java b/src/main/java/io/zipcoder/persistenceapp/employee/Employee.java new file mode 100644 index 0000000..06bfded --- /dev/null +++ b/src/main/java/io/zipcoder/persistenceapp/employee/Employee.java @@ -0,0 +1,120 @@ +package io.zipcoder.persistenceapp.employee; + +import org.springframework.web.bind.annotation.PathVariable; + +import javax.persistence.*; +import java.util.Date; + +@Entity +public class Employee { + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Long employeeNum; + private String firstName; + private String lastName; + private String title; + private String phoneNumber; + private String email; + private Date hireDate; + @OneToOne(cascade = CascadeType.ALL) + @JoinColumn(name = "manager_id", referencedColumnName = "id") + private Employee manager; +// private Integer depNum; + + public Employee() { + } + + public Employee(Long employeeNum, + String firstName, + String lastName, + String title, + String phoneNumber, + String email, + Date hireDate, + Employee manager +// Integer depNum + ) { + this.employeeNum = employeeNum; + this.firstName = firstName; + this.lastName = lastName; + this.title = title; + this.phoneNumber = phoneNumber; + this.email = email; + this.hireDate = hireDate; + this.manager = manager; +// this.depNum = depNum; + } + + public Long getEmployeeNum() { + return employeeNum; + } + + public void setEmployeeNum(Long employeeNum) { + this.employeeNum = employeeNum; + } + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getPhoneNumber() { + return phoneNumber; + } + + public void setPhoneNumber(String phoneNumber) { + this.phoneNumber = phoneNumber; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public Date getHireDate() { + return hireDate; + } + + public void setHireDate(Date hireDate) { + this.hireDate = hireDate; + } + + public Employee getManager() { + return manager; + } + + public void setManager(Employee manager) { + this.manager = manager; + } + +// public Integer getDepNum() { +// return depNum; +// } +// +// public void setDepNum(Integer depNum) { +// this.depNum = depNum; +// } +} diff --git a/src/main/java/io/zipcoder/persistenceapp/employee/EmployeeController.java b/src/main/java/io/zipcoder/persistenceapp/employee/EmployeeController.java new file mode 100644 index 0000000..4a51672 --- /dev/null +++ b/src/main/java/io/zipcoder/persistenceapp/employee/EmployeeController.java @@ -0,0 +1,46 @@ +package io.zipcoder.persistenceapp.employee; + + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequestMapping +public class EmployeeController { + + @Autowired + EmployeeService service; + + @PostMapping("/employee/create") + public ResponseEntity create( + @RequestBody Employee employee) { + return new ResponseEntity<>(service.create(employee), HttpStatus.CREATED); + } + + @GetMapping("/employee/{id}") + public ResponseEntity findById( + @PathVariable Long id) { + return new ResponseEntity<>(service.read(id), HttpStatus.OK); + } + + @GetMapping("/employee/employees") + public ResponseEntity> findAll() { + return new ResponseEntity<>(service.readAll(), HttpStatus.OK); + } + + @PutMapping("/employee/update/{id}") + public ResponseEntity updateFields( + @PathVariable Long id, + @RequestBody Employee employee) { + return new ResponseEntity<>(service.updateFields(id, employee), HttpStatus.OK); + } + + @DeleteMapping("/employee/delete/{id}") + public ResponseEntity delete( + @PathVariable Long id) { + return new ResponseEntity<>(service.delete(id), HttpStatus.OK); + } + +} diff --git a/src/main/java/io/zipcoder/persistenceapp/employee/EmployeeRepo.java b/src/main/java/io/zipcoder/persistenceapp/employee/EmployeeRepo.java new file mode 100644 index 0000000..ba42c38 --- /dev/null +++ b/src/main/java/io/zipcoder/persistenceapp/employee/EmployeeRepo.java @@ -0,0 +1,9 @@ +package io.zipcoder.persistenceapp.employee; + + +import org.springframework.data.repository.CrudRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface EmployeeRepo extends CrudRepository { +} diff --git a/src/main/java/io/zipcoder/persistenceapp/employee/EmployeeService.java b/src/main/java/io/zipcoder/persistenceapp/employee/EmployeeService.java new file mode 100644 index 0000000..61275d7 --- /dev/null +++ b/src/main/java/io/zipcoder/persistenceapp/employee/EmployeeService.java @@ -0,0 +1,71 @@ +package io.zipcoder.persistenceapp.employee; + + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class EmployeeService { + + @Autowired + private EmployeeRepo repo; + + public Employee create(Employee person) { + return repo.save(person); + } + + public Employee read(Long id) { + return repo.findOne(id); + } + + public List readAll() { + Iterable employeeIterable = repo.findAll(); + List employees = new ArrayList<>(); + employeeIterable.forEach(employees::add); + return employees; + } + + public List readOfManager(Employee managerName) { + List entireList = readAll(); + List result = new ArrayList<>(); + entireList.forEach(employee -> { + if (employee.getEmployeeNum().equals(managerName.getEmployeeNum())) { + result.add(employee); + } + }); + return result; + } + + // no update for hiredate/employee ID //// or DepKey (as of right now) + public Employee updateFields(Long id, Employee em) { + Employee inDb = read(id); + inDb.setFirstName(em.getFirstName()); + inDb.setLastName(em.getLastName()); + inDb.setTitle(em.getTitle()); + inDb.setPhoneNumber(em.getPhoneNumber()); + inDb.setEmail(em.getEmail()); + inDb = repo.save(inDb); + return inDb; + } + + public Employee updateManager(Long id, Employee newManager) { + Employee inDb = read(id); + inDb.setManager(newManager); + inDb = repo.save(inDb); + return inDb; + } + + public Employee delete(Long id) { + Employee em = read(id); + repo.delete(id); + return em; + } + + public Employee delete(Employee employee) { + return delete(employee.getEmployeeNum()); + } + +}