import { DocumentSnapshot, getFirestore, FieldValue } from "firebase-admin/firestore"; import { Change, EventContext } from "firebase-functions"; import * as common from "@shinonomekazan/scrap-conan-online"; export function AkashicInstanceCount(change: Change, context: EventContext): Promise | any { // playing // standby // terminated let changeCount = 0; if (change.after.exists !== true) { // delete const deletedPlay = change.before.data() as common.GamePlay; if (deletedPlay.state === "playing") { changeCount = -1; } } else { const updatedPlay = change.after.data() as common.GamePlay; if (updatedPlay.state === "playing") { const beforeNotPlaying = change.before.exists !== true || (change.before.data() as common.GamePlay).state !== "playing"; if (beforeNotPlaying) { changeCount = 1; } } else if (updatedPlay.state === "terminated" || updatedPlay.state === "completed") { const beforePlaying = change.before.exists === true && (change.before.data() as common.GamePlay).state === "playing"; if (beforePlaying) { changeCount = -1; } } } if (changeCount !== 0) { return getFirestore() .collection("/properties") .doc("akashic") .update({ instanceCount: FieldValue.increment(changeCount), }); } return Promise.resolve(); }