newcodingtest / ProjectManagementSystem

:sunny::sunny:레거시 코드 리펙토링 해보기:sunny::sunny:
1 stars 0 forks source link

상위, 하위작업은 하나의 컨트롤러에서 받도록 하자 #36

Open newcodingtest opened 2 years ago

newcodingtest commented 2 years ago

https://github.com/newcodingtest/ProjectManagementSystem/issues/30 참조

newcodingtest commented 2 years ago

원래는 1.상위컨트롤러 2.하위 컨트롤러 각각이 2개를 만들어 뒀었지만

상위와 하위작업이 같이 수정되야 하며 추후

수정작업이 있을때 모든 하위작업의 진행도를 계산하여 상위작업의 진행도로 반영이 되야하며

상위 작업에 있는 시작일 종료일 또한 하위작업들의 최초 시작일, 최대 종료일로 바로바로 반영이 되야한다.

때문에 다른 컨트롤러에서 처리하기 보단 상위DTO 타입으로 한번에 받고 하나의 컨트롤러에서 받고

상위DTO 내부에 List<하위DTO> 를 선언하여 같이 받는다.

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class TaskDTO {

    private Long tid;
    ...

    @Builder.Default
    private List<SubTaskDTO> subTaskDTOList = new ArrayList<SubTaskDTO>();
    ...
}

Task 컨트롤러 1개의 컨트롤러에서 Task 와 SubTask 처리를 한다.

    @PostMapping("/{tid}")
    public ResponseEntity<Long>addSubTask(@RequestBody TaskDTO      TaskWithSubTaskDto){
        log.info("--------------- addSubTask ---------------");
        log.info("subTaskDTO: " + TaskWithSubTaskDto);

        //service.register(TaskWithSubTaskDto);

        return new ResponseEntity<>(HttpStatus.OK);
    }

테스트 클라이언트 코드

  for(var i=0; i<subTitle.length; i++){
                var subMap = new Map();
                subMap.set("subTitle",subTitle[i].value );
                subMap.set("tid",tid );
                subMap.set("subContents",subContents[i].value );
                subMap.set("subStartDate",subStartDate[i].value );
                subMap.set("subEndDate",subEndDate[i].value );
                subMap.set("subRealProgress",subRealProgress[i].value );
                subMap.set("subReportRegistFlag",subReportRegistFlag[i].value );
                subTaskList.push(Object.fromEntries(testMap));
            }

            var data = null;

            if(subjobDOM.length>0){

                 data = { tid: tid, taskTitle: taskTitle.value , taskContents: taskContents.value, taskStartDate: taskStartDate.value, taskEndDate: taskEndDate.value,
                            realProgress: realProgress.value, reportRegistFlag: reportRegistFlag.value, taskType: taskType.value, detailedTaskType: detailedTaskType.value, divisionOfTask: divisionOfTask.value, statusCode: statusCode.value
                            , subTaskDTOList: subTaskList}
            }else{
                 data = { tid: tid, taskTitle: taskTitle.value , taskContents: taskContents.value, taskStartDate: taskStartDate.value, taskEndDate: taskEndDate.value,
                        realProgress: realProgress.value, reportRegistFlag: reportRegistFlag.value, taskType: taskType.value, detailedTaskType: detailedTaskType.value, divisionOfTask: divisionOfTask.value, statusCode: statusCode.value
                        }
            }

                $.ajax({
                    url: '/task/'+tid,
                    type: "POST",
                    data: JSON.stringify(data),
                    contentType: "application/json; charset=utf-8",
                    dataType: "text",
                    success: function (result){
                        self.location.reload();
                    }
                });