55 lines
1.4 KiB
Go
Executable File
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
|
|
}
|