Skip to content

Dev#126

Merged
Qbooo merged 62 commits into
mainfrom
dev
Apr 9, 2026
Merged

Dev#126
Qbooo merged 62 commits into
mainfrom
dev

Conversation

@Qbooo
Copy link
Copy Markdown
Contributor

@Qbooo Qbooo commented Apr 9, 2026

dev에서 main으로 머지 테스트 + CI/CD 확인

Summary by CodeRabbit

릴리스 노트

  • New Features

    • 투표 고정(핫/트렌딩) 및 삭제 기능 추가
    • 신고 시스템 구현 (투표/댓글)
    • 자동화된 개발/프로덕션 배포 파이프라인 추가
  • Bug Fixes

    • JWT 인증 필터 개선 및 에러 처리 강화
    • 댓글 카운트 계산 정확성 개선
  • Refactor

    • 보안 설정 및 CORS 정책 개선
    • 트랜잭션 관리 표준화
  • Tests

    • 댓글, 투표, 신고, 회원 프로필 서비스 테스트 추가
  • Chores

    • Swagger 서버 설정 업데이트
    • 데이터베이스 스키마 확장

Qbooo and others added 30 commits September 24, 2025 19:15
[FEAT] 반응성 기반 핫이슈 로직 구현 (#82)
- Vote 엔티티에 content 핑드 추가 (text, nullable)
- VoteCreateRequest, VoteDetailResponse, VoteResponseDto에 content 필드 추가
- HotIssueVoteResponse에 content 필드 추가
- VoteServiceImpl에서 content 처리 로직 구현
- 투표 생성, 상세 조회, 핫이슈, 트렌딩에서 content 반환
- Swagger 테스트를 위해 로컬 개발 서버 추가
feat: develop.valanse.kr CORS 설정 추가
Qbooo and others added 28 commits December 2, 2025 20:59
fix: Security 설정 추가
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Apr 9, 2026

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Free

Run ID: 5c59266d-ed1e-487c-ad52-bbb09fe415a4

📥 Commits

Reviewing files that changed from the base of the PR and between 7b56ac8 and 52e16be.

⛔ Files ignored due to path filters (3)
  • .DS_Store is excluded by !**/.DS_Store
  • src/.DS_Store is excluded by !**/.DS_Store
  • src/main/.DS_Store is excluded by !**/.DS_Store
📒 Files selected for processing (59)
  • .github/workflows/deploy-dev.yml
  • .github/workflows/deploy-prod.yml
  • .github/workflows/deploy.yml.backup
  • build.gradle
  • src/main/java/com/valanse/valanse/common/api/GlobalExceptionHandler.java
  • src/main/java/com/valanse/valanse/common/auth/JwtTokenFilter.java
  • src/main/java/com/valanse/valanse/common/config/SecurityConfig.java
  • src/main/java/com/valanse/valanse/common/config/SwaggerConfig.java
  • src/main/java/com/valanse/valanse/controller/AuthController.java
  • src/main/java/com/valanse/valanse/controller/CommentController.java
  • src/main/java/com/valanse/valanse/controller/MemberController.java
  • src/main/java/com/valanse/valanse/controller/ReportController.java
  • src/main/java/com/valanse/valanse/controller/VoteController.java
  • src/main/java/com/valanse/valanse/domain/Member.java
  • src/main/java/com/valanse/valanse/domain/Report.java
  • src/main/java/com/valanse/valanse/domain/Vote.java
  • src/main/java/com/valanse/valanse/domain/enums/PinType.java
  • src/main/java/com/valanse/valanse/domain/enums/ReportType.java
  • src/main/java/com/valanse/valanse/dto/Comment/CommentPostRequest.java
  • src/main/java/com/valanse/valanse/dto/Comment/CommentReplyResponseDto.java
  • src/main/java/com/valanse/valanse/dto/Comment/CommentResponseDto.java
  • src/main/java/com/valanse/valanse/dto/MemberProfile/MemberProfileResponse.java
  • src/main/java/com/valanse/valanse/dto/Report/ReportRequest.java
  • src/main/java/com/valanse/valanse/dto/Report/ReportedCommentResponse.java
  • src/main/java/com/valanse/valanse/dto/Report/ReportedTargetResponse.java
  • src/main/java/com/valanse/valanse/dto/Report/ReportedVoteResponse.java
  • src/main/java/com/valanse/valanse/dto/Vote/HotIssueVoteResponse.java
  • src/main/java/com/valanse/valanse/dto/Vote/PinRequest.java
  • src/main/java/com/valanse/valanse/dto/Vote/VoteCreateRequest.java
  • src/main/java/com/valanse/valanse/dto/Vote/VoteDetailResponse.java
  • src/main/java/com/valanse/valanse/dto/Vote/VoteListResponse.java
  • src/main/java/com/valanse/valanse/dto/Vote/VoteResponseDto.java
  • src/main/java/com/valanse/valanse/repository/CommentRepository.java
  • src/main/java/com/valanse/valanse/repository/CommentRepositoryCustom/CommentRepositoryCustom.java
  • src/main/java/com/valanse/valanse/repository/CommentRepositoryCustom/CommentRepositoryImpl.java
  • src/main/java/com/valanse/valanse/repository/ReportRepository.java
  • src/main/java/com/valanse/valanse/repository/ReportRepositoryCustom/ReportRepositoryCustom.java
  • src/main/java/com/valanse/valanse/repository/ReportRepositoryCustom/ReportRepositoryImpl.java
  • src/main/java/com/valanse/valanse/repository/VoteRepository.java
  • src/main/java/com/valanse/valanse/service/AuthService/AuthServiceImpl.java
  • src/main/java/com/valanse/valanse/service/CommentLikeService/CommentLikeServiceImpl.java
  • src/main/java/com/valanse/valanse/service/CommentService/CommentService.java
  • src/main/java/com/valanse/valanse/service/CommentService/CommentServiceImpl.java
  • src/main/java/com/valanse/valanse/service/KakaoService/KakaoServiceImpl.java
  • src/main/java/com/valanse/valanse/service/MemberProfileService/MemberProfileServiceImpl.java
  • src/main/java/com/valanse/valanse/service/MemberService/MemberServiceImpl.java
  • src/main/java/com/valanse/valanse/service/ReportService/ReportService.java
  • src/main/java/com/valanse/valanse/service/ReportService/ReportServiceImpl.java
  • src/main/java/com/valanse/valanse/service/VoteService/VoteService.java
  • src/main/java/com/valanse/valanse/service/VoteService/VoteServiceImpl.java
  • src/test/java/com/valanse/valanse/controller/VoteControllerTest.java
  • src/test/java/com/valanse/valanse/service/CommentLikeService/CommentLikeServiceImplTest.java
  • src/test/java/com/valanse/valanse/service/CommentService/CommentServiceImplTest.java
  • src/test/java/com/valanse/valanse/service/MemberProfileService/MemberProfileServiceImplTest.java
  • src/test/java/com/valanse/valanse/service/MemberService/MemberServiceImplTest.java
  • src/test/java/com/valanse/valanse/service/ReportService/ReportServiceImplTest.java
  • src/test/java/com/valanse/valanse/service/TransactionalTest.java
  • src/test/java/com/valanse/valanse/service/VoteService/VoteServiceImplTest.java
  • src/test/resources/application-test.yml

Walkthrough

이 PR은 GitHub Actions 기반의 CI/CD 배포 워크플로우(개발/운영)를 추가하고, JWT 토큰 필터를 OncePerRequestFilter로 재설계하며, 신고(Report) 기능을 새로 도입하고, 투표에 트렌딩 및 핀 기능을 추가하고, 댓글의 소프트 삭제 및 권한 검증을 강화하며, 다양한 DTO와 서비스 계층을 확장합니다.

Changes

Cohort / File(s) Summary
CI/CD 배포 워크플로우
.github/workflows/deploy-dev.yml, .github/workflows/deploy-prod.yml
개발/운영 환경별 GitHub Actions 워크플로우 추가. 코드 빌드 후 Docker 이미지 생성, ECR 푸시, EC2 재배포(docker compose up -d)를 자동화.
빌드 및 테스트 설정
build.gradle
H2 테스트 라이브러리 추가, QueryDSL 경로 단순화, JUnit Platform 명시적 활성화.
JWT 인증 필터 재설계
src/main/java/.../common/auth/JwtTokenFilter.java
GenericFilterOncePerRequestFilter로 변경; Bearer 토큰 검증 로직 개선; 만료/위변조 예외 시 JSON 형식 에러 응답 반환; 스킵 대상 엔드포인트 축소.
보안 설정
src/main/java/.../common/config/SecurityConfig.java, src/main/java/.../common/config/SwaggerConfig.java
CORS 재활성화 및 설정 추가; 인증 규칙 재조정 (읽기 허용, 쓰기/삭제는 인증 필요); Swagger 서버 정의 확대.
예외 처리
src/main/java/.../common/api/GlobalExceptionHandler.java
ApiException 응답에서 type 필드 제거.
신고(Report) 기능 - 컨트롤러 및 엔티티
src/main/java/.../controller/ReportController.java, src/main/java/.../domain/Report.java
신규 REST 엔드포인트(POST /report/{targetId}, GET /report) 및 Report JPA 엔티티 추가; 회원이 투표/댓글을 신고하고 신고 목록 조회.
신고 DTO 및 리포지토리
src/main/java/.../dto/Report/*, src/main/java/.../repository/ReportRepository.java, src/main/java/.../repository/ReportRepositoryCustom/*
신고 요청/응답 DTO 추가(ReportRequest, ReportedTargetResponse, ReportedVoteResponse, ReportedCommentResponse); 신고 리포지토리 및 커스텀 쿼리 구현.
신고 서비스
src/main/java/.../service/ReportService/ReportService.java, src/main/java/.../service/ReportService/ReportServiceImpl.java
신고 로직 및 신고 대상 조회 기능 구현; 중복 신고 방지, 자신의 컨텐츠 신고 불가, 관리자 전용 조회.
투표 기능 확장
src/main/java/.../domain/Vote.java, src/main/java/.../domain/enums/PinType.java
투표에 content, reactivityScore, reactivityUpdatedAt, pinType 필드 추가; 반응성 점수 계산 및 핀 메서드 추가.
투표 컨트롤러 및 DTO
src/main/java/.../controller/VoteController.java, src/main/java/.../dto/Vote/*
트렌딩 투표 조회(GET /votes/trending), 투표 삭제(DELETE /votes/{voteId}), 핀 상태 업데이트(PATCH /votes/{voteId}/pin) 엔드포인트 추가; DTO에 content, pinType, canDelete 필드 추가.
투표 리포지토리 및 서비스
src/main/java/.../repository/VoteRepository.java, src/main/java/.../service/VoteService/VoteService.java, src/main/java/.../service/VoteService/VoteServiceImpl.java
반응성 기반 쿼리 메서드 추가; 트렌딩 투표 로직 구현; 핀 관리 및 삭제 기능 추가; 반응성 점수 자동 계산.
댓글 소프트 삭제 및 권한
src/main/java/.../domain/enums/ReportType.java, src/main/java/.../controller/CommentController.java, src/main/java/.../service/CommentService/*, src/main/java/.../repository/CommentRepositoryCustom/*
댓글 삭제 시 deletedAt 설정; 소유자/관리자 권한 검증; 댓글 카운트 유지보수 개선; canDelete 플래그 DTO 추가; 활성 댓글만 조회.
회원 프로필 및 서비스
src/main/java/.../controller/MemberController.java, src/main/java/.../dto/MemberProfile/MemberProfileResponse.java, src/main/java/.../service/MemberProfileService/MemberProfileServiceImpl.java
MBTI 입력 검증 강화; 프로필 응답에 Role 필드 추가; 닉네임 중복 검사 최적화; 닉네임 규칙(문자 범위, 길이, 패턴) 개선.
회원 및 Kakao 서비스
src/main/java/.../controller/AuthController.java, src/main/java/.../service/AuthService/AuthServiceImpl.java, src/main/java/.../service/MemberService/MemberServiceImpl.java, src/main/java/.../service/KakaoService/KakaoServiceImpl.java
Kakao 언링크 예외 처리 추가(무시 후 계속 진행); 트랜잭션 관리 Spring 표준으로 통일; 읽기 전용 트랜잭션 명시.
도메인 엔티티 및 DTO 주석
src/main/java/.../domain/Member.java
Member 엔티티 필드 주석 개선(socialId, 토큰 설명).
테스트 - 투표
src/test/java/.../controller/VoteControllerTest.java, src/test/java/.../service/VoteService/VoteServiceImplTest.java
반응성 기반 핫이슈 선택 테스트 업데이트; CommentGroup 픽스처 추가; createVote, deleteVote, 트렌딩 로직 테스트 추가.
테스트 - 댓글 및 좋아요
src/test/java/.../service/CommentService/CommentServiceImplTest.java, src/test/java/.../service/CommentLikeService/CommentLikeServiceImplTest.java
댓글 생성/삭제, 카운트 유지보수, 권한 검증 테스트; 좋아요 토글 테스트 추가.
테스트 - 회원 및 신고
src/test/java/.../service/MemberProfileService/MemberProfileServiceImplTest.java, src/test/java/.../service/MemberService/MemberServiceImplTest.java, src/test/java/.../service/ReportService/ReportServiceImplTest.java
MBTI 검증, 프로필 업데이트 테스트; 회원 삭제 테스트; 신고 기능 테스트(중복 방지, 자신 신고 불가).
테스트 기타
src/test/java/.../service/TransactionalTest.java, src/test/resources/application-test.yml
트랜잭션 롤백 테스트 추가; Kakao OAuth 테스트 설정 추가.

Sequence Diagram(s)

sequenceDiagram
    participant Client
    participant ReportController
    participant ReportService
    participant VoteRepository
    participant CommentRepository
    participant ReportRepository
    participant Database

    Client->>ReportController: POST /report/{targetId}<br/>(ReportRequest)
    ReportController->>ReportController: 인증 사용자 조회<br/>(SecurityContextHolder)
    ReportController->>ReportService: report(member,<br/>targetId, reportType)
    
    alt reportType == VOTE
        ReportService->>VoteRepository: findByIdAndDeletedAtIsNull(targetId)
        VoteRepository->>Database: SELECT * FROM vote
        Database-->>VoteRepository: Vote
        ReportService->>ReportService: 대상자 == 신고자?
        ReportService->>ReportRepository: existsByMember...(member,<br/>reportType, targetId)
        ReportRepository->>Database: SELECT COUNT(*)
        Database-->>ReportRepository: count
    else reportType == COMMENT
        ReportService->>CommentRepository: findByIdAndDeletedAtIsNull(targetId)
        CommentRepository->>Database: SELECT * FROM comment
        Database-->>CommentRepository: Comment
        ReportService->>ReportService: 대상자 == 신고자?
        ReportService->>ReportRepository: existsByMember...(member,<br/>reportType, targetId)
        ReportRepository->>Database: SELECT COUNT(*)
        Database-->>ReportRepository: count
    end
    
    ReportService->>ReportRepository: save(Report)
    ReportRepository->>Database: INSERT INTO report
    Database-->>ReportRepository: saved Report
    ReportRepository-->>ReportService: Report
    ReportService-->>ReportController: void
    ReportController-->>Client: HTTP 200
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~65 minutes

Poem

🐰 투표도 나고 핀도 달고,
신고 기능으로 정의 세우고,
댓글은 부드럽게 지워지며,
JWT는 한 번만 통과하네.
CI/CD 자동화로 배포 술술~
이제 우리 서비스 더욱 멋진 걸! 🚀


Note

🎁 Summarized by CodeRabbit Free

Your organization is on the Free plan. CodeRabbit will generate a high-level summary and a walkthrough for each pull request. For a comprehensive line-by-line review, please upgrade your subscription to CodeRabbit Pro by visiting https://app.coderabbit.ai/login.

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

@Qbooo Qbooo merged commit e8470f5 into main Apr 9, 2026
1 of 2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants