Skip to content

(feature) : 정산 수동 완료 API 추가#53

Merged
sudhdkso merged 3 commits into
developfrom
fix/payment-request-settlement-detail
May 24, 2026
Merged

(feature) : 정산 수동 완료 API 추가#53
sudhdkso merged 3 commits into
developfrom
fix/payment-request-settlement-detail

Conversation

@sudhdkso
Copy link
Copy Markdown
Contributor

@sudhdkso sudhdkso commented May 17, 2026

#️⃣연관된 이슈

X

🔀반영 브랜치

fix/payment-request-settlement-detail -> develop

🔧변경 사항

  • 정산 수동 완료 API를 추가했습니다.
  • 정산 생성 시 마감일이 기본 생성되도록 보완했습니다.
  • 정산은 마감 이후에도 완료 가능하지만, 캐릭터 지급 이벤트는 마감 기간 내 완료된 경우에만 생성되도록 변경했습니다.
  • 수동 완료 API 및 마감 기간 내 보상 지급 조건에 대한 테스트와 REST Docs를 추가했습니다.

💬리뷰 요구사항(선택)

X

체크:

  • 테스트 코드 포함 여부: O
  • 불필요한 로그 제거: O
  • 예외 처리 여부: O

Summary by CodeRabbit

릴리스 노트

  • 새로운 기능

    • 정산 수동 완료 기능 추가
    • 모임 입금 확인 요청 존재 여부 조회 엔드포인트 추가
  • 문서

    • 정산 수동 완료 관련 API 문서 추가
    • 입금 확인 요청 존재 여부 조회 API 문서 추가
    • 모임 조회 응답 필드 설명 강화

Review Change Stack

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 17, 2026

Warning

Rate limit exceeded

@sudhdkso has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 41 minutes and 45 seconds before requesting another review.

You’ve run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: e61c3ae3-53a5-4490-96e1-9f0cb99f98ce

📥 Commits

Reviewing files that changed from the base of the PR and between f797a33 and 3b5e50b.

📒 Files selected for processing (12)
  • src/docs/asciidoc/settlement.adoc
  • src/main/java/com/dnd/moddo/event/application/command/CommandSettlementService.java
  • src/main/java/com/dnd/moddo/event/application/impl/SettlementCompletionProcessor.java
  • src/main/java/com/dnd/moddo/event/application/impl/SettlementUpdater.java
  • src/main/java/com/dnd/moddo/event/domain/settlement/Settlement.java
  • src/main/java/com/dnd/moddo/event/infrastructure/SettlementRepository.java
  • src/main/java/com/dnd/moddo/event/presentation/SettlementController.java
  • src/test/java/com/dnd/moddo/domain/settlement/controller/SettlementControllerTest.java
  • src/test/java/com/dnd/moddo/domain/settlement/service/CommandSettlementServiceTest.java
  • src/test/java/com/dnd/moddo/domain/settlement/service/implementation/SettlementCompletionProcessorTest.java
  • src/test/java/com/dnd/moddo/domain/settlement/service/implementation/SettlementCreatorTest.java
  • src/test/java/com/dnd/moddo/domain/settlement/service/implementation/SettlementUpdaterTest.java

Walkthrough

이 PR은 결제 요청 존재 여부 조회와 정산 수동 완료 기능을 추가합니다. 결제 요청 조회는 settlement ID 기준 존재 여부 검사 엔드포인트를 구현하고, 정산 완료는 Settlement 엔티티에 마감일 검증과 기본값 설정을 추가한 뒤 적시 완료 시 아웃박스 이벤트를 생성합니다.

Changes

결제 요청 존재 여부 조회

