初期設定時のシーマデータの読み込み処理が遅いので、バックエンドのCloudFunctionsを使って早くしました。 5/16の週に反映予定です。
現在ステージング環境にて、テストしています。
特定のコレクション以下すべてを削除するときは await firebase_tools.firestore .delete関数が便利
ただしfirebase toolsのバージョンは、”firebase-tools”: “9.18.0”以下にすること
これ以上のバージョンだと、コレクションの一括削除ができないため
import * as functions from "firebase-functions";
import * as admin from "firebase-admin";
const firebase_tools: any = require('firebase-tools')
const field = await db.collection(fieldCollectionName).doc(data.fieldId).get()
//この関数でコレクションの一括削除をする
export const deleteField = functions
.region(FIREBASE_REGION)
.runWith({
//Timeoutの時間を設定する
timeoutSeconds: 540,
//このメモリを大きくするとバックエンドで処理を早くできる
memory: '2GB',
// secrets: ['GOOGLE_APPLICATION_CREDENTIALS']
})//呼び出し
.https.onCall(async (data: { fieldId: string }, context: any) => {
const fieldPath = `${fieldCollectionName}/${data.fieldId}`
// FieldUser 削除
const FieldUserCollectionName = 'field-users'
//非同期処理 バックエンドからFrontのFirebaseへの処理
const deletedFieldUsers = await
admin.firestore().collection(FieldUserCollectionName).where('fieldId', '==', data.fieldId)
.get()
const fieldUsersDeletions = deletedFieldUsers.docs.map(fieldUser => fieldUser.ref.delete())
await Promise.all(fieldUsersDeletions)
await firebase_tools.firestore
.delete(fieldPath, {
//ここに環境変数を設定する必要がある
project: process.env.GCLOUD_PROJECT,
recursive: true,
yes: true,
token: process.env.FIREBASE_TOKEN
});
//ただの文字列を返す
return 'field deleted !'
});
https://stackoverflow.com/questions/33128207/firebase-cli-authentication-through-token
firebase-admin からFirebaseへアクセスできるインスタンスを生成できる
FirebaseへのCRUDへは、tokenをセットする Firebaseのtokenは1時間毎に自動で書き換えられる
ご連絡、質問は、Facebook よりお願いいたします。