github.com/k0marov/go-socnet@v0.0.0-20220715154813-90d07867c782/features/feed/domain/service/service.go (about)

     1  package service
     2  
     3  import (
     4  	"github.com/k0marov/go-socnet/core/abstract/recommendable"
     5  	"github.com/k0marov/go-socnet/core/general/client_errors"
     6  	"github.com/k0marov/go-socnet/core/general/core_values"
     7  	"strconv"
     8  )
     9  
    10  type FeedGetter = func(count string, caller core_values.UserId) ([]string, error)
    11  
    12  const DefaultCount = 5
    13  const MaxCount = 50
    14  
    15  func convertCount(countStr string) (count int, ok bool) {
    16  	if countStr == "" {
    17  		return DefaultCount, true
    18  	}
    19  	countConv, err := strconv.Atoi(countStr)
    20  	return countConv, err == nil
    21  }
    22  
    23  func NewFeedGetter(getFeed recommendable.RecsGetter) FeedGetter {
    24  	return func(countStr string, caller core_values.UserId) ([]string, error) {
    25  		count, ok := convertCount(countStr)
    26  		if !ok {
    27  			return []string{}, client_errors.NonIntegerCount
    28  		}
    29  		if count > MaxCount {
    30  			return []string{}, client_errors.TooBigCount
    31  		}
    32  		return getFeed(caller, count)
    33  	}
    34  }