package main
import (
"fmt"
"strings"
"strconv"
"time"
)
func validateBets(order *entities.Order) {
betsValidators, err := getOrderTypeValidators(order.Type)
if err != nil {
order.Errors.AddValidatorsNotExistsForOrderType(int(order.Type))
return
}
var checkedBets entities.OrderBetsCollection
for _, bet := range order.Metadata().GetCheckedBets() {
if betsValidators.Validate(bet) {
checkedBets = append(checkedBets, bet)
}
}
order.Metadata().UpsertCheckedBets(checkedBets)
}
func getOrderTypeValidators() Validater {
return &Validators{}
}
type Validater interface {
Validate(bet Bet) bool
}
type Validators []Validator
func (v Validators) Validate(bet Bet) bool {
for _, validator := range betsValidators {
if ok := validator(bet, &order.Errors, order.Metadata()); !ok {
// Here we just finished validation for current bet, particular
// error has already been written in the validator to `order.Errors`.
return false
}
}
return true
}