feat: show message when loading the database
This commit is contained in:
parent
dbd0b12b3d
commit
84b5ef9755
12 changed files with 99 additions and 150 deletions
59
src/db.ts
59
src/db.ts
|
@ -1,12 +1,4 @@
|
|||
import {
|
||||
type Accessor,
|
||||
createEffect,
|
||||
createMemo,
|
||||
createRoot,
|
||||
createSignal,
|
||||
DEV,
|
||||
type Setter,
|
||||
} from "solid-js";
|
||||
import { type Accessor, createEffect, createMemo, createRoot, createSignal, DEV, type Setter } from "solid-js";
|
||||
|
||||
import { Kysely, type NotNull, sql } from "kysely";
|
||||
import type { DB } from "kysely-codegen";
|
||||
|
@ -79,19 +71,13 @@ const allThreadsOverviewQueryRaw = kyselyDb()
|
|||
(eb) =>
|
||||
eb
|
||||
.selectFrom("message")
|
||||
.select((eb) => [
|
||||
"message.thread_id",
|
||||
eb.fn.countAll().as("message_count"),
|
||||
])
|
||||
.select((eb) => ["message.thread_id", eb.fn.countAll().as("message_count")])
|
||||
.where((eb) => {
|
||||
return eb.and([
|
||||
eb("message.body", "is not", null),
|
||||
eb("message.body", "is not", ""),
|
||||
]);
|
||||
return eb.and([eb("message.body", "is not", null), eb("message.body", "is not", "")]);
|
||||
})
|
||||
.groupBy("message.thread_id")
|
||||
.as("message"),
|
||||
(join) => join.onRef("message.thread_id", "=", "thread._id")
|
||||
(join) => join.onRef("message.thread_id", "=", "thread._id"),
|
||||
)
|
||||
.innerJoin("recipient", "thread.recipient_id", "recipient._id")
|
||||
.leftJoin("groups", "recipient._id", "groups.recipient_id")
|
||||
|
@ -114,9 +100,7 @@ const allThreadsOverviewQueryRaw = kyselyDb()
|
|||
}>()
|
||||
.compile();
|
||||
|
||||
export const allThreadsOverviewQuery = cached(() =>
|
||||
kyselyDb().executeQuery(allThreadsOverviewQueryRaw)
|
||||
);
|
||||
export const allThreadsOverviewQuery = cached(() => kyselyDb().executeQuery(allThreadsOverviewQueryRaw));
|
||||
|
||||
const overallSentMessagesQueryRaw = (recipientId: number) =>
|
||||
kyselyDb()
|
||||
|
@ -127,7 +111,7 @@ const overallSentMessagesQueryRaw = (recipientId: number) =>
|
|||
eb("message.from_recipient_id", "=", recipientId),
|
||||
eb("message.body", "is not", null),
|
||||
eb("message.body", "!=", ""),
|
||||
])
|
||||
]),
|
||||
)
|
||||
.executeTakeFirst();
|
||||
|
||||
|
@ -143,9 +127,7 @@ const dmPartnerRecipientQueryRaw = (dmId: number) =>
|
|||
"recipient.nickname_joined_name",
|
||||
])
|
||||
.innerJoin("thread", "recipient._id", "thread.recipient_id")
|
||||
.where((eb) =>
|
||||
eb.and([eb("thread._id", "=", dmId), eb("recipient._id", "!=", SELF_ID)])
|
||||
)
|
||||
.where((eb) => eb.and([eb("thread._id", "=", dmId), eb("recipient._id", "!=", SELF_ID)]))
|
||||
.$narrowType<{
|
||||
_id: number;
|
||||
}>()
|
||||
|
@ -156,25 +138,12 @@ export const dmPartnerRecipientQuery = cached(dmPartnerRecipientQueryRaw);
|
|||
const threadSentMessagesOverviewQueryRaw = (threadId: number) =>
|
||||
kyselyDb()
|
||||
.selectFrom("message")
|
||||
.select([
|
||||
"from_recipient_id",
|
||||
sql<string>`datetime(date_sent / 1000, 'unixepoch')`.as(
|
||||
"message_datetime"
|
||||
),
|
||||
])
|
||||
.select(["from_recipient_id", sql<string>`datetime(date_sent / 1000, 'unixepoch')`.as("message_datetime")])
|
||||
.orderBy(["message_datetime"])
|
||||
.where((eb) =>
|
||||
eb.and([
|
||||
eb("body", "is not", null),
|
||||
eb("body", "!=", ""),
|
||||
eb("thread_id", "=", threadId),
|
||||
])
|
||||
)
|
||||
.where((eb) => eb.and([eb("body", "is not", null), eb("body", "!=", ""), eb("thread_id", "=", threadId)]))
|
||||
.execute();
|
||||
|
||||
export const threadSentMessagesOverviewQuery = cached(
|
||||
threadSentMessagesOverviewQueryRaw
|
||||
);
|
||||
export const threadSentMessagesOverviewQuery = cached(threadSentMessagesOverviewQueryRaw);
|
||||
|
||||
const threadMostUsedWordsQueryRaw = (threadId: number, limit = 10) =>
|
||||
kyselyDb()
|
||||
|
@ -185,16 +154,12 @@ const threadMostUsedWordsQueryRaw = (threadId: number, limit = 10) =>
|
|||
sql`LOWER(substr(body, 1, instr(body || " ", " ") - 1))`.as("word"),
|
||||
sql`(substr(body, instr(body || " ", " ") + 1))`.as("rest"),
|
||||
])
|
||||
.where((eb) =>
|
||||
eb.and([eb("body", "is not", null), eb("thread_id", "=", threadId)])
|
||||
)
|
||||
.where((eb) => eb.and([eb("body", "is not", null), eb("thread_id", "=", threadId)]))
|
||||
.unionAll((ebInner) => {
|
||||
return ebInner
|
||||
.selectFrom("words")
|
||||
.select([
|
||||
sql`LOWER(substr(rest, 1, instr(rest || " ", " ") - 1))`.as(
|
||||
"word"
|
||||
),
|
||||
sql`LOWER(substr(rest, 1, instr(rest || " ", " ") - 1))`.as("word"),
|
||||
sql`(substr(rest, instr(rest || " ", " ") + 1))`.as("rest"),
|
||||
])
|
||||
.where("rest", "<>", "");
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue