Files
2025-04-24 02:07:47 +00:00

55 lines
1.4 KiB
Go
Executable File

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
}