UNPKG

firebase-admin-ql

Version:

A powerful library that bridges Firebase Admin SDK with PostgreSQL, simplifies interaction with stored procedures, facilitates seamless third-party API calls using fetch, and provides utility functions to streamline backend operations.

208 lines 7.48 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.FirebaseModel = void 0; const firestore_1 = require("firebase-admin/firestore"); const v2_1 = require("firebase-functions/v2"); class FirebaseModel { constructor(table, firestoreDB) { this.db = firestoreDB; this.collection = firestoreDB.collection(table); } find(id) { return __awaiter(this, void 0, void 0, function* () { try { const document = yield this.collection.doc(id).get(); if (document.exists) { return document.data(); } else { return false; } } catch (error) { v2_1.logger.log("find: ", error); return false; } }); } dataExists(id) { return __awaiter(this, void 0, void 0, function* () { try { return (yield this.collection.doc(id).get()).exists; } catch (error) { v2_1.logger.log("data exists: ", error); return false; } }); } update(data, id) { return __awaiter(this, void 0, void 0, function* () { try { yield this.collection.doc(id).update(data); return true; } catch (error) { v2_1.logger.log("update: ", error); return false; } }); } findAll(ids) { return __awaiter(this, void 0, void 0, function* () { try { if (ids) { const results = []; for (const id of ids) { const item = yield this.find(id); if (item) { results.push(item); } } return results; } else { const snapshots = yield this.collection.get(); if (snapshots.empty) { return []; } const result = snapshots.docs.map((document) => { return Object.assign(Object.assign({}, document.data()), { reference: document.id }); }); return result; } } catch (error) { v2_1.logger.log("findAll: ", error); return []; } }); } findWhere(_a) { return __awaiter(this, arguments, void 0, function* ({ wh }) { try { let query = this.collection; for (const clause of wh) { query = query.where(clause.key, clause.operator, clause.value); } const snapshot = yield query.get(); if (!snapshot.empty) { return snapshot.docs.map((document) => { return Object.assign(Object.assign({}, document.data()), { reference: document.id }); }); } else { return []; } } catch (error) { throw new Error(`findWhere: ${error}`); } }); } save(data, id) { return __awaiter(this, void 0, void 0, function* () { delete data.reference; try { if (id === undefined) { const documentRef = yield this.collection.add(data); return documentRef.id; } else { yield this.collection.doc(id).set(data); return id; } } catch (error) { v2_1.logger.log("save: ", error); return false; } }); } delete(id) { return __awaiter(this, void 0, void 0, function* () { try { yield this.collection.doc(id).delete(); return true; } catch (error) { v2_1.logger.log("delete: ", error); return false; } }); } addToArray(data, id) { return __awaiter(this, void 0, void 0, function* () { try { if (id) { const dataExist = yield this.dataExists(id); if (dataExist) { yield this.collection.doc(id).update({ data: firestore_1.FieldValue.arrayUnion(...data), }); } else { yield this.collection.doc(id).set({ data }); } } else { yield this.collection.add({ data }); } return true; } catch (error) { return false; } }); } doBackup(_a) { return __awaiter(this, arguments, void 0, function* ({ whereKey, returnData, dbLabel, reference }) { try { const dataToBackup = returnData[dbLabel]; if (!dataToBackup || (typeof dataToBackup === 'object' && Object.keys(dataToBackup).length === 0) || dataToBackup === '') { return false; } let ref = reference; if (!ref && whereKey) { const where = []; if (typeof whereKey === "string") { where.push({ key: whereKey, operator: "==", value: dataToBackup[whereKey], }); } else { whereKey.forEach((key) => { where.push({ key, operator: "==", value: dataToBackup[key], }); }); } const itemExist = yield this.findWhere({ wh: where }); if (itemExist.length > 0) { ref = itemExist[0].reference; } } return yield this.save(dataToBackup, ref); } catch (error) { v2_1.logger.log("firestore backup error: ", error); return false; } }); } } exports.FirebaseModel = FirebaseModel; //# sourceMappingURL=firestore.db.js.map