aboutsummaryrefslogtreecommitdiff
path: root/services/docker/mail-server/relay/db.ts
diff options
context:
space:
mode:
Diffstat (limited to 'services/docker/mail-server/relay/db.ts')
-rw-r--r--services/docker/mail-server/relay/db.ts72
1 files changed, 36 insertions, 36 deletions
diff --git a/services/docker/mail-server/relay/db.ts b/services/docker/mail-server/relay/db.ts
index 73c3abe..ee8bad1 100644
--- a/services/docker/mail-server/relay/db.ts
+++ b/services/docker/mail-server/relay/db.ts
@@ -6,19 +6,17 @@ import {
Kysely,
Migration,
Migrator,
- Selectable,
SqliteDatabase,
SqliteDialect,
SqliteStatement,
} from "kysely";
-
import * as sqlite from "@db/sqlite";
class SqliteStatementAdapter implements SqliteStatement {
constructor(public readonly stmt: sqlite.Statement) {}
get reader(): boolean {
- return this.stmt.columnNames.length >= 1;
+ return this.stmt.columnNames().length >= 1;
}
all(parameters: readonly unknown[]): unknown[] {
@@ -57,7 +55,7 @@ class SqliteDatabaseAdapter implements SqliteDatabase {
export class DbError extends Error {
}
-const tableNames = {
+const NAMES = {
mail: {
table: "mail",
columns: {
@@ -71,46 +69,51 @@ const tableNames = {
} as const;
interface MailTable {
- [tableNames.mail.columns.id]: Generated<number>;
- [tableNames.mail.columns.messageId]: string;
- [tableNames.mail.columns.awsMessageId]: string | null;
- [tableNames.mail.columns.date]: number | null;
- [tableNames.mail.columns.raw]: string;
+ [NAMES.mail.columns.id]: Generated<number>;
+ [NAMES.mail.columns.messageId]: string;
+ [NAMES.mail.columns.awsMessageId]: string | null;
+ [NAMES.mail.columns.date]: string | null;
+ [NAMES.mail.columns.raw]: string;
}
interface Database {
- [tableNames.mail.table]: MailTable;
+ [NAMES.mail.table]: MailTable;
}
const migrations: Record<string, Migration> = {
"0001-init": {
// deno-lint-ignore no-explicit-any
async up(db: Kysely<any>): Promise<void> {
- const names = tableNames.mail;
-
await db.schema
- .createTable(names.table)
+ .createTable(NAMES.mail.table)
.addColumn(
- names.columns.id,
+ NAMES.mail.columns.id,
"integer",
(col) => col.primaryKey().autoIncrement(),
)
.addColumn(
- names.columns.messageId,
+ NAMES.mail.columns.messageId,
"text",
(col) => col.notNull().unique(),
)
- .addColumn(names.columns.awsMessageId, "text", (col) => col.unique())
- .addColumn(names.columns.date, "integer")
- .addColumn(names.columns.raw, "text", (col) => col.notNull())
+ .addColumn(
+ NAMES.mail.columns.awsMessageId,
+ "text",
+ (col) => col.unique(),
+ )
+ .addColumn(NAMES.mail.columns.date, "text")
+ .addColumn(NAMES.mail.columns.raw, "text", (col) => col.notNull())
.execute();
for (
- const column of [names.columns.messageId, names.columns.awsMessageId]
+ const column of [
+ NAMES.mail.columns.messageId,
+ NAMES.mail.columns.awsMessageId,
+ ]
) {
await db.schema
- .createIndex(`${names.table}_${column}`)
- .on(names.table)
+ .createIndex(`${NAMES.mail.table}_${column}`)
+ .on(NAMES.mail.table)
.column(column)
.execute();
}
@@ -118,7 +121,7 @@ const migrations: Record<string, Migration> = {
// deno-lint-ignore no-explicit-any
async down(db: Kysely<any>): Promise<void> {
- await db.schema.dropTable(tableNames.mail.table).execute();
+ await db.schema.dropTable(NAMES.mail.table).execute();
},
},
};
@@ -149,31 +152,28 @@ export class DbService {
await this.#migrator.migrateToLatest();
}
- async addMail(mail: Insertable<MailTable>): Promise<void> {
- await this.#kysely.insertInto(tableNames.mail.table).values(mail)
- .execute();
- }
-
- async listMails(): Promise<Selectable<MailTable>[]> {
- return await this.#kysely.selectFrom(tableNames.mail.table).selectAll()
- .execute();
+ async addMail(mail: Insertable<MailTable>): Promise<number> {
+ const inserted = await this.#kysely.insertInto(NAMES.mail.table).values(
+ mail,
+ ).executeTakeFirstOrThrow();
+ return Number(inserted.insertId!);
}
async messageIdToAws(messageId: string): Promise<string | null> {
- const row = await this.#kysely.selectFrom(tableNames.mail.table).where(
- tableNames.mail.columns.messageId,
+ const row = await this.#kysely.selectFrom(NAMES.mail.table).where(
+ NAMES.mail.columns.messageId,
"=",
messageId,
- ).select(tableNames.mail.columns.awsMessageId).executeTakeFirst();
+ ).select(NAMES.mail.columns.awsMessageId).executeTakeFirst();
return row?.aws_message_id ?? null;
}
async messageIdFromAws(awsMessageId: string): Promise<string | null> {
- const row = await this.#kysely.selectFrom(tableNames.mail.table).where(
- tableNames.mail.columns.awsMessageId,
+ const row = await this.#kysely.selectFrom(NAMES.mail.table).where(
+ NAMES.mail.columns.awsMessageId,
"=",
awsMessageId,
- ).select(tableNames.mail.columns.messageId).executeTakeFirst();
+ ).select(NAMES.mail.columns.messageId).executeTakeFirst();
return row?.message_id ?? null;
}
}