diff --git a/.gitignore b/.gitignore index 524f096..17f62d1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ # Compiled class file -*.class +#*.class # Log file *.log diff --git a/.idea/material_theme_project_new.xml b/.idea/material_theme_project_new.xml new file mode 100644 index 0000000..e68af01 --- /dev/null +++ b/.idea/material_theme_project_new.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 0000000..0cadd67 --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + { + "lastFilter": { + "state": "OPEN", + "assignee": "cjsqudwns" + } +} + + + + { + "selectedUrlAndAccountId": { + "url": "https://github.com/KingZuto/notice-board-practice.git", + "accountId": "04a02cd4-e822-46fb-9d88-a777ae4ac761" + } +} + + + { + "associatedIndex": 8 +} + + + + + + + + + + + + + + + + + + + + + + + + + + + 1747031575053 + + + + + + \ No newline at end of file diff --git a/src/main/java/app/api/controller/EmpAPIController.java b/src/main/java/app/api/controller/EmpAPIController.java new file mode 100644 index 0000000..80f9f5e --- /dev/null +++ b/src/main/java/app/api/controller/EmpAPIController.java @@ -0,0 +1,25 @@ +package app.api.controller; + +import app.dto.EmpDto; +import app.entity.Dept; +import app.entity.Emp; +import app.repository.EmpRepository; +import app.service.EmpService; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +@RequiredArgsConstructor +@RestController +@RequestMapping("/api") +public class EmpAPIController { + + private final EmpService empService; + + @PutMapping("/emp/{empno}") + public EmpDto updateEmp(@RequestBody EmpDto updateEmp, @PathVariable("empno") Integer empno) { + + Emp emp = empService.updateEmp(updateEmp, empno); + + return EmpDto.from(emp); + } +} \ No newline at end of file diff --git a/src/main/java/app/dto/EmpDto.java b/src/main/java/app/dto/EmpDto.java new file mode 100644 index 0000000..0059e77 --- /dev/null +++ b/src/main/java/app/dto/EmpDto.java @@ -0,0 +1,43 @@ +package app.dto; + +import app.entity.Emp; +import lombok.Getter; +import lombok.ToString; + +import java.time.LocalDate; + +@ToString +@Getter +public class EmpDto { + private Integer empno; + private String ename; + private String job; + private Integer mgr; + private LocalDate hiredate; + private Double sal; + private Double comm; + private Integer deptno; + + public EmpDto(Integer empno, String ename, String job, Integer mgr, LocalDate hiredate, Double sal, Double comm, Integer deptno) { + this.empno = empno; + this.ename = ename; + this.job = job; + this.mgr = mgr; + this.hiredate = hiredate; + this.sal = sal; + this.comm = comm; + this.deptno = deptno; + } + + public static EmpDto of(Integer empno, String ename, String job, Integer mgr, LocalDate hiredate, Double sal, Double comm, Integer deptno) { + return new EmpDto(empno, ename, job, mgr, hiredate, sal, comm, deptno); + } + + public static EmpDto from(Emp emp){ + return of(emp.getEmpno(), emp.getEname(), emp.getJob(), emp.getMgr(), emp.getHiredate(), emp.getSal(), emp.getComm(), emp.getDept().getDeptno()); + } +} + + + + diff --git a/src/main/java/app/entity/Emp.java b/src/main/java/app/entity/Emp.java new file mode 100644 index 0000000..bb09461 --- /dev/null +++ b/src/main/java/app/entity/Emp.java @@ -0,0 +1,67 @@ +package app.entity; + +import app.dto.EmpDto; +import app.entity.Dept; +import jakarta.persistence.*; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.ToString; + +import java.time.LocalDate; + +@NoArgsConstructor +@Getter +@ToString +@Builder +@Entity +public class Emp { + @Id + @Column(name = "empno") + private Integer empno; + + @Column(name = "ename") + private String ename; + + @Column(name = "job") + private String job; + + @Column(name = "mgr") + private Integer mgr; + + @Column(name = "hiredate") + private LocalDate hiredate; + + @Column(name = "sal") + private Double sal; + + @Column(name = "comm") + private Double comm; + + @ManyToOne + @JoinColumn(name = "deptno") + private Dept dept; + + @Builder + public Emp(int empno, String ename, String job, Integer mgr, LocalDate hiredate, Double sal, Double comm, Dept dept) { + this.empno = empno; + this.ename = ename; + this.job = job; + this.mgr = mgr; + this.hiredate = hiredate; + this.sal = sal; + this.comm = comm; + this.dept = dept; + } + + public void updateInfo(EmpDto updateEmp, Dept updateDept) { + this.empno = updateEmp.getEmpno(); + this.ename = updateEmp.getEname(); + this.job = updateEmp.getJob(); + this.mgr = updateEmp.getMgr(); + this.hiredate = updateEmp.getHiredate(); + this.sal = updateEmp.getSal(); + this.comm = updateEmp.getComm(); + this.dept = updateDept; + } +} \ No newline at end of file diff --git a/src/main/java/app/service/EmpService.java b/src/main/java/app/service/EmpService.java new file mode 100644 index 0000000..7ef3b88 --- /dev/null +++ b/src/main/java/app/service/EmpService.java @@ -0,0 +1,32 @@ +package app.service; + +import app.dto.EmpDto; +import app.entity.Dept; +import app.entity.Emp; +import app.repository.DeptRepository; +import app.repository.EmpRepository; +import jakarta.persistence.EntityNotFoundException; +import jakarta.transaction.Transactional; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.web.bind.annotation.PathVariable; + +@RequiredArgsConstructor +@Service +public class EmpService { + + private final EmpRepository empRepository; + private final DeptRepository deptRepository; + + @Transactional + public Emp updateEmp(EmpDto updateEmp, Integer empno) { + Emp emp = empRepository.findById(empno) + .orElseThrow(() -> new EntityNotFoundException("해당 직원의 정보가 존재하지 않습니다.")); + Dept dept =deptRepository.findById(updateEmp.getDeptno()) + .orElseThrow(() -> new EntityNotFoundException("해당 부서가 존재하지 않습니다.")); + + emp.updateInfo(updateEmp, dept); + + return emp; + } +} diff --git a/target/classes/app/AppApplication.class b/target/classes/app/AppApplication.class new file mode 100644 index 0000000..20cb62e Binary files /dev/null and b/target/classes/app/AppApplication.class differ diff --git a/target/classes/app/api/controller/DeptAPIController.class b/target/classes/app/api/controller/DeptAPIController.class new file mode 100644 index 0000000..df187a2 Binary files /dev/null and b/target/classes/app/api/controller/DeptAPIController.class differ diff --git a/target/classes/app/api/controller/EmpAPIController.class b/target/classes/app/api/controller/EmpAPIController.class new file mode 100644 index 0000000..0b183ff Binary files /dev/null and b/target/classes/app/api/controller/EmpAPIController.class differ diff --git a/target/classes/app/dto/EmpDto.class b/target/classes/app/dto/EmpDto.class new file mode 100644 index 0000000..4155aa8 Binary files /dev/null and b/target/classes/app/dto/EmpDto.class differ diff --git a/target/classes/app/entity/Dept.class b/target/classes/app/entity/Dept.class new file mode 100644 index 0000000..74a161c Binary files /dev/null and b/target/classes/app/entity/Dept.class differ diff --git a/target/classes/app/entity/Emp$EmpBuilder.class b/target/classes/app/entity/Emp$EmpBuilder.class new file mode 100644 index 0000000..326106a Binary files /dev/null and b/target/classes/app/entity/Emp$EmpBuilder.class differ diff --git a/target/classes/app/entity/Emp.class b/target/classes/app/entity/Emp.class new file mode 100644 index 0000000..4fed943 Binary files /dev/null and b/target/classes/app/entity/Emp.class differ diff --git a/target/classes/app/repository/DeptRepository.class b/target/classes/app/repository/DeptRepository.class new file mode 100644 index 0000000..d1d38da Binary files /dev/null and b/target/classes/app/repository/DeptRepository.class differ diff --git a/target/classes/app/repository/EmpRepository.class b/target/classes/app/repository/EmpRepository.class new file mode 100644 index 0000000..fe69663 Binary files /dev/null and b/target/classes/app/repository/EmpRepository.class differ diff --git a/target/classes/app/service/DeptService.class b/target/classes/app/service/DeptService.class new file mode 100644 index 0000000..f05a220 Binary files /dev/null and b/target/classes/app/service/DeptService.class differ diff --git a/target/classes/app/service/EmpService.class b/target/classes/app/service/EmpService.class new file mode 100644 index 0000000..c833f9d Binary files /dev/null and b/target/classes/app/service/EmpService.class differ diff --git a/target/test-classes/app/AppApplicationTests.class b/target/test-classes/app/AppApplicationTests.class new file mode 100644 index 0000000..8000bb3 Binary files /dev/null and b/target/test-classes/app/AppApplicationTests.class differ