Skip to content

[Feat] 어드민 코스 생성/삭제 API 추가 (지도 좌표 기반) - #428

Merged
JangInho merged 1 commit into
developfrom
feat/#425-admin-course-create
Sep 11, 2026
Merged

JangInho merged 1 commit into
developfrom
feat/#425-admin-course-create

Conversation

@JangInho

@JangInho JangInho commented Sep 10, 2026

Copy link
Copy Markdown
Contributor

🧾 요약

  • 어드민에서 지도 좌표로 코스를 만들 수 있도록 코스 생성/삭제 API 추가 — 테스트 코스를 운영 DB 직접 SQL 없이 만들기 위해

🔗 이슈

✨ 변경 내용

  • POST /api/admin/courses — 좌표 목록으로 코스 생성, data 는 생성된 courseId (201)
  • DELETE /api/admin/courses/{courseId} — 참조가 있으면 409 로 거부
  • Course.create(...) 정적 팩토리 추가 (빌더·생성자가 모두 PROTECTED 라 생성이 불가능했음)
  • haversine 을 common/util/GeoDistance 로 공용화하고 CourseSummitDistanceCalculator 가 사용하도록 교체
  • 테스트 18건 추가 (AdminCourseServiceTest 11, GeoDistanceTest 5, AdminCourseControllerTest 2)

✅ 확인

  • 빌드 OK
  • 테스트 OK

- POST /api/admin/courses — 좌표 목록으로 코스 생성
- DELETE /api/admin/courses/{courseId} — 참조가 있으면 409 로 거부
- Course.create(...) 정적 팩토리 추가 (빌더·생성자가 모두 PROTECTED 였음)
- haversine 을 common/util/GeoDistance 로 공용화하고 CourseSummitDistanceCalculator 가 사용

코스는 그동안 시드 마이그레이션으로만 들어가는 데이터였다. 테스트 코스를 넣으려고
운영 DB 에 직접 SQL 을 쓰면 이력이 남지 않아 나중에 복구가 안 된다(V6 사례).

distance 는 요청으로 받지 않고 서버가 좌표로 계산한다. 트래킹 누적 거리와 같은 공식이어야
사진 마일스톤 푸시 지점이 어긋나지 않아서, 이미 4곳에 흩어져 있던 haversine 사본을
GeoDistance 로 모으고 그것만 쓰게 했다.

고도는 저장하지 않는다. 지도 클릭으로는 위경도만 얻기 때문이다. altitudes 가 null 이면
CourseSlopeSegmentCalculator 가 빈 세그먼트를 돌려주므로 경사도 그래프만 비고 코스 상세는
정상 동작한다. 대신 찍은 좌표 중 하나를 정상으로 지정해 summit_lat/lng 를 채운다.

polyline 은 SRID 4326 으로 만든다. src/main 에서 JTS 지오메트리를 생성하는 첫 사례라
SRID 를 빠뜨리면 geography 컬럼과 어긋나므로 테스트로 4326 을 검증한다.
@JangInho JangInho added the enhancement New feature or request label Sep 10, 2026
@JangInho JangInho self-assigned this Sep 10, 2026
@JangInho JangInho added the enhancement New feature or request label Sep 10, 2026
@coderabbitai

coderabbitai Bot commented Sep 10, 2026

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Advanced

Run ID: 2a86b855-a16f-48e7-9c09-cd1a31f53b1d


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

Copy link
Copy Markdown
Contributor

📊 테스트 커버리지 리포트

Overall Project 98.47% 🍏
Files changed 99.77% 🍏

File Coverage
GeoDistance.java 100% 🍏
AdminCourseCreateRequest.java 100% 🍏
AdminCourseController.java 100% 🍏
CourseSummitDistanceCalculator.java 100% 🍏
Course.java 100% 🍏
ErrorStatus.java 100% 🍏
SuccessStatus.java 100% 🍏
AdminCourseService.java 99.39% -0.61% 🍏

@JangInho

Copy link
Copy Markdown
Contributor Author

바로 머지해버리기~~~~~

@JangInho
JangInho merged commit bf5cb91 into develop Sep 11, 2026
5 checks passed
@JangInho
JangInho deleted the feat/#425-admin-course-create branch September 11, 2026 07:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[feat] 어드민 코스 생성/삭제 API 추가 (지도 좌표 기반)

1 participant