From ee2bc08b1e647521b93cf97905dd620a2c318d63 Mon Sep 17 00:00:00 2001 From: sb Date: Tue, 7 Jul 2026 23:07:49 +0900 Subject: [PATCH] =?UTF-8?q?feat(wallet):=20=EB=8C=80=EC=B6=9C=20=EC=9B=94?= =?UTF-8?q?=20=EC=83=81=ED=99=98=EA=B8=88(loan=5Fpayment)=20=ED=95=84?= =?UTF-8?q?=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 원리금균등 상환표를 은행 조회액과 정확히 맞추기 위한 고정 월 상환금 선택 저장 - wallet.loan_payment 컬럼(ALTER IF NOT EXISTS), 도메인·DTO·매퍼 반영 Co-Authored-By: Claude Opus 4.8 --- src/main/java/com/sb/web/account/domain/Wallet.java | 1 + src/main/java/com/sb/web/account/dto/WalletRequest.java | 1 + src/main/java/com/sb/web/account/dto/WalletResponse.java | 2 ++ .../java/com/sb/web/account/service/AccountService.java | 1 + src/main/resources/db/account.sql | 1 + src/main/resources/mapper/WalletMapper.xml | 9 +++++---- 6 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/sb/web/account/domain/Wallet.java b/src/main/java/com/sb/web/account/domain/Wallet.java index 06a6b56..1f64d98 100644 --- a/src/main/java/com/sb/web/account/domain/Wallet.java +++ b/src/main/java/com/sb/web/account/domain/Wallet.java @@ -35,6 +35,7 @@ public class Wallet implements Serializable { private String loanMethod; // 상환방식: EQUAL_PAYMENT / EQUAL_PRINCIPAL / BULLET (LOAN 전용) private Integer loanMonths; // 대출기간(개월) (LOAN 전용) private LocalDate loanStart; // 대출시작일 (LOAN 전용) + private Long loanPayment; // 월 상환금(고정, 원리금균등) — 은행 조회액과 정확히 맞추기 위한 선택 입력 (LOAN 전용) private Integer sortOrder; // 표시 순서 (타입 내 정렬) private LocalDateTime createdAt; private LocalDateTime updatedAt; diff --git a/src/main/java/com/sb/web/account/dto/WalletRequest.java b/src/main/java/com/sb/web/account/dto/WalletRequest.java index ccb9af7..db50a7a 100644 --- a/src/main/java/com/sb/web/account/dto/WalletRequest.java +++ b/src/main/java/com/sb/web/account/dto/WalletRequest.java @@ -53,4 +53,5 @@ public class WalletRequest { private Integer loanMonths; // 대출기간(개월) private LocalDate loanStart; // 대출시작일 + private Long loanPayment; // 월 상환금(고정, 원리금균등) — 선택 } diff --git a/src/main/java/com/sb/web/account/dto/WalletResponse.java b/src/main/java/com/sb/web/account/dto/WalletResponse.java index 2ec3b39..bd33d89 100644 --- a/src/main/java/com/sb/web/account/dto/WalletResponse.java +++ b/src/main/java/com/sb/web/account/dto/WalletResponse.java @@ -38,6 +38,7 @@ public class WalletResponse { private String loanMethod; // EQUAL_PAYMENT / EQUAL_PRINCIPAL / BULLET private Integer loanMonths; // 대출기간(개월) private LocalDate loanStart; // 대출시작일 + private Long loanPayment; // 월 상환금(고정, 원리금균등) — 선택 입력 public static WalletResponse from(Wallet w, long balance) { return WalletResponse.builder() @@ -56,6 +57,7 @@ public class WalletResponse { .loanMethod(w.getLoanMethod()) .loanMonths(w.getLoanMonths()) .loanStart(w.getLoanStart()) + .loanPayment(w.getLoanPayment()) .build(); } } diff --git a/src/main/java/com/sb/web/account/service/AccountService.java b/src/main/java/com/sb/web/account/service/AccountService.java index 0b55296..9c58b93 100644 --- a/src/main/java/com/sb/web/account/service/AccountService.java +++ b/src/main/java/com/sb/web/account/service/AccountService.java @@ -659,6 +659,7 @@ public class AccountService { .loanMethod(isLoan ? blankToNull(req.getLoanMethod()) : null) .loanMonths(isLoan ? req.getLoanMonths() : null) .loanStart(isLoan ? req.getLoanStart() : null) + .loanPayment(isLoan ? req.getLoanPayment() : null) .build(); } diff --git a/src/main/resources/db/account.sql b/src/main/resources/db/account.sql index f93be69..589eb34 100644 --- a/src/main/resources/db/account.sql +++ b/src/main/resources/db/account.sql @@ -33,6 +33,7 @@ ALTER TABLE wallet ADD COLUMN IF NOT EXISTS loan_method VARCHAR(20) NULL COMME ALTER TABLE wallet ADD COLUMN IF NOT EXISTS loan_months INT NULL COMMENT '대출기간(개월)'; ALTER TABLE wallet ADD COLUMN IF NOT EXISTS loan_start DATE NULL COMMENT '대출시작일'; ALTER TABLE wallet ADD COLUMN IF NOT EXISTS loan_amount BIGINT NULL COMMENT '대출 실행 금액(원금, 처음 빌린 금액)'; +ALTER TABLE wallet ADD COLUMN IF NOT EXISTS loan_payment BIGINT NULL COMMENT '월 상환금(고정, 원리금균등) — 은행 조회액과 맞추기 위한 선택 입력'; -- 계좌번호 암호화 저장(AES-GCM)으로 평문보다 길어 VARCHAR(255) 필요 — 운영 적용 완료(CREATE TABLE 정의에 반영). -- 매 기동 MODIFY 는 라이브 테이블 락 위험이 있어 제거. 기존 환경 확장이 필요하면 1회 수동 적용: -- ALTER TABLE wallet MODIFY account_number VARCHAR(255) NULL; diff --git a/src/main/resources/mapper/WalletMapper.xml b/src/main/resources/mapper/WalletMapper.xml index fae50b2..96db6cd 100644 --- a/src/main/resources/mapper/WalletMapper.xml +++ b/src/main/resources/mapper/WalletMapper.xml @@ -20,6 +20,7 @@ + @@ -27,7 +28,7 @@ id, member_id, type, name, issuer, account_number, card_type, opening_balance, opening_date, current_value, - loan_amount, loan_rate, loan_method, loan_months, loan_start, + loan_amount, loan_rate, loan_method, loan_months, loan_start, loan_payment, sort_order, created_at, updated_at