From 737be63a4ace62feb23fc0140c93326708bbb351 Mon Sep 17 00:00:00 2001
From: sungHeeLee <70899677+hee9841@users.noreply.github.com>
Date: Mon, 30 Dec 2024 09:43:44 +0900
Subject: [PATCH] =?UTF-8?q?Fix:=20=EB=9F=AC=EB=8B=9D=20=EA=B2=BD=EB=A1=9C?=
 =?UTF-8?q?=EA=B0=80=20=EB=B9=88=20=EB=A6=AC=EC=8A=A4=ED=8A=B8=EC=9D=BC=20?=
 =?UTF-8?q?=EA=B2=BD=EC=9A=B0=20=EC=A2=8C=ED=91=9C=EB=A5=BC=200,0,0?=
 =?UTF-8?q?=EC=9D=B8=20=EC=A7=80=EC=A0=90=EC=9D=84=20=EC=A0=80=EC=9E=A5?=
 =?UTF-8?q?=ED=95=98=EA=B2=8C=20=EC=88=98=EC=A0=95=20(#328)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

* Fix: 러닝 경로가 빈 리스트일 경우 Exception -> 좌표를 0,0,0인 지점을 저장하게 수정

* Fix: 러닝 경로 startPoint, endPoint null 체크
---
 .../v2/running/RunningRecordControllerV2.java     |  1 -
 .../presentation/v2/running/dto/RouteDtoV2.java   |  3 +++
 .../dto/request/RunningRecordRequestV2.java       | 15 ++++++++++-----
 3 files changed, 13 insertions(+), 6 deletions(-)

diff --git a/src/main/java/com/dnd/runus/presentation/v2/running/RunningRecordControllerV2.java b/src/main/java/com/dnd/runus/presentation/v2/running/RunningRecordControllerV2.java
index db47200e..f8c86a23 100644
--- a/src/main/java/com/dnd/runus/presentation/v2/running/RunningRecordControllerV2.java
+++ b/src/main/java/com/dnd/runus/presentation/v2/running/RunningRecordControllerV2.java
@@ -65,7 +65,6 @@ public RunningRecordMonthlySummaryResponseV2 getMonthlyRunningSummary(@MemberId
         ErrorType.CHALLENGE_VALUES_REQUIRED_IN_CHALLENGE_MODE,
         ErrorType.GOAL_VALUES_REQUIRED_IN_GOAL_MODE,
         ErrorType.GOAL_TIME_AND_DISTANCE_BOTH_EXIST,
-        ErrorType.ROUTE_MUST_HAVE_AT_LEAST_TWO_COORDINATES,
         ErrorType.CHALLENGE_NOT_ACTIVE
     })
     @PostMapping
diff --git a/src/main/java/com/dnd/runus/presentation/v2/running/dto/RouteDtoV2.java b/src/main/java/com/dnd/runus/presentation/v2/running/dto/RouteDtoV2.java
index 1ac8bf8f..e930eb19 100644
--- a/src/main/java/com/dnd/runus/presentation/v2/running/dto/RouteDtoV2.java
+++ b/src/main/java/com/dnd/runus/presentation/v2/running/dto/RouteDtoV2.java
@@ -2,6 +2,7 @@
 
 
 import com.dnd.runus.domain.common.CoordinatePoint;
+import jakarta.validation.constraints.NotNull;
 
 /**
  * 클라이언트와의 러닝 경로 요청/응답 형식
@@ -9,7 +10,9 @@
  * @param end 종료 위치
  */
 public record RouteDtoV2(
+    @NotNull
     Point start,
+    @NotNull
     Point end
 ) {
     public record Point(double longitude, double latitude) {
diff --git a/src/main/java/com/dnd/runus/presentation/v2/running/dto/request/RunningRecordRequestV2.java b/src/main/java/com/dnd/runus/presentation/v2/running/dto/request/RunningRecordRequestV2.java
index c6100820..10a3fb7b 100644
--- a/src/main/java/com/dnd/runus/presentation/v2/running/dto/request/RunningRecordRequestV2.java
+++ b/src/main/java/com/dnd/runus/presentation/v2/running/dto/request/RunningRecordRequestV2.java
@@ -5,6 +5,7 @@
 import com.dnd.runus.global.exception.BusinessException;
 import com.dnd.runus.global.exception.type.ErrorType;
 import com.dnd.runus.presentation.v2.running.dto.RouteDtoV2;
+import com.dnd.runus.presentation.v2.running.dto.RouteDtoV2.Point;
 import io.swagger.v3.oas.annotations.media.Schema;
 import jakarta.validation.constraints.NotBlank;
 import jakarta.validation.constraints.NotNull;
@@ -58,11 +59,6 @@ public record RunningRecordRequestV2(
                 throw new BusinessException(ErrorType.GOAL_TIME_AND_DISTANCE_BOTH_EXIST);
             }
         }
-
-        //러닝 경로 유요성 확인
-        if(runningData.route() == null || runningData.route().size() < 2) {
-            throw new BusinessException(ErrorType.ROUTE_MUST_HAVE_AT_LEAST_TWO_COORDINATES);
-        }
     }
 
     public record ChallengeAchievedDto(
@@ -96,5 +92,14 @@ public record RunningRecordMetrics(
         @Schema(description = "러닝 경로, 최소, 경로는 최소 2개의 좌표를 가져야합니다.")
         List<RouteDtoV2> route
     ) {
+        public RunningRecordMetrics{
+            //러닝 경로 유요성 확인, 기본으로 null Point 좌표가 들어가게
+            if (route == null || route.isEmpty()) {
+                Point nullIsLandPoint = new Point(0, 0);
+                route = List.of(
+                    new RouteDtoV2(nullIsLandPoint, nullIsLandPoint)
+                );
+            }
+        }
     }
 }