- 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>
57 lines
2.0 KiB
Java
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; // 대출시작일
|
|
}
|