日历重复事件Angular + Firestore

问题描述 投票:0回答:1

我有一个应用程序,如果用户选择了频率+ startDate,则应该在接下来的2个小时内每周重复一次相同的事件。

例如,我将从下周一获得2个mounths(momentJs)的数组。

将这些事件添加到Firestore的最佳方法是什么?我可以使用forEach但不确定,也可以使用cloudFunctions

直到现在我的代码都用完日期数组

 addServices() {

    let obj = {
      startOn: this.assignment.dayoftheweekText,
      stopAfter:this.assignment.stopAfter,
      weekDay:this.assignment.dayFullname,
      frenquency:this.assignment.frenquency,
      skipWeeks:this.assignment.skipWeeks,
      isDone:this.assignment.isDone,
      isPaid:this.assignment.isPaid,
      owner: this.ownerID,
      name:this.userName
    }

    let newObj = JSON.stringify(obj, function (key, value) {
      return (value === undefined) ? "" : value
    });

    console.log(this.ownerID)

    if(  this.ownerID !== undefined && this.assignment.dayoftheweekText !== null || undefined || '' ){

     this.firebaseCommunication.createService(JSON.parse(newObj), this.id).then(res => {

        this.firebaseCommunication.saveServiceId(res["id"]).then(res => {
          this.alertService.present({
            header: 'Sucess',
            message: 'Assignment added! May take a while until update please be patient',
            buttons: [{
              text: 'OK',
              handler: () => {
               // this.customerService.setAction("Refresh");
               /*  this.router.navigate(['tabs/customers'], {
                  replaceUrl: true
                }); */
                this.dismissModal();
              }
            }]
          })

        }).catch(err => {

          console.log(err)
        })
      }).catch(err => {
        console.log(err)
      })
    }

    else{
      this.alertService.present({
        header: 'Choose Day of Week',
        message: 'Please choose the Day of the Week and Tech!!!',
        buttons: ['OK']
      })
    }
  }
angular firebase firebase-realtime-database google-cloud-firestore angular6
1个回答
0
投票

一旦从客户端收到HTTP POST请求或文档,您就可以使用App Engine Python或Cloud Function批量添加事件。它可以在后端更轻松地完成。例如,您可以编写一个云函数以如下方式触发:

// Listen for changes in all documents in the 'users' collection
exports.useWildcard = functions.firestore
    .document('event_add_requests/{event_add_request_id_1}')
    .onWrite((change, context) => {
      dates = ...  // obtain a set of dates for the event
      // generate_event(date) produces an event on a single day 

      let batch = db.batch();

      let event_ref = db.collection("users").document(change.after.data().owner).collection("events").document()

      batch.set(event_ref, generate_event(date))
      batch.commit().then(function () {
        // ...
      });
    });

通过这种方式,所有重复事件都添加到batch中,您可以避免由于客户端脱机等导致的一致性问题。

您还可以为onDelete添加event_add_requests侦听器,以删除单个event生成的所有event_add_request

© www.soinside.com 2019 - 2024. All rights reserved.