🌿SPRING/🌱연습[SPRING]

[SPRING] 토글 만들기 (Boolean)

디카페인라떼 2022. 9. 22. 23:05

좋아요는 아니고 TodoList에서 완료 체크를 하는 부분을 구현했었다. 이거는 내가 직접 구현했던 터라...

예전에 했던 걸 보면서 확인했는데 훨씬 간결하다 ㅎㅎㅎ..

 


1.Entity 설정
  • To do 항목에 대한 완료 설정으로 딱히 Table로 저장될 필요가 없었다. 
@Getter
@NoArgsConstructor
@Entity
public class ToDo extends Timestamped {

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long id;

  private String title;

  private String content;

  private String tag;

  // boolean 으로 지정
  private boolean done;

  @ManyToOne(fetch = FetchType.LAZY)
  private Member member;
public ToDo(ToDoCreateRequestDto toDoCreateRequestDto, Member member) {
  this.title = toDoCreateRequestDto.getTitle();
  this.content = toDoCreateRequestDto.getContent();
  this.tag = toDoCreateRequestDto.getTag();
  this.done = false;
  this.member = member;
}
// done : false 미완료 / true 완료

👉 생성자 방식으로 일단 투두 작성시 false로 지정.

public void updateDone(ToDoUpdateDoneRequestDto toDoUpdateDoneRequestDto) {
  this.done = toDoUpdateDoneRequestDto.isDone();
}

👉 완료 체크시 

 

2.Dto
@Getter
public class ToDoRequestDto {

  @Getter
  public static class ToDoCreateRequestDto{

    private String title;

    private String content;

    private String tag;
  }


  @Getter
  public static class ToDoUpdateRequestDto{

    private String title;

    private String content;

    private String tag;

    private boolean done;
  }


  @Getter
  public static class ToDoUpdateDoneRequestDto{

    private Long id;

    private boolean done;
  }

👉 괜히 Dto 늘리기 싫었나보다......ㅎㅎㅎ

 

3.Service
@Override
@Transactional
public ToDoResponseDto updateDone(Long id, ToDoUpdateDoneRequestDto toDoUpdateDoneRequestDto) {
  ToDo toDo = toDoRepository.findById(toDoUpdateDoneRequestDto.getId()).orElseThrow(EntityNotFoundException::new);

  UserDetailsImpl userDetails = (UserDetailsImpl) SecurityContextHolder.getContext()
      .getAuthentication().getPrincipal();

  Member currentMember = userDetails.getMember();

  if (!Objects.equals(toDo.getMember().getId(), currentMember.getId())) {
    throw new CustomException(ErrorCode.NOT_SAME_MEMBER);
  }
  
//완료버튼을 누르면 업데이트되고
  toDo.updateDone(toDoUpdateDoneRequestDto);
//저장
  toDo = toDoRepository.save(toDo);

  return new ToDoResponseDto(toDo);
}

 

4.Controller
// update done
@PutMapping("/api/todo/{id}/done")
public ResponseDto<ToDoResponseDto> updateDone(@PathVariable Long id, @RequestBody ToDoUpdateDoneRequestDto toDoUpdateDoneRequestDto){
  ToDoResponseDto toDoResponseDto;
  try{
    toDoResponseDto = toDoService.updateDone(id, toDoUpdateDoneRequestDto);
  }catch (EntityNotFoundException e){
    log.error(e.getMessage());
    return new ResponseDto<>(null,ErrorCode.ENTITY_NOT_FOUND);
  }catch (Exception e){
    log.error(e.getMessage());
    return new ResponseDto<>(null,ErrorCode.INVALID_ERROR);
  }

  return new ResponseDto<>(toDoResponseDto);
}

 


👉 업데이트라 PUT 메소드로 해주었고 토글로 확인만 하는 부분이라 count는 없다..