Skip to content

[RELEASE] v0.2.2#114

Merged
ydking0911 merged 24 commits into
productionfrom
develop
Jun 25, 2026
Merged

[RELEASE] v0.2.2#114
ydking0911 merged 24 commits into
productionfrom
develop

Conversation

@ydking0911

@ydking0911 ydking0911 commented Jun 25, 2026

Copy link
Copy Markdown
Member

📝 Pull Request Template

📌 제목

Release 0.2.2


✅ PR 체크리스트

PR이 다음 요구 사항을 충족하는지 확인해주세요.

  • 🔹 커밋 메시지 컨벤션을 준수했습니다. (Commit message convention 참고)
  • 🔹 변경 사항에 대한 테스트를 수행했습니다. (버그 수정/기능 테스트)
  • 🔹 관련 문서를 업데이트했습니다. (필요한 경우)

📜 기타

리뷰어가 알면 좋을 추가 사항을 적어주세요.

  • 기능 개선 아이디어
  • 코드 리팩토링 필요 여부 등

Summary by CodeRabbit

  • New Features

    • 방 목록에 메모, 호스트 정보, 추가 속성을 포함하고, 페이지 응답에 전체 개수를 함께 제공합니다.
    • 추천 방 목록 조회가 추가되어 체크리스트 기반으로 맞춤 방을 보여줍니다.
    • 캘린더 이벤트에 내용, 시간, 유형 정보가 포함됩니다.
    • 비밀번호 재설정 이메일 발송, 코드 검증, 재설정 기능이 추가되었습니다.
  • Bug Fixes

    • 회원가입/비밀번호 재설정 시 이메일 인증 상태를 더 엄격하게 확인합니다.
    • 방 수정 시 제목과 메모가 함께 반영됩니다.

@ydking0911 ydking0911 self-assigned this Jun 25, 2026
@coderabbitai

coderabbitai Bot commented Jun 25, 2026

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 039b45a1-87a7-416a-9a94-26fb10cd9ede

📥 Commits

Reviewing files that changed from the base of the PR and between 0c015be and 07ca492.

