From 4227fb0154c5b6859e570d1ba0ec92f108a51e81 Mon Sep 17 00:00:00 2001 From: Aotokitsuruya Date: Sat, 25 Jan 2025 15:19:22 +0800 Subject: [PATCH] add npc jack controller --- src/app/routes/email.ts | 2 ++ src/controller/NpcJackController.ts | 37 +++++++++++++++++++++++++++++ src/view/City.tsx | 22 ++++++++--------- 3 files changed, 50 insertions(+), 11 deletions(-) create mode 100644 src/controller/NpcJackController.ts diff --git a/src/app/routes/email.ts b/src/app/routes/email.ts index 942619d..2a6a876 100644 --- a/src/app/routes/email.ts +++ b/src/app/routes/email.ts @@ -1,5 +1,6 @@ import { DestroyController } from "@controller/DestroyController"; import { NewGameController } from "@controller/NewGameController"; +import { NpcJackController } from "@controller/NpcJackController"; interface Controller { handle(userId: string, message: ForwardableEmailMessage): Promise; @@ -12,4 +13,5 @@ type Routes = { export const routes: Routes = { new: NewGameController, destroy: DestroyController, + jack: NpcJackController, }; diff --git a/src/controller/NpcJackController.ts b/src/controller/NpcJackController.ts new file mode 100644 index 0000000..eb4db94 --- /dev/null +++ b/src/controller/NpcJackController.ts @@ -0,0 +1,37 @@ +import { inject, injectable } from "tsyringe-neo"; + +import { EmailController, EmailParams } from "./EmailController"; +import { SESv2Client } from "@aws-sdk/client-sesv2"; +import { SesEmailPresenter } from "@presenter/SesEmailPresenter"; +import { DestroyUsecase } from "@usecase/DestroyUsecase"; +import { KvCityRepository } from "@repository/KvCityRepository"; + +@injectable() +export class NpcJackController extends EmailController { + public static readonly SenderName: string = "Jack"; + + constructor( + @inject(SESv2Client) private readonly ses: SESv2Client, + @inject(KvCityRepository) private readonly cityRepository: KvCityRepository, + ) { + super(); + } + + protected async onMessage(params: EmailParams): Promise { + var sender = params.to; + if (!sender.includes("<")) { + sender = `${NpcJackController.SenderName} <${sender}>`; + } + + const presenter = new SesEmailPresenter(this.ses, { + sender, + recipients: [params.from], + messageId: params.messageId, + references: params.references, + subject: params.subject, + }); + + presenter.addText("Hello, I'm Jack."); + await presenter.render(); + } +} diff --git a/src/view/City.tsx b/src/view/City.tsx index 0c1e858..84d5fed 100644 --- a/src/view/City.tsx +++ b/src/view/City.tsx @@ -4,51 +4,51 @@ import { FC } from "hono/jsx"; import { type CitySnapshot } from "@usecase/CitySnapshotUsecase"; import { Layout } from "./Layout"; -import { css, cx } from 'hono/css' +import { css, cx } from "hono/css"; const pRelative = css` position: relative; -` +`; const pAbsolute = css` position: absolute; -` +`; const container = css` display: flex; width: 768px; -` +`; const shell = css` bottom: 33%; left: 40%; -` +`; const factory = css` bottom: 46%; - left: 7%; -` + left: 7%; +`; const hospital = css` bottom: 46%; right: 5%; -` +`; const office = css` bottom: 35%; left: 0%; -` +`; const people = css` bottom: 34%; right: 0%; -` +`; export const City: FC = ({ id }) => { return (
- mainCity + mainCity
shell