package sqlite import ( "database/sql" "fmt" "os" "path/filepath" _ "modernc.org/sqlite" ) type Database struct { conn *sql.DB } func NewDatabase(dbPath string) (*Database, error) { dir := filepath.Dir(dbPath) if dir != "." && dir != ":" { if err := os.MkdirAll(dir, 0755); err != nil { return nil, fmt.Errorf("failed to create data directory: %w", err) } } conn, err := sql.Open("sqlite", dbPath) if err != nil { return nil, fmt.Errorf("failed to open database: %w", err) } conn.SetMaxOpenConns(1) if err := conn.Ping(); err != nil { return nil, fmt.Errorf("failed to ping database: %w", err) } if err := RunMigrations(conn); err != nil { return nil, fmt.Errorf("failed to run migrations: %w", err) } return &Database{conn: conn}, nil } func (db *Database) Close() error { return db.conn.Close() } func (db *Database) Conn() *sql.DB { return db.conn }