@@ -34,7 +34,7 @@ public Task create(String name) {
3434 @ Transactional
3535 public TaskAlias createAlias (Task task , String aliasName ) {
3636 TaskAlias alias = new TaskAlias (aliasName );
37- alias .setTask (task );
37+ alias .linkToTask (task );
3838 return taskAliasRepository .save (alias );
3939 }
4040
@@ -46,24 +46,10 @@ public List<Task> searchByKeyword(String keyword){
4646
4747 @ Transactional
4848 public TaskAlias createPendingAlias (String taskName ){
49- // 1. 먼저 Alias가 존재하는지 확인 (Pending 포함)
50- Optional <TaskAlias > existingAliasOpt = taskAliasRepository .findByNameIgnoreCase (taskName );
51- if (existingAliasOpt .isPresent ()) {
52- TaskAlias existingAlias = existingAliasOpt .get ();
53- if (existingAlias .getTask () != null ) {
54- throw new ServiceException ("400" , "이미 등록된 task의 별칭입니다." );
55- } else {
56- throw new ServiceException ("400" , "이미 제안된 task입니다." );
57- }
58- }
49+ // Task나 TaskAlias에 이미 존재하는 이름인지 검증
50+ validateNewPendingAliasName (taskName );
5951
60- // 2. Alias가 없다면, Task 테이블에 직접 존재하는지 확인
61- Optional <Task > existingTaskOpt = taskRepository .findByNameIgnoreCase (taskName );
62- if (existingTaskOpt .isPresent ()){
63- throw new ServiceException ("400" , "이미 등록된 task입니다." );
64- }
65-
66- // 3. 모두 해당 없으면 새로운 pending alias 생성
52+ // 모든 검증 통과 시 새로운 pending alias 생성
6753 TaskAlias pendingAlias = new TaskAlias (taskName );
6854 return taskAliasRepository .save (pendingAlias );
6955 }
@@ -80,41 +66,26 @@ public Page<TaskAliasDto> getPendingTaskAliases(Pageable pageable) {
8066 // Pending alias를 기존 Task와 연결
8167 @ Transactional
8268 public TaskAlias linkPendingAlias (Long aliasId , Long taskId ) {
83- TaskAlias pendingAlias = taskAliasRepository . findById (aliasId )
84- . orElseThrow (() -> new ServiceException ( "404" , "해당 별칭이 존재하지 않습니다." ) );
69+ TaskAlias pendingAlias = findPendingAliasById (aliasId );
70+ Task task = findTaskById ( taskId );
8571
86- if (pendingAlias .getTask () != null ) {
87- throw new ServiceException ("400" , "이미 연결된 별칭입니다." );
88- }
89-
90- Task task = taskRepository .findById (taskId )
91- .orElseThrow (() -> new ServiceException ("404" , "해당 Task가 존재하지 않습니다." ));
92-
93- pendingAlias .setTask (task );
72+ pendingAlias .linkToTask (task );
9473 return taskAliasRepository .save (pendingAlias );
9574 }
9675
9776 // Pending alias를 새로운 Task로 생성
9877 @ Transactional
9978 public Task createTaskFromPending (Long aliasId ) {
100- TaskAlias pendingAlias = taskAliasRepository .findById (aliasId )
101- .orElseThrow (() -> new ServiceException ("404" , "해당 별칭이 존재하지 않습니다." ));
102-
103- if (pendingAlias .getTask () != null ) {
104- throw new ServiceException ("400" , "이미 연결된 별칭입니다." );
105- }
79+ TaskAlias pendingAlias = findPendingAliasById (aliasId );
10680
10781 // 동일한 이름의 Task가 이미 존재하는지 확인
108- Optional <Task > existingTask = taskRepository .findByNameIgnoreCase (pendingAlias .getName ());
109- if (existingTask .isPresent ()) {
110- throw new ServiceException ("400" , "이미 존재하는 Task 이름입니다." );
111- }
82+ validateTaskNameForCreation (pendingAlias .getName ());
11283
11384 // 새 Task 생성
11485 Task newTask = create (pendingAlias .getName ());
11586
11687 // pending alias를 새 Task와 연결
117- pendingAlias .setTask (newTask );
88+ pendingAlias .linkToTask (newTask );
11889 taskAliasRepository .save (pendingAlias );
11990
12091 return newTask ;
@@ -123,13 +94,52 @@ public Task createTaskFromPending(Long aliasId) {
12394 // Pending alias 삭제
12495 @ Transactional
12596 public void deletePendingAlias (Long aliasId ) {
126- TaskAlias pendingAlias = taskAliasRepository .findById (aliasId )
97+ TaskAlias pendingAlias = findPendingAliasById (aliasId );
98+ taskAliasRepository .delete (pendingAlias );
99+ }
100+
101+ // === 검증 로직 메서드들 ===
102+
103+ // TaskAlias를 ID로 조회하고 Pending 상태인지 검증
104+ private TaskAlias findPendingAliasById (Long aliasId ) {
105+ TaskAlias alias = taskAliasRepository .findById (aliasId )
127106 .orElseThrow (() -> new ServiceException ("404" , "해당 별칭이 존재하지 않습니다." ));
128107
129- if (pendingAlias . getTask () != null ) {
130- throw new ServiceException ("400" , "연결된 별칭은 삭제할 수 없습니다 ." );
108+ if (! alias . isPending () ) {
109+ throw new ServiceException ("400" , "이미 연결된 별칭입니다 ." );
131110 }
132111
133- taskAliasRepository .delete (pendingAlias );
112+ return alias ;
113+ }
114+
115+ // Task를 ID로 조회
116+ private Task findTaskById (Long taskId ) {
117+ return taskRepository .findById (taskId )
118+ .orElseThrow (() -> new ServiceException ("404" , "해당 Task가 존재하지 않습니다." ));
119+ }
120+
121+ // Task와 TaskAlias 모두 중복 검증 (새로운 pending alias 생성 시 사용)
122+ private void validateNewPendingAliasName (String taskName ) {
123+ // 1. TaskAlias 테이블에서 중복 확인 (Pending 포함)
124+ Optional <TaskAlias > existingAliasOpt = taskAliasRepository .findByNameIgnoreCase (taskName );
125+ if (existingAliasOpt .isPresent ()) {
126+ TaskAlias existingAlias = existingAliasOpt .get ();
127+ if (!existingAlias .isPending ()) {
128+ throw new ServiceException ("400" , "이미 등록된 Task의 별칭입니다." );
129+ } else {
130+ throw new ServiceException ("400" , "이미 제안된 Task명입니다." );
131+ }
132+ }
133+
134+ // 2. Task 테이블에서 중복 검증
135+ validateTaskNameForCreation (taskName );
136+ }
137+
138+ // 동일한 이름의 Task가 이미 존재하는지 확인 (pending alias를 새 Task로 등록할 때 사용)
139+ private void validateTaskNameForCreation (String taskName ) {
140+ Optional <Task > existingTaskOpt = taskRepository .findByNameIgnoreCase (taskName );
141+ if (existingTaskOpt .isPresent ()) {
142+ throw new ServiceException ("400" , "이미 등록된 Task명입니다." );
143+ }
134144 }
135145}
0 commit comments