좋아요는 아니고 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는 없다..
'🌿SPRING > 🌱연습[SPRING]' 카테고리의 다른 글
[SPRING] [AWS] 게시글 이미지 업로드 하기 (2) - 이미지 업로드하기 (0) | 2022.09.23 |
---|---|
[SPRING] [AWS] 게시글 이미지 업로드 하기 (1) - S3 설정하기 (0) | 2022.09.23 |
[SPRING] 좋아요 토글 만들기 (0,1) (0) | 2022.09.22 |
[SPRING] 클론코딩 장바구니 로직 만들기 (0) | 2022.09.15 |
[SPRING] 회원정보 조회 로직 만들기 (0) | 2022.09.08 |