Skip to content

Conversation

@1winhyun
Copy link
Member

@1winhyun 1winhyun commented Jan 12, 2026

🔀 변경 내용

  • 행사 게시글 생성 시 장소 상세정보 입력하며 행사 게시글 조회하는 API들에 장소의 상세정보도 조회되도록 수정했습니다.

✅ 작업 항목

  • StudentCouncilPost 테이블에 detailedLocation 필드를 추가해 행사 게시글 생성 및 수정 시 detailedLocation도 포함하도록 했습니다.(행사 게시글 한정)
  • 행사 게시글 조회가 포함된 API들에 detailedLocation도 응답 DTO에 포함되도록 수정했습니다. (제휴 게시글에서는 null로 되어있는 detailedLoaction이 조회되지 않게 하기 위해 @JsonInclude(JsonInclude.Include.NON_NULL)를 추가했습니다.

📸 스크린샷 (선택)

행사 게시글 생성

image

학생회 행사 목록 조회(학생회 홈화면)

image

학생회 게시글 상세 조회(학생회용)

image

학생회 72시간 이내 행사 조회

image

학생회 게시글 상세 조회(유저용)

image

학생회 게시글 목록 조회(유저용)

image

학생회 72시간 이내 행사 조회(유저용)

image

📎 참고 이슈

관련 이슈 번호 #57

Summary by CodeRabbit

릴리스 노트

  • New Features
    • 게시물 생성 및 수정 시 상세 위치 정보 입력 기능 추가
    • 게시물 조회 응답에 상세 위치 정보 포함
    • JSON 응답에서 null 값 자동 제외 처리로 응답 최적화

✏️ Tip: You can customize this high-level summary in your review settings.

@coderabbitai
Copy link

coderabbitai bot commented Jan 12, 2026

Walkthrough

이 PR은 학생회 게시물 기능 전체에서 새로운 detailedLocation 필드를 요청/응답 DTO, 도메인 엔티티, 서비스 계층 매핑에 추가하여 상세 위치 정보를 지원합니다.

Changes

Cohort / File(s) Summary
Request DTOs
PostRequest.java
detailedLocation: String 필드 추가 (place 다음에 위치)
Response DTOs - 기본
GetPostResponse.java,
GetPostForUserResponse.java,
GetUpcomingEventListForCouncilResponse.java
각각 detailedLocation: String 필드 추가 (@Schema 주석 포함)
Response DTOs - JSON null 처리
GetLikedPostResponse.java,
GetPostListForCouncilResponse.java,
PostListItemResponse.java
@JsonInclude(JsonInclude.Include.NON_NULL) 주석 추가 및 detailedLocation: String 필드 추가; PostListItemResponse는 추가로 liked: boolean 필드 포함
Domain Entity
StudentCouncilPost.java
detailedLocation 필드 추가 (DB 컬럼명: "detailed_location"), update(...) 메서드 시그니처 업데이트
Mapper
StudentCouncilPostMapper.java
모든 응답 DTO 매퍼에서 detailedLocation 필드 매핑 추가 (toGetPostResponse, toGetPostForUserResponse, toGetLikedPostResponse, toPostListItemResponse, toGetPostListForCouncilResponse, toGetUpcomingEventListForCouncilResponse); createStudentCouncilPost에서 빌더에 detailedLocation 설정
Service
StudentCouncilPostService.java
update(...) 호출 시 dto.detailedLocation() 매개변수 추가
Controller Documentation
StudentCouncilPostController.java
EVENT 요청 예제에 detailedLocation: "대운동장" 필드 추가

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related issues

Possibly related PRs

Suggested reviewers

  • jjaeroong
  • 1224kang

Poem

🐰 상세한 장소를 담은 새 필드,
여러 DTOs를 누비며 퍼지네,
매퍼는 바쁘고 엔티티도 반겨,
데이터베이스 컬럼까지 마련하고,
이제 학생회 게시물은 더욱 정확해지리!

🚥 Pre-merge checks | ✅ 2 | ❌ 1
❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed PR 제목이 변경사항의 주요 내용을 명확하게 반영하고 있습니다. 행사 게시글 생성 시 장소 상세정보 입력 기능 추가라는 핵심 변경사항을 정확하게 설명합니다.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
  • 📝 Generate docstrings

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 and usage tips.

Copy link

@coderabbitai coderabbitai bot left a 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

📥 Commits

Reviewing files that changed from the base of the PR and between 5475c11 and 3cb0da2.

📒 Files selected for processing (11)
  • src/main/java/com/campus/campus/domain/councilpost/application/dto/request/PostRequest.java
  • src/main/java/com/campus/campus/domain/councilpost/application/dto/response/GetLikedPostResponse.java
  • src/main/java/com/campus/campus/domain/councilpost/application/dto/response/GetPostForUserResponse.java
  • src/main/java/com/campus/campus/domain/councilpost/application/dto/response/GetPostListForCouncilResponse.java
  • src/main/java/com/campus/campus/domain/councilpost/application/dto/response/GetPostResponse.java
  • src/main/java/com/campus/campus/domain/councilpost/application/dto/response/GetUpcomingEventListForCouncilResponse.java
  • src/main/java/com/campus/campus/domain/councilpost/application/dto/response/PostListItemResponse.java
  • src/main/java/com/campus/campus/domain/councilpost/application/mapper/StudentCouncilPostMapper.java
  • src/main/java/com/campus/campus/domain/councilpost/application/service/StudentCouncilPostService.java
  • src/main/java/com/campus/campus/domain/councilpost/domain/entity/StudentCouncilPost.java
  • src/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 필드와 다름을 확인하세요.

thumbnailImageUrlthumbnailIconnull 전달 시 기존 값을 유지하지만(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) 적용으로 제휴 게시글의 detailedLocation null 처리가 적절히 되어 있습니다. 좋아요한 게시글 목록에 행사/제휴 게시글이 혼합되어 있을 수 있으므로 올바른 구현입니다.

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) 설정으로 처리됩니다.

Copy link
Contributor

@1224kang 1224kang left a comment

Choose a reason for hiding this comment

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

고생하셨습니다!

@1winhyun 1winhyun merged commit a89c014 into dev Jan 12, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

♻️Refactor 리팩토링

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[REFACTOR] 행사 게시글 생성 시 장소 상세정보 입력하도록 수정

4 participants