Handle messages with the same received_at
This commit is contained in:
parent
82bf517a69
commit
e536929e35
5 changed files with 60 additions and 19 deletions
|
@ -969,10 +969,12 @@ async function getOlderMessagesByConversation(
|
|||
{
|
||||
limit = 100,
|
||||
receivedAt = Number.MAX_VALUE,
|
||||
messageId,
|
||||
MessageCollection,
|
||||
}: {
|
||||
limit?: number;
|
||||
receivedAt?: number;
|
||||
messageId?: string;
|
||||
MessageCollection: BackboneMessageCollectionType;
|
||||
}
|
||||
) {
|
||||
|
@ -981,6 +983,7 @@ async function getOlderMessagesByConversation(
|
|||
{
|
||||
limit,
|
||||
receivedAt,
|
||||
messageId,
|
||||
}
|
||||
);
|
||||
|
||||
|
|
|
@ -197,7 +197,7 @@ export type ServerInterface = DataInterface & {
|
|||
getMessagesBySentAt: (sentAt: number) => Promise<Array<MessageType>>;
|
||||
getOlderMessagesByConversation: (
|
||||
conversationId: string,
|
||||
options?: { limit?: number; receivedAt?: number }
|
||||
options?: { limit?: number; receivedAt?: number; messageId?: string }
|
||||
) => Promise<Array<MessageTypeUnhydrated>>;
|
||||
getNewerMessagesByConversation: (
|
||||
conversationId: string,
|
||||
|
|
|
@ -2598,21 +2598,45 @@ async function getOlderMessagesByConversation(
|
|||
{
|
||||
limit = 100,
|
||||
receivedAt = Number.MAX_VALUE,
|
||||
}: { limit?: number; receivedAt?: number } = {}
|
||||
messageId,
|
||||
}: { limit?: number; receivedAt?: number; messageId?: string } = {}
|
||||
) {
|
||||
if (receivedAt !== Number.MAX_VALUE && !messageId) {
|
||||
throw new Error('If receivedAt is supplied, messageId should be as well');
|
||||
}
|
||||
|
||||
const db = getInstance();
|
||||
const rows = await db.all(
|
||||
`SELECT json FROM messages WHERE
|
||||
let rows;
|
||||
|
||||
if (messageId) {
|
||||
rows = await db.all(
|
||||
`SELECT json FROM messages WHERE
|
||||
conversationId = $conversationId AND
|
||||
received_at <= $received_at AND
|
||||
id != $messageId
|
||||
ORDER BY received_at DESC
|
||||
LIMIT $limit;`,
|
||||
{
|
||||
$conversationId: conversationId,
|
||||
$received_at: receivedAt,
|
||||
$limit: limit,
|
||||
$messageId: messageId,
|
||||
}
|
||||
);
|
||||
} else {
|
||||
rows = await db.all(
|
||||
`SELECT json FROM messages WHERE
|
||||
conversationId = $conversationId AND
|
||||
received_at < $received_at
|
||||
ORDER BY received_at DESC
|
||||
LIMIT $limit;`,
|
||||
{
|
||||
$conversationId: conversationId,
|
||||
$received_at: receivedAt,
|
||||
$limit: limit,
|
||||
}
|
||||
);
|
||||
{
|
||||
$conversationId: conversationId,
|
||||
$received_at: receivedAt,
|
||||
$limit: limit,
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
return rows.reverse();
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue