From bb910cc50cb3779a69edef04f81abeb21c26cc89 Mon Sep 17 00:00:00 2001 From: Jimyeong Kim Date: Sat, 14 Feb 2026 22:26:27 +0900 Subject: [PATCH 1/2] =?UTF-8?q?=E2=99=BB=EF=B8=8Frefactor:=20Todo=EC=97=90?= =?UTF-8?q?=20color=20=ED=95=84=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../backend/domain/nlp/service/NlpSaverService.java | 2 ++ .../domain/todo/converter/TodoConverter.java | 8 ++++++++ .../backend/domain/todo/dto/request/TodoReqDTO.java | 5 +++++ .../domain/todo/dto/response/TodoResDTO.java | 4 ++++ .../project/backend/domain/todo/entity/Todo.java | 13 ++++++++++++- .../domain/todo/entity/TodoRecurrenceException.java | 10 +++++++++- .../service/command/TodoCommandServiceImpl.java | 8 +++++++- 7 files changed, 47 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/project/backend/domain/nlp/service/NlpSaverService.java b/src/main/java/com/project/backend/domain/nlp/service/NlpSaverService.java index a327c39..d72c463 100644 --- a/src/main/java/com/project/backend/domain/nlp/service/NlpSaverService.java +++ b/src/main/java/com/project/backend/domain/nlp/service/NlpSaverService.java @@ -151,6 +151,7 @@ private Long saveSingleTodo(NlpReqDTO.ConfirmItem item, Member member) { dueTime, item.isAllDay(), null, // priority: NLP에서 파싱하지 않음, 기본값 사용 + null, // color: 기본값 사용 null // memo ); @@ -180,6 +181,7 @@ private Long saveRecurringTodo(NlpReqDTO.ConfirmItem item, Member member) { dueTime, item.isAllDay(), null, // priority + null, // color null, // memo group ); diff --git a/src/main/java/com/project/backend/domain/todo/converter/TodoConverter.java b/src/main/java/com/project/backend/domain/todo/converter/TodoConverter.java index 4963d36..906e875 100644 --- a/src/main/java/com/project/backend/domain/todo/converter/TodoConverter.java +++ b/src/main/java/com/project/backend/domain/todo/converter/TodoConverter.java @@ -7,6 +7,7 @@ import com.project.backend.domain.todo.entity.TodoRecurrenceException; import com.project.backend.domain.todo.entity.TodoRecurrenceGroup; import com.project.backend.domain.todo.enums.Priority; +import com.project.backend.domain.todo.enums.TodoColor; import com.project.backend.global.recurrence.util.RecurrenceUtils; import lombok.AccessLevel; import lombok.NoArgsConstructor; @@ -31,6 +32,7 @@ public static Todo toTodo(TodoReqDTO.CreateTodo reqDTO, Member member, TodoRecur .dueTime(reqDTO.dueTime()) .isAllDay(reqDTO.isAllDay() != null ? reqDTO.isAllDay() : false) .priority(reqDTO.priority() != null ? reqDTO.priority() : Priority.MEDIUM) + .color(reqDTO.color() != null ? reqDTO.color() : TodoColor.BLUE) .memo(reqDTO.memo()) .member(member) .todoRecurrenceGroup(todoRecurrenceGroup) @@ -95,6 +97,7 @@ public static TodoResDTO.TodoInfo toTodoInfo(Todo todo) { .dueTime(todo.getDueTime()) .isAllDay(todo.getIsAllDay()) .priority(todo.getPriority()) + .color(todo.getColor()) .memo(todo.getMemo()) .isCompleted(todo.getIsCompleted()) .isRecurring(todo.isRecurring()) @@ -118,6 +121,7 @@ public static TodoResDTO.TodoInfo toTodoInfo(Todo todo, LocalDate occurrenceDate .dueTime(exception.getDueTime() != null ? exception.getDueTime() : todo.getDueTime()) .isAllDay(todo.getIsAllDay()) .priority(exception.getPriority() != null ? exception.getPriority() : todo.getPriority()) + .color(exception.getColor() != null ? exception.getColor() : todo.getColor()) .memo(exception.getMemo() != null ? exception.getMemo() : todo.getMemo()) .isCompleted(exception.getIsCompleted()) .isRecurring(true) @@ -137,6 +141,7 @@ public static TodoResDTO.TodoListItem toTodoListItem(Todo todo, LocalDate occurr .dueTime(todo.getDueTime()) .isAllDay(todo.getIsAllDay()) .priority(todo.getPriority()) + .color(todo.getColor()) .memo(todo.getMemo()) .isCompleted(isCompleted != null ? isCompleted : todo.getIsCompleted()) .isRecurring(todo.isRecurring()) @@ -159,6 +164,7 @@ public static TodoResDTO.TodoListItem toTodoListItem(Todo todo, LocalDate occurr .dueTime(exception.getDueTime() != null ? exception.getDueTime() : todo.getDueTime()) .isAllDay(todo.getIsAllDay()) .priority(exception.getPriority() != null ? exception.getPriority() : todo.getPriority()) + .color(exception.getColor() != null ? exception.getColor() : todo.getColor()) .memo(exception.getMemo() != null ? exception.getMemo() : todo.getMemo()) .isCompleted(exception.getIsCompleted()) .isRecurring(true) @@ -176,6 +182,7 @@ public static TodoResDTO.TodoDetailRes toTodoDetailRes(Todo todo, LocalDate occu .dueTime(todo.getDueTime()) .isAllDay(todo.getIsAllDay()) .priority(todo.getPriority()) + .color(todo.getColor()) .memo(todo.getMemo()) .isCompleted(todo.getIsCompleted()) .isRecurring(todo.isRecurring()) @@ -201,6 +208,7 @@ public static TodoResDTO.TodoDetailRes toTodoDetailRes(Todo todo, LocalDate occu .dueTime(exception.getDueTime() != null ? exception.getDueTime() : todo.getDueTime()) .isAllDay(todo.getIsAllDay()) .priority(exception.getPriority() != null ? exception.getPriority() : todo.getPriority()) + .color(exception.getColor() != null ? exception.getColor() : todo.getColor()) .memo(exception.getMemo() != null ? exception.getMemo() : todo.getMemo()) .isCompleted(exception.getIsCompleted()) .isRecurring(true) diff --git a/src/main/java/com/project/backend/domain/todo/dto/request/TodoReqDTO.java b/src/main/java/com/project/backend/domain/todo/dto/request/TodoReqDTO.java index 33a394e..7c16cc3 100644 --- a/src/main/java/com/project/backend/domain/todo/dto/request/TodoReqDTO.java +++ b/src/main/java/com/project/backend/domain/todo/dto/request/TodoReqDTO.java @@ -4,6 +4,7 @@ import com.project.backend.domain.event.enums.RecurrenceEndType; import com.project.backend.domain.event.enums.RecurrenceFrequency; import com.project.backend.domain.todo.enums.Priority; +import com.project.backend.domain.todo.enums.TodoColor; import jakarta.validation.Valid; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; @@ -35,6 +36,8 @@ public record CreateTodo( @NotNull(message = "우선순위는 필수입니다.") Priority priority, + TodoColor color, + String memo, @Valid @@ -85,6 +88,8 @@ public record UpdateTodo( Priority priority, + TodoColor color, + String memo, @Valid diff --git a/src/main/java/com/project/backend/domain/todo/dto/response/TodoResDTO.java b/src/main/java/com/project/backend/domain/todo/dto/response/TodoResDTO.java index 9a0dfa6..309349d 100644 --- a/src/main/java/com/project/backend/domain/todo/dto/response/TodoResDTO.java +++ b/src/main/java/com/project/backend/domain/todo/dto/response/TodoResDTO.java @@ -4,6 +4,7 @@ import com.project.backend.domain.event.enums.RecurrenceEndType; import com.project.backend.domain.event.enums.RecurrenceFrequency; import com.project.backend.domain.todo.enums.Priority; +import com.project.backend.domain.todo.enums.TodoColor; import lombok.Builder; import java.time.DayOfWeek; @@ -26,6 +27,7 @@ public record TodoInfo( LocalTime dueTime, Boolean isAllDay, Priority priority, + TodoColor color, String memo, Boolean isCompleted, Boolean isRecurring, @@ -43,6 +45,7 @@ public record TodoListItem( LocalTime dueTime, Boolean isAllDay, Priority priority, + TodoColor color, String memo, Boolean isCompleted, Boolean isRecurring @@ -67,6 +70,7 @@ public record TodoDetailRes( LocalTime dueTime, Boolean isAllDay, Priority priority, + TodoColor color, String memo, Boolean isCompleted, Boolean isRecurring, diff --git a/src/main/java/com/project/backend/domain/todo/entity/Todo.java b/src/main/java/com/project/backend/domain/todo/entity/Todo.java index 3ca7815..17a84e9 100644 --- a/src/main/java/com/project/backend/domain/todo/entity/Todo.java +++ b/src/main/java/com/project/backend/domain/todo/entity/Todo.java @@ -2,6 +2,7 @@ import com.project.backend.domain.member.entity.Member; import com.project.backend.domain.todo.enums.Priority; +import com.project.backend.domain.todo.enums.TodoColor; import com.project.backend.global.entity.BaseEntity; import jakarta.persistence.*; import lombok.*; @@ -39,6 +40,11 @@ public class Todo extends BaseEntity { @Column(name = "priority", nullable = false, length = 10) private Priority priority = Priority.MEDIUM; + @Builder.Default + @Enumerated(EnumType.STRING) + @Column(name = "color", nullable = false, length = 10) + private TodoColor color = TodoColor.BLUE; + @Column(name = "memo") private String memo; @@ -84,12 +90,13 @@ public void incomplete() { * 할 일 정보 수정 */ public void update(String title, LocalDate startDate, LocalTime dueTime, - Boolean isAllDay, Priority priority, String memo) { + Boolean isAllDay, Priority priority, TodoColor color, String memo) { if (title != null) this.title = title; if (startDate != null) this.startDate = startDate; this.dueTime = dueTime; if (isAllDay != null) this.isAllDay = isAllDay; if (priority != null) this.priority = priority; + if (color != null) this.color = color; this.memo = memo; } @@ -112,6 +119,7 @@ public static Todo createSingle( LocalTime dueTime, Boolean isAllDay, Priority priority, + TodoColor color, String memo ) { return Todo.builder() @@ -121,6 +129,7 @@ public static Todo createSingle( .dueTime(dueTime) .isAllDay(isAllDay != null ? isAllDay : false) .priority(priority != null ? priority : Priority.MEDIUM) + .color(color != null ? color : TodoColor.BLUE) .memo(memo) .isCompleted(false) .build(); @@ -136,6 +145,7 @@ public static Todo createRecurring( LocalTime dueTime, Boolean isAllDay, Priority priority, + TodoColor color, String memo, TodoRecurrenceGroup todoRecurrenceGroup ) { @@ -146,6 +156,7 @@ public static Todo createRecurring( .dueTime(dueTime) .isAllDay(isAllDay != null ? isAllDay : false) .priority(priority != null ? priority : Priority.MEDIUM) + .color(color != null ? color : TodoColor.BLUE) .memo(memo) .isCompleted(false) .todoRecurrenceGroup(todoRecurrenceGroup) diff --git a/src/main/java/com/project/backend/domain/todo/entity/TodoRecurrenceException.java b/src/main/java/com/project/backend/domain/todo/entity/TodoRecurrenceException.java index 95baa62..a9f3a51 100644 --- a/src/main/java/com/project/backend/domain/todo/entity/TodoRecurrenceException.java +++ b/src/main/java/com/project/backend/domain/todo/entity/TodoRecurrenceException.java @@ -2,6 +2,7 @@ import com.project.backend.domain.event.enums.ExceptionType; import com.project.backend.domain.todo.enums.Priority; +import com.project.backend.domain.todo.enums.TodoColor; import jakarta.persistence.*; import lombok.*; @@ -45,6 +46,10 @@ public class TodoRecurrenceException { @Column(name = "priority", length = 10) private Priority priority; + @Enumerated(EnumType.STRING) + @Column(name = "color", length = 10) + private TodoColor color; + @Column(name = "memo") private String memo; // ============================== @@ -77,11 +82,12 @@ public void incomplete() { /** * OVERRIDE 예외 정보 수정 */ - public void updateOverride(String title, LocalTime dueTime, Priority priority, String memo) { + public void updateOverride(String title, LocalTime dueTime, Priority priority, TodoColor color, String memo) { this.exceptionType = ExceptionType.OVERRIDE; this.title = title; this.dueTime = dueTime; this.priority = priority; + this.color = color; this.memo = memo; } @@ -111,6 +117,7 @@ public static TodoRecurrenceException createOverride( String title, LocalTime dueTime, Priority priority, + TodoColor color, String memo ) { return TodoRecurrenceException.builder() @@ -120,6 +127,7 @@ public static TodoRecurrenceException createOverride( .title(title) .dueTime(dueTime) .priority(priority) + .color(color) .memo(memo) .isCompleted(false) .build(); diff --git a/src/main/java/com/project/backend/domain/todo/service/command/TodoCommandServiceImpl.java b/src/main/java/com/project/backend/domain/todo/service/command/TodoCommandServiceImpl.java index 657ee78..32f14bd 100644 --- a/src/main/java/com/project/backend/domain/todo/service/command/TodoCommandServiceImpl.java +++ b/src/main/java/com/project/backend/domain/todo/service/command/TodoCommandServiceImpl.java @@ -208,6 +208,7 @@ private void updateSingleTodo(Todo todo, TodoReqDTO.UpdateTodo reqDTO) { reqDTO.dueTime(), reqDTO.isAllDay(), reqDTO.priority(), + reqDTO.color(), reqDTO.memo() ); log.debug("단일 할 일 수정 완료 - todoId: {}", todo.getId()); @@ -235,10 +236,12 @@ private TodoResDTO.TodoInfo updateThisTodoOnly(Todo todo, LocalDate occurrenceDa : (existingException.getDueTime() != null ? existingException.getDueTime() : todo.getDueTime()); com.project.backend.domain.todo.enums.Priority newPriority = reqDTO.priority() != null ? reqDTO.priority() : (existingException.getPriority() != null ? existingException.getPriority() : todo.getPriority()); + com.project.backend.domain.todo.enums.TodoColor newColor = reqDTO.color() != null ? reqDTO.color() + : (existingException.getColor() != null ? existingException.getColor() : todo.getColor()); String newMemo = reqDTO.memo() != null ? reqDTO.memo() : (existingException.getMemo() != null ? existingException.getMemo() : todo.getMemo()); - existingException.updateOverride(newTitle, newDueTime, newPriority, newMemo); + existingException.updateOverride(newTitle, newDueTime, newPriority, newColor, newMemo); exception = existingException; log.debug("반복 할 일 예외 수정 완료 (업데이트) - todoId: {}, date: {}", todo.getId(), occurrenceDate); } else { @@ -249,6 +252,7 @@ private TodoResDTO.TodoInfo updateThisTodoOnly(Todo todo, LocalDate occurrenceDa reqDTO.title() != null ? reqDTO.title() : todo.getTitle(), reqDTO.dueTime() != null ? reqDTO.dueTime() : todo.getDueTime(), reqDTO.priority() != null ? reqDTO.priority() : todo.getPriority(), + reqDTO.color() != null ? reqDTO.color() : todo.getColor(), reqDTO.memo() != null ? reqDTO.memo() : todo.getMemo() ); todoRecurrenceExceptionRepository.save(exception); @@ -294,6 +298,7 @@ private TodoResDTO.TodoInfo updateThisAndFollowing(Todo todo, LocalDate occurren reqDTO.dueTime() != null ? reqDTO.dueTime() : todo.getDueTime(), reqDTO.isAllDay() != null ? reqDTO.isAllDay() : todo.getIsAllDay(), reqDTO.priority() != null ? reqDTO.priority() : todo.getPriority(), + reqDTO.color() != null ? reqDTO.color() : todo.getColor(), reqDTO.memo() != null ? reqDTO.memo() : todo.getMemo(), newGroup ); @@ -319,6 +324,7 @@ private TodoResDTO.TodoInfo updateAllTodos(Todo todo, TodoReqDTO.UpdateTodo reqD reqDTO.dueTime(), reqDTO.isAllDay(), reqDTO.priority(), + reqDTO.color(), reqDTO.memo() ); From 147658622cd97373071511a95f0ed918785fed99 Mon Sep 17 00:00:00 2001 From: Jimyeong Kim Date: Sat, 14 Feb 2026 22:27:01 +0900 Subject: [PATCH 2/2] =?UTF-8?q?=E2=99=BB=EF=B8=8Frefactor:=20Todo=EC=97=90?= =?UTF-8?q?=20color=20=ED=95=84=EB=93=9C=20=EC=B6=94=EA=B0=802?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../project/backend/domain/todo/enums/TodoColor.java | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 src/main/java/com/project/backend/domain/todo/enums/TodoColor.java diff --git a/src/main/java/com/project/backend/domain/todo/enums/TodoColor.java b/src/main/java/com/project/backend/domain/todo/enums/TodoColor.java new file mode 100644 index 0000000..eec03b1 --- /dev/null +++ b/src/main/java/com/project/backend/domain/todo/enums/TodoColor.java @@ -0,0 +1,10 @@ +package com.project.backend.domain.todo.enums; + +public enum TodoColor { + BLUE, + GREEN, + PINK, + PURPLE, + GRAY, + YELLOW +}