From 8fca4cf4c0f092481897bda74331b9baf6f556f7 Mon Sep 17 00:00:00 2001 From: Untone Date: Thu, 22 Feb 2024 10:40:39 +0300 Subject: [PATCH] appdata-patch --- server/memorystore/providers/redis/core.go | 27 ------------ server/memorystore/providers/redis/store.go | 23 ++++++++++ server/resolvers/login.go | 45 ++++++-------------- server/resolvers/session.go | 47 ++++++--------------- 4 files changed, 47 insertions(+), 95 deletions(-) delete mode 100644 server/memorystore/providers/redis/core.go diff --git a/server/memorystore/providers/redis/core.go b/server/memorystore/providers/redis/core.go deleted file mode 100644 index 82a0b88..0000000 --- a/server/memorystore/providers/redis/core.go +++ /dev/null @@ -1,27 +0,0 @@ -package redis - -import ( - "fmt" -) - -// GetUserProfile возвращает профиль пользователя в виде сырого JSON -func (c *provider) GetUserProfile(userId string) (string, error) { - key := fmt.Sprintf("user:%s:profile", userId) - profileJSON, err := c.store.Get(c.ctx, key).Result() - if err != nil { - return "", err - } - - return profileJSON, nil -} - -// GetUserFollows возвращает список подписок пользователя в виде сырого JSON -func (c *provider) GetUserFollows(userId string) (string, error) { - key := fmt.Sprintf("user:%s:follows", userId) - followsJSON, err := c.store.Get(c.ctx, key).Result() - if err != nil { - return "", err - } - - return followsJSON, nil -} diff --git a/server/memorystore/providers/redis/store.go b/server/memorystore/providers/redis/store.go index a1b21db..b7e3642 100644 --- a/server/memorystore/providers/redis/store.go +++ b/server/memorystore/providers/redis/store.go @@ -218,3 +218,26 @@ func (c *provider) GetBoolStoreEnvVariable(key string) (bool, error) { return data == "1", nil } + +// GetUserAppDataFromRedis retrieves user profile and follows from Redis, combines them into a JSON format, +// and assigns the JSON string to the provided user's ID. +func (c *provider) GetUserAppDataFromRedis(userId string) (string, error) { + + // Retrieve user data from Redis + key := fmt.Sprintf("user:%s:author", userId) + authorJSON, err := c.store.Get(c.ctx, key).Result() + if err != nil { + return "", err + } + + key = fmt.Sprintf("user:%s:follows", userId) + followsJSON, err := c.store.Get(c.ctx, key).Result() + if err != nil { + return "", err + } + + // Combine user data into a JSON string + combinedData := fmt.Sprintf(`{"profile": %s, "follows": %s}`, authorJSON, followsJSON) + + return combinedData, nil +} diff --git a/server/resolvers/login.go b/server/resolvers/login.go index e0583ce..997f625 100644 --- a/server/resolvers/login.go +++ b/server/resolvers/login.go @@ -318,41 +318,20 @@ func LoginResolver(ctx context.Context, params model.LoginInput) (*model.AuthRes expiresIn = 1 } - redisURL := os.Getenv(constants.EnvKeyRedisURL) - if redisURL != "" { - log.Info("Initializing Redis provider") - Provider, err := redis.NewRedisProvider(redisURL) - if err != nil { - log.Debug("Failed to init Redis: ", err) - } + redisURL := os.Getenv("REDIS_URL") + if redisURL != "" { + log.Info("Initializing Redis memory store") + RedisProvider, err := redis.NewRedisProvider(redisURL) + if err == nil { + appData, err := RedisProvider.GetUserAppDataFromRedis(user.ID) + if err == nil { + // Assign the combined data to the provided pointer + user.AppData = &appData + } + } - if user.AppData == nil { - user.AppData = make(map[string]interface{}) - } + } - follows, err := Provider.GetUserFollows(user.ID) - if err != nil { - log.Debug("Failed to get follows from Redis: ", err) - } else { - if follows != "" { - user.AppData["follows"] = follows - } else { - log.Debug("Follows data from Redis is empty") - } - } - - author, err := Provider.GetUserProfile(user.ID) - if err != nil { - log.Debug("Failed to get author from Redis: ", err) - } else { - if author != "" { - user.AppData["author"] = author - } else { - log.Debug("Author data from Redis is empty") - } - } - } - res = &model.AuthResponse{ Message: `Logged in successfully`, AccessToken: &authToken.AccessToken.Token, diff --git a/server/resolvers/session.go b/server/resolvers/session.go index 0f9f172..750249d 100644 --- a/server/resolvers/session.go +++ b/server/resolvers/session.go @@ -5,7 +5,6 @@ import ( "errors" "fmt" "os" - "os/user" "time" "github.com/google/uuid" @@ -93,40 +92,18 @@ func SessionResolver(ctx context.Context, params *model.SessionQueryInput) (*mod expiresIn = 1 } - redisURL := os.Getenv(constants.EnvKeyRedisURL) - if redisURL != "" { - log.Info("Initializing Redis provider") - Provider, err := redis.NewRedisProvider(redisURL) - if err != nil { - log.Debug("Failed to init Redis: ", err) - } - - if user.AppData == nil { - user.AppData = make(map[string]interface{}) - } - - follows, err := Provider.GetUserFollows(user.ID) - if err != nil { - log.Debug("Failed to get follows from Redis: ", err) - } else { - if follows != "" { - user.AppData["follows"] = follows - } else { - log.Debug("Follows data from Redis is empty") - } - } - - author, err := Provider.GetUserProfile(user.ID) - if err != nil { - log.Debug("Failed to get author from Redis: ", err) - } else { - if author != "" { - user.AppData["author"] = author - } else { - log.Debug("Author data from Redis is empty") - } - } - } + redisURL := os.Getenv("REDIS_URL") + if redisURL != "" { + log.Info("Initializing Redis memory store") + RedisProvider, err := redis.NewRedisProvider(redisURL) + if err != nil { + appData, err := RedisProvider.GetUserAppDataFromRedis(user.ID) + if err == nil { + // Assign the combined data to the provided pointer + user.AppData = &appData + } + } + } res = &model.AuthResponse{ Message: `Session token refreshed`,