Open newcodingtest opened 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();
}
});
https://github.com/newcodingtest/ProjectManagementSystem/issues/30 참조