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  }