Skip to content

Commit f71bdde

Browse files
Refactor Redis repository and add environment variable utility functions
1 parent 584a718 commit f71bdde

File tree

6 files changed

+93
-26
lines changed

6 files changed

+93
-26
lines changed

docker-compose.yml

Whitespace-only changes.

helper.go

Lines changed: 0 additions & 18 deletions
This file was deleted.

internal/errors.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package errors
2+
3+
import "fmt"
4+
5+
type dbHealthCheckFail struct {
6+
message string
7+
provider string
8+
}
9+
10+
func (e *dbHealthCheckFail) Error() string {
11+
return fmt.Sprintf("[%s] %s", e.provider, e.message);
12+
}
13+

pkg/util/helper.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package util
2+
3+
import (
4+
"os"
5+
"strconv"
6+
)
7+
8+
func GetEnv[T string | int](key string, defaultVal T) (T, error) {
9+
rawEnv, ok := os.LookupEnv(key)
10+
if !ok {
11+
return defaultVal, nil
12+
}
13+
var ret any
14+
switch any(defaultVal).(type) {
15+
case string:
16+
ret = rawEnv
17+
case int:
18+
intVal, err := strconv.Atoi(rawEnv)
19+
if err != nil {
20+
return defaultVal, err
21+
}
22+
ret = intVal
23+
24+
}
25+
return ret.(T), nil
26+
}

shared/repository/redis.go

Lines changed: 50 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,71 @@
11
package repository
22

3-
import "github.com/go-redis/redis/v9"
3+
import (
4+
"context"
5+
"fmt"
6+
"github.com/Programmer-RD-AI/auth-forge/internal/errors"
7+
"github.com/Programmer-RD-AI/auth-forge/pkg/util"
8+
"github.com/redis/go-redis/v9"
9+
)
410

511
type RedisConfiguration struct {
6-
Host string
12+
Host string
713
Port int
814
Password string
915
Database int
1016
}
1117

1218
type RedisRepository struct {
19+
BaseRepository
1320
config RedisConfiguration
1421
client *redis.Client
1522
}
1623

17-
func CreateRedisConfiguration(host *string, port *int, password *string, database *int){}
24+
func CreateRedisConfiguration(host *string, port *int, password *string, database *int) RedisConfiguration {
25+
if host == nil {
26+
h, _ := util.GetEnv[string]("REDIS_HOST", "localhost")
27+
host = &h
28+
}
29+
if port == nil {
30+
p, _ := util.GetEnv[int]("REDIS_PORT", 6379)
31+
port = &p
32+
}
33+
if password == nil {
34+
pass, _ := util.GetEnv[string]("REDIS_PASSWORD", "")
35+
password = &pass
36+
}
37+
if database == nil {
38+
db, _ := util.GetEnv[int]("REDIS_DATABASE", 0)
39+
database = &db
40+
}
41+
return RedisConfiguration{
42+
Host: *host,
43+
Port: *port,
44+
Password: *password,
45+
Database: *database,
46+
}
47+
}
48+
49+
func (r *RedisRepository) Connect() (*redis.Client, context.Context) {
50+
redisClient := redis.NewClient(createRedisOption(&r.config))
51+
initCtx := context.Background()
52+
return redisClient, initCtx
53+
}
1854

19-
func (r *RedisReppository) Connect(){
20-
return redis.NewClient(createRedisOption(r.config));
55+
func (r *RedisRepository) HealthCheck(ctx context.Context, client *redis.Client) (bool, error) {
56+
if err := client.Ping(ctx).Err(); err != nil {
57+
return false, errors.dbHealthCheckFail{message: err.Error(), provider: r.BaseRepository.providerName}
58+
}
59+
return true, nil
2160
}
2261

62+
func (r *RedisRepository) Read(client *redis.Client, ctx context.Context, key *string){
63+
val, err := client.Get(ctx, *key).Result()
64+
}
2365
func createRedisOption(redisConfig *RedisConfiguration) *redis.Options {
2466
return &redis.Options{
25-
Addr: fmt.Sprintf("%s:%d", redisConfig.Host, redisConfig.Port)
26-
Password: redisConfig.Password
27-
DB: redisConfig.Database
67+
Addr: fmt.Sprintf("%s:%d", redisConfig.Host, redisConfig.Port),
68+
Password: redisConfig.Password,
69+
DB: redisConfig.Database,
2870
}
2971
}

shared/repository/repository.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,9 @@ type Repository interface {
77
Update(id string, data any) (any, error)
88
Delete(id string) error
99
Close() error
10+
HealthCheck() (bool, error)
1011
}
1112

13+
type BaseRepository struct {
14+
providerName string
15+
}

0 commit comments

Comments
 (0)