Files
sb-backend/src/main/java/com/sb/web/account/dto/WalletRequest.java
T
ByungCheolandClaude Sonnet 4.6 947c7a1f68 feat(account): 대출 계좌 loan_amount/loan_rate/loan_method/loan_months/loan_start 필드 추가
- wallet 테이블: loan_amount(실행금액), loan_rate(연이자율%), loan_method(상환방식),
  loan_months(기간), loan_start(시작일) ALTER TABLE 추가
- Wallet 도메인/DTO/Mapper/Service 동기화
- WalletResponse.from()에 대출 필드 반영

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-02 00:45:42 +09:00

57 lines
2.0 KiB
Java

package com.sb.web.account.dto;
import jakarta.validation.constraints.DecimalMax;
import jakarta.validation.constraints.DecimalMin;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Pattern;
import jakarta.validation.constraints.Size;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDate;
/**
* 계좌/카드/대출 생성/수정 요청.
*/
@Data
public class WalletRequest {
@NotBlank(message = "유형을 선택하세요.")
@Pattern(regexp = "BANK|CASH|CARD|LOAN|INVEST", message = "유형이 올바르지 않습니다.")
private String type;
@NotBlank(message = "이름을 입력하세요.")
@Size(max = 50, message = "이름은 50자 이내여야 합니다.")
private String name;
@Size(max = 50, message = "50자 이내여야 합니다.")
private String issuer; // 은행명 / 카드사
@Size(max = 50, message = "50자 이내여야 합니다.")
private String accountNumber; // 계좌번호 (BANK)
@Pattern(regexp = "CREDIT|CHECK|", message = "카드 종류가 올바르지 않습니다.")
private String cardType; // CREDIT / CHECK (CARD)
/** 초기 잔액 (부호있음: 자산+, 부채-). 미입력 시 0 */
private Long openingBalance;
private LocalDate openingDate;
/** 현재 평가금액 (INVEST 전용, 수동 갱신) */
private Long currentValue;
// ===== 대출(LOAN) 전용 =====
private Long loanAmount; // 대출 실행 금액(원금)
@DecimalMin(value = "0.0", inclusive = true)
@DecimalMax(value = "100.0", message = "이자율은 100% 이하여야 합니다.")
private BigDecimal loanRate; // 연이자율(%)
@Pattern(regexp = "EQUAL_PAYMENT|EQUAL_PRINCIPAL|BULLET|", message = "상환방식이 올바르지 않습니다.")
private String loanMethod; // 상환방식
private Integer loanMonths; // 대출기간(개월)
private LocalDate loanStart; // 대출시작일
}