sdk: event access time kv helpers.
This commit is contained in:
51
sdk/event_access_time.go
Normal file
51
sdk/event_access_time.go
Normal file
@@ -0,0 +1,51 @@
|
||||
package sdk
|
||||
|
||||
import (
|
||||
"encoding/binary"
|
||||
|
||||
"fiatjaf.com/nostr"
|
||||
)
|
||||
|
||||
const eventAccessTimePrefix = byte('a')
|
||||
|
||||
// makeEventAccessTimeKey creates a key for storing event access time information.
|
||||
// It uses the first 8 bytes of the event ID to create a compact key.
|
||||
func makeEventAccessTimeKey(id nostr.ID) []byte {
|
||||
// format: 'a' + first 8 bytes of event ID
|
||||
key := make([]byte, 9)
|
||||
key[0] = eventAccessTimePrefix
|
||||
copy(key[1:], id[:8])
|
||||
return key
|
||||
}
|
||||
|
||||
// encodeEventAccessTime serializes an EventAccessTime into a binary format.
|
||||
func encodeEventAccessTime(t nostr.Timestamp) []byte {
|
||||
buf := make([]byte, 8)
|
||||
binary.BigEndian.PutUint64(buf[0:8], uint64(t))
|
||||
return buf
|
||||
}
|
||||
|
||||
// decodeEventAccessTime deserializes a binary-encoded EventAccessTime.
|
||||
func decodeEventAccessTime(data []byte) nostr.Timestamp {
|
||||
return nostr.Timestamp(binary.BigEndian.Uint64(data[0:8]))
|
||||
}
|
||||
|
||||
// trackEventAccessTime records the access time for an event.
|
||||
func (sys *System) TrackEventAccessTime(id nostr.ID) {
|
||||
key := makeEventAccessTimeKey(id)
|
||||
sys.KVStore.Update(key, func(data []byte) ([]byte, error) {
|
||||
return encodeEventAccessTime(nostr.Now()), nil
|
||||
})
|
||||
}
|
||||
|
||||
// GetEventAccessTime returns the access times for an event.
|
||||
func (sys *System) GetEventAccessTime(id nostr.ID) nostr.Timestamp {
|
||||
key := makeEventAccessTimeKey(id)
|
||||
|
||||
data, _ := sys.KVStore.Get(key)
|
||||
if data == nil {
|
||||
return 0
|
||||
}
|
||||
|
||||
return decodeEventAccessTime(data)
|
||||
}
|
||||
Reference in New Issue
Block a user