github.com/k0marov/go-socnet@v0.0.0-20220715154813-90d07867c782/core/abstract/recommendable/service/service.go (about) 1 package service 2 3 import ( 4 "errors" 5 "github.com/k0marov/go-socnet/core/general/core_err" 6 "github.com/k0marov/go-socnet/core/general/core_values" 7 ) 8 9 type StoreRandomGetter = func(count int) ([]string, error) 10 type StoreRecsGetter = func(user core_values.UserId, count int) ([]string, error) 11 type StoreRecsSetter = func(core_values.UserId, []string) error 12 13 type RecsGetter = func(user core_values.UserId, count int) ([]string, error) 14 type RecsUpdater = func() error 15 16 func NewRecsUpdater() RecsUpdater { 17 return func() error { 18 return errors.New("unimplemented") 19 } 20 } 21 22 func NewRecsGetter(getRecs StoreRecsGetter, getRandom StoreRandomGetter) RecsGetter { 23 return func(user core_values.UserId, count int) ([]string, error) { 24 recs, err := getRecs(user, count) 25 if err != nil { 26 return []string{}, core_err.Rethrow("getting recommendations", err) 27 } 28 if len(recs) == count { 29 return recs, nil 30 } 31 32 randomRecs, err := getRandom(count - len(recs)) 33 if err != nil { 34 return []string{}, core_err.Rethrow("getting random recommendations", err) 35 } 36 return append(recs, randomRecs...), nil 37 } 38 }