J'ai un projet de fonction cloud Firebase dont j'ai récemment mis à jour toutes les fonctions.https.onRequest pour les exécuter via Express afin de créer un service API REST. Les API fonctionnent bien. Mais lorsque j'essaie de déployer le projet, aucun des anciens triggers de la base de données Firebase n'est plus déployé (Exemple : Le déclencheur CalculateMyStats fonctionnait bien, mais a été supprimé de ma liste de fonctions cloud). Seule la fonction restante est déployée maintenant. Est-il possible d'avoir des API Rest et des déclencheurs dans le même projet ?
index.ts
import * as admin from 'firebase-admin';
import * as functions from 'firebase-functions';
import * as http from './http';
import { AddLocationIOBookMarks, DistrubuteNotificationData, NewUserEmail } from './users/usersFuncModules';
import { AutoCheckoutCron } from './locations/locationsFuncModule';
import { CalculateMyStats } from './rating/ratingFuncModule';
import { FIREBASE_CONFIG } from './config/firebaseConfig';
import { LocationsUserCount } from './pushNotifications/pushFuncModule';
export { AddLocationIOBookMarks, DistrubuteNotificationData, NewUserEmail };
export { AutoCheckoutCron };
export { CalculateMyStats };
export { LocationsUserCount };
admin.initializeApp({
credential: admin.credential.cert({
projectId: FIREBASE_CONFIG.project_id,
clientEmail: FIREBASE_CONFIG.client_email,
privateKey: FIREBASE_CONFIG.private_key
}),
databaseURL: FIREBASE_CONFIG.databaseURL
});
admin.firestore().settings({ timestampsInSnapshots: true });
exports.rest = functions.https.onRequest(http.endpoint);
ratingFuncModule.ts
import * as express from 'express';
import * as functions from 'firebase-functions';
import * as http from '../http';
import * as myStatsModule from './calculateMystats';
import * as ratingModule from './rateUser';
import { fsConst } from '../firestoreConst';
const rateRoute = express.Router();
const cors = require('cors');
const corsOptions = http.corsOptions;
export const CalculateMyStats = functions.firestore.document(`${fsConst.USERRATINGS}/{doc-id}`).onWrite((change, context) => {
const ratedUser = change.after.data();
return myStatsModule.roundAllMyStats(ratedUser.userId).catch(error => {
console.error(new Error(error), `| Method: CalculateMyStats`);
});
});
rateRoute.get('/rate/updateRating', cors(corsOptions), (req, res) => {
const currentUserId = req.query.currentUserId;
const toBeRatedUserId = req.query.toBeRatedUserId;
const rateDocId = req.query.rateDocId;
const rateFormValues = req.query.rateFormValues;
ratingModule
.rateCurrentUser(currentUserId, toBeRatedUserId, rateDocId, rateFormValues)
.then(data => {
if (rateDocId !== 'undefined') {
res.send(JSON.stringify(rateDocId));
} else {
res.send(JSON.stringify(data));
}
})
.catch(error => {
console.error(new Error(error), `| Method: updateUserRating`);
});
});
// Export all routes for rating related http request
module.exports = rateRoute;
firebase.json
{
"functions": {
"predeploy": [
"npm --prefix $RESOURCE_DIR run lint",
"npm --prefix $RESOURCE_DIR run build"
],
"source": "functions"
},
"hosting": {
"public": "public",
"rewrites": [{
"source": "/api/v1/**",
"function": "rest"
}],
"ignore": ["firebase.json", "**/.*", "**/node_modules/**"]
}
}
Et quand je me déploie :
firebase deploy --only functions