package simplex.bn25.makino335926.trading.position;

import simplex.bn25.makino335926.trading.trade.Trade;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

// クラス:Validation(取引のバリデーション処理を追加)
public class Validation {

    //メソッド:validationQuantity(保有数量が負にならないかを検証)
    public static boolean validateQuantity(String ticker, String side, int quantity, List<Trade> trades) {
        List<Position> positions = CalculationPosition.calculationPosition(trades, Map.of());
        long currentQuantity = positions.stream()
                .filter(position -> position.getTicker().equals(ticker))
                .mapToLong(Position::getQuantity)
                .findFirst()
                .orElse(0L);

        if (side.equals("SELL") && currentQuantity - quantity < 0) {
            System.out.println("> 銘柄の保有数量が負の値となるため不正です。");
            return false;
        }
        return true;
    }

    //メソッド:validationDateTime(取引時間が適切かを検証)
    public static boolean validateTradeTime(String ticker, LocalDateTime tradedDatetime, List<Trade> trades) {
        boolean isInvalidTime = trades.stream()
                .filter(t -> t.ticker().equals(ticker))
                .anyMatch(t -> !tradedDatetime.isAfter(t.tradedDatetime()));

        if (isInvalidTime) {
            System.out.println("> 過去の最新の取引時刻と同じ、またはそれより過去であるため不正です。");
            return false;
        }
        return true;
    }
}

コメント

タイトルとURLをコピーしました