Esempio n. 1
0
func populateSet(resultRepo repository.ResultDataRepo, effRepo repository.EfficiencyRepo) (*entities.ResultDataListResponse, *entities.ResultDataResponse, *entities.Signal, error) {
	eff, found := effRepo.GetLast()
	if !found {
		return nil, nil, nil, errors.New("populateSet error, in get last EFF not found")
	}
	score10, score100 := get10_100Score(eff)
	results := resultRepo.GetAll()
	l := len(results)
	var resultSet []entities.ResultResponse
	limit := historyLimit
	if l < historyLimit {
		limit = l
	}
	resultSet = make([]entities.ResultResponse, limit)

	counter := 1
	for i := l - 1; i >= l-limit && i >= 0; i-- {
		result := new(entities.ResultResponse)
		result.Prediction = results[i].Prediction
		result.Result = results[i].Result
		result.Source = make([]int32, len(results[i].Source))
		copy(result.Source, results[i].Source)
		result.Timestamp = results[i].Timestamp
		result.Levels = results[i].RangesCount

		if err := populateDataFor(result.Timestamp, results[i].Step, results[i].Symbol, results, result); err != nil {
			return nil, nil, nil, fmt.Errorf("PopulateSet error, in populate data: %v.", err)
		}
		result.Symbol = results[i].Symbol
		resultSet[limit-counter] = *result
		counter++
	}
	var signal *entities.Signal
	if last, found := resultRepo.GetLast(); found {
		signal = new(entities.Signal)
		signal.RangesCount = last.RangesCount
		signal.Symbol = last.Symbol
		signal.Timestamp = last.Timestamp
		signal.Prediction = last.Prediction
		signal.Score10 = score10
		signal.Score100 = score100
	}
	retList := new(entities.ResultDataListResponse)
	retList.Data = resultSet
	retList.Score10 = score10
	retList.Score100 = score100

	retCurrent := new(entities.ResultDataResponse)
	retCurrent.Data = *(resultSet[len(resultSet)-1].Clone())
	retCurrent.Score10 = score10
	retCurrent.Score100 = score100

	return retList, retCurrent, signal, nil
}