package config import ( "database/sql" "log" "time" _ "github.com/mattn/go-sqlite3" // Importar el controlador SQLite ) type StorageConfig struct { DBFile string `yaml:"db_file" env:"STORAGE_DB_FILE"` } // Setup inicializa el almacenamiento utilizando SQLite func (c *StorageConfig) Setup() (*sql.DB, error) { db, err := sql.Open("sqlite3", c.DBFile) if err != nil { log.Fatalf("Error al conectar a la base de datos SQLite: %v", err) return nil, err } // Crear la tabla si no existe createTableQuery := ` CREATE TABLE IF NOT EXISTS storage ( key TEXT PRIMARY KEY, value TEXT, expire_at INTEGER ); ` _, err = db.Exec(createTableQuery) if err != nil { log.Fatalf("Error al crear la tabla de almacenamiento: %v", err) return nil, err } return db, nil } // Función para guardar un valor en el almacenamiento func (c *StorageConfig) Set(db *sql.DB, key string, value string, expireAt int64) error { _, err := db.Exec("INSERT OR REPLACE INTO storage (key, value, expire_at) VALUES (?, ?, ?)", key, value, expireAt) return err } // Función para obtener un valor del almacenamiento func (c *StorageConfig) Get(db *sql.DB, key string) (string, error) { var value string err := db.QueryRow("SELECT value FROM storage WHERE key = ? AND (expire_at IS NULL OR expire_at > ?)", key, time.Now().Unix()).Scan(&value) if err != nil { return "", err } return value, nil }