Spaces:
Running
Running
File size: 1,593 Bytes
d3477e4 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | const path = require('path');
const admin = require('firebase-admin');
require('dotenv').config();
// On hosted platforms (e.g. Hugging Face Spaces) the whole service-account JSON
// is injected as a secret env var instead of a committed file. Fall back to the
// local file for development.
let serviceAccount;
if (process.env.FIREBASE_SERVICE_ACCOUNT_JSON) {
serviceAccount = JSON.parse(process.env.FIREBASE_SERVICE_ACCOUNT_JSON);
} else {
const credPath =
process.env.FIREBASE_SERVICE_ACCOUNT ||
path.join(__dirname, '..', '..', 'firebase-service-account.json');
serviceAccount = require(credPath);
}
if (!admin.apps.length) {
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
projectId: serviceAccount.project_id,
});
}
const db = admin.firestore();
db.settings({ ignoreUndefinedProperties: true });
const { FieldValue, Timestamp } = admin.firestore;
const collections = {
users: db.collection('users'),
runs: db.collection('runs'),
programs: db.collection('programs'),
userPrograms: db.collection('userPrograms'),
clubs: db.collection('clubs'),
clubMembers: db.collection('clubMembers'),
clubActivities: db.collection('clubActivities'),
territoryCells: db.collection('territoryCells'),
};
function docToObject(doc) {
if (!doc.exists) return null;
const data = doc.data();
for (const k of Object.keys(data)) {
if (data[k] instanceof Timestamp) data[k] = data[k].toDate().toISOString();
}
return { id: doc.id, ...data };
}
module.exports = { admin, db, FieldValue, Timestamp, collections, docToObject };
|