개발자 정보 삭제

김태은·2022년 4월 30일
0

개발자 정보 삭제하기

  1. RetiredDeveloper entity를 따로 생성하기
  • 퇴직한 개발자의 정보 따로 저장

@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;


}
  • memberId와 이름, 퇴직한 날짜와 정보를 수정한 날짜를 저장해준다.
  1. Developer Entity에 StatusCode를 추가한다.
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;
}
  • 개발자가 고용상태인지, 퇴직 상태인지 상태 코드를 통해 나타냄
  1. RetiredDeveloperRepository 생성
  • 퇴직한 개발자의 정보를 따로 저장
@Repository
public interface RetiredDeveloperRepository
        extends JpaRepository<RetiredDeveloper, Long> {

}deleteDeveloper
  1. Controller에 deleteDeveloper함수 생성
 @DeleteMapping("/developers/{memberId}")
    public DeveloperDetailDto deleteDeveloper(@PathVariable String memberId){
        return dMakerService.deleteDeveloper(memberId);
    }
  • DeleteMapping 이용
  1. DMakerService에 deleteDeveloper함수 생성
 @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);

    }
  1. 전체 개발자 조회를 현직자만 조회가 가능하도록 수정
 public List<DeveloperDto> getAllEmployedDevelopers() {
        return developerRepository.findDevelopersByStatusCodeEquals(StatusCode.EMPLOYED)
                .stream().map(DeveloperDto::fromEntity)
                .collect(Collectors.toList());
    }
  1. 테스트

  • 상태 코드가 EMPLOYED -> RETIRED로 변경
  • RETIRED_DEVELOPER 테이블에 개발자 정보 저장됨

-> 성공적으로 동작

0개의 댓글