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 }