diff --git a/cmd/hspguard/api/api.go b/cmd/hspguard/api/api.go index 4abcd22..b84d996 100644 --- a/cmd/hspguard/api/api.go +++ b/cmd/hspguard/api/api.go @@ -8,6 +8,7 @@ import ( "gitea.local/admin/hspguard/internal/admin" "gitea.local/admin/hspguard/internal/auth" + "gitea.local/admin/hspguard/internal/cache" "gitea.local/admin/hspguard/internal/config" "gitea.local/admin/hspguard/internal/oauth" "gitea.local/admin/hspguard/internal/repository" @@ -21,14 +22,16 @@ type APIServer struct { addr string repo *repository.Queries storage *storage.FileStorage + cache *cache.Client cfg *config.AppConfig } -func NewAPIServer(addr string, db *repository.Queries, minio *storage.FileStorage, cfg *config.AppConfig) *APIServer { +func NewAPIServer(addr string, db *repository.Queries, minio *storage.FileStorage, cache *cache.Client, cfg *config.AppConfig) *APIServer { return &APIServer{ addr: addr, repo: db, storage: minio, + cache: cache, cfg: cfg, } } @@ -47,7 +50,7 @@ func (s *APIServer) Run() error { userHandler := user.NewUserHandler(s.repo, s.storage, s.cfg) userHandler.RegisterRoutes(r) - authHandler := auth.NewAuthHandler(s.repo, s.cfg) + authHandler := auth.NewAuthHandler(s.repo, s.cache, s.cfg) authHandler.RegisterRoutes(r) oauthHandler.RegisterRoutes(r) diff --git a/cmd/hspguard/main.go b/cmd/hspguard/main.go index 9bf8810..6d68f01 100644 --- a/cmd/hspguard/main.go +++ b/cmd/hspguard/main.go @@ -7,6 +7,7 @@ import ( "os" "gitea.local/admin/hspguard/cmd/hspguard/api" + "gitea.local/admin/hspguard/internal/cache" "gitea.local/admin/hspguard/internal/config" "gitea.local/admin/hspguard/internal/repository" "gitea.local/admin/hspguard/internal/storage" @@ -41,9 +42,11 @@ func main() { fStorage := storage.New(&cfg) + cache := cache.NewClient(&cfg) + user.EnsureAdminUser(ctx, &cfg, repo) - server := api.NewAPIServer(fmt.Sprintf("%s:%s", cfg.Host, cfg.Port), repo, fStorage, &cfg) + server := api.NewAPIServer(fmt.Sprintf("%s:%s", cfg.Host, cfg.Port), repo, fStorage, cache, &cfg) if err := server.Run(); err != nil { log.Fatalln("ERR: Failed to start server:", err) } diff --git a/internal/cache/mod.go b/internal/cache/mod.go new file mode 100644 index 0000000..70ad834 --- /dev/null +++ b/internal/cache/mod.go @@ -0,0 +1,36 @@ +package cache + +import ( + "log" + "time" + + "gitea.local/admin/hspguard/internal/config" + "github.com/redis/go-redis/v9" + "golang.org/x/net/context" +) + +type Client struct { + rClient *redis.Client +} + +func NewClient(cfg *config.AppConfig) *Client { + opts, err := redis.ParseURL(cfg.RedisURL) + if err != nil { + log.Fatalln("ERR: Failed to get redis options:", err) + return nil + } + + client := redis.NewClient(opts) + + return &Client{ + rClient: client, + } +} + +func (c *Client) Set(ctx context.Context, key string, value any, expiration time.Duration) *redis.StatusCmd { + return c.rClient.Set(ctx, key, value, expiration) +} + +func (c *Client) Get(ctx context.Context, key string) *redis.StringCmd { + return c.rClient.Get(ctx, key) +} diff --git a/internal/config/mod.go b/internal/config/mod.go index 0556eab..5e4017a 100644 --- a/internal/config/mod.go +++ b/internal/config/mod.go @@ -14,6 +14,7 @@ type AppConfig struct { Host string `env:"GUARD_HOST" default:"127.0.0.1"` Uri string `env:"GUARD_URI" default:"http://127.0.0.1:3001"` DatabaseURL string `env:"GUARD_DB_URL" required:"true"` + RedisURL string `env:"GUARD_REDIS_URL" default:"redis://localhost:6379/0"` Admin AdminConfig Jwt JwtConfig Minio MinioConfig