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  }