markers.go raw
1 //go:build !(js && wasm)
2
3 package database
4
5 import (
6 "github.com/dgraph-io/badger/v4"
7 "next.orly.dev/pkg/lol/chk"
8 )
9
10 const (
11 markerPrefix = "MARKER:"
12 )
13
14 // SetMarker stores an arbitrary marker in the database
15 func (d *D) SetMarker(key string, value []byte) (err error) {
16 markerKey := []byte(markerPrefix + key)
17
18 err = d.Update(func(txn *badger.Txn) error {
19 return txn.Set(markerKey, value)
20 })
21
22 return
23 }
24
25 // GetMarker retrieves an arbitrary marker from the database
26 func (d *D) GetMarker(key string) (value []byte, err error) {
27 markerKey := []byte(markerPrefix + key)
28
29 err = d.View(func(txn *badger.Txn) error {
30 item, err := txn.Get(markerKey)
31 if err != nil {
32 return err
33 }
34
35 value, err = item.ValueCopy(nil)
36 return err
37 })
38
39 return
40 }
41
42 // HasMarker checks if a marker exists in the database
43 func (d *D) HasMarker(key string) (exists bool) {
44 markerKey := []byte(markerPrefix + key)
45
46 err := d.View(func(txn *badger.Txn) error {
47 _, err := txn.Get(markerKey)
48 return err
49 })
50
51 exists = !chk.E(err)
52 return
53 }
54
55 // DeleteMarker removes a marker from the database
56 func (d *D) DeleteMarker(key string) (err error) {
57 markerKey := []byte(markerPrefix + key)
58
59 err = d.Update(func(txn *badger.Txn) error {
60 return txn.Delete(markerKey)
61 })
62
63 return
64 }