feat: add redis control in banner feature

This commit is contained in:
pahmiudahgede 2025-01-22 14:58:40 +07:00
parent ef94470eda
commit 202566117f
3 changed files with 50 additions and 5 deletions

View File

@ -31,6 +31,10 @@ var (
RedisDB int RedisDB int
) )
func Context() context.Context {
return context.Background()
}
func InitConfig() { func InitConfig() {
ServerHost = os.Getenv("SERVER_HOST") ServerHost = os.Getenv("SERVER_HOST")
ServerPort = os.Getenv("SERVER_PORT") ServerPort = os.Getenv("SERVER_PORT")

View File

@ -1,6 +1,9 @@
package repositories package repositories
import ( import (
"encoding/json"
"time"
"github.com/pahmiudahgede/senggoldong/config" "github.com/pahmiudahgede/senggoldong/config"
"github.com/pahmiudahgede/senggoldong/domain" "github.com/pahmiudahgede/senggoldong/domain"
) )
@ -8,18 +11,52 @@ import (
func GetBanners() ([]domain.Banner, error) { func GetBanners() ([]domain.Banner, error) {
var banners []domain.Banner var banners []domain.Banner
ctx := config.Context()
cachedBanners, err := config.RedisClient.Get(ctx, "banners").Result()
if err == nil && cachedBanners != "" {
if err := json.Unmarshal([]byte(cachedBanners), &banners); err != nil {
return nil, err
}
return banners, nil
}
if err := config.DB.Find(&banners).Error; err != nil { if err := config.DB.Find(&banners).Error; err != nil {
return nil, err return nil, err
} }
bannersJSON, err := json.Marshal(banners)
if err != nil {
return nil, err
}
config.RedisClient.Set(ctx, "banners", bannersJSON, time.Hour).Err()
return banners, nil return banners, nil
} }
func GetBannerByID(id string) (domain.Banner, error) { func GetBannerByID(id string) (domain.Banner, error) {
var banner domain.Banner var banner domain.Banner
ctx := config.Context()
cachedBanner, err := config.RedisClient.Get(ctx, "banner:"+id).Result()
if err == nil && cachedBanner != "" {
if err := json.Unmarshal([]byte(cachedBanner), &banner); err != nil {
return banner, err
}
return banner, nil
}
if err := config.DB.Where("id = ?", id).First(&banner).Error; err != nil { if err := config.DB.Where("id = ?", id).First(&banner).Error; err != nil {
return banner, err return banner, err
} }
bannerJSON, err := json.Marshal(banner)
if err != nil {
return banner, err
}
config.RedisClient.Set(ctx, "banner:"+id, bannerJSON, time.Hour*24).Err()
return banner, nil return banner, nil
} }
@ -27,6 +64,8 @@ func CreateBanner(banner *domain.Banner) error {
if err := config.DB.Create(banner).Error; err != nil { if err := config.DB.Create(banner).Error; err != nil {
return err return err
} }
config.RedisClient.Del(config.Context(), "banners")
return nil return nil
} }
@ -34,6 +73,9 @@ func UpdateBanner(banner *domain.Banner) error {
if err := config.DB.Save(banner).Error; err != nil { if err := config.DB.Save(banner).Error; err != nil {
return err return err
} }
config.RedisClient.Del(config.Context(), "banners")
config.RedisClient.Del(config.Context(), "banner:"+banner.ID)
return nil return nil
} }
@ -41,5 +83,8 @@ func DeleteBanner(id string) error {
if err := config.DB.Where("id = ?", id).Delete(&domain.Banner{}).Error; err != nil { if err := config.DB.Where("id = ?", id).Delete(&domain.Banner{}).Error; err != nil {
return err return err
} }
config.RedisClient.Del(config.Context(), "banners")
config.RedisClient.Del(config.Context(), "banner:"+id)
return nil return nil
} }

View File

@ -2,7 +2,6 @@ package services
import ( import (
"errors" "errors"
"github.com/pahmiudahgede/senggoldong/domain" "github.com/pahmiudahgede/senggoldong/domain"
"github.com/pahmiudahgede/senggoldong/internal/repositories" "github.com/pahmiudahgede/senggoldong/internal/repositories"
) )
@ -14,7 +13,6 @@ func GetBanners() ([]domain.Banner, error) {
func GetBannerByID(id string) (domain.Banner, error) { func GetBannerByID(id string) (domain.Banner, error) {
banner, err := repositories.GetBannerByID(id) banner, err := repositories.GetBannerByID(id)
if err != nil { if err != nil {
return domain.Banner{}, errors.New("banner not found") return domain.Banner{}, errors.New("banner not found")
} }
return banner, nil return banner, nil
@ -34,7 +32,6 @@ func CreateBanner(bannerName, bannerImage string) (domain.Banner, error) {
} }
func UpdateBanner(id, bannerName, bannerImage string) (domain.Banner, error) { func UpdateBanner(id, bannerName, bannerImage string) (domain.Banner, error) {
banner, err := repositories.GetBannerByID(id) banner, err := repositories.GetBannerByID(id)
if err != nil { if err != nil {
return domain.Banner{}, err return domain.Banner{}, err
@ -51,7 +48,6 @@ func UpdateBanner(id, bannerName, bannerImage string) (domain.Banner, error) {
} }
func DeleteBanner(id string) error { func DeleteBanner(id string) error {
_, err := repositories.GetBannerByID(id) _, err := repositories.GetBannerByID(id)
if err != nil { if err != nil {
return errors.New("banner not found") return errors.New("banner not found")