aboutsummaryrefslogtreecommitdiff
path: root/services/docker/mail-server/aws-sendmail/db.ts
diff options
context:
space:
mode:
Diffstat (limited to 'services/docker/mail-server/aws-sendmail/db.ts')
-rw-r--r--services/docker/mail-server/aws-sendmail/db.ts37
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();
}