我正在创建一个Firebase应用程序,并希望在其中存储用户的订阅详细信息。我计划存储订阅的start_date、end_date和number_of_days_left。我想根据end_date和current_date之间的差异来计算number_of_days_left。number_of_days_left应该每天在Firebase中更新。做这件事最好的方法是什么?
发布于 2021-11-13 05:37:12
要实现所需的任务,您可以使用Scheduled Firebase Cloud Functions。此函数创建发布/订阅主题,并使用云调度器触发该主题上的事件,从而确保函数按所需的计划运行。
要存储订阅的start_date
、end_date
和number_of_days_left
,您可以使用Cloud Firestore。
首先,您可以在Firestore中创建一个users
集合。并在用户订阅应用程序时添加唯一文档。在文档中,您可以将start_date
、end_date
存储为timestamp
类型的字段,将number_of_days_left
存储为number
类型。
Firestore数据库结构将如下所示-
users------>
user1------>
start_date
end_date
number_of_days_left
user2----->
start_date
end_date
number_of_days_left
user3----->
start_date
end_date
number_of_days_left
现在,您可以实现计划的Firebase功能,并每天更新number_of_days_left
字段。计划的Firebase功能使用Unix Crontab。你可以找到更多关于Unix Crontab语法here的信息。NodeJS中的以下计划Firebase函数每天在00:00
上运行,并为users
集合中的每个用户更新number_of_days_left
字段。
const admin = require("firebase-admin");
const functions = require("firebase-functions");
admin.initializeApp();
const db=admin.firestore();
exports.scheduledFunctionCrontab = functions.pubsub.schedule("0 0 * * *")
.timeZone("Asia/Kolkata")
// Users can choose timezone - default is America/Los_Angeles
.onRun(async (context) => {
const docRef = await db.collection("users").get();
docRef.forEach((doc)=>{
const data=doc.data();
const difference=Math.
floor((data.end_date-admin.firestore.Timestamp.now())/(24*60*60));
doc.ref.update({"number_of_days_left": difference});
});
});
在函数代码中,您可以指定列出here的任何有效timezone
。
发布于 2021-11-13 04:41:47
https://stackoverflow.com/questions/69951710
复制相似问题