📒 Files selected for processing (68)
  • .github/workflows/cicd.yml
  • src/main/java/com/project/dorumdorum/domain/calendar/application/dto/response/CalendarEventResponse.java
  • src/main/java/com/project/dorumdorum/domain/calendar/application/mapper/CalendarEventMapper.java
  • src/main/java/com/project/dorumdorum/domain/calendar/domain/entity/CalendarEvent.java
  • src/main/java/com/project/dorumdorum/domain/calendar/domain/entity/CalendarEventType.java
  • src/main/java/com/project/dorumdorum/domain/checklist/application/mapper/UserChecklistMapper.java
  • src/main/java/com/project/dorumdorum/domain/checklist/domain/repository/RoomRuleRepository.java
  • src/main/java/com/project/dorumdorum/domain/checklist/domain/repository/UserChecklistRepository.java
  • src/main/java/com/project/dorumdorum/domain/room/application/dto/request/RoomCreateRequest.java
  • src/main/java/com/project/dorumdorum/domain/room/application/dto/request/UpdateRoomTitleRequest.java
  • src/main/java/com/project/dorumdorum/domain/room/application/dto/response/FindRoomsPageResponse.java
  • src/main/java/com/project/dorumdorum/domain/room/application/dto/response/FindRoomsResponse.java
  • src/main/java/com/project/dorumdorum/domain/room/application/dto/response/RecommendedRoomResponse.java
  • src/main/java/com/project/dorumdorum/domain/room/application/dto/response/RecommendedRoomsPageResponse.java
  • src/main/java/com/project/dorumdorum/domain/room/application/usecase/FindRoomsUseCase.java
  • src/main/java/com/project/dorumdorum/domain/room/application/usecase/LoadRecommendedRoomsUseCase.java
  • src/main/java/com/project/dorumdorum/domain/room/application/usecase/UpdateRoomTitleUseCase.java
  • src/main/java/com/project/dorumdorum/domain/room/domain/entity/Room.java
  • src/main/java/com/project/dorumdorum/domain/room/domain/entity/RoomType.java
  • src/main/java/com/project/dorumdorum/domain/room/domain/repository/RoomQueryRepository.java
  • src/main/java/com/project/dorumdorum/domain/room/domain/service/RoomService.java
  • src/main/java/com/project/dorumdorum/domain/room/infra/repository/RoomRepositoryImpl.java
  • src/main/java/com/project/dorumdorum/domain/room/ui/FindRoomsController.java
  • src/main/java/com/project/dorumdorum/domain/room/ui/LoadRecommendedRoomsController.java
  • src/main/java/com/project/dorumdorum/domain/room/ui/spec/FindRoomsApiSpec.java
  • src/main/java/com/project/dorumdorum/domain/room/ui/spec/LoadRecommendedRoomsApiSpec.java
  • src/main/java/com/project/dorumdorum/domain/user/application/dto/request/ResetPasswordRequest.java
  • src/main/java/com/project/dorumdorum/domain/user/application/dto/request/SignUpRequest.java
  • src/main/java/com/project/dorumdorum/domain/user/application/usecase/ResetPasswordUseCase.java
  • src/main/java/com/project/dorumdorum/domain/user/application/usecase/SendPasswordResetEmailUseCase.java
  • src/main/java/com/project/dorumdorum/domain/user/application/usecase/SendVerificationEmailUseCase.java
  • src/main/java/com/project/dorumdorum/domain/user/application/usecase/SignUpUseCase.java
  • src/main/java/com/project/dorumdorum/domain/user/application/usecase/VerifyEmailUseCase.java
  • src/main/java/com/project/dorumdorum/domain/user/application/usecase/VerifyPasswordResetCodeUseCase.java
  • src/main/java/com/project/dorumdorum/domain/user/domain/entity/User.java
  • src/main/java/com/project/dorumdorum/domain/user/domain/repository/EmailVerifiedRepository.java
  • src/main/java/com/project/dorumdorum/domain/user/domain/repository/PasswordResetCodeRepository.java
  • src/main/java/com/project/dorumdorum/domain/user/domain/repository/PasswordResetVerifiedRepository.java
  • src/main/java/com/project/dorumdorum/domain/user/infra/repository/RedisEmailVerifiedRepository.java
  • src/main/java/com/project/dorumdorum/domain/user/infra/repository/RedisPasswordResetCodeRepository.java
  • src/main/java/com/project/dorumdorum/domain/user/infra/repository/RedisPasswordResetVerifiedRepository.java
  • src/main/java/com/project/dorumdorum/domain/user/ui/ResetPasswordController.java
  • src/main/java/com/project/dorumdorum/domain/user/ui/SendPasswordResetEmailController.java
  • src/main/java/com/project/dorumdorum/domain/user/ui/SendVerificationEmailController.java
  • src/main/java/com/project/dorumdorum/domain/user/ui/VerifyEmailController.java
  • src/main/java/com/project/dorumdorum/domain/user/ui/VerifyPasswordResetCodeController.java
  • src/main/java/com/project/dorumdorum/domain/user/ui/spec/ResetPasswordApiSpec.java
  • src/main/java/com/project/dorumdorum/domain/user/ui/spec/SendPasswordResetEmailApiSpec.java
  • src/main/java/com/project/dorumdorum/domain/user/ui/spec/VerifyPasswordResetCodeApiSpec.java
  • src/main/java/com/project/dorumdorum/global/alert/DiscordAlertSender.java
  • src/main/java/com/project/dorumdorum/global/exception/code/status/UserErrorStatus.java
  • src/main/resources/application-dev.yml
  • src/main/resources/application-prod.yml
  • src/main/resources/application.yml
  • src/test/java/com/project/dorumdorum/domain/calendar/unit/response/CalendarEventResponseTest.java
  • src/test/java/com/project/dorumdorum/domain/calendar/unit/ui/LoadCalendarEventsControllerTest.java
  • src/test/java/com/project/dorumdorum/domain/calendar/unit/usecase/LoadCalendarEventsUseCaseTest.java
  • src/test/java/com/project/dorumdorum/domain/room/unit/infra/repository/RoomRepositoryImplTest.java
  • src/test/java/com/project/dorumdorum/domain/room/unit/service/RoomServiceTest.java
  • src/test/java/com/project/dorumdorum/domain/room/unit/ui/CreateRoomControllerTest.java
  • src/test/java/com/project/dorumdorum/domain/room/unit/ui/FindRoomsControllerTest.java
  • src/test/java/com/project/dorumdorum/domain/room/unit/ui/UpdateRoomTitleControllerTest.java
  • src/test/java/com/project/dorumdorum/domain/room/unit/usecase/CreateRoomUseCaseTest.java
  • src/test/java/com/project/dorumdorum/domain/room/unit/usecase/FindRoomsUseCaseTest.java
  • src/test/java/com/project/dorumdorum/domain/room/unit/usecase/LoadMyRoomsUseCaseTest.java
  • src/test/java/com/project/dorumdorum/domain/room/unit/usecase/UpdateRoomTitleUseCaseTest.java
  • src/test/java/com/project/dorumdorum/domain/user/unit/usecase/SignUpUseCaseTest.java
  • src/test/java/com/project/dorumdorum/domain/user/unit/usecase/VerifyEmailUseCaseTest.java

