diff options
author | Yuqian Yang <crupest@crupest.life> | 2025-04-30 00:20:23 +0800 |
---|---|---|
committer | Yuqian Yang <crupest@crupest.life> | 2025-04-30 23:22:21 +0800 |
commit | ee338238805953b505459eac09aa07610865ebf6 (patch) | |
tree | b6a3c9cf0f8beebcb09800087c27979c18722d2f | |
parent | a58326c5cbe9a73a6b204dac4b9f077d8cf886f4 (diff) | |
download | crupest-ee338238805953b505459eac09aa07610865ebf6.tar.gz crupest-ee338238805953b505459eac09aa07610865ebf6.tar.bz2 crupest-ee338238805953b505459eac09aa07610865ebf6.zip |
HALF WORK!: 2025-4-30 3
-rw-r--r-- | services/docker/mail-server/aws-sendmail/db.ts | 19 | ||||
-rw-r--r-- | services/docker/mail-server/aws-sendmail/main.ts | 6 | ||||
-rw-r--r-- | services/docker/mail-server/aws-sendmail/traffic.ts | 23 |
3 files changed, 18 insertions, 30 deletions
diff --git a/services/docker/mail-server/aws-sendmail/db.ts b/services/docker/mail-server/aws-sendmail/db.ts index ced5c19..6a7b100 100644 --- a/services/docker/mail-server/aws-sendmail/db.ts +++ b/services/docker/mail-server/aws-sendmail/db.ts @@ -1,9 +1,7 @@ // spellchecker: words sqlocal kysely insertable updateable import { SQLocalKysely } from "sqlocal/kysely"; -import { Generated, Kysely, Migration, Migrator } from "kysely"; - -import { Mail } from "./mail.ts"; +import { Generated, Insertable, Kysely, Migration, Migrator } from "kysely"; const tableNames = { mail: { @@ -91,19 +89,8 @@ export class DbService { await this._migrator.migrateToLatest(); } - async addMail(mail: Mail): Promise<void> { - const { raw, messageId, awsMessageId } = mail; - if (messageId == 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: messageId, - aws_message_id: awsMessageId, - }) + async addMail(mail: Insertable<MailTable>): Promise<void> { + await this._db.insertInto(tableNames.mail.table).values(mail) .executeTakeFirstOrThrow(); } diff --git a/services/docker/mail-server/aws-sendmail/main.ts b/services/docker/mail-server/aws-sendmail/main.ts index bb933b1..7702c75 100644 --- a/services/docker/mail-server/aws-sendmail/main.ts +++ b/services/docker/mail-server/aws-sendmail/main.ts @@ -2,12 +2,6 @@ import { AwsContext } from "./aws.ts"; import { MailTrafficHandler } from "./traffic.ts"; import { Logger, setLogger } from "./logger.ts"; -class BugError extends Error { -} - -function warn(message: string) { -} - class App { readonly aws = new AwsContext(); readonly mailTrafficDeliverer = new MailTrafficHandler(this.aws); diff --git a/services/docker/mail-server/aws-sendmail/traffic.ts b/services/docker/mail-server/aws-sendmail/traffic.ts index 87e6dee..f31e9ae 100644 --- a/services/docker/mail-server/aws-sendmail/traffic.ts +++ b/services/docker/mail-server/aws-sendmail/traffic.ts @@ -1,14 +1,21 @@ -import { MailDeliverer } from "./deliver.ts"; -import { DovecotMailDeliverer } from "./delivers/dovecot.ts"; +import { MailDeliverer } from "./mail.ts"; import { AwsContext } from "./aws.ts"; +import { DbService } from "./db.ts"; +import { DovecotMailDeliverer } from "./delivers/dovecot.ts"; import { AwsMailDeliverer } from "./delivers/aws.ts"; -export class MailTrafficHandler { - receiver: MailDeliverer; - sender: MailDeliverer; +export abstract class MailTrafficHandler { + constructor( + public readonly receiver: MailDeliverer, + public readonly sender: MailDeliverer, + ) {} +} - constructor(aws: AwsContext) { - this.receiver = new DovecotMailDeliverer(); - this.sender = new AwsMailDeliverer(aws); +export class AwsRelayTrafficHandler extends MailTrafficHandler { + constructor( + private readonly db: DbService, + private readonly aws: AwsContext, + ) { + super(new DovecotMailDeliverer(), new AwsMailDeliverer(aws)); } } |