in api/internal/core/store/store.go [167:213]
func (s *GenericStore) List(_ context.Context, input ListInput) (*ListOutput, error) {
var ret []interface{}
s.cache.Range(func(key, value interface{}) bool {
if input.Predicate != nil && !input.Predicate(value) {
return true
}
if input.Format != nil {
value = input.Format(value)
}
ret = append(ret, value)
return true
})
//should return an empty array not a null for client
if ret == nil {
ret = []interface{}{}
}
output := &ListOutput{
Rows: ret,
TotalSize: len(ret),
}
if input.Less == nil {
input.Less = defLessFunc
}
sort.Slice(output.Rows, func(i, j int) bool {
return input.Less(output.Rows[i], output.Rows[j])
})
if input.PageSize > 0 && input.PageNumber > 0 {
skipCount := (input.PageNumber - 1) * input.PageSize
if skipCount > output.TotalSize {
output.Rows = []interface{}{}
return output, nil
}
endIdx := skipCount + input.PageSize
if endIdx >= output.TotalSize {
output.Rows = ret[skipCount:]
return output, nil
}
output.Rows = ret[skipCount:endIdx]
}
return output, nil
}