Walkthrough

캘린더 이벤트 응답과 매핑이 확장되고, 방 생성·검색·추천 흐름과 저장소 계약이 바뀌었으며, 이메일 인증·비밀번호 재설정 API와 Redis 기반 상태 저장이 추가되었습니다. CI Redis 서비스, 일부 런타임 설정, 그리고 알림 중복 처리도 함께 변경되었습니다.

Changes

Calendar Event Schema

Layer / File(s) Summary
이벤트 엔티티와 응답 필드 확장
src/main/java/com/project/dorumdorum/domain/calendar/domain/entity/*, src/main/java/com/project/dorumdorum/domain/calendar/application/dto/response/CalendarEventResponse.java, src/main/java/com/project/dorumdorum/domain/calendar/application/mapper/CalendarEventMapper.java
CalendarEventcontent, eventTime, eventType이 추가되고, CalendarEventResponseCalendarEventMapper가 새 필드를 노출합니다.
캘린더 응답 테스트 갱신
src/test/java/com/project/dorumdorum/domain/calendar/unit/response/CalendarEventResponseTest.java, src/test/java/com/project/dorumdorum/domain/calendar/unit/ui/LoadCalendarEventsControllerTest.java, src/test/java/com/project/dorumdorum/domain/calendar/unit/usecase/LoadCalendarEventsUseCaseTest.java
캘린더 응답 테스트가 확장된 CalendarEventResponse 생성자 시그니처를 사용하도록 바뀝니다.

Room Domain Updates

Layer / File(s) Summary
방 생성·수정 노트 반영
src/main/java/com/project/dorumdorum/domain/room/application/dto/request/*, src/main/java/com/project/dorumdorum/domain/room/domain/entity/*, src/main/java/com/project/dorumdorum/domain/room/domain/service/RoomService.java, src/main/java/com/project/dorumdorum/domain/room/application/usecase/UpdateRoomTitleUseCase.java, src/test/java/com/project/dorumdorum/domain/room/unit/ui/CreateRoomControllerTest.java, src/test/java/com/project/dorumdorum/domain/room/unit/usecase/CreateRoomUseCaseTest.java, src/test/java/com/project/dorumdorum/domain/room/unit/ui/UpdateRoomTitleControllerTest.java, src/test/java/com/project/dorumdorum/domain/room/unit/usecase/UpdateRoomTitleUseCaseTest.java, src/test/java/com/project/dorumdorum/domain/room/unit/service/RoomServiceTest.java
Room 생성/수정 요청에 notes가 추가되고, Room과 수정 유스케이스가 notes를 저장하며, 관련 테스트가 새 시그니처로 맞춰집니다.
방 목록 검색 응답과 페이지 계약
src/main/java/com/project/dorumdorum/domain/room/application/dto/response/*, src/main/java/com/project/dorumdorum/domain/room/application/usecase/FindRoomsUseCase.java, src/main/java/com/project/dorumdorum/domain/room/domain/repository/RoomQueryRepository.java, src/main/java/com/project/dorumdorum/domain/room/ui/*, src/test/java/com/project/dorumdorum/domain/room/unit/usecase/FindRoomsUseCaseTest.java, src/test/java/com/project/dorumdorum/domain/room/unit/ui/FindRoomsControllerTest.java, src/test/java/com/project/dorumdorum/domain/room/unit/service/RoomServiceTest.java
방 목록 조회가 FindRoomsPageResponse로 바뀌고, 첫 페이지에서 totalCount를 계산하는 흐름과 관련 API/테스트가 갱신됩니다.
방 조회 리포지토리와 검색 집계
src/main/java/com/project/dorumdorum/domain/room/domain/service/RoomService.java, src/main/java/com/project/dorumdorum/domain/room/infra/repository/RoomRepositoryImpl.java, src/test/java/com/project/dorumdorum/domain/room/unit/infra/repository/RoomRepositoryImplTest.java, src/test/java/com/project/dorumdorum/domain/room/unit/service/RoomServiceTest.java, src/test/java/com/project/dorumdorum/domain/room/unit/usecase/LoadMyRoomsUseCaseTest.java
RoomRepositoryImpl이 검색/내 방/좋아요/신청 목록 프로젝션과 체크리스트 카운트 로직을 바꾸고, RoomService와 테스트가 새 반환 형태를 반영합니다.
추천 방 조회와 체크리스트 연동
src/main/java/com/project/dorumdorum/domain/checklist/..., src/main/java/com/project/dorumdorum/domain/room/application/dto/response/*, src/main/java/com/project/dorumdorum/domain/room/application/usecase/LoadRecommendedRoomsUseCase.java, src/main/java/com/project/dorumdorum/domain/room/ui/*
활성 룸룰과 체크리스트 상태를 읽어 추천 방 응답을 만들고, 추천 API 계약과 DTO가 추가됩니다.

User Verification and Password Reset

Layer / File(s) Summary
이메일 인증 저장과 회원가입 검증
src/main/java/com/project/dorumdorum/domain/user/application/dto/request/SignUpRequest.java, src/main/java/com/project/dorumdorum/domain/user/application/usecase/SendVerificationEmailUseCase.java, src/main/java/com/project/dorumdorum/domain/user/application/usecase/VerifyEmailUseCase.java, src/main/java/com/project/dorumdorum/domain/user/application/usecase/SignUpUseCase.java, src/main/java/com/project/dorumdorum/domain/user/domain/*, src/main/java/com/project/dorumdorum/domain/user/infra/repository/RedisEmailVerifiedRepository.java, src/main/java/com/project/dorumdorum/domain/user/ui/*, src/main/java/com/project/dorumdorum/global/exception/code/status/UserErrorStatus.java, src/test/java/com/project/dorumdorum/domain/user/unit/usecase/SignUpUseCaseTest.java, src/test/java/com/project/dorumdorum/domain/user/unit/usecase/VerifyEmailUseCaseTest.java
EmailVerifiedRepository가 추가되고, 회원가입이 인증 완료 여부를 검사한 뒤 인증 기록을 정리하도록 바뀝니다.
비밀번호 재설정 흐름
src/main/java/com/project/dorumdorum/domain/user/application/dto/request/ResetPasswordRequest.java, src/main/java/com/project/dorumdorum/domain/user/application/usecase/SendPasswordResetEmailUseCase.java, src/main/java/com/project/dorumdorum/domain/user/application/usecase/VerifyPasswordResetCodeUseCase.java, src/main/java/com/project/dorumdorum/domain/user/application/usecase/ResetPasswordUseCase.java, src/main/java/com/project/dorumdorum/domain/user/domain/*, src/main/java/com/project/dorumdorum/domain/user/infra/repository/*, src/main/java/com/project/dorumdorum/domain/user/ui/*, src/main/resources/application.yml
비밀번호 재설정 요청, 코드 검증, Redis 상태 저장, 재설정 실행, 그리고 관련 경로/레이트리밋 설정이 추가됩니다.

CI/runtime Configuration

Layer / File(s) Summary
CI와 런타임 설정
.github/workflows/cicd.yml, src/main/resources/application-dev.yml, src/main/resources/application-prod.yml
테스트 워크플로에 Redis 서비스가 추가되고, dev/prod 설정의 Hibernate ddl-auto와 Firebase 서비스 계정 경로가 변경됩니다.

Alert Delivery

Layer / File(s) Summary
알림 중복 검사 예외 처리
src/main/java/com/project/dorumdorum/global/alert/DiscordAlertSender.java
Discord 알림 전송에서 중복 검사 실패를 잡아 경고를 남기고 전송을 계속합니다.

Sequence Diagram(s)

이메일 인증과 회원가입

sequenceDiagram
  participant Client
  participant SendVerificationEmailController
  participant SendVerificationEmailUseCase
  participant EmailVerificationService
  participant VerifyEmailController
  participant VerifyEmailUseCase
  participant EmailVerifiedRepository
  participant SignUpUseCase
  participant UserService
  Client->>SendVerificationEmailController: send(email)
  SendVerificationEmailController->>SendVerificationEmailUseCase: send(email)
  SendVerificationEmailUseCase->>EmailVerificationService: isAllowedUniversityEmail(email)
  SendVerificationEmailUseCase->>EmailVerificationService: sendCode(email, code)
  Client->>VerifyEmailController: verifyEmail(email, code)
  VerifyEmailController->>VerifyEmailUseCase: execute(email, code)
  VerifyEmailUseCase->>EmailVerificationService: verifyCode(email, code)
  VerifyEmailUseCase->>EmailVerifiedRepository: save(email)
  Client->>SignUpUseCase: execute(SignUpRequest)
  SignUpUseCase->>EmailVerifiedRepository: existsByEmail(email)
  SignUpUseCase->>UserService: save(request)
  SignUpUseCase->>EmailVerifiedRepository: delete(email)
Loading

비밀번호 재설정

sequenceDiagram
  participant Client
  participant SendPasswordResetEmailController
  participant SendPasswordResetEmailUseCase
  participant UserService
  participant EmailVerificationService
  participant VerifyPasswordResetCodeController
  participant VerifyPasswordResetCodeUseCase
  participant PasswordResetVerifiedRepository
  participant ResetPasswordController
  participant ResetPasswordUseCase
  participant User
  Client->>SendPasswordResetEmailController: send(email)
  SendPasswordResetEmailController->>SendPasswordResetEmailUseCase: send(email)
  SendPasswordResetEmailUseCase->>EmailVerificationService: isAllowedUniversityEmail(email)
  SendPasswordResetEmailUseCase->>UserService: isAlreadyRegistered(email)
  alt email not registered
    SendPasswordResetEmailUseCase-->>SendPasswordResetEmailController: return
  else email registered
    SendPasswordResetEmailUseCase->>EmailVerificationService: sendCode(email, code)
  end
  Client->>VerifyPasswordResetCodeController: verify(email, code)
  VerifyPasswordResetCodeController->>VerifyPasswordResetCodeUseCase: execute(email, code)
  VerifyPasswordResetCodeUseCase->>EmailVerificationService: verifyCode(email, code)
  VerifyPasswordResetCodeUseCase->>PasswordResetVerifiedRepository: save(email)
  Client->>ResetPasswordController: reset(request)
  ResetPasswordController->>ResetPasswordUseCase: execute(request)
  ResetPasswordUseCase->>PasswordResetVerifiedRepository: existsByEmail(email)
  ResetPasswordUseCase->>UserService: findByEmail(email)
  ResetPasswordUseCase->>User: updatePassword(encodedPassword)
  ResetPasswordUseCase->>PasswordResetVerifiedRepository: delete(email)
Loading

추천 방 조회

sequenceDiagram
  participant Client
  participant LoadRecommendedRoomsController
  participant LoadRecommendedRoomsUseCase
  participant UserChecklistRepository
  participant RoomRuleRepository
  Client->>LoadRecommendedRoomsController: GET /api/rooms/recommended
  LoadRecommendedRoomsController->>LoadRecommendedRoomsUseCase: execute(userNo)
  LoadRecommendedRoomsUseCase->>UserChecklistRepository: existsByUserNo(userNo)
  alt checklist missing
    LoadRecommendedRoomsUseCase-->>LoadRecommendedRoomsController: RecommendedRoomsPageResponse(false, [])
  else checklist present
    LoadRecommendedRoomsUseCase->>RoomRuleRepository: findAllActiveWithRoom()
    LoadRecommendedRoomsUseCase-->>LoadRecommendedRoomsController: RecommendedRoomsPageResponse(true, items)
  end
  LoadRecommendedRoomsController-->>Client: 200 OK
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~75 minutes

Possibly related PRs

  • DorumDorum/BE#110: 비밀번호 재설정 요청/검증/실행과 이메일 인증 상태 저장이 같은 사용자 인증 경로를 다룹니다.

Suggested labels

feature

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch develop

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.

@ydking0911 ydking0911 merged commit 75ce9ab into production Jun 25, 2026
4 of 5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants