Files

48 lines
846 B
Go

package storage
import (
"context"
"database/sql"
_ "embed"
"fmt"
_ "modernc.org/sqlite"
)
//go:embed migrations/001_create_audit_records.sql
var auditMigration string
func OpenSQLite(path string) (*sql.DB, error) {
db, err := sql.Open("sqlite", path)
if err != nil {
return nil, fmt.Errorf("open sqlite database: %w", err)
}
// SQLite permits only one writer at a time.
// Keeping a small connection pool makes behavior predictable
// for this assessment-sized service.
db.SetMaxOpenConns(1)
if err := db.Ping(); err != nil {
db.Close()
return nil, fmt.Errorf("ping sqlite database: %w", err)
}
return db, nil
}
func Migrate(
ctx context.Context,
db *sql.DB,
) error {
if _, err := db.ExecContext(
ctx,
auditMigration,
); err != nil {
return fmt.Errorf("apply audit migration: %w", err)
}
return nil
}