@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Entity
@EntityListeners(AuditingEntityListener.class)
public class RetiredDeveloper {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
protected Long id;
private String memberId;
private String name;
@CreatedDate
private LocalDateTime createAt;
@LastModifiedDate
private LocalDateTime updateAt;
}
public class Developer {
...
@Enumerated(EnumType.STRING)
private StatusCode statusCode;
...
}
package com.fastcampus.programming.dmaker.code;
import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter
@AllArgsConstructor
public enum StatusCode {
EMPLOYED("고용"),
RETIRED("퇴직");
private final String description;
}
@Repository
public interface RetiredDeveloperRepository
extends JpaRepository<RetiredDeveloper, Long> {
}deleteDeveloper
@DeleteMapping("/developers/{memberId}")
public DeveloperDetailDto deleteDeveloper(@PathVariable String memberId){
return dMakerService.deleteDeveloper(memberId);
}
@Transactional // db의 값들을 변경해줄 때 되도록 붙여준다.
public DeveloperDetailDto deleteDeveloper(String memberId) {
//1. EMPLOYED -> RETIRED
Developer developer = developerRepository.findByMemberId(memberId)
.orElseThrow(()-> new DMakerException(NO_DEVELOPER));
developer.setStatusCode(StatusCode.RETIRED);
//2. save into RetiredDeveloper
RetiredDeveloper retiredDeveloper = RetiredDeveloper.builder()
.memberId(memberId)
.name(developer.getName())
.build();
retiredDeveloperRepository.save(retiredDeveloper);
return DeveloperDetailDto.fromEntity(developer);
}
public List<DeveloperDto> getAllEmployedDevelopers() {
return developerRepository.findDevelopersByStatusCodeEquals(StatusCode.EMPLOYED)
.stream().map(DeveloperDto::fromEntity)
.collect(Collectors.toList());
}
테스트
-> 성공적으로 동작