refactoring
This commit is contained in:
69
cmd/db.go
Normal file
69
cmd/db.go
Normal file
@@ -0,0 +1,69 @@
|
||||
package cmd
|
||||
|
||||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
"time"
|
||||
|
||||
_ "modernc.org/sqlite"
|
||||
)
|
||||
|
||||
type DB struct {
|
||||
*sql.DB
|
||||
}
|
||||
|
||||
type Cache DB
|
||||
|
||||
var cacheAddr = "/tmp/turbomaps-er.db"
|
||||
|
||||
func NewCache(ctx context.Context) Cache {
|
||||
ctx, can := context.WithTimeout(ctx, 5*time.Second)
|
||||
defer can()
|
||||
|
||||
db, err := sql.Open("sqlite", cacheAddr)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
if err := db.PingContext(ctx); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
return Cache(DB{DB: db})
|
||||
}
|
||||
|
||||
func (db Cache) Get(ctx context.Context, k string) ([]byte, error) {
|
||||
if err := db.init(ctx); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
row := db.QueryRowContext(ctx, `
|
||||
SELECT v FROM cache WHERE k=$1
|
||||
`, k)
|
||||
|
||||
var v []byte
|
||||
if err := row.Scan(&v); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return v, row.Err()
|
||||
}
|
||||
|
||||
func (db Cache) Set(ctx context.Context, k string, v []byte) error {
|
||||
if err := db.init(ctx); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
_, err := db.ExecContext(ctx, `
|
||||
INSERT INTO cache (k, v) VALUES ($1, $2)
|
||||
ON CONFLICT DO UPDATE SET v=$2 WHERE k=$1
|
||||
`, k, v)
|
||||
return err
|
||||
}
|
||||
|
||||
func (db Cache) init(ctx context.Context) error {
|
||||
_, err := db.ExecContext(ctx, `
|
||||
CREATE TABLE IF NOT EXISTS cache(k TEXT PRIMARY KEY, v TEXT)
|
||||
`)
|
||||
return err
|
||||
}
|
||||
Reference in New Issue
Block a user