diff options
Diffstat (limited to 'idvoc-2025/CommentsEngine/redisc/redis.go')
| -rw-r--r-- | idvoc-2025/CommentsEngine/redisc/redis.go | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/idvoc-2025/CommentsEngine/redisc/redis.go b/idvoc-2025/CommentsEngine/redisc/redis.go new file mode 100644 index 0000000..88d9a08 --- /dev/null +++ b/idvoc-2025/CommentsEngine/redisc/redis.go @@ -0,0 +1,83 @@ +package redisc + +import ( + "context" + "encoding/json" + "github.com/redis/go-redis/v9" + "log" + "strconv" +) + +var Client *redis.Client + +func getIndex(ctx context.Context) (int, error) { + val, err := Client.Get(ctx, "index").Result() + var i int + if err != nil && err != redis.Nil { + log.Printf("Problem with redis: %s", err) + return -1, err + } else if err == redis.Nil { + i = 0 + } else { + i, err = strconv.Atoi(val) + if err != nil { + log.Printf("Problem in stored data: %s", err) + return -1, err + } + } + return i, nil +} + +func getIndexAndBump(ctx context.Context) (int, error) { + i, err := getIndex(ctx) + if err != nil { + return -1, err + } + err = Client.Set(ctx, "index", strconv.Itoa(i+1), 0).Err() + if err != nil { + log.Printf("Problem with redis while trying to store data: %s", err) + return -1, err + } + return i + 1, err +} + +func StoreComment(comment string) (int, error) { + ctx := context.Background() + i, err := getIndexAndBump(ctx) + if err != nil { + return -1, err + } + err = Client.Set(ctx, "comment"+strconv.Itoa(i), comment, 0).Err() + if err != nil { + log.Printf("Problem with redis while trying to store data: %s", err) + return -1, err + } + return i, err +} + +func GetLatestComments() (string, error) { + messages := make([]string, 0) + ctx := context.Background() + index, err := getIndex(ctx) + if err != nil { + return "", err + } + for i := 0; i < 10; i++ { + if index-i <= 0 { + break + } + val, err := Client.Get(ctx, "comment"+strconv.Itoa(index-i)).Result() + if err != nil && err != redis.Nil { + log.Printf("Problem with redis while trying to retrieve data: %s", err) + return "", err + } else if err == redis.Nil { + continue + } + messages = append(messages, val) + } + msg, err := json.Marshal(messages) + if err != nil { + log.Fatalf("Json issue") + } + return string(msg), err +} |
