get-fullidpubkey-by-serial.go raw
1 //go:build !(js && wasm)
2
3 package database
4
5 import (
6 "bytes"
7
8 "github.com/dgraph-io/badger/v4"
9 "next.orly.dev/pkg/lol/chk"
10 "next.orly.dev/pkg/database/indexes"
11 "next.orly.dev/pkg/database/indexes/types"
12 "next.orly.dev/pkg/interfaces/store"
13 )
14
15 func (d *D) GetFullIdPubkeyBySerial(ser *types.Uint40) (
16 fidpk *store.IdPkTs, err error,
17 ) {
18 if err = d.View(
19 func(txn *badger.Txn) (err error) {
20 buf := new(bytes.Buffer)
21 if err = indexes.FullIdPubkeyEnc(
22 ser, nil, nil, nil,
23 ).MarshalWrite(buf); chk.E(err) {
24 return
25 }
26 prf := buf.Bytes()
27 it := txn.NewIterator(
28 badger.IteratorOptions{
29 Prefix: prf,
30 },
31 )
32 defer it.Close()
33 it.Seek(prf)
34 if it.Valid() {
35 item := it.Item()
36 key := item.Key()
37 ser, fid, p, ca := indexes.FullIdPubkeyVars()
38 buf2 := bytes.NewBuffer(key)
39 if err = indexes.FullIdPubkeyDec(
40 ser, fid, p, ca,
41 ).UnmarshalRead(buf2); chk.E(err) {
42 return
43 }
44 idpkts := store.NewIdPkTs(
45 fid.Bytes(),
46 p.Bytes(),
47 int64(ca.Get()),
48 ser.Get(),
49 )
50 fidpk = &idpkts
51 }
52 return
53 },
54 ); chk.E(err) {
55 return
56 }
57 return
58 }
59