newsbot-api/services/cache/cache.go

70 lines
1.5 KiB
Go
Raw Permalink Normal View History

package cache
import (
"time"
2022-12-10 11:13:45 -08:00
"github.com/jtom38/newsbot/collector/domain/models"
)
type CacheClient struct {
group string
DefaultTimer time.Duration
}
func NewCacheClient(group string) CacheClient {
return CacheClient{
group: group,
DefaultTimer: time.Hour,
}
}
func (cc *CacheClient) Insert(key string, value string) {
2022-12-10 11:13:45 -08:00
item := models.CacheItem{
Key: key,
Value: value,
Group: cc.group,
Expires: time.Now().Add(1 * time.Hour),
IsTainted: false,
}
cacheStorage = append(cacheStorage, &item)
}
2022-12-10 11:13:45 -08:00
func (cc *CacheClient) FindByKey(key string) (*models.CacheItem, error) {
for _, item := range cacheStorage {
if item.Group != cc.group {
continue
}
if item.Key != key {
continue
}
// if it was tainted, renew the timer and remove the taint as this record was still needed
if item.IsTainted {
item.IsTainted = false
item.Expires = time.Now().Add(1 * time.Hour)
}
return item, nil
}
2022-12-10 11:13:45 -08:00
return &models.CacheItem{}, ErrCacheRecordMissing
}
2022-12-10 11:13:45 -08:00
func (cc *CacheClient) FindByValue(value string) (*models.CacheItem, error) {
for _, item := range cacheStorage {
if item.Group != cc.group {
continue
}
if item.Value != value {
continue
}
// if it was tainted, renew the timer and remove the taint as this record was still needed
if item.IsTainted {
item.IsTainted = false
item.Expires = time.Now().Add(1 * time.Hour)
}
return item, nil
}
2022-12-10 11:13:45 -08:00
return &models.CacheItem{}, ErrCacheRecordMissing
}