Skip to content

Commit ffc9b06

Browse files
authored
fix: 코스 생성 API를 v2로 통일 (#139)
1 parent e6a0a38 commit ffc9b06

5 files changed

Lines changed: 11 additions & 132 deletions

File tree

src/main/java/org/runnect/server/common/module/convert/CoordinatePathConverter.java

Lines changed: 1 addition & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package org.runnect.server.common.module.convert;
22

3-
import com.fasterxml.jackson.databind.JsonNode;
4-
import com.fasterxml.jackson.databind.ObjectMapper;
53
import java.util.ArrayList;
64
import java.util.List;
75
import lombok.extern.slf4j.Slf4j;
@@ -16,7 +14,7 @@
1614
@Slf4j
1715
public class CoordinatePathConverter {
1816

19-
public static LineString coorConvertPathV2(List<CoordinateDto> path) {
17+
public static LineString coorConvertPath(List<CoordinateDto> path) {
2018
try {
2119
return getLineString(path);
2220
} catch (Exception e) {
@@ -26,28 +24,6 @@ public static LineString coorConvertPathV2(List<CoordinateDto> path) {
2624
}
2725
}
2826

29-
public static LineString coorConvertPath(String path) {
30-
31-
List<CoordinateDto> coordinateDtos = new ArrayList<>();
32-
33-
try {
34-
ObjectMapper objectMapper = new ObjectMapper();
35-
JsonNode jsonNode = objectMapper.readTree(path);
36-
37-
for (JsonNode node : jsonNode) {
38-
Double latitude = node.get("lat").asDouble();
39-
Double longitude = node.get("long").asDouble();
40-
coordinateDtos.add(new CoordinateDto(latitude, longitude));
41-
}
42-
43-
return getLineString(coordinateDtos);
44-
} catch (Exception e) {
45-
log.warn("course 요청 데이터 값 (path) -> " + path);
46-
log.warn("course 요청 데이터 값의 타입 (path) -> " + path.getClass().getName());
47-
throw new BadRequestException(ErrorStatus.VALIDATION_COURSE_PATH_EXCEPTION, ErrorStatus.VALIDATION_COURSE_PATH_EXCEPTION.getMessage());
48-
}
49-
}
50-
5127
public static List<List<Double>> pathConvertCoor(LineString path) {
5228
try {
5329

src/main/java/org/runnect/server/course/controller/CourseController.java

Lines changed: 3 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,10 @@
33
import javax.validation.Valid;
44
import lombok.RequiredArgsConstructor;
55
import lombok.extern.slf4j.Slf4j;
6-
import org.runnect.server.common.constant.ErrorStatus;
76
import org.runnect.server.common.constant.SuccessStatus;
87
import org.runnect.server.common.dto.ApiResponseDto;
9-
import org.runnect.server.common.exception.BadRequestException;
108
import org.runnect.server.common.resolver.userId.UserId;
119
import org.runnect.server.course.dto.request.CourseCreateRequestDto;
12-
import org.runnect.server.course.dto.request.CourseCreateRequestDtoV2;
1310
import org.runnect.server.course.dto.request.DeleteCoursesRequestDto;
1411
import org.runnect.server.course.dto.request.UpdateCourseRequestDto;
1512
import org.runnect.server.course.dto.response.CourseCreateResponseDto;
@@ -21,9 +18,7 @@
2118
import org.runnect.server.external.aws.S3Service;
2219
import org.springframework.http.HttpStatus;
2320
import org.springframework.http.MediaType;
24-
import org.springframework.validation.BindingResult;
2521
import org.springframework.web.bind.annotation.GetMapping;
26-
import org.springframework.web.bind.annotation.ModelAttribute;
2722
import org.springframework.web.bind.annotation.PatchMapping;
2823
import org.springframework.web.bind.annotation.PathVariable;
2924
import org.springframework.web.bind.annotation.PostMapping;
@@ -44,47 +39,18 @@ public class CourseController {
4439
private final S3Service s3Service;
4540
private final CourseService courseService;
4641

47-
@PostMapping(consumes = MediaType.MULTIPART_FORM_DATA_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
42+
@PostMapping(consumes = {MediaType.APPLICATION_JSON_VALUE, MediaType.MULTIPART_FORM_DATA_VALUE}, produces = MediaType.APPLICATION_JSON_VALUE)
4843
@ResponseStatus(HttpStatus.CREATED)
4944
public ApiResponseDto<CourseCreateResponseDto> createCourse(
5045
@UserId Long userId,
51-
@ModelAttribute @Valid final CourseCreateRequestDto courseCreateRequestDto,
52-
BindingResult bindingResult
53-
) {
54-
log.info("create course 요청 값");
55-
log.info("departureAddress : " + courseCreateRequestDto.getDepartureAddress());
56-
log.info("departureName : " + courseCreateRequestDto.getDepartureName());
57-
log.info("path : " + courseCreateRequestDto.getPath());
58-
log.info("distance : " + courseCreateRequestDto.getDistance().toString());
59-
log.info("image : " + courseCreateRequestDto.getImage().toString());
60-
if (bindingResult.hasErrors()) {
61-
throw new BadRequestException(ErrorStatus.REQUEST_VALIDATION_EXCEPTION,
62-
bindingResult.getFieldError().getField() + " 필드가 입력되지 않았습니다.");
63-
}
64-
String imageUrl = s3Service.uploadImage(courseCreateRequestDto.getImage(), "course");
65-
return ApiResponseDto.success(SuccessStatus.CREATE_COURSE_SUCCESS,
66-
courseService.createCourse(userId, courseCreateRequestDto, imageUrl));
67-
}
68-
69-
@PostMapping(value = "/v2", consumes = {MediaType.APPLICATION_JSON_VALUE, MediaType.MULTIPART_FORM_DATA_VALUE}, produces = MediaType.APPLICATION_JSON_VALUE)
70-
@ResponseStatus(HttpStatus.CREATED)
71-
public ApiResponseDto<CourseCreateResponseDto> createCourseV2(
72-
@UserId Long userId,
73-
@RequestPart @Valid final CourseCreateRequestDtoV2 courseCreateRequestDto,
46+
@RequestPart @Valid final CourseCreateRequestDto data,
7447
@RequestPart final MultipartFile image
7548
) {
76-
log.info("create course 요청 값");
77-
log.info("departureAddress : " + courseCreateRequestDto.getDepartureAddress());
78-
log.info("departureName : " + courseCreateRequestDto.getDepartureName());
79-
log.info("path : " + courseCreateRequestDto.getPath());
80-
log.info("distance : " + courseCreateRequestDto.getDistance().toString());
81-
8249
String imageUrl = s3Service.uploadImage(image, "course");
8350
return ApiResponseDto.success(SuccessStatus.CREATE_COURSE_SUCCESS,
84-
courseService.createCourseV2(userId, courseCreateRequestDto, imageUrl));
51+
courseService.createCourse(userId, data, imageUrl));
8552
}
8653

87-
8854
@GetMapping("/user")
8955
@ResponseStatus(HttpStatus.OK)
9056
public ApiResponseDto<CourseGetByUserResponseDto> getCourseByUser(@UserId Long userId) {

src/main/java/org/runnect/server/course/dto/request/CourseCreateRequestDto.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,26 @@
11
package org.runnect.server.course.dto.request;
22

3+
import java.io.Serializable;
4+
import java.util.List;
35
import javax.validation.constraints.NotBlank;
46
import javax.validation.constraints.NotNull;
57
import lombok.AccessLevel;
68
import lombok.AllArgsConstructor;
79
import lombok.Getter;
810
import lombok.NoArgsConstructor;
9-
import org.springframework.web.multipart.MultipartFile;
11+
import org.runnect.server.common.module.convert.CoordinateDto;
1012

1113
@Getter
1214
@AllArgsConstructor
1315
@NoArgsConstructor(access = AccessLevel.PRIVATE)
14-
public class CourseCreateRequestDto {
15-
@NotBlank(message = "path는 필수 입력 항목입니다.")
16-
private String path;
16+
public class CourseCreateRequestDto implements Serializable {
17+
18+
@NotNull(message = "path는 필수 입력 항목입니다.")
19+
private List<CoordinateDto> path;
1720

1821
@NotBlank(message = "title은 필수 입력 항목입니다.")
1922
private String title;
2023

21-
@NotNull(message = "image는 필수 입력 항목입니다.")
22-
private MultipartFile image;
23-
2424
@NotNull(message = "distance는 필수 입력 항목입니다.")
2525
private Float distance;
2626

src/main/java/org/runnect/server/course/dto/request/CourseCreateRequestDtoV2.java

Lines changed: 0 additions & 31 deletions
This file was deleted.

src/main/java/org/runnect/server/course/service/CourseService.java

Lines changed: 0 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
import org.runnect.server.common.module.convert.CoordinatePathConverter;
1313
import org.runnect.server.common.module.convert.DepartureConverter;
1414
import org.runnect.server.course.dto.request.CourseCreateRequestDto;
15-
import org.runnect.server.course.dto.request.CourseCreateRequestDtoV2;
1615
import org.runnect.server.course.dto.response.CourseCreateResponseDto;
1716
import org.runnect.server.course.dto.response.CourseGetByUserResponseDto;
1817
import org.runnect.server.course.dto.response.CourseResponse;
@@ -71,37 +70,6 @@ public CourseCreateResponseDto createCourse(Long userId, CourseCreateRequestDto
7170
return CourseCreateResponseDto.of(saved.getId(), saved.getCreatedAt());
7271
}
7372

74-
@Transactional
75-
public CourseCreateResponseDto createCourseV2(Long userId, CourseCreateRequestDtoV2 requestDto,
76-
String image) {
77-
RunnectUser user = userRepository.findById(userId)
78-
.orElseThrow(() -> new NotFoundUserException(NOT_FOUND_USER_EXCEPTION,
79-
NOT_FOUND_USER_EXCEPTION.getMessage()));
80-
81-
LineString path = CoordinatePathConverter.coorConvertPathV2(requestDto.getPath());
82-
DepartureResponse departureResponse = DepartureConverter.requestConvertDeparture(
83-
requestDto.getDepartureAddress(), requestDto.getDepartureName());
84-
85-
Course course = Course.builder()
86-
.runnectUser(user)
87-
.title(requestDto.getTitle())
88-
.departureRegion(departureResponse.getRegion())
89-
.departureCity(departureResponse.getCity())
90-
.departureTown(departureResponse.getTown())
91-
.departureDetail(departureResponse.getDetail())
92-
.departureName(departureResponse.getName())
93-
.distance(requestDto.getDistance())
94-
.image(image)
95-
.path(path)
96-
.build();
97-
98-
Course saved = courseRepository.save(course);
99-
user.updateCreatedCourse();
100-
userStampService.createStampByUser(user, StampType.c);
101-
102-
return CourseCreateResponseDto.of(saved.getId(), saved.getCreatedAt());
103-
}
104-
10573
@Transactional(readOnly = true)
10674
public CourseGetByUserResponseDto getCourseByUser(Long userId) {
10775
RunnectUser user = userRepository.findById(userId)

0 commit comments

Comments
 (0)