Skip to content

Commit 823e481

Browse files
committed
refactor(kv): interface
1 parent 88cf287 commit 823e481

9 files changed

Lines changed: 65 additions & 54 deletions

File tree

app/dl/files.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ type fMessage struct {
3131
Text interface{} `mapstructure:"text"`
3232
}
3333

34-
func parseFiles(ctx context.Context, client *tg.Client, kvd *kv.KV, files []string) ([]*dialog, error) {
34+
func parseFiles(ctx context.Context, client *tg.Client, kvd kv.KV, files []string) ([]*dialog, error) {
3535
dialogs := make([]*dialog, 0, len(files))
3636

3737
for _, file := range files {
@@ -46,7 +46,7 @@ func parseFiles(ctx context.Context, client *tg.Client, kvd *kv.KV, files []stri
4646
return dialogs, nil
4747
}
4848

49-
func parseFile(ctx context.Context, client *tg.Client, kvd *kv.KV, file string) (*dialog, error) {
49+
func parseFile(ctx context.Context, client *tg.Client, kvd kv.KV, file string) (*dialog, error) {
5050
f, err := os.Open(file)
5151
if err != nil {
5252
return nil, err
@@ -105,7 +105,7 @@ func collect(ctx context.Context, r io.Reader, peer peers.Peer) (*dialog, error)
105105
return m, nil
106106
}
107107

108-
func getChatInfo(ctx context.Context, client *tg.Client, kvd *kv.KV, r io.Reader) (peers.Peer, error) {
108+
func getChatInfo(ctx context.Context, client *tg.Client, kvd kv.KV, r io.Reader) (peers.Peer, error) {
109109
d := jstream.NewDecoder(r, 1).EmitKV()
110110

111111
chatID := int64(0)

app/dl/iter.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ type fileTemplate struct {
3838
DownloadDate int64
3939
}
4040

41-
func newIter(client *tg.Client, kvd *kv.KV, tmpl string, items ...[]*dialog) (*iter, error) {
41+
func newIter(client *tg.Client, kvd kv.KV, tmpl string, items ...[]*dialog) (*iter, error) {
4242
t, err := template.New("dl").Parse(tmpl)
4343
if err != nil {
4444
return nil, err

app/dl/urls.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import (
99
"github.com/iyear/tdl/pkg/utils"
1010
)
1111

12-
func parseURLs(ctx context.Context, client *tg.Client, kvd *kv.KV, urls []string) ([]*dialog, error) {
12+
func parseURLs(ctx context.Context, client *tg.Client, kvd kv.KV, urls []string) ([]*dialog, error) {
1313
manager := peers.Options{Storage: storage.NewPeers(kvd)}.Build(client)
1414
msgMap := make(map[int64]*dialog)
1515

app/internal/tgc/tgc.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import (
1717
"time"
1818
)
1919

20-
func New(login bool, middlewares ...telegram.Middleware) (*telegram.Client, *kv.KV, error) {
20+
func New(login bool, middlewares ...telegram.Middleware) (*telegram.Client, kv.KV, error) {
2121
kvd, err := kv.New(kv.Options{
2222
Path: consts.KVPath,
2323
NS: viper.GetString(consts.FlagNamespace),
@@ -58,10 +58,10 @@ func New(login bool, middlewares ...telegram.Middleware) (*telegram.Client, *kv.
5858
}), kvd, nil
5959
}
6060

61-
func NoLogin(middlewares ...telegram.Middleware) (*telegram.Client, *kv.KV, error) {
61+
func NoLogin(middlewares ...telegram.Middleware) (*telegram.Client, kv.KV, error) {
6262
return New(false, append(middlewares, floodwait.NewSimpleWaiter())...)
6363
}
6464

65-
func Login(middlewares ...telegram.Middleware) (*telegram.Client, *kv.KV, error) {
65+
func Login(middlewares ...telegram.Middleware) (*telegram.Client, kv.KV, error) {
6666
return New(true, append(middlewares, floodwait.NewSimpleWaiter())...)
6767
}

pkg/kv/bolt.go

Lines changed: 3 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,15 @@
11
package kv
22

33
import (
4-
"errors"
5-
"github.com/iyear/tdl/pkg/validator"
64
"go.etcd.io/bbolt"
7-
"os"
8-
"time"
95
)
106

11-
var (
12-
ErrNotFound = errors.New("key not found")
13-
)
14-
15-
type Options struct {
16-
Path string `validate:"required"`
17-
NS string `validate:"required"`
18-
}
19-
20-
type KV struct {
7+
type Bolt struct {
218
ns []byte
229
db *bbolt.DB
2310
}
2411

25-
func New(opts Options) (*KV, error) {
26-
if err := validator.Struct(&opts); err != nil {
27-
return nil, err
28-
}
29-
30-
db, err := bbolt.Open(opts.Path, os.ModePerm, &bbolt.Options{
31-
Timeout: time.Second,
32-
NoGrowSync: false,
33-
FreelistType: bbolt.FreelistArrayType,
34-
})
35-
if err != nil {
36-
return nil, err
37-
}
38-
39-
if err = db.Update(func(tx *bbolt.Tx) error {
40-
_, err := tx.CreateBucketIfNotExists([]byte(opts.NS))
41-
return err
42-
}); err != nil {
43-
return nil, err
44-
}
45-
46-
return &KV{db: db, ns: []byte(opts.NS)}, nil
47-
}
48-
49-
func (b *KV) Get(key string) ([]byte, error) {
12+
func (b *Bolt) Get(key string) ([]byte, error) {
5013
var val []byte
5114

5215
if err := b.db.View(func(tx *bbolt.Tx) error {
@@ -62,7 +25,7 @@ func (b *KV) Get(key string) ([]byte, error) {
6225
return val, nil
6326
}
6427

65-
func (b *KV) Set(key string, val []byte) error {
28+
func (b *Bolt) Set(key string, val []byte) error {
6629
return b.db.Update(func(tx *bbolt.Tx) error {
6730
return tx.Bucket(b.ns).Put([]byte(key), val)
6831
})

pkg/kv/kv.go

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package kv
2+
3+
import (
4+
"errors"
5+
"github.com/iyear/tdl/pkg/validator"
6+
"go.etcd.io/bbolt"
7+
"os"
8+
"time"
9+
)
10+
11+
var (
12+
ErrNotFound = errors.New("key not found")
13+
)
14+
15+
type KV interface {
16+
Get(key string) ([]byte, error)
17+
Set(key string, value []byte) error
18+
}
19+
20+
type Options struct {
21+
NS string `validate:"required"`
22+
Path string `validate:"required"`
23+
}
24+
25+
func New(opts Options) (KV, error) {
26+
if err := validator.Struct(&opts); err != nil {
27+
return nil, err
28+
}
29+
30+
db, err := bbolt.Open(opts.Path, os.ModePerm, &bbolt.Options{
31+
Timeout: time.Second,
32+
NoGrowSync: false,
33+
FreelistType: bbolt.FreelistArrayType,
34+
})
35+
if err != nil {
36+
return nil, err
37+
}
38+
39+
if err = db.Update(func(tx *bbolt.Tx) error {
40+
_, err := tx.CreateBucketIfNotExists([]byte(opts.NS))
41+
return err
42+
}); err != nil {
43+
return nil, err
44+
}
45+
46+
return &Bolt{db: db, ns: []byte(opts.NS)}, nil
47+
}

pkg/storage/peers.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@ import (
1010
)
1111

1212
type Peers struct {
13-
kv *kv.KV
13+
kv kv.KV
1414
}
1515

16-
func NewPeers(kv *kv.KV) *Peers {
16+
func NewPeers(kv kv.KV) peers.Storage {
1717
return &Peers{kv: kv}
1818
}
1919

pkg/storage/session.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,17 @@ package storage
33
import (
44
"context"
55
"errors"
6+
"github.com/gotd/td/telegram"
67
"github.com/iyear/tdl/pkg/key"
78
"github.com/iyear/tdl/pkg/kv"
89
)
910

1011
type Session struct {
11-
kv *kv.KV
12+
kv kv.KV
1213
login bool
1314
}
1415

15-
func NewSession(kv *kv.KV, login bool) *Session {
16+
func NewSession(kv kv.KV, login bool) telegram.SessionStorage {
1617
return &Session{kv: kv, login: login}
1718
}
1819

pkg/storage/state.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@ import (
99
)
1010

1111
type State struct {
12-
kv *kv.KV
12+
kv kv.KV
1313
}
1414

15-
func NewState(kv *kv.KV) *State {
15+
func NewState(kv kv.KV) updates.StateStorage {
1616
return &State{kv: kv}
1717
}
1818

0 commit comments

Comments
 (0)