Files
sb-backend/src/main/java/com/sb/web/account/dto/AccountEntryRequest.java
T
ByungCheol bd0a0f7776
CI / build (push) Failing after 13m58s
feat: 투자 소수점 매매 + 카드 할부(installment_months)
- invest_trade.quantity BIGINT→DECIMAL(18,6): 평단·원가·평가/실현손익 계산을 BigDecimal로 전환 (금액은 원단위 정수 유지)
- account_entry.installment_months 추가: 카드 지출 2~24개월 할부 기록(일시불 null), 응답에 포함

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-03 16:41:58 +09:00

52 lines
1.7 KiB
Java

package com.sb.web.account.dto;
import jakarta.validation.constraints.Max;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Pattern;
import jakarta.validation.constraints.PositiveOrZero;
import jakarta.validation.constraints.Size;
import lombok.Data;
import java.time.LocalDate;
import java.util.List;
/**
* 가계부 항목 생성/수정 요청.
*/
@Data
public class AccountEntryRequest {
@NotNull(message = "거래일을 입력하세요.")
private LocalDate entryDate;
@NotBlank(message = "구분을 선택하세요.")
@Pattern(regexp = "INCOME|EXPENSE|TRANSFER", message = "구분이 올바르지 않습니다.")
private String type;
@Size(max = 50, message = "분류는 50자 이내여야 합니다.")
private String category;
@NotNull(message = "금액을 입력하세요.")
@PositiveOrZero(message = "금액은 0 이상이어야 합니다.")
private Long amount;
@Size(max = 255, message = "메모는 255자 이내여야 합니다.")
private String memo;
/** 발생/출금 계좌 ID (본인 wallet, 선택. 이체 시 출금 계좌) */
private Long walletId;
/** 이체 입금 계좌 ID (TRANSFER 시 필수) */
private Long toWalletId;
/** 카드 할부 개월수 (2~24, 일시불은 null). EXPENSE + 카드 결제에만 의미 있음 */
@Min(value = 2, message = "할부는 2개월 이상이어야 합니다.")
@Max(value = 24, message = "할부는 최대 24개월까지 가능합니다.")
private Integer installmentMonths;
/** 선택한 태그 ID 목록 (태그 관리에 등록된 태그, 선택) */
private List<Long> tagIds;
}