2022-07-25 13:01:37 +02:00
|
|
|
## This module defines a message store interface. Implementations of
|
|
|
|
|
## MessageStore are used by the `WakuStore` protocol to store and
|
|
|
|
|
## retrieve historical messages
|
2022-11-04 10:52:27 +01:00
|
|
|
when (NimMajor, NimMinor) < (1, 4):
|
|
|
|
|
{.push raises: [Defect].}
|
|
|
|
|
else:
|
|
|
|
|
{.push raises: [].}
|
2021-07-14 19:58:46 +02:00
|
|
|
|
2021-01-22 11:39:16 +02:00
|
|
|
import
|
2022-09-26 11:50:15 +02:00
|
|
|
std/[options, times],
|
|
|
|
|
stew/results
|
2022-08-01 14:09:41 +02:00
|
|
|
import
|
2022-11-09 18:50:18 +01:00
|
|
|
../../utils/time,
|
2022-09-28 13:36:05 +02:00
|
|
|
../waku_message,
|
2022-11-09 18:50:18 +01:00
|
|
|
./common
|
2021-01-22 11:39:16 +02:00
|
|
|
|
|
|
|
|
|
2022-08-01 14:09:41 +02:00
|
|
|
type
|
2021-01-22 11:39:16 +02:00
|
|
|
MessageStoreResult*[T] = Result[T, string]
|
2022-08-01 14:09:41 +02:00
|
|
|
|
2022-11-09 18:50:18 +01:00
|
|
|
MessageStoreRow* = (PubsubTopic, WakuMessage, seq[byte], Timestamp)
|
2021-01-22 11:39:16 +02:00
|
|
|
|
|
|
|
|
MessageStore* = ref object of RootObj
|
|
|
|
|
|
2022-07-25 13:01:37 +02:00
|
|
|
|
2021-01-22 11:39:16 +02:00
|
|
|
# MessageStore interface
|
2022-11-09 18:50:18 +01:00
|
|
|
|
2022-11-09 09:55:47 +01:00
|
|
|
method put*(ms: MessageStore, pubsubTopic: PubsubTopic, message: WakuMessage, digest: MessageDigest, receivedTime: Timestamp): MessageStoreResult[void] {.base.} = discard
|
2022-09-26 11:50:15 +02:00
|
|
|
|
2022-11-09 09:55:47 +01:00
|
|
|
method put*(ms: MessageStore, pubsubTopic: PubsubTopic, message: WakuMessage): MessageStoreResult[void] {.base.} =
|
2022-09-26 11:50:15 +02:00
|
|
|
let
|
|
|
|
|
digest = computeDigest(message)
|
2022-10-05 17:58:24 +02:00
|
|
|
receivedTime = if message.timestamp > 0: message.timestamp
|
2022-11-09 18:50:18 +01:00
|
|
|
else: getNanosecondTime(getTime().toUnixFloat())
|
2022-09-26 11:50:15 +02:00
|
|
|
|
|
|
|
|
ms.put(pubsubTopic, message, digest, receivedTime)
|
|
|
|
|
|
2022-08-01 14:09:41 +02:00
|
|
|
|
2022-08-01 18:21:11 +02:00
|
|
|
method getAllMessages*(ms: MessageStore): MessageStoreResult[seq[MessageStoreRow]] {.base.} = discard
|
2022-08-01 14:09:41 +02:00
|
|
|
|
|
|
|
|
method getMessagesByHistoryQuery*(
|
2022-08-01 18:21:11 +02:00
|
|
|
ms: MessageStore,
|
2022-08-01 14:09:41 +02:00
|
|
|
contentTopic = none(seq[ContentTopic]),
|
2022-11-09 18:50:18 +01:00
|
|
|
pubsubTopic = none(PubsubTopic),
|
|
|
|
|
cursor = none(HistoryCursor),
|
2022-08-01 14:09:41 +02:00
|
|
|
startTime = none(Timestamp),
|
|
|
|
|
endTime = none(Timestamp),
|
2022-09-27 11:47:25 +02:00
|
|
|
maxPageSize = DefaultPageSize,
|
2022-08-01 14:09:41 +02:00
|
|
|
ascendingOrder = true
|
2022-10-03 17:36:17 +02:00
|
|
|
): MessageStoreResult[seq[MessageStoreRow]] {.base.} = discard
|
2022-09-09 16:31:33 +02:00
|
|
|
|
2022-09-15 21:12:13 +02:00
|
|
|
|
|
|
|
|
# Store manipulation
|
|
|
|
|
|
2022-09-15 18:13:30 +02:00
|
|
|
method getMessagesCount*(ms: MessageStore): MessageStoreResult[int64] {.base.} = discard
|
2022-09-15 21:12:13 +02:00
|
|
|
|
|
|
|
|
method getOldestMessageTimestamp*(ms: MessageStore): MessageStoreResult[Timestamp] {.base.} = discard
|
|
|
|
|
|
|
|
|
|
method getNewestMessageTimestamp*(ms: MessageStore): MessageStoreResult[Timestamp] {.base.} = discard
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
method deleteMessagesOlderThanTimestamp*(ms: MessageStore, ts: Timestamp): MessageStoreResult[void] {.base.} = discard
|
|
|
|
|
|
|
|
|
|
method deleteOldestMessagesNotWithinLimit*(ms: MessageStore, limit: int): MessageStoreResult[void] {.base.} = discard
|