Initial commit
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user