-
Notifications
You must be signed in to change notification settings - Fork 0
Refactor/#57 행사 게시글 생성 시 장소 상세정보 입력하도록 수정 #58
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
… detailedLocation도 입력할 수 있도록 구현, 게시글 생성 반환값/학생회 게시글 상세 조회 반환값에 detailedLocation 추가
…de 어노테이션 추가 및 detailedLocation 필드 추가
Walkthrough이 PR은 학생회 게시물 기능 전체에서 새로운 Changes
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Possibly related issues
Possibly related PRs
Suggested reviewers
Poem
🚥 Pre-merge checks | ✅ 2 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing touches
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
src/main/java/com/campus/campus/domain/councilpost/application/mapper/StudentCouncilPostMapper.java (1)
151-165:detailedLocation필드 검증 부재 확인됨
detailedLocation은 행사 게시글 전용 필드로 설계되었으나, 현재 코드에서는 게시글 카테고리와 무관하게 모든 게시글에 설정됩니다.
- PostRequest DTO:
detailedLocation에 대한 검증 어노테이션 없음 (단순 String)- PostCategory.validateAndNormalize(): 날짜만 검증하며
detailedLocation필드 검증 없음- 서비스 계층: 카테고리 구분 없이
dto.detailedLocation()을 직접 전달PARTNERSHIP 게시글 생성 시에도
detailedLocation이 설정되지 않도록 다음 중 하나 구현 필요:
- PostCategory 또는 PostRequest에서 카테고리별 필드 유효성 검증
- 또는 서비스 계층에서 EVENT 카테고리에만
detailedLocation설정
🧹 Nitpick comments (3)
src/main/java/com/campus/campus/domain/councilpost/application/dto/response/GetPostResponse.java (1)
26-26: LGTM!
detailedLocation필드가 올바르게 추가되었고, 클래스 레벨의@JsonInclude(NON_NULL)로 제휴 게시글에서 null 값이 직렬화되지 않습니다.API 문서 일관성을 위해
@Schema어노테이션 추가를 고려해보세요 (optional).src/main/java/com/campus/campus/domain/councilpost/application/dto/request/PostRequest.java (1)
48-50: 불필요한 주석 제거를 권장합니다.
// 추가됨주석은 개발 과정에서 남겨진 것으로 보입니다. 커밋 히스토리에서 변경 사항을 확인할 수 있으므로 제거하는 것이 좋습니다.♻️ 제안된 수정
- @Schema(description = "상세 장소 (예: 310관 B301호)", example = "310관 B301호") // 추가됨 + @Schema(description = "상세 장소 (예: 310관 B301호)", example = "310관 B301호") String detailedLocation,src/main/java/com/campus/campus/domain/councilpost/application/dto/response/GetUpcomingEventListForCouncilResponse.java (1)
10-31: 일관성을 위해@JsonInclude(NON_NULL)추가를 고려해 주세요.다른 응답 DTO들(
GetPostListForCouncilResponse,GetLikedPostResponse,PostListItemResponse)에는@JsonInclude(JsonInclude.Include.NON_NULL)이 적용되어 있으나, 이 DTO에는 누락되어 있습니다.이 엔드포인트가 EVENT 게시글만 반환하여
detailedLocation이 항상 존재한다면 문제없지만, 방어적 코딩 및 일관성 측면에서 추가하는 것을 권장합니다.♻️ 제안된 수정
package com.campus.campus.domain.councilpost.application.dto.response; import java.time.LocalDateTime; import com.campus.campus.domain.councilpost.domain.entity.PostCategory; import com.campus.campus.domain.councilpost.domain.entity.ThumbnailIcon; +import com.fasterxml.jackson.annotation.JsonInclude; import io.swagger.v3.oas.annotations.media.Schema; +@JsonInclude(JsonInclude.Include.NON_NULL) public record GetUpcomingEventListForCouncilResponse(
📜 Review details
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (11)
src/main/java/com/campus/campus/domain/councilpost/application/dto/request/PostRequest.javasrc/main/java/com/campus/campus/domain/councilpost/application/dto/response/GetLikedPostResponse.javasrc/main/java/com/campus/campus/domain/councilpost/application/dto/response/GetPostForUserResponse.javasrc/main/java/com/campus/campus/domain/councilpost/application/dto/response/GetPostListForCouncilResponse.javasrc/main/java/com/campus/campus/domain/councilpost/application/dto/response/GetPostResponse.javasrc/main/java/com/campus/campus/domain/councilpost/application/dto/response/GetUpcomingEventListForCouncilResponse.javasrc/main/java/com/campus/campus/domain/councilpost/application/dto/response/PostListItemResponse.javasrc/main/java/com/campus/campus/domain/councilpost/application/mapper/StudentCouncilPostMapper.javasrc/main/java/com/campus/campus/domain/councilpost/application/service/StudentCouncilPostService.javasrc/main/java/com/campus/campus/domain/councilpost/domain/entity/StudentCouncilPost.javasrc/main/java/com/campus/campus/domain/councilpost/presentation/StudentCouncilPostController.java
🧰 Additional context used
🧬 Code graph analysis (3)
src/main/java/com/campus/campus/domain/councilpost/presentation/StudentCouncilPostController.java (1)
src/main/java/com/campus/campus/domain/councilpost/application/dto/request/CouncilPostCreatedEvent.java (1)
CouncilPostCreatedEvent(5-10)
src/main/java/com/campus/campus/domain/councilpost/application/dto/response/PostListItemResponse.java (3)
src/main/java/com/campus/campus/domain/councilpost/application/dto/response/LikePostResponse.java (1)
LikePostResponse(5-15)src/main/java/com/campus/campus/domain/councilpost/application/dto/response/GetActivePartnershipListForUserResponse.java (1)
GetActivePartnershipListForUserResponse(5-18)src/main/java/com/campus/campus/domain/councilnotice/application/dto/response/NoticeListItemResponse.java (1)
Builder(7-15)
src/main/java/com/campus/campus/domain/councilpost/application/dto/response/GetPostResponse.java (1)
src/main/java/com/campus/campus/domain/councilpost/application/dto/response/GetActivePartnershipListForUserResponse.java (1)
GetActivePartnershipListForUserResponse(5-18)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
- GitHub Check: build
🔇 Additional comments (15)
src/main/java/com/campus/campus/domain/councilpost/presentation/StudentCouncilPostController.java (1)
95-95: LGTM!EVENT 예제에
detailedLocation필드가 올바르게 추가되었습니다. PARTNERSHIP 예제에서는 해당 필드를 생략한 것도 PR 목적(행사 게시글 한정)에 맞습니다.src/main/java/com/campus/campus/domain/councilpost/domain/entity/StudentCouncilPost.java (2)
53-55: LGTM!도메인 엔티티에
detailedLocation필드가 올바르게 추가되었습니다.
64-88:detailedLocation업데이트 동작이 다른 nullable 필드와 다름을 확인하세요.
thumbnailImageUrl과thumbnailIcon은null전달 시 기존 값을 유지하지만(lines 83-87),detailedLocation은 무조건 덮어씁니다. 의도된 동작이라면 문제없지만, 기존 값 유지가 필요하다면 null 체크를 추가하세요.src/main/java/com/campus/campus/domain/councilpost/application/dto/response/GetPostForUserResponse.java (1)
25-25: LGTM!
GetPostResponse와 일관되게detailedLocation필드가 추가되었습니다.src/main/java/com/campus/campus/domain/councilpost/application/service/StudentCouncilPostService.java (2)
220-230: LGTM!
post.update()호출 시dto.detailedLocation()이 올바르게 전달됩니다.
70-77:detailedLocation이 행사(EVENT) 게시글에만 적용되는지 검증이 필요할 수 있습니다.PR 목적에 따르면
detailedLocation은 행사 게시글 한정입니다. 현재 코드에서는 PARTNERSHIP 게시글에도detailedLocation이 설정될 수 있습니다. 비즈니스 규칙 위반 시 오류를 반환하거나, 무시하고null로 저장하는 것이 의도된 동작인지 확인하세요.src/main/java/com/campus/campus/domain/councilpost/application/dto/response/GetPostListForCouncilResponse.java (1)
11-27: LGTM!
@JsonInclude(NON_NULL)적용으로 제휴 게시글에서detailedLocation이 null일 때 직렬화에서 제외되도록 적절히 처리되었습니다. 필드 배치와 Schema 어노테이션도 일관성 있게 작성되었습니다.src/main/java/com/campus/campus/domain/councilpost/application/dto/response/GetLikedPostResponse.java (1)
9-22: LGTM!
@JsonInclude(NON_NULL)적용으로 제휴 게시글의detailedLocationnull 처리가 적절히 되어 있습니다. 좋아요한 게시글 목록에 행사/제휴 게시글이 혼합되어 있을 수 있으므로 올바른 구현입니다.src/main/java/com/campus/campus/domain/councilpost/application/dto/response/PostListItemResponse.java (1)
9-20: LGTM!
@JsonInclude(NON_NULL)적용과detailedLocation필드 추가가 적절합니다. 다른 응답 DTO들과 달리@Schema어노테이션이 없지만,NoticeListItemResponse와 동일한 패턴을 따르고 있어 일관성이 유지됩니다.src/main/java/com/campus/campus/domain/councilpost/application/mapper/StudentCouncilPostMapper.java (6)
31-43: LGTM!detailedLocation필드 매핑이 적절하게 추가되었습니다.
detailedLocation필드 추가와 함께 날짜 조건부 로직(post.isEvent() ? post.getStartDateTime() : post.getEndDateTime())이 행사/제휴 게시글에 따라 적절한 날짜를 반환하도록 구현되었습니다.
45-56: LGTM!학생회 홈 화면용 응답 매핑에
detailedLocation필드가 일관되게 추가되었습니다.
58-68: LGTM!72시간 내 행사 조회용 응답에
detailedLocation이 적절히 추가되었습니다. 이 메서드는 행사 전용이므로startDateTime을 직접 사용하는 것이 올바릅니다.
79-103: LGTM!게시글 상세 조회 응답에
detailedLocation필드가 builder 패턴을 통해 일관되게 추가되었습니다.
105-130: LGTM!사용자용 게시글 상세 조회 응답에
detailedLocation필드가 적절히 추가되었습니다.
140-149: LGTM!관심 게시글 조회 응답에
detailedLocation필드가 일관되게 추가되었습니다. 제휴 게시글의 경우 null 값은 DTO의@JsonInclude(NON_NULL)설정으로 처리됩니다.
1224kang
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
고생하셨습니다!
🔀 변경 내용
✅ 작업 항목
📸 스크린샷 (선택)
행사 게시글 생성
학생회 행사 목록 조회(학생회 홈화면)
학생회 게시글 상세 조회(학생회용)
학생회 72시간 이내 행사 조회
학생회 게시글 상세 조회(유저용)
학생회 게시글 목록 조회(유저용)
학생회 72시간 이내 행사 조회(유저용)
📎 참고 이슈
관련 이슈 번호 #57
Summary by CodeRabbit
릴리스 노트
✏️ Tip: You can customize this high-level summary in your review settings.