Layer / File(s) Summary
응답 DTO 정의
src/main/java/com/dnd/moddo/event/presentation/response/PaymentRequestExistenceResponse.java
PaymentRequestExistenceResponse 레코드로 boolean exists 필드를 캡슐화하고 팩토리 메서드를 제공합니다.
저장소 계층 확장
src/main/java/com/dnd/moddo/event/infrastructure/PaymentRequestRepository.java
existsBySettlementId(Long settlementId) 메서드를 추가하여 JPQL count 쿼리로 존재 여부를 조회합니다.
Reader 및 Service 계층
src/main/java/com/dnd/moddo/event/application/impl/PaymentRequestReader.java, src/main/java/com/dnd/moddo/event/application/query/QueryPaymentRequestService.java
PaymentRequestReader가 저장소를 위임하고, QueryPaymentRequestService가 조회 결과를 PaymentRequestExistenceResponse로 변환합니다.
Controller 엔드포인트
src/main/java/com/dnd/moddo/event/presentation/PaymentRequestController.java
GET /api/v1/groups/{code}/payments/exists 엔드포인트를 추가하여 정산 코드로 ID를 조회한 뒤 존재 여부를 응답합니다.
테스트 및 검증
src/test/java/com/dnd/moddo/domain/paymentRequest/controller/PaymentRequestControllerTest.java, src/test/java/com/dnd/moddo/domain/paymentRequest/service/QueryPaymentRequestServiceTest.java, src/test/java/com/dnd/moddo/domain/paymentRequest/service/implementation/PaymentRequestReaderTest.java
컨트롤러, 서비스, Reader 계층의 테스트를 추가하고 RestDocs로 경로 파라미터와 응답 필드를 검증합니다.
API 문서화
src/docs/asciidoc/payment.adoc
모임 입금 확인 요청 존재 여부 조회 엔드포인트 문서를 추가합니다.

정산 수동 완료

Layer / File(s) Summary
Settlement 엔티티 개선
src/main/java/com/dnd/moddo/event/domain/settlement/Settlement.java, src/test/java/com/dnd/moddo/domain/settlement/service/implementation/SettlementCreatorTest.java
Builder에 createdAtdeadline 기본값 설정을 추가하고, isCompletedWithinDeadline(LocalDateTime completedAt) 메서드로 마감일 이내 완료 여부를 검증합니다.
SettlementCompletionProcessor 확장
src/main/java/com/dnd/moddo/event/application/impl/SettlementCompletionProcessor.java
complete(Long settlementId) 메서드를 추가하여 정산을 읽고, 완료 처리한 뒤 마감일 조건을 만족할 때만 아웃박스 이벤트를 생성합니다.
CommandSettlementService 메서드 추가
src/main/java/com/dnd/moddo/event/application/command/CommandSettlementService.java
completeSettlement(Long userId, Long settlementId) 메서드를 추가하여 정산 권한을 검증하고 완료 처리를 위임한 뒤 정산 헤더와 목록 캐시를 제거합니다.
Controller 엔드포인트
src/main/java/com/dnd/moddo/event/presentation/SettlementController.java
PATCH /{code}/complete 엔드포인트를 추가하여 로그인 사용자와 정산 코드로 완료 처리를 호출합니다.
테스트 및 검증
src/test/java/com/dnd/moddo/domain/settlement/controller/SettlementControllerTest.java, src/test/java/com/dnd/moddo/domain/settlement/service/CommandSettlementServiceTest.java, src/test/java/com/dnd/moddo/domain/settlement/service/implementation/SettlementCompletionProcessorTest.java
권한 검증, 완료 처리, 아웃박스 이벤트 생성 조건(마감일 이내), 캐시 제거, 마감일 이후 완료 시나리오를 검증합니다.
API 문서화
src/docs/asciidoc/settlement.adoc
정산 수동 완료 엔드포인트와 정산 조회 응답 필드를 API 문서에 추가합니다.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

  • moddo-kr/moddo-backend#32: 이 PR이 확장하는 PaymentRequestReader/PaymentRequestRepository 및 결제 요청 컨트롤러 구조의 기초를 제공했습니다.

Poem

정산을 완료하고 입금도 확인하고 🐰
마감일도 지켜서 이벤트도 발행하고
캐시를 깔끔하게 치우니까
모임 회계가 쏙쏙 들어온다네! ✨

