lot of new functionalities
This commit is contained in:
74
core/utils/cache/cache.go
vendored
Normal file
74
core/utils/cache/cache.go
vendored
Normal file
@@ -0,0 +1,74 @@
|
||||
package cache
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"strconv"
|
||||
|
||||
"git.coopgo.io/coopgo-apps/parcoursmob/core/utils/storage"
|
||||
"github.com/rs/zerolog/log"
|
||||
)
|
||||
|
||||
type CacheService struct {
|
||||
cache storage.CacheHandler
|
||||
}
|
||||
|
||||
func NewCacheService(cache storage.CacheHandler) *CacheService {
|
||||
return &CacheService{cache: cache}
|
||||
}
|
||||
|
||||
type GetCacheResult struct {
|
||||
Data []byte
|
||||
}
|
||||
|
||||
func (s *CacheService) GetCacheData(cacheID string, limitsMin, limitsMax *int) (*GetCacheResult, error) {
|
||||
d, err := s.cache.Get(cacheID)
|
||||
if err != nil {
|
||||
log.Error().Err(err).Msg("")
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var data []any
|
||||
if val, ok := d.([]any); ok {
|
||||
data = val
|
||||
} else {
|
||||
data = []any{d}
|
||||
}
|
||||
|
||||
result := data
|
||||
if limitsMin != nil {
|
||||
min := *limitsMin
|
||||
if limitsMax != nil {
|
||||
max := *limitsMax
|
||||
if max > len(data) {
|
||||
result = data[min:]
|
||||
} else {
|
||||
result = data[min:max]
|
||||
}
|
||||
} else {
|
||||
result = data[min:]
|
||||
}
|
||||
}
|
||||
|
||||
j, err := json.Marshal(result)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &GetCacheResult{
|
||||
Data: j,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func ParseLimits(limitsMinStr, limitsMaxStr string) (limitsMin, limitsMax *int) {
|
||||
if limitsMinStr != "" {
|
||||
if min, err := strconv.Atoi(limitsMinStr); err == nil {
|
||||
limitsMin = &min
|
||||
}
|
||||
}
|
||||
if limitsMaxStr != "" {
|
||||
if max, err := strconv.Atoi(limitsMaxStr); err == nil {
|
||||
limitsMax = &max
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
Reference in New Issue
Block a user