import * as validators from "express-validator"; import { App } from "../App"; import { Context } from "../Context"; import * as fw from "../fw"; import BaseController from "./BaseController"; import { tryStorePlayId } from "../stores/quartet"; interface CreatePlayIdParams { idToken: string; ticketCode?: string; } export class PlayIdsController extends BaseController { constructor(app: App) { super(app); this.validators.post = [ fw.params.InstantValidator( [ validators.body("idToken").isString().notEmpty(), validators.body("ticketCode").optional().isString().notEmpty(), ], (context) => ({ idToken: context.req.body.idToken, ticketCode: context.req.body.ticketCode, } as CreatePlayIdParams) ), ]; } async post(context: Context) { const p = context.params as CreatePlayIdParams; const verifyResult = await this.app.auth.verifyIdToken(p.idToken); const ownerUserId = verifyResult.uid; for (let i = 0; i < 5; i++) { try { const result = await tryStorePlayId(this.app.firestore, ownerUserId); return { playId: result.playId, }; // TODO: 佐藤さんの関数を呼び出し、成功していたらreturn } catch {} } throw new fw.types.InternalServerError("プレイIDの作成に失敗しました"); } }