diff options
Diffstat (limited to 'services/docker/mail-server/aws-sendmail/db.ts')
-rw-r--r-- | services/docker/mail-server/aws-sendmail/db.ts | 37 |
1 files changed, 19 insertions, 18 deletions
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<number>; [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<MailTable>; -export type NewMail = Insertable<MailTable>; -export type MailUpdate = Updateable<MailTable>; - interface Database { [tableNames.mail.table]: MailTable; } @@ -57,7 +47,7 @@ const migrations: Record<string, Migration> = { (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<void> { - await this._db.insertInto(tableNames.mail.table).values(mail) + async addMail(mail: Mail): Promise<void> { + 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(); } |