From 07c4ad0343376682dc5623bc8c0304ca44d695d0 Mon Sep 17 00:00:00 2001 From: jiyunio Date: Fri, 27 Dec 2024 01:42:21 +0900 Subject: [PATCH] =?UTF-8?q?[Refactor]=20todo=EC=99=80=20todolist=20?= =?UTF-8?q?=EC=97=B0=EA=B4=80=EA=B4=80=EA=B3=84=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/category/CategoryService.java | 6 +--- .../domain/category/dto/CategoryReq.java | 16 +++------ .../domain/category/dto/CategoryRes.java | 6 ++-- .../domain/member/dto/req/ChangePwReq.java | 10 +++--- .../domain/member/dto/req/SignInReq.java | 10 +++--- .../domain/member/dto/req/SignUpReq.java | 13 ++++---- .../domain/member/dto/res/MemberRes.java | 19 ++++------- .../domain/member/dto/res/SignInRes.java | 4 +-- .../todolist/domain/todo/TodoController.java | 6 ++-- .../domain/todo/TodoListRepository.java | 9 +++-- .../todolist/domain/todo/TodoRepository.java | 3 +- .../todolist/domain/todo/TodoService.java | 33 +++++++++++-------- .../todolist/domain/todo/domain/Todo.java | 5 ++- .../todolist/domain/todo/domain/TodoList.java | 9 ++--- .../domain/todo/dto/CreateTodoReq.java | 9 +++-- .../todolist/domain/todo/dto/TodoListRes.java | 13 ++++---- .../todolist/domain/todo/dto/TodoRes.java | 11 +++---- .../domain/todo/dto/UpdateTodoReq.java | 9 ++--- .../global/customError/ErrorCode.java | 3 +- 19 files changed, 91 insertions(+), 103 deletions(-) diff --git a/src/main/java/com/jiyunio/todolist/domain/category/CategoryService.java b/src/main/java/com/jiyunio/todolist/domain/category/CategoryService.java index dd26cc9..11da6fc 100644 --- a/src/main/java/com/jiyunio/todolist/domain/category/CategoryService.java +++ b/src/main/java/com/jiyunio/todolist/domain/category/CategoryService.java @@ -5,11 +5,8 @@ import com.jiyunio.todolist.domain.member.Member; import com.jiyunio.todolist.domain.member.MemberRepository; import com.jiyunio.todolist.domain.todo.TodoListRepository; -import com.jiyunio.todolist.domain.todo.TodoRepository; import com.jiyunio.todolist.domain.todo.TodoService; import com.jiyunio.todolist.domain.todo.domain.TodoList; -import com.jiyunio.todolist.domain.todo.dto.TodoListRes; -import com.jiyunio.todolist.domain.todo.dto.TodoRes; import com.jiyunio.todolist.global.customError.CustomException; import com.jiyunio.todolist.global.customError.ErrorCode; import lombok.RequiredArgsConstructor; @@ -19,7 +16,6 @@ import java.util.ArrayList; import java.util.List; -import java.util.Objects; @Service @RequiredArgsConstructor @@ -88,7 +84,7 @@ public void deleteCategory(String userId, Long categoryId) { throw new CustomException(HttpStatus.BAD_REQUEST, ErrorCode.NO_ANYMORE_CATEGORY); } // 카테고리 삭제시, 관련 todo도 함께 삭제 - List todoList = todoListRepository.findAllByUserIdANDCategoryId(userId, categoryId); + List todoList = todoListRepository.findAllByUserIdAndCategoryId(userId, categoryId); todoListRepository.deleteAll(todoList); categoryRepository.deleteById(categoryId); } diff --git a/src/main/java/com/jiyunio/todolist/domain/category/dto/CategoryReq.java b/src/main/java/com/jiyunio/todolist/domain/category/dto/CategoryReq.java index 94082f8..577a2a0 100644 --- a/src/main/java/com/jiyunio/todolist/domain/category/dto/CategoryReq.java +++ b/src/main/java/com/jiyunio/todolist/domain/category/dto/CategoryReq.java @@ -2,26 +2,20 @@ import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; -import lombok.Builder; -import lombok.Getter; -import lombok.Setter; +import lombok.*; @Getter @Setter +@Builder @Schema(description = "category 생성 & 조회 & 수정") +@RequiredArgsConstructor(access = AccessLevel.PRIVATE) public class CategoryReq { @NotBlank @Schema(description = "category 내용", example = "약속") - private String content; + private final String content; @NotBlank @Schema(description = "category 색깔 (# 제외)", example = "FFFFFF") - private String color; - - @Builder - protected CategoryReq(String content, String color) { - this.content = content; - this.color = color; - } + private final String color; } diff --git a/src/main/java/com/jiyunio/todolist/domain/category/dto/CategoryRes.java b/src/main/java/com/jiyunio/todolist/domain/category/dto/CategoryRes.java index 2beb377..4ae6ef8 100644 --- a/src/main/java/com/jiyunio/todolist/domain/category/dto/CategoryRes.java +++ b/src/main/java/com/jiyunio/todolist/domain/category/dto/CategoryRes.java @@ -12,13 +12,13 @@ public class CategoryRes { @NotNull @Schema(description = "category Id", example = "1") - private Long categoryId; + private final Long categoryId; @NotBlank @Schema(description = "category 내용", example = "약속") - private String content; + private final String content; @NotBlank @Schema(description = "category 색깔 (# 제외)", example = "FFFFFF") - private String color; + private final String color; } diff --git a/src/main/java/com/jiyunio/todolist/domain/member/dto/req/ChangePwReq.java b/src/main/java/com/jiyunio/todolist/domain/member/dto/req/ChangePwReq.java index 8d16e33..aaef8b8 100644 --- a/src/main/java/com/jiyunio/todolist/domain/member/dto/req/ChangePwReq.java +++ b/src/main/java/com/jiyunio/todolist/domain/member/dto/req/ChangePwReq.java @@ -3,23 +3,23 @@ import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.Pattern; -import lombok.Getter; -import lombok.Setter; +import lombok.*; @Getter @Setter @Schema(description = "회원 비밀번호 수정") +@RequiredArgsConstructor(access = AccessLevel.PRIVATE) public class ChangePwReq { @NotBlank(message = "비밀번호를 입력하세요.") @Schema(description = "회원 기존 비밀번호", example = "qwe123!") - private String userPw; + private final String userPw; @NotBlank(message = "변경 비밀번호를 입력하세요.") @Pattern(regexp = "(?=.*[0-9])(?=.*[a-zA-Z])(?=.*\\W)(?=\\S+$).{8,16}") @Schema(description = "회원 변경 비밀번호", example = "qwer1234!") - private String changePw; + private final String changePw; @NotBlank(message = "확인 비밀번호를 입력하세요.") @Schema(description = "회원 변경 확인 비밀번호", example = "qwer1234!") - private String confirmChangePw; + private final String confirmChangePw; } diff --git a/src/main/java/com/jiyunio/todolist/domain/member/dto/req/SignInReq.java b/src/main/java/com/jiyunio/todolist/domain/member/dto/req/SignInReq.java index 0308667..9dde863 100644 --- a/src/main/java/com/jiyunio/todolist/domain/member/dto/req/SignInReq.java +++ b/src/main/java/com/jiyunio/todolist/domain/member/dto/req/SignInReq.java @@ -2,17 +2,17 @@ import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; -import lombok.Getter; -import lombok.Setter; +import lombok.*; @Getter @Setter +@RequiredArgsConstructor(access = AccessLevel.PRIVATE) public class SignInReq { @NotBlank(message = "아이디를 입력하세요.") @Schema(description = "회원의 userId", example = "qwe123") - private String userId; + private final String userId; @NotBlank(message = "비밀번호를 입력하세요.") @Schema(description = "회원의 비밀번호", example = "qwer123!") - private String userPw; -} + private final String userPw; +} \ No newline at end of file diff --git a/src/main/java/com/jiyunio/todolist/domain/member/dto/req/SignUpReq.java b/src/main/java/com/jiyunio/todolist/domain/member/dto/req/SignUpReq.java index 3cb667c..64b78df 100644 --- a/src/main/java/com/jiyunio/todolist/domain/member/dto/req/SignUpReq.java +++ b/src/main/java/com/jiyunio/todolist/domain/member/dto/req/SignUpReq.java @@ -3,29 +3,28 @@ import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.Pattern; -import lombok.Getter; -import lombok.Setter; +import lombok.*; @Getter @Setter @Schema(description = "회원가입") +@RequiredArgsConstructor(access = AccessLevel.PRIVATE) public class SignUpReq { - @NotBlank(message = "아이디를 입력하세요.") @Pattern(regexp = "(?=.*[a-zA-Z])(?=\\S+$).{5,10}", message = "아이디 : 5~10자") @Schema(description = "회원의 userId \n\n- 영문 대/소문자 5~10자", example = "qwe123") - private String userId; + private final String userId; @NotBlank(message = "비밀번호를 입력하세요.") @Pattern(regexp = "(?=.*[0-9])(?=.*[a-zA-Z])(?=.*\\W)(?=\\S+$).{8,16}", message = "비밀번호: 8~16자의 영문 대/소문자, 숫자, 특수문자를 사용하십쇼.") @Schema(description = "회원의 비밀번호 \n\n- 8~16자의 영문 대/소문자, 숫자, 특수문자", example = "qwer123!") - private String userPw; + private final String userPw; @NotBlank(message = "확인 비밀번호를 입력하세요.") @Schema(description = "회원 확인 비밀번호", example = "qwer123!") - private String confirmUserPw; + private final String confirmUserPw; @NotBlank(message = "닉네임을 입력하세요.") @Schema(description = "닉네임", example = "곽두철") - private String nickname; + private final String nickname; } diff --git a/src/main/java/com/jiyunio/todolist/domain/member/dto/res/MemberRes.java b/src/main/java/com/jiyunio/todolist/domain/member/dto/res/MemberRes.java index 6993fdd..807d8db 100644 --- a/src/main/java/com/jiyunio/todolist/domain/member/dto/res/MemberRes.java +++ b/src/main/java/com/jiyunio/todolist/domain/member/dto/res/MemberRes.java @@ -4,31 +4,24 @@ import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; -import lombok.Builder; -import lombok.Getter; -import lombok.Setter; +import lombok.*; @Getter @Setter +@Builder +@AllArgsConstructor(access = AccessLevel.PRIVATE) public class MemberRes { @NotNull @Schema(description = "회원의 Id", example = "1") - private Long memberId; + private final Long memberId; @NotBlank @Schema(description = "회원의 userId", example = "jiyun123") - private String userId; + private final String userId; @NotBlank @Schema(description = "회원의 userId", example = "jiyun123") - private String nickname; - - @Builder - private MemberRes(Long memberId, String userId, String nickname) { - this.memberId = memberId; - this.userId = userId; - this.nickname = nickname; - } + private final String nickname; public static MemberRes from(Member member) { return MemberRes.builder() diff --git a/src/main/java/com/jiyunio/todolist/domain/member/dto/res/SignInRes.java b/src/main/java/com/jiyunio/todolist/domain/member/dto/res/SignInRes.java index 3868f09..49910c5 100644 --- a/src/main/java/com/jiyunio/todolist/domain/member/dto/res/SignInRes.java +++ b/src/main/java/com/jiyunio/todolist/domain/member/dto/res/SignInRes.java @@ -11,9 +11,9 @@ public class SignInRes { @NotBlank @Schema(description = "회원의 userId", example = "qwe123") - private String nickname; + private final String nickname; @NotBlank @Schema(description = "회원의 token") - private String token; + private final String token; } diff --git a/src/main/java/com/jiyunio/todolist/domain/todo/TodoController.java b/src/main/java/com/jiyunio/todolist/domain/todo/TodoController.java index c3cdf00..fba47f7 100644 --- a/src/main/java/com/jiyunio/todolist/domain/todo/TodoController.java +++ b/src/main/java/com/jiyunio/todolist/domain/todo/TodoController.java @@ -43,8 +43,8 @@ public ResponseEntity createTodo(@AuthenticationPrincipal CustomUserDet @Operation(summary = "todolist 생성") @ApiResponse(responseCode = "200", description = "todo 생성 성공", content = @Content(schema = @Schema(implementation = TodoRes.class))) @ApiResponse(responseCode = "404", description = "회원 X", content = @Content(schema = @Schema(implementation = ErrorDTO.class))) - public ResponseEntity createTodo(@AuthenticationPrincipal CustomUserDetails user, LocalDate localDate) { - return new ResponseEntity<>(todoService.createTodoList(user.getUsername(), localDate), HttpStatus.CREATED); + public ResponseEntity createTodo(@AuthenticationPrincipal CustomUserDetails user, @RequestParam LocalDate todoListDate) { + return new ResponseEntity<>(todoService.createTodoList(user.getUsername(), todoListDate), HttpStatus.CREATED); } @GetMapping("") @@ -73,7 +73,7 @@ public ResponseEntity deleteTodo(@Parameter(description = "todo의 .build()); } - @DeleteMapping("/{todoListId}") + @DeleteMapping("/list/{todoListId}") @Operation(summary = "todo list 삭제") @ApiResponse(responseCode = "200", description = "todo list 삭제 성공", content = @Content(schema = @Schema(implementation = ResponseDTO.class))) public ResponseEntity deleteTodoList(@Parameter(description = "todo의 id") @PathVariable Long todoListId) { diff --git a/src/main/java/com/jiyunio/todolist/domain/todo/TodoListRepository.java b/src/main/java/com/jiyunio/todolist/domain/todo/TodoListRepository.java index 584ca14..12155a4 100644 --- a/src/main/java/com/jiyunio/todolist/domain/todo/TodoListRepository.java +++ b/src/main/java/com/jiyunio/todolist/domain/todo/TodoListRepository.java @@ -3,6 +3,7 @@ import com.jiyunio.todolist.domain.todo.domain.TodoList; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; import java.time.LocalDate; @@ -15,8 +16,12 @@ public interface TodoListRepository extends JpaRepository { Optional findByUserIdAndTodoListDate(String userId, LocalDate localDate); - @Query("SELECT tl FROM TodoList tl JOIN tl.todos t WHERE t.categoryId = :categoryId and tl.userId = :userId") - List findAllByUserIdANDCategoryId(String userId, Long categoryId); + @Query("select tl from TodoList tl join Todo t on tl.id = t.todoListId where t.categoryId = :categoryId and tl.userId = :userId") + List findAllByUserIdAndCategoryId(@Param("userId") String userId, @Param("categoryId") Long categoryId); void deleteAllByUserId(String userId); + + @Query("select count(tl) > 0 from TodoList tl where tl.userId = :userId and tl.todoListDate = :todoListDate") + boolean existsByUserIdAndTodoListDate(@Param("userId") String userId, @Param("todoListDate") LocalDate todoListDate); + } diff --git a/src/main/java/com/jiyunio/todolist/domain/todo/TodoRepository.java b/src/main/java/com/jiyunio/todolist/domain/todo/TodoRepository.java index 0553c7f..0cfc08c 100644 --- a/src/main/java/com/jiyunio/todolist/domain/todo/TodoRepository.java +++ b/src/main/java/com/jiyunio/todolist/domain/todo/TodoRepository.java @@ -6,6 +6,7 @@ import java.util.List; public interface TodoRepository extends JpaRepository { - List findByCategoryId(Long categoryId); + + List findAllByTodoListId(Long todoListId); } diff --git a/src/main/java/com/jiyunio/todolist/domain/todo/TodoService.java b/src/main/java/com/jiyunio/todolist/domain/todo/TodoService.java index bf4587c..45fad1d 100644 --- a/src/main/java/com/jiyunio/todolist/domain/todo/TodoService.java +++ b/src/main/java/com/jiyunio/todolist/domain/todo/TodoService.java @@ -21,7 +21,6 @@ import java.time.LocalDate; import java.util.ArrayList; import java.util.List; -import java.util.Objects; @Slf4j @Service @@ -42,22 +41,21 @@ public TodoRes createTodo(String userId, CreateTodoReq createTodo) { () -> new CustomException(HttpStatus.NOT_FOUND, ErrorCode.NOT_EXIST_CATEGORY) ); + TodoList todoList = todoListRepository.findByUserIdAndTodoListDate(member.getUserId(), createTodo.getSetDate()).orElseThrow( + () -> new CustomException(HttpStatus.NOT_FOUND, ErrorCode.NOT_EXIST_TODOLIST) + ); + Todo todo = Todo.builder() .content(createTodo.getContent()) .checked(false) .categoryId(category.getId()) .categoryContent(category.getContent()) .categoryColor(category.getColor()) + .todoListId(todoList.getId()) .build(); todoRepository.save(todo); - TodoList todoList = todoListRepository.findByUserIdAndTodoListDate(member.getUserId(), createTodo.getSetDate()).orElseThrow( - () -> new CustomException(HttpStatus.NOT_FOUND, ErrorCode.NOT_EXIST_TODOLIST) - ); - - todoList.getTodos().add(todo); - return TodoRes.from(todo); } @@ -66,25 +64,32 @@ public TodoListRes createTodoList(String userId, LocalDate todoListDate) { // 회원 존재 안함 () -> new CustomException(HttpStatus.NOT_FOUND, ErrorCode.NOT_EXIST_MEMBER) ); + log.warn(userId, todoListDate); + if (todoListRepository.existsByUserIdAndTodoListDate(userId, todoListDate)) { + throw new CustomException(HttpStatus.CONFLICT, ErrorCode.EXIST_TODOLIST); + } TodoList todoList = TodoList.builder() .userId(member.getUserId()) .todoListDate(todoListDate) - .todos(new ArrayList<>()) .build(); - todoListRepository.save(todoList); - return TodoListRes.from(todoList); + + return TodoListRes.from(todoList, new ArrayList<>()); } public List getTodos(String userId) { List todoList = todoListRepository.findAllByUserId(userId); - if (todoList == null) { - throw new CustomException(HttpStatus.NOT_FOUND, ErrorCode.NOT_EXIST_MEMBER); + if (todoList.isEmpty()) { + throw new CustomException(HttpStatus.NOT_FOUND, ErrorCode.NOT_EXIST_TODOLIST); } - return new ArrayList<>(todoList.stream() - .map(TodoListRes::from).toList()); + return todoList.stream().map( + list -> { + List todos = todoRepository.findAllByTodoListId(list.getId()); + return TodoListRes.from(list, todos); + } + ).toList(); } public TodoRes updateTodo(Long todoId, UpdateTodoReq updateTodo) { diff --git a/src/main/java/com/jiyunio/todolist/domain/todo/domain/Todo.java b/src/main/java/com/jiyunio/todolist/domain/todo/domain/Todo.java index b8afa38..54a59f6 100644 --- a/src/main/java/com/jiyunio/todolist/domain/todo/domain/Todo.java +++ b/src/main/java/com/jiyunio/todolist/domain/todo/domain/Todo.java @@ -28,14 +28,17 @@ public class Todo { private String categoryContent; + private Long todoListId; + @Builder private Todo(String content, Boolean checked, - Long categoryId, String categoryContent, String categoryColor) { + Long categoryId, String categoryContent, String categoryColor, Long todoListId) { this.content = content; this.checked = checked; this.categoryId = categoryId; this.categoryContent = categoryContent; this.categoryColor = categoryColor; + this.todoListId = todoListId; } public void updateTodo(UpdateTodoReq updateTodoReq) { diff --git a/src/main/java/com/jiyunio/todolist/domain/todo/domain/TodoList.java b/src/main/java/com/jiyunio/todolist/domain/todo/domain/TodoList.java index 406750e..21004fc 100644 --- a/src/main/java/com/jiyunio/todolist/domain/todo/domain/TodoList.java +++ b/src/main/java/com/jiyunio/todolist/domain/todo/domain/TodoList.java @@ -6,8 +6,6 @@ import lombok.NoArgsConstructor; import java.time.LocalDate; -import java.util.ArrayList; -import java.util.List; @Entity @Getter @@ -15,19 +13,16 @@ public class TodoList { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "todo_list_id") private Long id; private String userId; private LocalDate todoListDate; - @OneToMany(cascade = CascadeType.ALL) - private List todos = new ArrayList<>(); - @Builder - private TodoList(LocalDate todoListDate, String userId, List todos) { + private TodoList(LocalDate todoListDate, String userId) { this.todoListDate = todoListDate; this.userId = userId; - this.todos = todos; } } diff --git a/src/main/java/com/jiyunio/todolist/domain/todo/dto/CreateTodoReq.java b/src/main/java/com/jiyunio/todolist/domain/todo/dto/CreateTodoReq.java index 68efc0a..5e7e4c6 100644 --- a/src/main/java/com/jiyunio/todolist/domain/todo/dto/CreateTodoReq.java +++ b/src/main/java/com/jiyunio/todolist/domain/todo/dto/CreateTodoReq.java @@ -9,20 +9,19 @@ @Getter @Setter -@Builder -@AllArgsConstructor(access = AccessLevel.PRIVATE) +@RequiredArgsConstructor(access = AccessLevel.PRIVATE) @Schema(description = "todo 생성 : todo checked 기본 값 False") public class CreateTodoReq { @NotBlank(message = "todo를 작성해주세요.") @Schema(description = "todo 내용", example = "친구랑 치킨집") - private String content; + private final String content; @NotNull @Schema(description = "category Id", example = "1") - private Long categoryId; + private final Long categoryId; @NotNull(message = "설정 일자를 선택해주세요.") @Schema(description = "todo 설정 일자", example = "YYYY-MM-DD") - private LocalDate setDate; + private final LocalDate setDate; } diff --git a/src/main/java/com/jiyunio/todolist/domain/todo/dto/TodoListRes.java b/src/main/java/com/jiyunio/todolist/domain/todo/dto/TodoListRes.java index 1f330bc..e87cb98 100644 --- a/src/main/java/com/jiyunio/todolist/domain/todo/dto/TodoListRes.java +++ b/src/main/java/com/jiyunio/todolist/domain/todo/dto/TodoListRes.java @@ -1,5 +1,6 @@ package com.jiyunio.todolist.domain.todo.dto; +import com.jiyunio.todolist.domain.todo.domain.Todo; import com.jiyunio.todolist.domain.todo.domain.TodoList; import lombok.*; @@ -11,19 +12,17 @@ @Builder @AllArgsConstructor(access = AccessLevel.PRIVATE) public class TodoListRes { - private Long todoListId; + private final Long todoListId; - private LocalDate todoListDate; + private final LocalDate todoListDate; - private boolean isToday; + private final List todoRes; - private List todoRes; - - public static TodoListRes from(TodoList todoList) { + public static TodoListRes from(TodoList todoList, List todos) { return TodoListRes.builder() .todoListId(todoList.getId()) .todoListDate(todoList.getTodoListDate()) - .todoRes(todoList.getTodos().stream().map(TodoRes::from).toList()) + .todoRes(todos.stream().map(TodoRes::from).toList()) .build(); } } diff --git a/src/main/java/com/jiyunio/todolist/domain/todo/dto/TodoRes.java b/src/main/java/com/jiyunio/todolist/domain/todo/dto/TodoRes.java index b8ea269..b5e8a81 100644 --- a/src/main/java/com/jiyunio/todolist/domain/todo/dto/TodoRes.java +++ b/src/main/java/com/jiyunio/todolist/domain/todo/dto/TodoRes.java @@ -3,7 +3,6 @@ import com.jiyunio.todolist.domain.category.dto.CategoryRes; import com.jiyunio.todolist.domain.todo.domain.Todo; import io.swagger.v3.oas.annotations.media.Schema; -import jakarta.persistence.Embeddable; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; import lombok.*; @@ -11,24 +10,22 @@ @Getter @Setter @Builder -@Embeddable -@NoArgsConstructor @AllArgsConstructor(access = AccessLevel.PRIVATE) public class TodoRes { @NotNull @Schema(description = "todo의 id", example = "1") - private Long todoId; + private final Long todoId; @NotBlank @Schema(description = "todo 내용", example = "친구랑 치킨집") - private String content; + private final String content; @Schema(description = "todo check (first default = false)", example = "false") - private boolean isChecked; + private final boolean isChecked; @NotNull @Schema(description = "category") - private CategoryRes category; + private final CategoryRes category; public static TodoRes from(Todo todo) { return TodoRes.builder() diff --git a/src/main/java/com/jiyunio/todolist/domain/todo/dto/UpdateTodoReq.java b/src/main/java/com/jiyunio/todolist/domain/todo/dto/UpdateTodoReq.java index 1cf04ec..a65af39 100644 --- a/src/main/java/com/jiyunio/todolist/domain/todo/dto/UpdateTodoReq.java +++ b/src/main/java/com/jiyunio/todolist/domain/todo/dto/UpdateTodoReq.java @@ -9,21 +9,22 @@ @Getter @Setter +@RequiredArgsConstructor(access = AccessLevel.PRIVATE) @Schema(description = "todo 수정") public class UpdateTodoReq { @NotBlank(message = "todo를 작성해주세요.") @Schema(description = "todo 내용", example = "친구랑 홍대") - private String content; + private final String content; @NotNull(message = "설정 일자를 선택해주세요.") @Schema(description = "todo 설정 일자", example = "YYYY-MM-DD") - private LocalDate setDate; + private final LocalDate setDate; @NotNull @Schema(description = "category Id", example = "1") - private Long categoryId; + private final Long categoryId; @NotNull @Schema(description = "todo checked", example = "true") - private Boolean checked; + private final Boolean checked; } diff --git a/src/main/java/com/jiyunio/todolist/global/customError/ErrorCode.java b/src/main/java/com/jiyunio/todolist/global/customError/ErrorCode.java index a03cc32..1636ab0 100644 --- a/src/main/java/com/jiyunio/todolist/global/customError/ErrorCode.java +++ b/src/main/java/com/jiyunio/todolist/global/customError/ErrorCode.java @@ -20,7 +20,8 @@ public enum ErrorCode { // 409 Conflict (중복된 값) EXIST_USERID("409_Conflict", "이미 존재하는 아이디입니다."), - EXIST_EMAIL("409_Conflict", "이미 존재하는 이메일입니다."); + EXIST_EMAIL("409_Conflict", "이미 존재하는 이메일입니다."), + EXIST_TODOLIST("409_Conflict", "이미 존재하는 todo list입니다."); private final String code; private final String message;