func()

in domain/sequence_feature_view.go [194:234]


func (f *SequenceFeatureView) GetOnlineFeatures(joinIds []interface{}, features []string, alias map[string]string) ([]map[string]interface{}, error) {
	if f.sequenceConfig.RegistrationMode == constants.Seq_Registration_Mode_Only_Behavior {
		return nil, errors.New("only full_sequence registration mode supports GetOnlineFeatures, please use GetBehaviorFeatures")
	}
	sequenceConfig := f.sequenceConfig
	onlineConfig := []*api.SeqConfig{}
	seenFields := make(map[string]bool)

	for _, feature := range features {
		if feature == "*" {
			onlineConfig = sequenceConfig.SeqConfig
			break
		} else {
			found := false
			for _, seqConfig := range sequenceConfig.SeqConfig {
				if seqConfig.OnlineSeqName == feature {
					found = true
					if !seenFields[feature] {
						onlineConfig = append(onlineConfig, seqConfig)
						seenFields[feature] = true
					}
					break
				}
			}
			if !found {
				return nil, fmt.Errorf("sequence feature name :%s not found in feature view config", feature)
			}
		}
	}

	sequenceFeatureResults, err := f.featureViewDao.GetUserSequenceFeature(joinIds, f.userIdField, sequenceConfig, onlineConfig)

	if f.userIdField != f.FeatureEntity.FeatureEntityJoinid {
		for _, sequencefeatureMap := range sequenceFeatureResults {
			sequencefeatureMap[f.FeatureEntity.FeatureEntityJoinid] = sequencefeatureMap[f.userIdField]
			delete(sequencefeatureMap, f.userIdField)
		}
	}

	return sequenceFeatureResults, err
}