All files / src App.ts

0% Statements 0/36
0% Branches 0/1
0% Functions 0/1
0% Lines 0/36

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37                                                                         
import { PrismaClient } from "@prisma/client";
import { Env } from "./Env";
import { createLogger } from "lib";
import { MessagingGatewayClient } from "./infra/MessagingGateway";
import Logger from "bunyan";
import { MySqlClient } from "./infra/MySqlClient";
import { BatchSearvice } from "./domain/Batch";
import { EventProcessor } from "./domain/EventProseccor";
import { InfraFacade } from "./infra/InfraFacade";

// BigIntをログ出力できるようにする
Object.defineProperty(BigInt.prototype, "toJSON", {
  get() {
    "use strict";
    return () => String(this);
  },
});

(async () => {
  const env = new Env(process.env);
  const logger = createLogger(env);

  const prisma = new PrismaClient();
  await prisma.$queryRaw`SELECT 1`; // DB接続チェック

  const mysqlClient = new MySqlClient(prisma);
  const messagingGatewayClient = new MessagingGatewayClient(env.appName);
  const facade = new InfraFacade(mysqlClient, messagingGatewayClient);

  const batchService = new BatchSearvice(env.appName, mysqlClient);
  const processor = new EventProcessor(facade);

  await batchService.run(logger, async (logger: Logger) => {
    await processor.process(logger);
  });
})();