Conversation
|
Caution Review failedThe pull request is closed. Walkthrough거래 이력 기능과 조회 API가 도입되었고, History 엔티티/레포지토리/서비스 및 거래 스냅샷 조회가 추가되었습니다. 코인 전송 흐름에 History 저장 호출이 AiImagePermissionService에 삽입되었고 관련 컨트롤러·DTO·테스트가 함께 추가되었습니다. Changes
Sequence Diagram(s)sequenceDiagram
participant User
participant AiSvc as AiImagePermissionService
participant AccountSvc as AccountService
participant HistorySvc as HistoryService
participant Repo as DB
rect rgb(245,250,255)
Note over User,AiSvc: AI 이미지 코인 구매 흐름 (변경된 흐름: 코인 전송 → 이력 저장 → 알림)
User->>AiSvc: buyAiImagePermissionByCoin(request)
AiSvc->>AccountSvc: transferCoin(from, to, amount)
AccountSvc->>Repo: ledger debit/credit
AccountSvc-->>AiSvc: transferResult
AiSvc->>HistorySvc: saveTransferHistories(userId, amount, POST_PURCHASE, fromBody, toBody)
HistorySvc->>Repo: insert History (DEBIT / CREDIT)
HistorySvc-->>AiSvc: saved
AiSvc->>User: notification + 200 OK
end
sequenceDiagram
participant User
participant HistoryCtrl as HistoryController
participant HistorySvc as HistoryService
participant Repo as DB
rect rgb(245,255,245)
Note over User,Repo: 거래/이력 조회 흐름
User->>HistoryCtrl: GET /api/history?page=&size=
HistoryCtrl->>HistorySvc: getHistories(userId, page, size)
HistorySvc->>Repo: select account by userId
HistorySvc->>Repo: select histories by userId ORDER BY createAt DESC (page)
HistorySvc-->>HistoryCtrl: GetHistoriesResponse(coin, pageResponse)
HistoryCtrl-->>User: 200 OK + payload
end
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes
Possibly related PRs
Poem
Pre-merge checks and finishing touches❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
📜 Recent review detailsConfiguration used: CodeRabbit UI Review profile: CHILL Plan: Pro 📒 Files selected for processing (1)
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. Comment |
There was a problem hiding this comment.
Actionable comments posted: 6
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (13)
src/main/java/hanium/modic/backend/domain/ai/aiChat/service/AiImagePermissionService.java(4 hunks)src/main/java/hanium/modic/backend/domain/transaction/entity/History.java(1 hunks)src/main/java/hanium/modic/backend/domain/transaction/enums/HistoryType.java(1 hunks)src/main/java/hanium/modic/backend/domain/transaction/repository/CoinTransactionEntityRepository.java(1 hunks)src/main/java/hanium/modic/backend/domain/transaction/repository/HistoryRepository.java(1 hunks)src/main/java/hanium/modic/backend/domain/transaction/service/AccountService.java(4 hunks)src/main/java/hanium/modic/backend/domain/transaction/service/HistoryService.java(1 hunks)src/main/java/hanium/modic/backend/web/history/controller/HistoryController.java(1 hunks)src/main/java/hanium/modic/backend/web/history/dto/response/GetHistoriesResponse.java(1 hunks)src/main/java/hanium/modic/backend/web/history/dto/response/GetHistoryEntityResponse.java(1 hunks)src/main/java/hanium/modic/backend/web/transaction/controller/AccountController.java(2 hunks)src/main/java/hanium/modic/backend/web/transaction/dto/response/GetTransactionEntityResponse.java(1 hunks)src/main/java/hanium/modic/backend/web/transaction/dto/response/GetTransactionsResponse.java(1 hunks)
🧰 Additional context used
🧬 Code graph analysis (2)
src/main/java/hanium/modic/backend/web/history/controller/HistoryController.java (1)
src/main/java/hanium/modic/backend/web/transaction/controller/AccountController.java (1)
Tag(28-89)
src/main/java/hanium/modic/backend/domain/transaction/service/AccountService.java (2)
src/main/java/hanium/modic/backend/domain/transaction/service/HistoryService.java (1)
Service(26-84)src/main/java/hanium/modic/backend/domain/transaction/service/LedgerService.java (1)
Service(23-80)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
- GitHub Check: build
🔇 Additional comments (10)
src/main/java/hanium/modic/backend/domain/transaction/repository/CoinTransactionEntityRepository.java (1)
15-27: 일관성 있는 거래 내역 조회 쿼리 구현이 우수합니다.계좌 버전(
accountVersion)과 타임스탬프(effectiveAt,discardedAt)를 활용한 스냅샷 기반 쿼리가 PR 목표에서 명시한 일관성 요구사항을 정확히 구현하고 있습니다. 페이지네이션 지원도 적절합니다.src/main/java/hanium/modic/backend/domain/transaction/enums/HistoryType.java (1)
1-6: LGTM!간단하고 명확한 enum 정의입니다.
src/main/java/hanium/modic/backend/web/history/dto/response/GetHistoriesResponse.java (1)
5-9: LGTM!DTO 구조가 명확하고 적절합니다.
src/main/java/hanium/modic/backend/web/transaction/dto/response/GetTransactionsResponse.java (1)
5-9: LGTM!DTO 구조가 명확하고 적절합니다.
src/main/java/hanium/modic/backend/domain/transaction/repository/HistoryRepository.java (1)
9-13: LGTM!Spring Data JPA 메서드 명명 규칙을 올바르게 따르고 있으며, 최신순 정렬과 페이지네이션이 적절히 구현되었습니다.
src/main/java/hanium/modic/backend/domain/transaction/service/HistoryService.java (1)
60-83: 구현이 적절합니다.거래 내역 조회 로직이 올바르게 구현되어 있습니다. 계좌 조회, 페이지네이션 처리, 응답 생성이 모두 적절합니다.
src/main/java/hanium/modic/backend/web/transaction/dto/response/GetTransactionEntityResponse.java (1)
9-23: 구현이 깔끔합니다.DTO 레코드가 적절하게 정의되어 있으며,
from팩토리 메서드를 통한 엔티티 매핑도 올바릅니다.src/main/java/hanium/modic/backend/domain/transaction/entity/History.java (1)
41-43:direction필드가 올바르게 구현되었습니다.
TransactionDirectionenum을 직접 사용하고updatable=false설정으로 변경을 방지한 것이 적절합니다.src/main/java/hanium/modic/backend/domain/transaction/service/AccountService.java (1)
95-123: 시간 기반 일관성 조회가 적절히 구현되었습니다.PR 목표에 명시된 대로 Account의 version과 시간 정보를 활용하여 일관성 있는 거래 내역 조회를 구현했습니다.
LocalDateTime.now()와account.getLedgerVersion()을 함께 사용하여 해당 시점의 스냅샷을 조회하는 방식이 적절합니다.단,
now시점과ledgerVersion읽기 시점 간에 미세한 차이가 있을 수 있으나, 이는 읽기 전용 조회이고 사용자에게 일관된 뷰를 제공하기 위한 것이므로 허용 가능합니다.src/main/java/hanium/modic/backend/web/transaction/controller/AccountController.java (1)
67-88: 엔드포인트가 잘 구현되었습니다.새로운 거래 내역 조회 엔드포인트가 적절하게 구현되었습니다:
- 페이지네이션 검증이 적절함
- API 문서에 일관성 보장에 대한 명확한 설명 제공
- 오류 매핑 설정 적절
페이지 크기 최소값이 10으로 설정된 것은 다소 높지만,
HistoryController에서도 동일한 규칙을 사용하므로 의도적인 설계로 보입니다.
개요
작업사항
장부 목록 조회 기능
Account의 잔고와 거래 장부 목록 조회에서 일관성 문제가 발생할 수 있다.
이를 해결하기 위해 Account의 version 정보 및 시간 정보를 활용하여 account 잔액 버전에 맞는 거래내역만 조회되게 하였다.
History 목록 조회
거래장부와 별개로 유저들의 쉽게 볼 히스토리가 필요했다.
일관성을 조금 포기하고 편하게 조회할 수 있는 목록 조회 기능을 추가하였다.
우려 사항
다만, History는 일관성을 고려하지 않아 Account 잔액과 틀릴 경우가 발생한다.
추후 사용해보면서 문제가 되면 수정해야겠다.
Summary by CodeRabbit
새로운 기능
테스트
✏️ Tip: You can customize this high-level summary in your review settings.