From 84148346e29547cfba92dd697be9bbf31a23a926 Mon Sep 17 00:00:00 2001 From: Yuqian Yang Date: Wed, 30 Apr 2025 00:20:23 +0800 Subject: HALF WORK!: 2025-4-30 --- services/docker/mail-server/aws-sendmail/db.ts | 37 +++++++++++++------------- 1 file changed, 19 insertions(+), 18 deletions(-) (limited to 'services/docker/mail-server/aws-sendmail/db.ts') diff --git a/services/docker/mail-server/aws-sendmail/db.ts b/services/docker/mail-server/aws-sendmail/db.ts index 05cc7b5..b7e052f 100644 --- a/services/docker/mail-server/aws-sendmail/db.ts +++ b/services/docker/mail-server/aws-sendmail/db.ts @@ -1,15 +1,9 @@ // spellchecker: words sqlocal kysely insertable updateable import { SQLocalKysely } from "sqlocal/kysely"; -import { - Generated, - Insertable, - Kysely, - Migration, - Migrator, - Selectable, - Updateable, -} from "kysely"; +import { Generated, Kysely, Migration, Migrator } from "kysely"; + +import { Mail } from "./mail.ts"; const tableNames = { mail: { @@ -18,7 +12,7 @@ const tableNames = { id: "id", messageId: "message_id", awsMessageId: "aws_message_id", - rawMail: "raw_mail", + raw: "raw", }, }, } as const; @@ -27,13 +21,9 @@ interface MailTable { [tableNames.mail.columns.id]: Generated; [tableNames.mail.columns.messageId]: string; [tableNames.mail.columns.awsMessageId]: string | null; - [tableNames.mail.columns.rawMail]: string; + [tableNames.mail.columns.raw]: string; } -export type Mail = Selectable; -export type NewMail = Insertable; -export type MailUpdate = Updateable; - interface Database { [tableNames.mail.table]: MailTable; } @@ -57,7 +47,7 @@ const migrations: Record = { (col) => col.notNull().unique(), ) .addColumn(names.columns.awsMessageId, "text", (col) => col.unique()) - .addColumn(names.columns.rawMail, "text", (col) => col.notNull()) + .addColumn(names.columns.raw, "text", (col) => col.notNull()) .execute(); for ( @@ -101,8 +91,19 @@ export class DbService { await this._migrator.migrateToLatest(); } - async addMail(mail: NewMail): Promise { - await this._db.insertInto(tableNames.mail.table).values(mail) + async addMail(mail: Mail): Promise { + const { raw, message_id, aws_message_id } = mail; + if (message_id == null) { + // TODO: Better error. + throw new Error( + "Failed to add mail to database. Mail has no message id.", + ); + } + await this._db.insertInto(tableNames.mail.table).values({ + raw, + message_id, + aws_message_id, + }) .executeTakeFirstOrThrow(); } -- cgit v1.2.3