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; // 대출시작일 }