Skip to content

[SCRUM-250] 내 코스 생성 API 구현 (#109)#110

Merged
ssggii merged 11 commits intodevelopfrom
SCRUM-250-내-코스-생성-API-구현
Aug 29, 2025

Hidden character warning

The head ref may contain hidden characters: "SCRUM-250-\ub0b4-\ucf54\uc2a4-\uc0dd\uc131-API-\uad6c\ud604"
Merged

[SCRUM-250] 내 코스 생성 API 구현 (#109)#110
ssggii merged 11 commits intodevelopfrom
SCRUM-250-내-코스-생성-API-구현

Conversation

@ssggii
Copy link
Contributor

@ssggii ssggii commented Aug 21, 2025

✏️ 연관 이슈

#109

⛳ 작업 내용

  • 지역 판별 API 구현
  • 지역 판별 API 테스트 코드 구현 및 swagger 호출 테스트
  • CourseDataService.createCourseToGpx 반환값 수정 (재사용하기 위함)
  • 내 코스 생성 API의 서비스 로직 구현
  • 내 코스 생성 API 엔드포인트 구현
  • 내 코스 생성 API 테스트 코드 구현 및 swagger 호출 테스트

💬리뷰 요구사항

  • 지역 판별 시, 카카오 지도 API가 주소 정보를 올바르게 파싱하지 못하는 경우(null 반환)는 우선 부산 외 지역이 되도록 구현했습니다. 혹시 더 좋은 방법이 있다면 말씀해주세요!

📍 참고사항

  • 프론트로부터 기본 코스 정보(거리, 시간, 고도값)을 받지 않고 서버에서 생성해서 주는 방식으로 바뀌었습니다. openroute에서 제공하는 데이터와 서버 측 생성 데이터 비교 후, 차이가 미미하면 이 방식을 유지하려고 합니다
  • 리뷰 전에 요구사항 정리한 이슈 한번 확인 부탁드립니다! 여러 도메인도 많이 걸쳐져있고, 비즈니스 요구사항이 좀 복잡한 편이라서 제가 요구사항 놓친 부분이 있을까봐요😅
  • 비동기로 즐길거리 저장되는 로직은 테스트 코드보다는 API 호출해서 통합 테스트 진행하는 것이 나을 것 같아서 해당 로직의 테스트 코드는 생략했습니다

ssggii added 5 commits August 21, 2025 16:42
내 코스 생성 API에서 gpx 코스 생성 기능을 재사용하기 위해 CourseDataService.createCourseToGpx가 Course 엔티티를 반환하도록 리팩토링했습니다.
gpx, 썸네일, 시작/종료 포인트명 정보를 받아 회원의 코스를 생성하는 기능을 위한 API를 구현했습니다.
내 코스 생성의 서비스 메서드에 예외 케이스를 추가했습니다.
다음의 경우 비즈니스 예외를 발생시킵니다.

- 포인트명 dto 자체가 null이거나 시작/종료 포인트명이 하나라도 null인 경우
- gpx 또는 썸네일 이미지 파일이 누락된 경우
내 코스 생성 API의 서비스 메서드를 검증하는 테스트 케이스를 구현했습니다.
테스트 케이스는 다음과 같습니다.

- 내 코스 생성 성공
- 내 코스 생성 실패 (존재하지 않는 회원)
- 내 코스 생성 실패 (유효하지 않은 포인트명)
- 내 코스 생성 실패 (파일 누락)
@ssggii ssggii added this to the #6-sprint milestone Aug 21, 2025
@ssggii ssggii requested a review from moonxxpower August 21, 2025 08:56
@ssggii ssggii self-assigned this Aug 21, 2025
내 코스 생성 API의 url을 /api/members/me/courses로 변경했습니다.
@ssggii ssggii moved this to Pending in Runchuck-러닝한다이 Aug 21, 2025
@ssggii ssggii moved this from Pending to In Progress in Runchuck-러닝한다이 Aug 21, 2025
Copy link
Member

@moonxxpower moonxxpower left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

수고하셨습니다 👍
추가적으로 세 가지 요구사항 관련해서 궁금한 점이 있어 코멘트 남깁니다!

2025-08-22 11 02 08 스크린샷 2025-08-22 오후 12 52 29
  1. 코스 공개 여부 부분이 누락된거 같습니다! 혹시 제가 못찾은 거라면 말씀해주세요 😢
  2. 사용자가 코스를 생성할 때, 리뷰를 작성할 수 있는데 이거는 프론트 측에서 리뷰 생성 API를 호출하여 처리하는걸까요? UI 상으로는 코스 생성 시 리뷰도 함께 받아야되지 않나 싶어 여쭈어봅니다!
  3. 코스명 20글자 제한이 있는 거 같습니다! 이 부분도 제가 놓친거라면 말씀해주세요 😢

@ssggii
Copy link
Contributor Author

ssggii commented Aug 22, 2025

말씀해주신 1,2번은 내 코스 수정 API에서 처리하는 걸로 알고 있었어요! 내 코스 수정이랑 생성이 기능상 너무 비슷해서요
내 코스 수정이랑 겹치더라도 일단 그렇게 구현해놓을까요?

@ssggii
Copy link
Contributor Author

ssggii commented Aug 22, 2025

코스명 20글자 제한은 제가 놓친 부분이 맞습니다! 꼼꼼히 봐주셔서 감사합니다☺️

@moonxxpower
Copy link
Member

아하 그렇군요! 그럼 생성 시에는 둘다 빈 값으로 저장되었다가 수정할 때 바뀌는걸까요?

@ssggii
Copy link
Contributor Author

ssggii commented Aug 22, 2025

아하 그렇군요! 그럼 생성 시에는 둘다 빈 값으로 저장되었다가 수정할 때 바뀌는걸까요?

아뇨 빈 값은 아니고 생성할 때도 둘 다 값 받아서 정상 저장하게 해놓고 수정 API에서도 똑같은 로직 반복해서 구현해야할 것 같습니다🥲 이게 너무 복제 수준이라서ㅋㅋㅋ 고민 했었어요ㅠ

근데 방금 인경님과 얘기 나눠보니까 내 코스 생성 관련해서 인경님도 저도 의문 사항이 좀 많아서 내일 회의 때 논의사항 확정하고 코드 수정하는게 나을 것 같습니다

ssggii added 5 commits August 28, 2025 18:40
특정 좌표의 주소지를 기준으로 해당 위치가 부산 내 지역인지 판별하는 API를 구현했습니다.
지역 판별 API의 서비스 메서드에 대하여 테스트 코드를 구현했습니다.
테스트 케이스는 다음과 같습니다.

- 부산 내 지역 판별 성공(true 반환)
- 부산 외 지역 판별 성공(false 반환)
- 카카오 API에서 주소 정보를 반환하지 않은 경우 false 반환
기존의 내 코스 생성 API의 로직을 리팩토링했습니다.
주요 변경사항은 다음과 같습니다.

- 요청 DTO 생성
- 요청 파라미터의 유효성 검증 로직 추가
- 주요 메서드 분리
- 테스트 코드 수정
코스 생성 이벤트를 수신하여 즐길거리 초기화를 비동기적으로 진행하는 EventListener를 구현했습니다.
이벤트 리스너를 추가했기 때문에 내 코스 생성 테스트 코드에서 리스너가 필요한 부분을 추가하여 수정했습니다.
Copy link
Member

@moonxxpower moonxxpower left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

요구사항에 따라 수정된 코드 확인했습니다 👍 수고하셨습니다!

저희 지난번 회의에서 내 코스 생성 API 호출 시 코스 데이터만 등록하고, 길상태와 즐길거리는 비동기로 호출하기로 했던 거 같은데, 현재 구현되어있는 createCourseToGpx에 길상태가 포함되어 있어서 현재 슬기님이 구현해주신대로 즐길거리만 그렇게 하고, 길 상태 부분은 추후에 메서드 분리로 수정하는게 좋을 거 같은데 어떻게 생각하시나요? 😢 



추가적으로 인경님께서 초기화 여부에 따라 코스 응답이 달라지게 해달라고 하셔서 Enum을 추가해야 될거 같은데, 이 부분은 제가 status 추가하면 될까요?

@ssggii
Copy link
Contributor Author

ssggii commented Aug 29, 2025

  1. 제가 테스트 했을 때 길 상태까지 createCourseToGpx로 한번에 만들어도 응답 속도가 생각 외로 느리지 않아서, 이대로 진행해도 좋을 것 같습니다! QA 때 여러 환경에서 다양하게 테스트해보고 체감상 느리다 싶으면 그때 길 상태 저장도 비동기로 처리하도록 수정하면 어떨까요?
  2. 초기화 안되었을 때 코스 조회 응답에 대한 말씀이시죠? 이건 코스 조회 관련 API를 모두 점검해야하는 부분이라서 별도의 이슈로 만들겠습니다! 오늘 배포로 바로 포함시키기는 어려울 것 같아서ㅜ 내일 회의 때 말씀드리고 작업 끝나는대로 hotfix로 배포하면 될 것 같아요

@moonxxpower
Copy link
Member

  1. 네! 저도 그게 좋을 거 같습니다 👍 저도 길상태까지는 느리지 않다고 생각하는데 이건 사람마다 체감이 다른거 같아 혹시 몰라 여쭤봤습니다!
  2. 네, 코스 조회 응답 맞습니다:) 감사합니다 😄

@ssggii
Copy link
Contributor Author

ssggii commented Aug 29, 2025

아하 속도 관련은 그럴 수 있겠네요ㅋㅋ
그럼 QA 때 다른 분들 의견 들어보고 결정하기로ㅎㅎ,,😃😃 pr은 merge 하겠습니다!

@ssggii
Copy link
Contributor Author

ssggii commented Aug 29, 2025

인경님이 썸네일 파일 확장자로 webp도 추가해달라고 하셔서 uploadFile에서 확장자 검사하는 부분 코드도 수정이 필요합니다! 이 부분 수정 커밋 올린 후에 머지하겠습니다🫠

@moonxxpower
Copy link
Member

넵 😢 아마 guessContentType, validateFileType에 확장자 추가해주시면 될거에요!

@ssggii ssggii merged commit 77aedca into develop Aug 29, 2025
@github-project-automation github-project-automation bot moved this from In Progress to Done in Runchuck-러닝한다이 Aug 29, 2025
@ssggii ssggii deleted the SCRUM-250-내-코스-생성-API-구현 branch August 29, 2025 12:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

2 participants