go integration and wikipedia

This commit is contained in:
jlimolina 2026-03-28 18:30:07 +01:00
parent 47a252e339
commit ee90335b92
7828 changed files with 1307913 additions and 20807 deletions

72
backend/internal/cache/redis.go vendored Normal file
View file

@ -0,0 +1,72 @@
package cache
import (
"context"
"encoding/json"
"fmt"
"time"
"github.com/redis/go-redis/v9"
)
var Client *redis.Client
func Connect(redisURL string) error {
opt, err := redis.ParseURL(redisURL)
if err != nil {
return fmt.Errorf("failed to parse redis URL: %w", err)
}
Client = redis.NewClient(opt)
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
if err = Client.Ping(ctx).Err(); err != nil {
return fmt.Errorf("failed to ping redis: %w", err)
}
return nil
}
func Close() {
if Client != nil {
Client.Close()
}
}
func GetClient() *redis.Client {
return Client
}
func SearchKey(query, lang string, page, perPage int) string {
return fmt.Sprintf("search:%s:%s:%d:%d", query, lang, page, perPage)
}
func NewsKey(newsID int64, lang string) string {
return fmt.Sprintf("news:%d:%s", newsID, lang)
}
func FeedKey(feedID int64) string {
return fmt.Sprintf("feed:%d", feedID)
}
func Set(ctx context.Context, key string, value interface{}, expiration time.Duration) error {
data, err := json.Marshal(value)
if err != nil {
return err
}
return Client.Set(ctx, key, data, expiration).Err()
}
func Get(ctx context.Context, key string) (string, error) {
return Client.Get(ctx, key).Result()
}
func Unmarshal(data []byte, v interface{}) error {
return json.Unmarshal(data, v)
}
func Marshal(v interface{}) ([]byte, error) {
return json.Marshal(v)
}