🚥 Pre-merge checks | ✅ 4 | ❌ 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 (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed PR 제목 '(feature) : 정산 수동 완료 API 추가'는 변경의 주요 기능인 정산 수동 완료 API 추가를 명확하게 설명합니다.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

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

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/payment-request-settlement-detail

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.

@github-actions
Copy link
Copy Markdown

📝 테스트 커버리지 리포트입니다!

File Coverage [98.06%] 🍏
SettlementCompletionProcessor.java 100% 🍏
CommandSettlementService.java 100% 🍏
QueryPaymentRequestService.java 100% 🍏
PaymentRequestReader.java 98.13% 🍏
Settlement.java 94.94% 🍏
Total Project Coverage 71.07%

Copy link
Copy Markdown

@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: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@src/main/java/com/dnd/moddo/event/application/impl/SettlementCompletionProcessor.java`:
- Around line 33-38: The current flow in SettlementCompletionProcessor.complete
creates completedAt before calling settlementUpdater.complete, which can
mis-evaluate isCompletedWithinDeadline; change the logic so the deadline check
uses the actual completed timestamp persisted by the updater — either (A) modify
settlementUpdater.complete to accept a LocalDateTime parameter and use that same
timestamp for persistence and the subsequent isCompletedWithinDeadline check, or
(B) have settlementUpdater.complete return the persisted completedAt (or re-read
the Settlement after update) and use that returned/stored timestamp for
settlement.isCompletedWithinDeadline; ensure SettlementUpdater.complete’s
signature/implementation and SettlementCompletionProcessor.complete are updated
consistently and keep the Outbox event creation
(commandOutboxEventService.create with OutboxEventType.SETTLEMENT_COMPLETED,
AggregateType.SETTLEMENT) tied to the same persisted timestamp decision.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: e4809df9-e562-4b4b-85d1-5522cca664d5

📥 Commits

Reviewing files that changed from the base of the PR and between 907ed72 and f797a33.

📒 Files selected for processing (18)
  • src/docs/asciidoc/payment.adoc
  • src/docs/asciidoc/settlement.adoc
  • src/main/java/com/dnd/moddo/event/application/command/CommandSettlementService.java
  • src/main/java/com/dnd/moddo/event/application/impl/PaymentRequestReader.java
  • src/main/java/com/dnd/moddo/event/application/impl/SettlementCompletionProcessor.java
  • src/main/java/com/dnd/moddo/event/application/query/QueryPaymentRequestService.java
  • src/main/java/com/dnd/moddo/event/domain/settlement/Settlement.java
  • src/main/java/com/dnd/moddo/event/infrastructure/PaymentRequestRepository.java
  • src/main/java/com/dnd/moddo/event/presentation/PaymentRequestController.java
  • src/main/java/com/dnd/moddo/event/presentation/SettlementController.java
  • src/main/java/com/dnd/moddo/event/presentation/response/PaymentRequestExistenceResponse.java
  • src/test/java/com/dnd/moddo/domain/paymentRequest/controller/PaymentRequestControllerTest.java
  • src/test/java/com/dnd/moddo/domain/paymentRequest/service/QueryPaymentRequestServiceTest.java
  • src/test/java/com/dnd/moddo/domain/paymentRequest/service/implementation/PaymentRequestReaderTest.java
  • src/test/java/com/dnd/moddo/domain/settlement/controller/SettlementControllerTest.java
  • src/test/java/com/dnd/moddo/domain/settlement/service/CommandSettlementServiceTest.java
  • src/test/java/com/dnd/moddo/domain/settlement/service/implementation/SettlementCompletionProcessorTest.java
  • src/test/java/com/dnd/moddo/domain/settlement/service/implementation/SettlementCreatorTest.java

@sudhdkso sudhdkso force-pushed the fix/payment-request-settlement-detail branch from f797a33 to 3b5e50b Compare May 17, 2026 14:00
@github-actions
Copy link
Copy Markdown

📝 테스트 커버리지 리포트입니다!

File Coverage [98.19%] 🍏
SettlementUpdater.java 100% 🍏
SettlementCompletionProcessor.java 100% 🍏
CommandSettlementService.java 100% 🍏
QueryPaymentRequestService.java 100% 🍏
PaymentRequestReader.java 98.13% 🍏
Settlement.java 94.94% 🍏
Total Project Coverage 71.08%

@sudhdkso sudhdkso merged commit 55662c4 into develop May 24, 2026
3 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.

1 participant