package com.sb.web.account.dto; import com.sb.web.account.domain.Wallet; import lombok.Builder; import lombok.Data; import java.math.BigDecimal; import java.time.LocalDate; /** * 계좌/카드/대출 응답. balance 는 현재 잔액(서비스에서 계산해 채움). */ @Data @Builder public class WalletResponse { private Long id; private String type; private String name; private String issuer; private String accountNumber; private String cardType; private Long openingBalance; private LocalDate openingDate; private Long balance; // 현재 잔액(부호있음). INVEST는 총평가(예수금+주식) // 투자(INVEST) 전용 — 서비스에서 포트폴리오로 산출 private Long investedAmount; // 순입금(투입원금) = 입금−출금 private Long deposit; // 예수금(미투자 현금) = 투입원금 + 매도 − 매수 private Long stockValue; // 주식 평가금액 private Long valuationGain; // 총손익(실현+평가) = 총평가 − 투입원금 private Long currentValue; // 평가액 직접입력값(퇴직연금·연금 등 수동 갱신). 있으면 총평가로 사용 private Boolean manualValuation; // true면 평가액 직접입력형(종목 자동계산 대신) // 대출(LOAN) 전용 private Long loanAmount; // 대출 실행 금액(원금) private BigDecimal loanRate; // 연이자율(%) e.g. 5.25 private String loanMethod; // EQUAL_PAYMENT / EQUAL_PRINCIPAL / BULLET private Integer loanMonths; // 대출기간(개월) private LocalDate loanStart; // 대출시작일 public static WalletResponse from(Wallet w, long balance) { return WalletResponse.builder() .id(w.getId()) .type(w.getType()) .name(w.getName()) .issuer(w.getIssuer()) .accountNumber(w.getAccountNumber()) .cardType(w.getCardType()) .openingBalance(w.getOpeningBalance()) .openingDate(w.getOpeningDate()) .balance(balance) .currentValue(w.getCurrentValue()) .loanAmount(w.getLoanAmount()) .loanRate(w.getLoanRate()) .loanMethod(w.getLoanMethod()) .loanMonths(w.getLoanMonths()) .loanStart(w.getLoanStart()) .build(); } }