diff --git a/back/src/main/java/com/back/domain/roadmap/roadmap/dto/request/RoadmapNodeRequest.java b/back/src/main/java/com/back/domain/roadmap/roadmap/dto/request/RoadmapNodeRequest.java index 715c8606..c5b9005a 100644 --- a/back/src/main/java/com/back/domain/roadmap/roadmap/dto/request/RoadmapNodeRequest.java +++ b/back/src/main/java/com/back/domain/roadmap/roadmap/dto/request/RoadmapNodeRequest.java @@ -1,5 +1,6 @@ package com.back.domain.roadmap.roadmap.dto.request; +import jakarta.validation.constraints.Max; import jakarta.validation.constraints.Min; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.Size; @@ -11,9 +12,28 @@ public record RoadmapNodeRequest( @Size(max = 100, message = "Task 이름은 100자를 초과할 수 없습니다.") String taskName, // 표시용 Task 이름 (rawTaskName으로 저장) - @NotBlank(message = "노드 설명은 필수입니다.") - @Size(max = 2000, message = "노드 설명은 2000자를 초과할 수 없습니다.") - String description, + @Size(max = 2000, message = "학습 조언은 2000자를 초과할 수 없습니다.") + String learningAdvice, // 학습 조언/방법 + + @Size(max = 2000, message = "추천 자료는 2000자를 초과할 수 없습니다.") + String recommendedResources, // 추천 자료 + + @Size(max = 1000, message = "학습 목표는 1000자를 초과할 수 없습니다.") + String learningGoals, // 학습 목표 + + @Min(value = 1, message = "난이도는 1 이상이어야 합니다.") + @Max(value = 5, message = "난이도는 5 이하이어야 합니다.") + Integer difficulty, // 난이도 (1-5) + + @Min(value = 1, message = "중요도는 1 이상이어야 합니다.") + @Max(value = 5, message = "중요도는 5 이하이어야 합니다.") + Integer importance, // 중요도 (1-5) + + @Min(value = 1, message = "하루 학습 시간은 1 이상이어야 합니다.") + Integer hoursPerDay, // 하루 학습 시간 (시간 단위) + + @Min(value = 1, message = "학습 주차는 1 이상이어야 합니다.") + Integer weeks, // 학습 주차 @Min(value = 1, message = "단계 순서는 1 이상이어야 합니다.") int stepOrder diff --git a/back/src/main/java/com/back/domain/roadmap/roadmap/dto/response/JobRoadmapNodeResponse.java b/back/src/main/java/com/back/domain/roadmap/roadmap/dto/response/JobRoadmapNodeResponse.java index cb6143d9..d7b777ea 100644 --- a/back/src/main/java/com/back/domain/roadmap/roadmap/dto/response/JobRoadmapNodeResponse.java +++ b/back/src/main/java/com/back/domain/roadmap/roadmap/dto/response/JobRoadmapNodeResponse.java @@ -11,7 +11,12 @@ public record JobRoadmapNodeResponse( List childIds, // 자식 노드 ID 목록 (프론트엔드 렌더링용) Long taskId, // Task와 연결된 경우의 표준 Task ID String taskName, // 표시용 Task 이름 - String description, + String learningAdvice, // 학습 조언/방법 (통합) + String recommendedResources, // 추천 자료 (통합) + String learningGoals, // 학습 목표 (통합) + Double difficulty, // 난이도 (1-5, 평균) + Double importance, // 중요도 (1-5, 평균) + Integer estimatedHours, // 총 예상 학습 시간 (평균) int stepOrder, int level, // 트리 깊이 (0: 루트, 1: 1단계 자식...) boolean isLinkedToTask, @@ -46,7 +51,12 @@ public static JobRoadmapNodeResponse from(RoadmapNode node, List rootCount = new HashMap<>(); Map> mentorAppearSet = new HashMap<>(); // unique mentors per key Map> positions = new HashMap<>(); // to compute average position - Map> descs = new HashMap<>(); + Map> learningAdvices = new HashMap<>(); + Map> recommendedResourcesList = new HashMap<>(); + Map> learningGoalsList = new HashMap<>(); + Map> difficulties = new HashMap<>(); + Map> importances = new HashMap<>(); + Map> estimatedHoursList = new HashMap<>(); // 집계 루프(모든 멘토 로드맵의 모든 노드 순회하며 필요한 통계 자료 수집) for (MentorRoadmap mr : mentorRoadmaps) { @@ -109,9 +114,34 @@ public JobRoadmap integrateJobRoadmap(Long jobId) { // metorAppearSet: 고유 멘토 수 mentorAppearSet.computeIfAbsent(k, kk -> new HashSet<>()).add(mentorId); - // descs: description 모으기 - if (rn.getDescription() != null && !rn.getDescription().isBlank()) { - descs.computeIfAbsent(k, kk -> new ArrayList<>()).add(rn.getDescription()); + // learningAdvice 모으기 + if (rn.getLearningAdvice() != null && !rn.getLearningAdvice().isBlank()) { + learningAdvices.computeIfAbsent(k, kk -> new ArrayList<>()).add(rn.getLearningAdvice()); + } + + // recommendedResources 모으기 + if (rn.getRecommendedResources() != null && !rn.getRecommendedResources().isBlank()) { + recommendedResourcesList.computeIfAbsent(k, kk -> new ArrayList<>()).add(rn.getRecommendedResources()); + } + + // learningGoals 모으기 + if (rn.getLearningGoals() != null && !rn.getLearningGoals().isBlank()) { + learningGoalsList.computeIfAbsent(k, kk -> new ArrayList<>()).add(rn.getLearningGoals()); + } + + // difficulty 모으기 + if (rn.getDifficulty() != null) { + difficulties.computeIfAbsent(k, kk -> new ArrayList<>()).add(rn.getDifficulty()); + } + + // importance 모으기 + if (rn.getImportance() != null) { + importances.computeIfAbsent(k, kk -> new ArrayList<>()).add(rn.getImportance()); + } + + // estimatedHours 모으기 + if (rn.getEstimatedHours() != null) { + estimatedHoursList.computeIfAbsent(k, kk -> new ArrayList<>()).add(rn.getEstimatedHours()); } // transitions: 다음 노드로의 이동 기록 (A->B가 몇 번 나왔는지) @@ -154,16 +184,28 @@ public JobRoadmap integrateJobRoadmap(Long jobId) { Map keyToNode = new HashMap<>(); for (Map.Entry e : agg.entrySet()) { AggregatedNode a = e.getValue(); + String key = e.getKey(); + + // 숫자 필드 평균 계산 + Double avgDifficulty = calculateAverage(difficulties.get(key)); + Double avgImportance = calculateAverage(importances.get(key)); + Integer avgEstimatedHours = calculateIntegerAverage(estimatedHoursList.get(key)); + RoadmapNode node = RoadmapNode.builder() .taskName(a.displayName) - .description(mergeTopDescriptions(descs.get(e.getKey()))) + .learningAdvice(mergeTopDescriptions(learningAdvices.get(key))) + .recommendedResources(mergeTopDescriptions(recommendedResourcesList.get(key))) + .learningGoals(mergeTopDescriptions(learningGoalsList.get(key))) + .difficulty(avgDifficulty != null ? avgDifficulty.intValue() : null) + .importance(avgImportance != null ? avgImportance.intValue() : null) + .estimatedHours(avgEstimatedHours) .task(a.task != null ? taskMap.get(a.task.getId()) : null) .stepOrder(0) // assign later .level(0) // assign later via addChild/setLevel .roadmapId(0L) .roadmapType(RoadmapType.JOB) .build(); - keyToNode.put(e.getKey(), node); + keyToNode.put(key, node); } // Transition 빈도 기반 자식 선택 + 부모 우선순위 계산 @@ -251,7 +293,6 @@ public JobRoadmap integrateJobRoadmap(Long jobId) { AggregatedNode a = agg.get(rootKey); RoadmapNode rootNode = RoadmapNode.builder() .taskName(a != null ? a.displayName : "root") - .description(mergeTopDescriptions(descs.get(rootKey))) .task(a != null ? a.task : null) .stepOrder(0) .level(0) @@ -574,6 +615,25 @@ private String mergeTopDescriptions(List list) { return String.join("\n\n", set); } + // Integer 리스트의 평균을 Double로 반환 + private Double calculateAverage(List list) { + if (list == null || list.isEmpty()) return null; + return list.stream() + .mapToInt(Integer::intValue) + .average() + .orElse(0.0); + } + + // Integer 리스트의 평균을 반올림하여 Integer로 반환 + private Integer calculateIntegerAverage(List list) { + if (list == null || list.isEmpty()) return null; + double avg = list.stream() + .mapToInt(Integer::intValue) + .average() + .orElse(0.0); + return (int) Math.round(avg); + } + // RoadmapNode를 고유한 키로 변환 private String generateKey(RoadmapNode rn) { // Task가 연결된 경우: "T:{taskId}" diff --git a/back/src/main/java/com/back/domain/roadmap/roadmap/service/MentorRoadmapService.java b/back/src/main/java/com/back/domain/roadmap/roadmap/service/MentorRoadmapService.java index 426d462d..197c3ca4 100644 --- a/back/src/main/java/com/back/domain/roadmap/roadmap/service/MentorRoadmapService.java +++ b/back/src/main/java/com/back/domain/roadmap/roadmap/service/MentorRoadmapService.java @@ -256,9 +256,22 @@ private List createAllNodesWithRoadmapId( Task task = nodeRequest.taskId() != null ? tasksMap.get(nodeRequest.taskId()) : null; String taskName = (task != null) ? task.getName() : nodeRequest.taskName(); + // estimatedHours 자동 계산 (hoursPerDay * weeks * 7) + Integer estimatedHours = null; + if (nodeRequest.hoursPerDay() != null && nodeRequest.weeks() != null) { + estimatedHours = nodeRequest.hoursPerDay() * nodeRequest.weeks() * 7; + } + RoadmapNode node = RoadmapNode.builder() .taskName(taskName) - .description(nodeRequest.description()) + .learningAdvice(nodeRequest.learningAdvice()) + .recommendedResources(nodeRequest.recommendedResources()) + .learningGoals(nodeRequest.learningGoals()) + .difficulty(nodeRequest.difficulty()) + .importance(nodeRequest.importance()) + .hoursPerDay(nodeRequest.hoursPerDay()) + .weeks(nodeRequest.weeks()) + .estimatedHours(estimatedHours) .task(task) .stepOrder(nodeRequest.stepOrder()) .roadmapId(roadmapId) diff --git a/back/src/main/java/com/back/global/initData/RoadmapInitData.java b/back/src/main/java/com/back/global/initData/RoadmapInitData.java index bd96af19..dae6df93 100644 --- a/back/src/main/java/com/back/global/initData/RoadmapInitData.java +++ b/back/src/main/java/com/back/global/initData/RoadmapInitData.java @@ -530,15 +530,27 @@ private Mentor updateMentorJob(Member member, Job job) { /** * Task가 DB에 없으면 자동 생성하도록 안전장치 추가. - * 프로젝트 제안은 description에 구체적으로 적음 (Task로 만들지 않음). + * 통합 로직 테스트를 위해 모든 필드에 실제 값을 제공. */ - private RoadmapNodeRequest createNodeRequest(String taskName, int level, int stepOrder, String description) { + private RoadmapNodeRequest createNodeRequest( + String taskName, + int level, + int stepOrder, + String learningAdvice + + ) { Task task = taskRepository.findByNameIgnoreCase(taskName) .orElseGet(() -> taskService.create(taskName)); // 누락 시 자동 생성 return new RoadmapNodeRequest( task != null ? task.getId() : null, taskName, - description, + learningAdvice, + null, // recommendedResources + null, // learningGoals + null, // difficulty + null, // importance + null, // hoursPerDay + null, // weeks stepOrder ); } @@ -582,7 +594,7 @@ public void initSampleJobRoadmap() { .roadmapType(RoadmapNode.RoadmapType.JOB) .task(programmingFundamentals) .taskName("Programming Fundamentals") - .description("프로그래밍의 기초 개념: 변수, 조건문, 반복문, 함수 등을 이해하고 활용할 수 있습니다.") + .learningAdvice("프로그래밍의 기초 개념: 변수, 조건문, 반복문, 함수 등을 이해하고 활용할 수 있습니다.") .stepOrder(1) .level(0) .build(); @@ -593,7 +605,7 @@ public void initSampleJobRoadmap() { .roadmapType(RoadmapNode.RoadmapType.JOB) .task(git) .taskName("Git") - .description("버전 관리 시스템으로 코드 히스토리 관리 및 협업을 위한 필수 도구입니다.") + .learningAdvice("버전 관리 시스템으로 코드 히스토리 관리 및 협업을 위한 필수 도구입니다.") .stepOrder(2) .level(0) .build(); @@ -604,7 +616,7 @@ public void initSampleJobRoadmap() { .roadmapType(RoadmapNode.RoadmapType.JOB) .task(java) .taskName("Java") - .description("객체지향 프로그래밍 언어로 백엔드 개발의 기초가 되는 언어입니다.") + .learningAdvice("객체지향 프로그래밍 언어로 백엔드 개발의 기초가 되는 언어입니다.") .stepOrder(1) .level(1) .build(); @@ -614,7 +626,7 @@ public void initSampleJobRoadmap() { .roadmapType(RoadmapNode.RoadmapType.JOB) .task(springBoot) .taskName("Spring Boot") - .description("Java 기반의 웹 애플리케이션 프레임워크로 REST API 개발에 필수입니다.") + .learningAdvice("Java 기반의 웹 애플리케이션 프레임워크로 REST API 개발에 필수입니다.") .stepOrder(2) .level(1) .build(); @@ -625,7 +637,7 @@ public void initSampleJobRoadmap() { .roadmapType(RoadmapNode.RoadmapType.JOB) .task(mysql) .taskName("MySQL") - .description("관계형 데이터베이스로 데이터 저장 및 관리를 위한 기본 기술입니다.") + .learningAdvice("관계형 데이터베이스로 데이터 저장 및 관리를 위한 기본 기술입니다.") .stepOrder(1) .level(2) .build(); @@ -635,7 +647,7 @@ public void initSampleJobRoadmap() { .roadmapType(RoadmapNode.RoadmapType.JOB) .task(jpa) .taskName("JPA") - .description("Java 진영의 ORM 기술로 객체와 관계형 데이터베이스를 매핑합니다.") + .learningAdvice("Java 진영의 ORM 기술로 객체와 관계형 데이터베이스를 매핑합니다.") .stepOrder(2) .level(2) .build(); @@ -646,7 +658,7 @@ public void initSampleJobRoadmap() { .roadmapType(RoadmapNode.RoadmapType.JOB) .task(docker) .taskName("Docker") - .description("컨테이너 기술로 애플리케이션 배포 및 환경 관리를 간소화합니다.") + .learningAdvice("컨테이너 기술로 애플리케이션 배포 및 환경 관리를 간소화합니다.") .stepOrder(1) .level(2) .build(); @@ -656,7 +668,7 @@ public void initSampleJobRoadmap() { .roadmapType(RoadmapNode.RoadmapType.JOB) .task(aws) .taskName("AWS") - .description("클라우드 서비스로 애플리케이션을 확장 가능하게 배포하고 운영합니다.") + .learningAdvice("클라우드 서비스로 애플리케이션을 확장 가능하게 배포하고 운영합니다.") .stepOrder(2) .level(2) .build(); diff --git a/back/src/test/java/com/back/domain/roadmap/roadmap/controller/JobRoadmapControllerTest.java b/back/src/test/java/com/back/domain/roadmap/roadmap/controller/JobRoadmapControllerTest.java index e27e79b6..215085ee 100644 --- a/back/src/test/java/com/back/domain/roadmap/roadmap/controller/JobRoadmapControllerTest.java +++ b/back/src/test/java/com/back/domain/roadmap/roadmap/controller/JobRoadmapControllerTest.java @@ -78,7 +78,7 @@ private void setupTestData() { .roadmapType(RoadmapNode.RoadmapType.JOB) .task(javaTask) .taskName(javaTask.getName()) - .description("Java 프로그래밍 언어") + .learningAdvice("Java 프로그래밍 언어") .stepOrder(1) .level(0) .build(); @@ -88,7 +88,7 @@ private void setupTestData() { .roadmapType(RoadmapNode.RoadmapType.JOB) .task(springTask) .taskName(springTask.getName()) - .description("Spring Boot 프레임워크") + .learningAdvice("Spring Boot 프레임워크") .stepOrder(1) .level(1) .build(); @@ -109,7 +109,7 @@ private void setupTestData() { .roadmapType(RoadmapNode.RoadmapType.JOB) .task(reactTask) .taskName(reactTask.getName()) - .description("React 라이브러리") + .learningAdvice("React 라이브러리") .stepOrder(1) .level(0) .build(); @@ -273,7 +273,7 @@ void getJobRoadmapById_NodeFields() throws Exception { .andExpect(jsonPath("$.data.nodes[0].id").isNumber()) .andExpect(jsonPath("$.data.nodes[0].taskId").isNumber()) .andExpect(jsonPath("$.data.nodes[0].taskName").isString()) - .andExpect(jsonPath("$.data.nodes[0].description").isString()) + .andExpect(jsonPath("$.data.nodes[0].learningAdvice").isString()) .andExpect(jsonPath("$.data.nodes[0].stepOrder").isNumber()) .andExpect(jsonPath("$.data.nodes[0].level").isNumber()) .andExpect(jsonPath("$.data.nodes[0].isLinkedToTask").isBoolean()) diff --git a/back/src/test/java/com/back/domain/roadmap/roadmap/service/JobRoadmapServiceTest.java b/back/src/test/java/com/back/domain/roadmap/roadmap/service/JobRoadmapServiceTest.java index a303d69e..4e96b493 100644 --- a/back/src/test/java/com/back/domain/roadmap/roadmap/service/JobRoadmapServiceTest.java +++ b/back/src/test/java/com/back/domain/roadmap/roadmap/service/JobRoadmapServiceTest.java @@ -78,7 +78,7 @@ void setUp() { .roadmapType(RoadmapNode.RoadmapType.JOB) .task(testTask1) .taskName(testTask1.getName()) - .description("Java 프로그래밍 언어") + .learningAdvice("Java 프로그래밍 언어") .stepOrder(1) .level(0) .build(); @@ -88,7 +88,7 @@ void setUp() { .roadmapType(RoadmapNode.RoadmapType.JOB) .task(testTask2) .taskName(testTask2.getName()) - .description("Spring Boot 프레임워크") + .learningAdvice("Spring Boot 프레임워크") .stepOrder(1) .level(1) .build(); @@ -226,7 +226,7 @@ void getJobRoadmapById_TreeStructureSorting() { .roadmapType(RoadmapNode.RoadmapType.JOB) .task(testTask4) .taskName(testTask4.getName()) - .description("버전 관리 시스템") + .learningAdvice("버전 관리 시스템") .stepOrder(2) .level(0) .build(); @@ -236,7 +236,7 @@ void getJobRoadmapById_TreeStructureSorting() { .roadmapType(RoadmapNode.RoadmapType.JOB) .task(testTask3) .taskName(testTask3.getName()) - .description("관계형 데이터베이스") + .learningAdvice("관계형 데이터베이스") .stepOrder(2) .level(1) .build(); diff --git a/back/src/test/java/com/back/domain/roadmap/roadmap/service/MentorRoadmapServiceTest.java b/back/src/test/java/com/back/domain/roadmap/roadmap/service/MentorRoadmapServiceTest.java index 53f496f4..5e5c0c2c 100644 --- a/back/src/test/java/com/back/domain/roadmap/roadmap/service/MentorRoadmapServiceTest.java +++ b/back/src/test/java/com/back/domain/roadmap/roadmap/service/MentorRoadmapServiceTest.java @@ -98,7 +98,7 @@ void t4() { // Given MentorRoadmapSaveRequest request = new MentorRoadmapSaveRequest( "제목", "설명", - List.of(new RoadmapNodeRequest(99999L, "존재하지 않는 Task", "설명", 1)) + List.of(new RoadmapNodeRequest(99999L, "존재하지 않는 Task", "설명", null, null, null, null, null, null, 1)) ); // When & Then @@ -153,8 +153,8 @@ void t7() { "수정된 로드맵 제목", "수정된 설명", List.of( - new RoadmapNodeRequest(null, "Java", "객체지향 프로그래밍 언어 학습", 1), - new RoadmapNodeRequest(null, "Spring Boot", "Java 웹 애플리케이션 프레임워크", 2) + new RoadmapNodeRequest(null, "Java", "객체지향 프로그래밍 언어 학습", null, null, null, null, null, null,1), + new RoadmapNodeRequest(null, "Spring Boot", "Java 웹 애플리케이션 프레임워크", null, null, null, null, null, null,2) ) ); @@ -181,7 +181,7 @@ void t7b() { "수정된 로드맵 제목", "수정된 설명", List.of( - new RoadmapNodeRequest(null, "Python", "프로그래밍 언어", 1) + new RoadmapNodeRequest(null, "Python", "프로그래밍 언어", null, null, null, null, null, null,1) ) ); @@ -226,7 +226,7 @@ void t8b() { MentorRoadmapSaveRequest updateRequest = new MentorRoadmapSaveRequest( "악의적 수정 시도", "다른 멘토가 수정 시도", - List.of(new RoadmapNodeRequest(null, "Hacked", "해킹 시도", 1)) + List.of(new RoadmapNodeRequest(null, "Hacked", "해킹 시도", null, null, null, null, null, null,1)) ); // When & Then - 다른 멘토가 수정 시도 시 권한 오류 @@ -287,8 +287,8 @@ void t12() { MentorRoadmapSaveRequest request = new MentorRoadmapSaveRequest( "혼합 로드맵", "Task 연결 및 비연결 노드 혼합", List.of( - new RoadmapNodeRequest(task.getId(), "Custom Task", "연결된 노드", 1), - new RoadmapNodeRequest(null, "직접 입력 노드", "연결되지 않은 노드", 2) + new RoadmapNodeRequest(task.getId(), "Custom Task", "연결된 노드", null, null, null, null, null, null,1), + new RoadmapNodeRequest(null, "직접 입력 노드", "연결되지 않은 노드", null, null, null, null, null, null,2) ) ); @@ -311,9 +311,9 @@ void t13() { MentorRoadmapSaveRequest request = new MentorRoadmapSaveRequest( "잘못된 로드맵", "stepOrder가 비연속", List.of( - new RoadmapNodeRequest(null, "Java", "1단계", 1), - new RoadmapNodeRequest(null, "Spring", "3단계", 3), // 2가 빠짐 - new RoadmapNodeRequest(null, "Database", "5단계", 5) // 4가 빠짐 + new RoadmapNodeRequest(null, "Java", "1단계", null, null, null, null, null, null,1), + new RoadmapNodeRequest(null, "Spring", "3단계", null, null, null, null, null, null,3), // 2가 빠짐 + new RoadmapNodeRequest(null, "Database", "5단계", null, null, null, null, null, null,5) // 4가 빠짐 ) ); @@ -330,9 +330,9 @@ void t14() { MentorRoadmapSaveRequest request = new MentorRoadmapSaveRequest( "잘못된 로드맵", "stepOrder가 중복", List.of( - new RoadmapNodeRequest(null, "Java", "1단계", 1), - new RoadmapNodeRequest(null, "Spring", "중복 1단계", 1), // 중복 - new RoadmapNodeRequest(null, "Database", "2단계", 2) + new RoadmapNodeRequest(null, "Java", "1단계", null, null, null, null, null, null,1), + new RoadmapNodeRequest(null, "Spring", "중복 1단계", null, null, null, null, null, null,1), // 중복 + new RoadmapNodeRequest(null, "Database", "2단계", null, null, null, null, null, null,2) ) ); @@ -349,8 +349,8 @@ void t15() { MentorRoadmapSaveRequest request = new MentorRoadmapSaveRequest( "잘못된 로드맵", "stepOrder가 2부터 시작", List.of( - new RoadmapNodeRequest(null, "Java", "2단계", 2), // 2부터 시작 - new RoadmapNodeRequest(null, "Spring", "3단계", 3) + new RoadmapNodeRequest(null, "Java", "2단계", null, null, null, null, null, null,2), // 2부터 시작 + new RoadmapNodeRequest(null, "Spring", "3단계", null, null, null, null, null, null,3) ) ); @@ -367,9 +367,9 @@ void t16() { MentorRoadmapSaveRequest request = new MentorRoadmapSaveRequest( "순서 무관 로드맵", "입력 순서와 stepOrder가 달라도 성공", List.of( - new RoadmapNodeRequest(null, "Database", "3단계", 3), - new RoadmapNodeRequest(null, "Java", "1단계", 1), - new RoadmapNodeRequest(null, "Spring", "2단계", 2) + new RoadmapNodeRequest(null, "Database", "3단계", null, null, null, null, null, null,3), + new RoadmapNodeRequest(null, "Java", "1단계", null, null, null, null, null, null,1), + new RoadmapNodeRequest(null, "Spring", "2단계", null, null, null, null, null, null,2) ) ); @@ -401,8 +401,8 @@ void t17() { MentorRoadmapSaveRequest updateRequest = new MentorRoadmapSaveRequest( "수정된 로드맵", "잘못된 stepOrder", List.of( - new RoadmapNodeRequest(null, "Java", "1단계", 1), - new RoadmapNodeRequest(null, "Spring", "3단계", 3) // 2가 빠짐 + new RoadmapNodeRequest(null, "Java", "1단계", null, null, null, null, null, null,1), + new RoadmapNodeRequest(null, "Spring", "3단계", null, null, null, null, null, null,3) // 2가 빠짐 ) ); @@ -417,8 +417,8 @@ private MentorRoadmapSaveRequest createSampleRequest() { "백엔드 개발자 로드맵", "Java 백엔드 개발자를 위한 학습 로드맵", List.of( - new RoadmapNodeRequest(null, "Java", "객체지향 프로그래밍 언어 학습", 1), - new RoadmapNodeRequest(null, "Spring Boot", "Java 웹 애플리케이션 프레임워크", 2) + new RoadmapNodeRequest(null, "Java", "객체지향 프로그래밍 언어 학습", null, null, null, null, null, null,1), + new RoadmapNodeRequest(null, "Spring Boot", "Java 웹 애플리케이션 프레임워크", null, null, null, null, null, null,2) ) ); }