import { Command } from "commander"; import "dotenv/config"; import * as admin from "firebase-admin"; import * as data from "./data"; import * as utils from "./utils"; if (process.env.NODE_ENV != "production") { admin.initializeApp(); } else { if (process.env.GOOGLE_APPLICATION_CREDENTIALS == null) { throw new Error("credential not found"); } const serviceAccount = require(process.env.GOOGLE_APPLICATION_CREDENTIALS!); admin.initializeApp({ credential: admin.credential.cert(serviceAccount), }); } const program = new Command(); const db = admin.firestore(); program .command("delete [preset]") .description("physical delete document") .action(async (preset: string) => { console.log(`execute delete ${preset} data`); const dataSet = data.createDataSetByPreset(preset); if (dataSet.userMap != null) { const userKeys = [...dataSet.userMap.keys()]; for (let i = 0; i < userKeys.length; i++) { const key = userKeys[i]; await utils.deleteUser(db, key); console.log(`delete user: ${key}`); } } }); program .command("clear [preset]") .description("clear event answers") .action(async (preset: string) => { console.log(`execute clear ${preset} data`); const dataSet = data.createDataSetByPreset(preset); if (dataSet.quartetGameMap != null) { const collections = await db.collection("plays").get(); for (const collection of collections.docs) { const properties = await collection.ref.collection("properties").get(); for (const property of properties.docs) { await property.ref.delete(); } await collection.ref.delete(); } const collections2 = await db.collection("playIds").get(); for (const collection2 of collections2.docs) { await collection2.ref.delete(); } const collections3 = await db.collection("userTokens").get(); for (const collection3 of collections3.docs) { await collection3.ref.delete(); } } }); program .command("set [preset]") .description("set event data (with clear answer count)") .action(async (preset: string) => { console.log(`execute set ${preset} data`); const dataSet = data.createDataSetByPreset(preset); if (dataSet.userMap != null) { const userKeys = [...dataSet.userMap.keys()]; for (let i = 0; i < userKeys.length; i++) { const key = userKeys[i]; const user = dataSet.userMap.get(key)!; await utils.setUser(db, key, user.name ?? "", user.admin); console.log(`set user: ${key}`); } } if (dataSet.quartetGameMap != null) { const gameKeys = [...dataSet.quartetGameMap.keys()]; for (let i = 0; i < gameKeys.length; i++) { const game = dataSet.quartetGameMap.get(gameKeys[i])!; await utils.setQuartetGame(db, gameKeys[i], game); } } if (dataSet.quartetPlayMap != null) { const gameKeys = [...dataSet.quartetPlayMap.keys()]; for (let i = 0; i < gameKeys.length; i++) { const play = dataSet.quartetPlayMap.get(gameKeys[i])!; await utils.setQuartetPlay(db, gameKeys[i], play); } } }); program .command("update [preset]") .description("update event data (don't clear answer count)") .action(async (preset: string) => { console.log(`execute update ${preset} data`); const dataSet = data.createDataSetByPreset(preset); if (dataSet.userMap != null) { const userKeys = [...dataSet.userMap.keys()]; for (let i = 0; i < userKeys.length; i++) { const key = userKeys[i]; const user = dataSet.userMap.get(key)!; await utils.setUser(db, key, user.name ?? "", user.admin); console.log(`update user: ${key}`); } } }); program.parse(process.argv);