Skip to content

feat(member): 유형별 이상형 조회 및 순번별 언락 API 추가 (#454) - #459

Merged
stemmmm merged 2 commits into
developfrom
feat/454
Jul 20, 2026
Merged

feat(member): 유형별 이상형 조회 및 순번별 언락 API 추가 (#454)#459
stemmmm merged 2 commits into
developfrom
feat/454

Conversation

@stemmmm

@stemmmm stemmmm commented Jul 20, 2026

Copy link
Copy Markdown
Contributor

개요

GET /member/introduction/{personalityType} 유형별 이상형 조회 + 순번별 하트 과금 언락 API를 추가합니다.

ℹ️ #453 머지 후 feat/454를 develop 위로 rebase하여 base를 develop으로 전환했습니다. (기존 stacked PR #457은 base 브랜치 삭제로 자동 close됨 → 본 PR이 대체)

주요 동작

  • GET /member/introduction/{personalityType}: 선택 유형의 이성 최대 3명(최신 가입순) 조회
    • 하루 1회 오픈, 24h 롤링(Redis)로 고정 목록 유지, 다른 유형 오픈 차단(409)
    • 후보 0명이면 오픈 미소진(빈 목록 반환) — "0명이면 팝업만 닫힘" 플로우와 일치
    • 반대성별·프로필 공개·ACTIVE·차단 제외 + 이미 소개/매칭된 상대 제외
  • POST /member/introduction/{personalityType}/{targetMemberId}: 상세 언락
    • 해당 유형 첫 언락 무료(하트 이벤트 미발행), 이후 INTRODUCTION 하트 차감(남10/여4)
    • 이미 언락/소개된 대상은 멱등 처리

구현

  • datingexam: PersonalityTypeMemberFinder 포트 + QueryDSL 구현 (기존 SoulmateFinder 패턴)
  • member/query: PersonalityIntroductionQueryService + PersonalityIntroductionRedisRepository(24h 롤링)
  • member/command: PersonalityIntroductionUnlockService, MemberIntroduction.ofWithoutCharge(무과금 팩토리)
  • enum: IntroductionType.PERSONALITY, TransactionSubtype.PERSONALITY

설계 문서

docs/superpowers/specs/2026-07-20-member-personality-type-introduction-design.md

테스트

  • 오픈 게이트 / 0명 미소진 / 제외·최대 3명 (QueryService 단위)
  • 첫 언락 무료 vs 이후 과금 / 멱등 / 검증 (UnlockService 단위)
  • 유형·성별·공개·활성·차단·최신순 필터 (Repository @DataJpaTest)

Closes #454

stemmmm added 2 commits July 20, 2026 12:47
GET /member/introduction/{personalityType} 유형별 이상형 조회 및
순번별 하트 과금 언락 설계. 오픈 상태는 Redis 24h 롤링 TTL로 관리,
후보는 최신 가입순 3명, 기존 소개 파이프라인/하트 이벤트 재사용.
GET /member/introduction/{personalityType}: 유형별 이상형 최대 3명 조회.
- 하루 1회 오픈, 24h 롤링(Redis)로 고정 목록 유지, 다른 유형 오픈 차단
- 후보 0명이면 오픈 미소진, 최신 가입순 + 기존 소개 필터/제외 재사용
POST /member/introduction/{personalityType}/{targetMemberId}: 상세 언락.
- 해당 유형 첫 언락 무료(이벤트 미발행), 이후 INTRODUCTION 하트 차감, 멱등 처리

datingexam에 PersonalityTypeMemberFinder 포트 추가, IntroductionType/TransactionSubtype
에 PERSONALITY 추가, MemberIntroduction.ofWithoutCharge(무과금 팩토리) 추가.
@coderabbitai

coderabbitai Bot commented Jul 20, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@stemmmm, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 21 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: a9aab30b-bcc5-46ab-828a-fa60d93336e6

📥 Commits

Reviewing files that changed from the base of the PR and between cc7b15e and 4d0134f.

📒 Files selected for processing (19)
  • docs/superpowers/specs/2026-07-20-member-personality-type-introduction-design.md
  • src/main/java/deepple/deepple/datingexam/adapter/database/PersonalityTypeMemberQueryRepositoryImpl.java
  • src/main/java/deepple/deepple/datingexam/application/PersonalityTypeMemberQueryService.java
  • src/main/java/deepple/deepple/datingexam/application/provided/PersonalityTypeMemberFinder.java
  • src/main/java/deepple/deepple/datingexam/application/required/PersonalityTypeMemberQueryRepository.java
  • src/main/java/deepple/deepple/heart/command/domain/hearttransaction/vo/TransactionSubtype.java
  • src/main/java/deepple/deepple/member/command/application/introduction/PersonalityIntroductionUnlockService.java
  • src/main/java/deepple/deepple/member/command/application/introduction/exception/InvalidPersonalityIntroductionUnlockException.java
  • src/main/java/deepple/deepple/member/command/application/introduction/exception/PersonalityIntroductionAlreadyOpenedException.java
  • src/main/java/deepple/deepple/member/command/domain/introduction/IntroductionType.java
  • src/main/java/deepple/deepple/member/command/domain/introduction/MemberIntroduction.java
  • src/main/java/deepple/deepple/member/presentation/introduction/MemberIntroductionController.java
  • src/main/java/deepple/deepple/member/presentation/introduction/MemberIntroductionExceptionHandler.java
  • src/main/java/deepple/deepple/member/query/introduction/application/PersonalityIntroductionQueryService.java
  • src/main/java/deepple/deepple/member/query/introduction/intra/PersonalityIntroductionOpenState.java
  • src/main/java/deepple/deepple/member/query/introduction/intra/PersonalityIntroductionRedisRepository.java
  • src/test/java/deepple/deepple/datingexam/adapter/database/PersonalityTypeMemberQueryRepositoryImplTest.java
  • src/test/java/deepple/deepple/member/command/application/introduction/PersonalityIntroductionUnlockServiceTest.java
  • src/test/java/deepple/deepple/member/query/introduction/application/PersonalityIntroductionQueryServiceTest.java
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/454

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.

@github-actions

Copy link
Copy Markdown

Test results

829 tests   829 ✅  17s ⏱️
249 suites    0 💤
249 files      0 ❌

Results for commit 4d0134f.

@stemmmm
stemmmm merged commit eec3e06 into develop Jul 20, 2026
4 checks passed
@stemmmm
stemmmm deleted the feat/454 branch July 20, 2026 04:20
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.

1 participant