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.
217 lines • 8.01 kB
JavaScript
"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, key, 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({
[key]: firestore_1.FieldValue.arrayUnion(...data),
});
}
else {
yield this.collection.doc(id).set({ [key]: data });
}
}
else {
yield this.collection.add({ [key]: 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;
}
const saveData = (data) => __awaiter(this, void 0, void 0, function* () {
let ref = reference;
if (!ref && whereKey) {
const where = [];
if (typeof whereKey === "string") {
where.push({
key: whereKey,
operator: "==",
value: data[whereKey],
});
}
else {
whereKey.forEach((key) => {
where.push({
key,
operator: "==",
value: data[key],
});
});
}
const itemExist = yield this.findWhere({ wh: where });
if (itemExist.length > 0) {
ref = itemExist[0].reference;
}
}
return yield this.save(data, ref);
});
if (Array.isArray(dataToBackup)) {
const saved = yield Promise.all(dataToBackup.map(data => saveData(data)));
return saved.every(item => item !== false);
}
else {
return saveData(dataToBackup);
}
}
catch (error) {
v2_1.logger.log("firestore backup error: ", error);
return false;
}
});
}
}
exports.FirebaseModel = FirebaseModel;
//# sourceMappingURL=firestore.db.js.map