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