feat: P6 후속 3 — 출금 잔여한도 검증 + 알림 모두읽음 + HANDOFF 갱신
출금 잔여 한도 검증:
- WithdrawRequestMapper.sumActiveAmountByMaster(settleMasterId) 추가
· CANCELLED 외 모든 활성 출금의 amount SUM (COALESCE 0)
- MobileMeService.createWithdrawRequest 에 잔여 한도 가드 추가
· 1) settle_master 본인 소유 확인 (FORBIDDEN)
· 2) 잔여 = net_amount - 활성 출금합계
· 3) 요청 amount > 잔여 시 INVALID_PARAMETER(E411) 던짐
· 메시지에 잔여 금액 명시 ("출금 가능 잔액(N)을 초과합니다")
PWA 알림 모두읽음:
- POST /api/mobile/me/notifications/read-all (기존 UserNotificationMapper.markAllRead 재사용)
- NoticeList 내알림 탭 헤더에 "모두 읽음 (N)" 버튼 (안읽음 카운트 표시)
- 성공 시 invalidate notifications + summary 쿼리
검증:
- ga-api compileJava + ga-mobile-pwa tsc PASS
- e2e (agent01 / userId=4 / agentId=1):
· settle#51 net=35,079원, 기존 사용 5,000원
· amount=999,999 → E411 "출금 가능 잔액(30079.00)을 초과합니다"
· amount=100 → success, requestId=5
· markAllRead → 200, summary.unread=0
- 이전 e2e 검증 (총 9건) 모두 PASS
HANDOFF.md §3-15 갱신 (2026-05-27 P6 후속 전체 정리 + agent01 테스트 계정 명시).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -46,4 +46,10 @@ public interface WithdrawRequestMapper {
|
||||
/** queryStatus 가 FAILED 응답: status='APPROVED'(재시도 풀로), transfer_status='FAILED', fail_reason. */
|
||||
int markSettleFailed(@Param("requestId") Long requestId,
|
||||
@Param("failReason") String failReason);
|
||||
|
||||
/**
|
||||
* 해당 settle_master 에서 CANCELLED/FAILED 외 활성 출금 신청의 amount 합계.
|
||||
* 출금 잔여 한도 검증 용도. null 가능(0건).
|
||||
*/
|
||||
java.math.BigDecimal sumActiveAmountByMaster(@Param("settleMasterId") Long settleMasterId);
|
||||
}
|
||||
|
||||
@@ -215,4 +215,12 @@
|
||||
AND status = 'SENT'
|
||||
</update>
|
||||
|
||||
<!-- 잔여 한도 검증용: 특정 settle_master 의 활성(CANCELLED 외) 출금 amount 합계 -->
|
||||
<select id="sumActiveAmountByMaster" resultType="java.math.BigDecimal">
|
||||
SELECT COALESCE(SUM(amount), 0)
|
||||
FROM withdraw_request
|
||||
WHERE settle_master_id = #{settleMasterId}
|
||||
AND status != 'CANCELLED'
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
|
||||
Reference in New Issue
Block a user