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 }