package database import ( "database/sql" "fmt" _ "github.com/mattn/go-sqlite3" ) // DB wraps the database connection and provides methods for database operations type DB struct { conn *sql.DB } // NewDB creates a new database connection func NewDB(dbPath string) (*DB, error) { conn, err := sql.Open("sqlite3", dbPath) if err != nil { return nil, fmt.Errorf("failed to open database: %w", err) } db := &DB{conn: conn} // Create tables if err := db.createTables(); err != nil { conn.Close() return nil, fmt.Errorf("failed to create tables: %w", err) } return db, nil } // Close closes the database connection func (db *DB) Close() error { return db.conn.Close() } // GetConnection returns the underlying database connection func (db *DB) GetConnection() *sql.DB { return db.conn } // createTables creates the necessary database tables func (db *DB) createTables() error { query := ` CREATE TABLE IF NOT EXISTS firmware ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, version TEXT NOT NULL, size INTEGER NOT NULL, labels TEXT NOT NULL, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, UNIQUE(name, version) );` if _, err := db.conn.Exec(query); err != nil { return err } return nil }