feat: redis configuration & client
This commit is contained in:
@ -8,6 +8,7 @@ import (
|
|||||||
|
|
||||||
"gitea.local/admin/hspguard/internal/admin"
|
"gitea.local/admin/hspguard/internal/admin"
|
||||||
"gitea.local/admin/hspguard/internal/auth"
|
"gitea.local/admin/hspguard/internal/auth"
|
||||||
|
"gitea.local/admin/hspguard/internal/cache"
|
||||||
"gitea.local/admin/hspguard/internal/config"
|
"gitea.local/admin/hspguard/internal/config"
|
||||||
"gitea.local/admin/hspguard/internal/oauth"
|
"gitea.local/admin/hspguard/internal/oauth"
|
||||||
"gitea.local/admin/hspguard/internal/repository"
|
"gitea.local/admin/hspguard/internal/repository"
|
||||||
@ -21,14 +22,16 @@ type APIServer struct {
|
|||||||
addr string
|
addr string
|
||||||
repo *repository.Queries
|
repo *repository.Queries
|
||||||
storage *storage.FileStorage
|
storage *storage.FileStorage
|
||||||
|
cache *cache.Client
|
||||||
cfg *config.AppConfig
|
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{
|
return &APIServer{
|
||||||
addr: addr,
|
addr: addr,
|
||||||
repo: db,
|
repo: db,
|
||||||
storage: minio,
|
storage: minio,
|
||||||
|
cache: cache,
|
||||||
cfg: cfg,
|
cfg: cfg,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -47,7 +50,7 @@ func (s *APIServer) Run() error {
|
|||||||
userHandler := user.NewUserHandler(s.repo, s.storage, s.cfg)
|
userHandler := user.NewUserHandler(s.repo, s.storage, s.cfg)
|
||||||
userHandler.RegisterRoutes(r)
|
userHandler.RegisterRoutes(r)
|
||||||
|
|
||||||
authHandler := auth.NewAuthHandler(s.repo, s.cfg)
|
authHandler := auth.NewAuthHandler(s.repo, s.cache, s.cfg)
|
||||||
authHandler.RegisterRoutes(r)
|
authHandler.RegisterRoutes(r)
|
||||||
|
|
||||||
oauthHandler.RegisterRoutes(r)
|
oauthHandler.RegisterRoutes(r)
|
||||||
|
@ -7,6 +7,7 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
|
|
||||||
"gitea.local/admin/hspguard/cmd/hspguard/api"
|
"gitea.local/admin/hspguard/cmd/hspguard/api"
|
||||||
|
"gitea.local/admin/hspguard/internal/cache"
|
||||||
"gitea.local/admin/hspguard/internal/config"
|
"gitea.local/admin/hspguard/internal/config"
|
||||||
"gitea.local/admin/hspguard/internal/repository"
|
"gitea.local/admin/hspguard/internal/repository"
|
||||||
"gitea.local/admin/hspguard/internal/storage"
|
"gitea.local/admin/hspguard/internal/storage"
|
||||||
@ -41,9 +42,11 @@ func main() {
|
|||||||
|
|
||||||
fStorage := storage.New(&cfg)
|
fStorage := storage.New(&cfg)
|
||||||
|
|
||||||
|
cache := cache.NewClient(&cfg)
|
||||||
|
|
||||||
user.EnsureAdminUser(ctx, &cfg, repo)
|
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 {
|
if err := server.Run(); err != nil {
|
||||||
log.Fatalln("ERR: Failed to start server:", err)
|
log.Fatalln("ERR: Failed to start server:", err)
|
||||||
}
|
}
|
||||||
|
36
internal/cache/mod.go
vendored
Normal file
36
internal/cache/mod.go
vendored
Normal file
@ -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)
|
||||||
|
}
|
@ -14,6 +14,7 @@ type AppConfig struct {
|
|||||||
Host string `env:"GUARD_HOST" default:"127.0.0.1"`
|
Host string `env:"GUARD_HOST" default:"127.0.0.1"`
|
||||||
Uri string `env:"GUARD_URI" default:"http://127.0.0.1:3001"`
|
Uri string `env:"GUARD_URI" default:"http://127.0.0.1:3001"`
|
||||||
DatabaseURL string `env:"GUARD_DB_URL" required:"true"`
|
DatabaseURL string `env:"GUARD_DB_URL" required:"true"`
|
||||||
|
RedisURL string `env:"GUARD_REDIS_URL" default:"redis://localhost:6379/0"`
|
||||||
Admin AdminConfig
|
Admin AdminConfig
|
||||||
Jwt JwtConfig
|
Jwt JwtConfig
|
||||||
Minio MinioConfig
|
Minio MinioConfig
|
||||||
|
Reference in New Issue
Block a user