feat: add redis control in banner feature
This commit is contained in:
parent
ef94470eda
commit
202566117f
|
@ -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")
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
@ -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")
|
||||||
|
|
Loading…
Reference in New Issue