Skip to content

안드로이드 영수증 검증 기능 추가 - #439

Merged
stemmmm merged 92 commits into
mainfrom
develop
Apr 20, 2026
Merged

안드로이드 영수증 검증 기능 추가#439
stemmmm merged 92 commits into
mainfrom
develop

Conversation

@stemmmm

@stemmmm stemmmm commented Apr 20, 2026

Copy link
Copy Markdown
Contributor

Summary by CodeRabbit

  • 새로운 기능

    • Google Play 결제 방식 지원 추가
    • 데이팅 시험 완료 후 대표 성격 유형 조회 기능 추가
  • 설정

    • Google Play 결제 관련 환경 변수 및 설정 추가
    • 데이터베이스 마이그레이션 추가

참고 자료

노트

stemmmm and others added 30 commits December 12, 2025 12:23
- 인터뷰 질문, 미션, 데이팅 시험 관련 기본 데이터 마이그레이션 추가
- Flyway 설정 로직에 비활성화 처리 조건 추가
- Hibernate DDL 설정 방식 변경 및 스키마 생성 스크립트 설정 추가

#377
# Conflicts:
#	src/main/java/deepple/deepple/common/config/FlywayConfig.java
- k6 테스트 설정 파일 및 API 테스트 스크립트 추가
- 테스트 환경 변수 및 부하 프로파일 설정
- README에 k6 관련 문서 및 실행 방법 추가

#394
- 성능 테스트용 SQL 데이터 생성 스크립트 추가
- 회원, 소개, 좋아요, 매칭, 알림 데이터 포함
- 데이터 검증 및 README 파일 추가

#394
- FCM 제외 테스트 로직 `sendWithoutPush` 추가
- k6 부하 테스트 스크립트 구현
- 테스트용 SQL 데이터 초기화/생성 로직 추가

#394
* [Refac] : When Match Request or Response, Don't Check Primary Contatct Type

* [fix] : Change BaseURL

* [Fix] : Using Enum
* [Refac] : When Match Request or Response, Don't Check Primary Contatct Type

* [fix] : Change BaseURL

* [Fix] : Using Enum

* [Refac] Change BizgoRequestBody
* [Refac] : When Match Request or Response, Don't Check Primary Contatct Type

* [fix] : Change BaseURL

* [Fix] : Using Enum

* [Refac] Change BizgoRequestBody

* [Fix] : Use Record for serialization
* [Refac] : When Match Request or Response, Don't Check Primary Contatct Type

* [fix] : Change BaseURL

* [Fix] : Using Enum

* [Refac] Change BizgoRequestBody

* [Fix] : Use Record for serialization

* [Refac] : Add Logging for checking.
- 데이터 접근 레이어 분리 (Reader/Writer) 및 저장 로직 개선
- FCM 예외 처리 로깅 추가
- 알림 템플릿 정보 전송 방식 변경
- k6 부하 테스트 시 최대 VU 증가
- notification_preferences 테이블에 인덱스 추가
- 테스트 코드 리팩토링 및 명확한 실패 상태 로깅 적용

#394
- CircuitBreaker 상태 전환, 실패율 초과, 느린응답률 초과 이벤트에 대한 로그 등록
- 이벤트 리스너 등록 로직 추가 및 @slf4j 어노테이션 적용
- 알림 테이블에 복합 인덱스 추가 (receiverId, deletedAt, id)
- 데이터베이스 및 엔티티 매핑 수정

#394
- Bizgo API 응답에서 에러 상태 코드 및 본문 로깅 추가
- 예외 발생 시 디버깅 용이하도록 개선

#409
hainho and others added 26 commits January 27, 2026 22:59
* Fix : Wrong Region name

* Fix : Wrong Message Content
# Conflicts:
#	src/main/java/deepple/deepple/member/command/application/member/sms/AuthMessageService.java
- 리프레시 토큰 예외 처리 추가 (누락, 만료, 유효하지 않음)
- 토큰 갱신 API 구현 및 토큰 유효성 확인 로직 변경
- AuthService와 관련 테스트 간소화
- TokenPairResponse 및 TokenRefreshResponse 도입
- StatusType에 만료된 액세스 토큰 상태 추가
- 불필요한 토큰 재발급 코드 제거
- 인증 필터에서 리프레시 토큰 처리 로직 삭제

#435
# Conflicts:
#	src/main/java/deepple/deepple/auth/presentation/filter/TokenFilter.java
- 리프레시 토큰 처리 및 재발급 관련 코드 제거
- `TokenFilter`의 불필요한 의존성 삭제
- 인증 로직 단순화 및 불필요한 메서드 제거
- Google Play 클라이언트 및 API 검증 로직 추가
- Google Play 서비스 계정 인증 구성
- Google Play 결제 영수증 검증 및 이벤트 처리 로직 구현
- Google Play 관련 예외, DTO, 설정, 테스트 코드 추가

#438
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@stemmmm stemmmm self-assigned this Apr 20, 2026
@stemmmm stemmmm added the enhancement New feature or request label Apr 20, 2026
@coderabbitai

coderabbitai Bot commented Apr 20, 2026

Copy link
Copy Markdown

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 0352e77d-857c-4036-bc40-43bfd2735170

📥 Commits

Reviewing files that changed from the base of the PR and between 072cfe4 and e9bc05a.

