fix: [NDGL-141] 컨텐츠 등록 및 구독 API 수정#76
Hidden character warning
Conversation
|
Warning Rate limit exceeded
You’ve run out of usage credits. Purchase more in the billing tab. ⌛ How to resolve this issue?After the wait time has elapsed, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our FAQ for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (5)
요약제안된 템플릿 카테고리 저장 방식을 단일 값에서 목록 기반으로 변경하고 변경 사항카테고리 도메인 모델 리팩토링
API 계약 및 검증 업데이트
이벤트 파이프라인 및 알림 업데이트
통합 및 지원 변경
예상 코드 리뷰 노력🎯 4 (복잡함) | ⏱️ ~45분 관련 PR
제안 라벨
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
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. Comment |
There was a problem hiding this comment.
Actionable comments posted: 4
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In
`@application/src/main/java/com/yapp/ndgl/application/domains/travel/controller/dto/CreateUserSuggestedTemplateRequest.java`:
- Around line 21-23: The category list in CreateUserSuggestedTemplateRequest can
contain null elements causing NPEs when UserSuggestedTemplateEventPublisher does
request.category().stream().map(TravelCategory::name); add element-level
validation by annotating the List<TravelCategory> category with `@NotNull` on its
elements (e.g., `@NotEmpty` on the list + `@NotNull` for items), import the
appropriate javax/jakarta.validation.constraints.NotNull, and re-run validation
so requests like category: [null] are rejected before reaching
UserSuggestedTemplateEventPublisher.
In
`@application/src/main/java/com/yapp/ndgl/application/domains/travel/event/publisher/UserSuggestedTemplateEventPublisher.java`:
- Around line 26-28: In UserSuggestedTemplateEventPublisher change the mapping
of request.category() from TravelCategory::name to TravelCategory::getLabel so
the event carries the enum's Korean label rather than the constant name; locate
the stream in the method where List<String> category is built and replace
.map(TravelCategory::name) with .map(TravelCategory::getLabel) so Discord
notifications show the user-facing label.
In `@application/src/main/resources/logback-spring.xml`:
- Line 4: 현재 logback 설정에서 <property name="LOG_PATH" value="${LOG_PATH:-logs}"/>는
Logback 변수 치환만 수행해 Spring 환경변수(LOG_PATH)를 읽지 못하므로 배포 환경의 LOG_PATH가 무시됩니다; 변경하려면
해당 <property ...> 항목을 <springProperty scope="context" name="LOG_PATH"
source="LOG_PATH" defaultValue="logs"/>로 되돌려 Spring Environment에서 값을 읽게 하고, 참조하는
코드(예: pattern이나 appender에서 사용하는 LOG_PATH 변수 이름)를 그대로 유지해 환경변수 기반 경로가 정상적으로 적용되도록
하세요.
In
`@domain/domain-rdb/src/main/java/com/yapp/ndgl/domain/travel/entity/UserSuggestedTemplateEntity.java`:
- Around line 41-43: The category field in UserSuggestedTemplateEntity was
changed from a single VARCHAR enum to a JSON List<TravelCategory> (field:
category, type: List<TravelCategory>, enum: TravelCategory), so existing rows
with values like "FOOD" will break; add a migration that converts existing
varchar enum values into JSON arrays (e.g. "FOOD" -> '["FOOD"]') and update the
column DDL if needed (or add an explicit Flyway/Liquibase migration script) to
perform the conversion atomically; alternatively/additionally, add a
backward-compatible read fallback in the repository/service layer that detects
plain string values and wraps them into a single-element JSON array before
deserialization (refer to UserSuggestedTemplateEntity.category and any
repository methods that read/write it).
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: 97e7cce1-9e8b-42ab-b668-018fd9135502
📒 Files selected for processing (16)
application/src/main/java/com/yapp/ndgl/application/domains/travel/controller/UserSuggestedTemplateApi.javaapplication/src/main/java/com/yapp/ndgl/application/domains/travel/controller/dto/AdminUserSuggestedTemplateResponse.javaapplication/src/main/java/com/yapp/ndgl/application/domains/travel/controller/dto/CreateUserSuggestedTemplateRequest.javaapplication/src/main/java/com/yapp/ndgl/application/domains/travel/controller/dto/UserSuggestedTemplateResponse.javaapplication/src/main/java/com/yapp/ndgl/application/domains/travel/event/UserSuggestedTemplateCreatedEvent.javaapplication/src/main/java/com/yapp/ndgl/application/domains/travel/event/UserSuggestedTemplateNotification.javaapplication/src/main/java/com/yapp/ndgl/application/domains/travel/event/publisher/UserSuggestedTemplateEventPublisher.javaapplication/src/main/java/com/yapp/ndgl/application/domains/travel/service/UserSuggestedTemplateService.javaapplication/src/main/resources/logback-spring.xmlapplication/src/test/java/com/yapp/ndgl/application/domains/travel/UserSuggestedTemplateConcurrencyTest.javacommon/src/main/java/com/yapp/ndgl/common/type/DomesticRegion.javacommon/src/main/java/com/yapp/ndgl/common/type/TravelCategory.javacommon/src/main/java/com/yapp/ndgl/common/util/TextUtils.javadomain/domain-rdb/src/main/java/com/yapp/ndgl/domain/travel/entity/UserSuggestedTemplateEntity.javadomain/domain-service/src/main/java/com/yapp/ndgl/domain/travel/UserSuggestedTemplate.javadomain/domain-service/src/main/java/com/yapp/ndgl/domain/travel/mapper/UserSuggestedTemplateMapper.java
💤 Files with no reviewable changes (3)
- common/src/main/java/com/yapp/ndgl/common/type/DomesticRegion.java
- application/src/main/java/com/yapp/ndgl/application/domains/travel/controller/dto/UserSuggestedTemplateResponse.java
- domain/domain-service/src/main/java/com/yapp/ndgl/domain/travel/mapper/UserSuggestedTemplateMapper.java
🤖 이 PR은 AI를 사용하여 자동 생성되었습니다.
요약
사용자 제안 템플릿에서 여행 카테고리를 복수 선택으로 전환하고 DomesticRegion을 제거하여 API·도메인·이벤트·알림을 일관되게 업데이트합니다.
이로써 카테고리가 리스트로 영속화되고 입력 검증 및 알림 표현이 개선됩니다.
변경 내용
참고 사항
Summary by CodeRabbit
릴리스 노트
New Features
Changes
전달사항 (클라이언트)
1.
POST /api/v1/suggested-templates(제안 템플릿 등록)변경된 내용
video_link→videoLink,recommend_reason→recommendReason(모두 camelCase로 통일)recommendReason이 필수 → 선택 (생략 가능)category가 단일 enum 값 → 배열로 변경되고 필수가 됨 (최소 1개)region필드 제거category허용 값(8개로 확정):FOOD(맛집),CAFE(카페/디저트),HEALING(힐링/풍경),ATTRACTION(명소),LOCAL(로컬),SHOPPING(쇼핑),ACTIVITY(액티비티/체험),BUDGET(가성비). 기존UNCATEGORIZED사용 불가대응 방안
{ "videoLink": "https://youtu.be/abc12345678", "recommendReason": "선택 입력값", "category": ["FOOD", "CAFE"] }UNCATEGORIZED보내고 있었다면 새 값 중 적절한 것으로 매핑2. 구독 API: 경로/요청 본문 모두 변경
변경 전:
POST /api/v1/suggested-templates/{id}/subscribe변경 후:
POST /api/v1/suggested-templates/subscribe변경된 내용
{id}제거. 대신 요청 본문으로 영상 링크 전달{ "videoLink": "https://youtu.be/abc12345678" }TRAVEL-02-003반환대응 방안
409 TRAVEL-03-003(다른 사용자가 이미 PENDING 요청 중) 받았을 때, 방금 보냈던 동일videoLink를 그대로 구독 API 본문에 담아 호출하면 됨. templateId를 알 필요 없음POST /api/v1/suggested-templates호출 →409 TRAVEL-03-003POST /api/v1/suggested-templates/subscribe호출, body:{ "videoLink": "(1번과 동일)" }→200카테고리 코드 / 라벨 매핑