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
}