📒 Files selected for processing (45)
  • .dockerignore
  • .env.example
  • .github/workflows/cd-dev.yml
  • .github/workflows/cd-prod.yml
  • Dockerfile
  • build.gradle
  • src/main/java/deepple/deepple/auth/presentation/filter/TokenFilter.java
  • src/main/java/deepple/deepple/datingexam/adapter/webapi/DatingExamApi.java
  • src/main/java/deepple/deepple/datingexam/application/DatingExamModifyService.java
  • src/main/java/deepple/deepple/datingexam/application/DatingExamQueryService.java
  • src/main/java/deepple/deepple/datingexam/application/dto/DominantPersonalityTypeResponse.java
  • src/main/java/deepple/deepple/datingexam/application/provided/DatingExamFinder.java
  • src/main/java/deepple/deepple/datingexam/application/required/DatingExamAnswerRepository.java
  • src/main/java/deepple/deepple/datingexam/application/required/DatingExamSubmitResultRepository.java
  • src/main/java/deepple/deepple/datingexam/domain/AnswerPersonalityType.java
  • src/main/java/deepple/deepple/datingexam/domain/DatingExamAnswer.java
  • src/main/java/deepple/deepple/datingexam/domain/DatingExamSubmitResult.java
  • src/main/java/deepple/deepple/payment/command/application/order/GooglePlayPaymentService.java
  • src/main/java/deepple/deepple/payment/command/application/order/OrderService.java
  • src/main/java/deepple/deepple/payment/command/domain/order/event/GooglePlayReceiptVerifiedEvent.java
  • src/main/java/deepple/deepple/payment/command/infra/order/GooglePlayClient.java
  • src/main/java/deepple/deepple/payment/command/infra/order/GooglePlayClientConfig.java
  • src/main/java/deepple/deepple/payment/command/infra/order/ReceiptVerifiedEventHandler.java
  • src/main/java/deepple/deepple/payment/command/infra/order/exception/GooglePlayClientException.java
  • src/main/java/deepple/deepple/payment/command/infra/order/exception/InvalidGooglePlayReceiptException.java
  • src/main/java/deepple/deepple/payment/presentation/order/PaymentController.java
  • src/main/java/deepple/deepple/payment/presentation/order/PaymentExceptionHandler.java
  • src/main/java/deepple/deepple/payment/presentation/order/dto/GooglePlayVerifyReceiptRequest.java
  • src/main/resources/application-dev.yml
  • src/main/resources/application-local.yml
  • src/main/resources/application-prod.yml
  • src/main/resources/db/migration/V11__reset_dating_exams.sql
  • src/main/resources/db/migration/V12__add_personality_type_column.sql
  • src/main/resources/db/migration/V13__insert_dating_exam_data.sql
  • src/main/resources/db/migration/V14__create_dating_exam_submit_result.sql
  • src/test/java/deepple/deepple/datingexam/adapter/database/DatingExamQueryRepositoryImplTest.java
  • src/test/java/deepple/deepple/datingexam/application/DatingExamModifyServiceTest.java
  • src/test/java/deepple/deepple/datingexam/application/DatingExamSubmitRequestValidatorTest.java
  • src/test/java/deepple/deepple/datingexam/domain/DatingExamAnswerTest.java
  • src/test/java/deepple/deepple/datingexam/domain/DatingExamSubmitResultTest.java
  • src/test/java/deepple/deepple/payment/command/application/order/GooglePlayPaymentServiceTest.java
  • src/test/java/deepple/deepple/payment/command/application/order/OrderServiceTest.java
  • src/test/java/deepple/deepple/payment/command/infra/order/GooglePlayClientTest.java
  • src/test/resources/application.yml
  • src/test/resources/certs/google-play/service-account.json

Walkthrough

이번 변경사항은 Google Play 결제 시스템 통합과 Dating Exam 기능의 personality type 구조 개선을 포함합니다. Google Play 결제를 지원하기 위해 새로운 클라이언트, 서비스, 예외 처리 및 configuration 클래스가 추가되었으며, 관련된 환경 설정과 데이터베이스 마이그레이션이 적용되었습니다. Dating Exam 도메인에서는 answer 엔티티에 personality type 필드를 추가하고, 사용자의 제출 결과를 추적하는 새로운 DatingExamSubmitResult 엔티티 및 관련 repository, service 메서드를 도입했습니다. Docker build context와 CI/CD 워크플로우도 Google Play 인증 자격증명을 포함하도록 업데이트되었습니다.

Sequence Diagram

sequenceDiagram
    actor Client
    participant PaymentController
    participant GooglePlayPaymentService
    participant GooglePlayClient
    participant Events
    participant OrderService
    participant Database

    Client->>PaymentController: POST /payment/google-play/verify-receipt
    PaymentController->>GooglePlayPaymentService: verifyReceipt(productId, purchaseToken, memberId)
    GooglePlayPaymentService->>GooglePlayClient: verifyPurchase(productId, purchaseToken)
    GooglePlayClient->>GooglePlayClient: validate purchaseState & consumptionState
    GooglePlayClient-->>GooglePlayPaymentService: ProductPurchase
    GooglePlayPaymentService->>GooglePlayClient: resolveQuantity(purchase)
    GooglePlayClient-->>GooglePlayPaymentService: quantity
    GooglePlayPaymentService->>Events: raise(GooglePlayReceiptVerifiedEvent)
    Events->>Database: event persistence
    GooglePlayPaymentService->>GooglePlayClient: consumePurchase(productId, purchaseToken)
    GooglePlayClient-->>GooglePlayPaymentService: success/exception
    GooglePlayPaymentService-->>PaymentController: void
    PaymentController-->>Client: BaseResponse(OK)
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

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

@stemmmm
stemmmm merged commit ee6c4d9 into main Apr 20, 2026
3 of 5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants