MIF_E31222379_BE/internal/repositories/role.go

77 lines
1.7 KiB
Go

package repositories
import (
"encoding/json"
"errors"
"time"
"github.com/pahmiudahgede/senggoldong/config"
"github.com/pahmiudahgede/senggoldong/domain"
)
func GetUserRoleByID(id string) (domain.UserRole, error) {
var role domain.UserRole
ctx := config.Context()
cachedRole, err := config.RedisClient.Get(ctx, "userRole:"+id).Result()
if err == nil {
err := json.Unmarshal([]byte(cachedRole), &role)
if err != nil {
return role, errors.New("gagal mendekode data cache Redis")
}
return role, nil
}
err = config.DB.Where("id = ?", id).First(&role).Error
if err != nil {
return role, errors.New("userRole tidak ditemukan")
}
roleJSON, err := json.Marshal(role)
if err != nil {
return role, errors.New("gagal mendekode data untuk Redis")
}
err = config.RedisClient.Set(ctx, "userRole:"+id, roleJSON, time.Hour*24).Err()
if err != nil {
return role, errors.New("gagal menyimpan data di Redis")
}
return role, nil
}
func GetAllUserRoles() ([]domain.UserRole, error) {
var roles []domain.UserRole
ctx := config.Context()
cachedRoles, err := config.RedisClient.Get(ctx, "allUserRoles").Result()
if err == nil {
err := json.Unmarshal([]byte(cachedRoles), &roles)
if err != nil {
return roles, errors.New("gagal mendekode data cache Redis")
}
return roles, nil
}
err = config.DB.Find(&roles).Error
if err != nil {
return nil, errors.New("gagal mengambil data UserRole")
}
rolesJSON, err := json.Marshal(roles)
if err != nil {
return roles, errors.New("gagal mendekode data untuk Redis")
}
err = config.RedisClient.Set(ctx, "allUserRoles", rolesJSON, time.Hour*24).Err()
if err != nil {
return roles, errors.New("gagal menyimpan data di Redis")
}
return roles, nil
}