Flutter Firebase查询过滤器的日期范围与另一个日期范围重叠

时间:2020-10-14 14:12:57

标签: firebase flutter dart google-cloud-firestore

我正在尝试建立一个预订机制,该机制不允许用户有两个重叠的预订。用户必须输入预订的日期范围,该日期范围将存储在Firebase(Cloud Firestore)中。在完成预订之前,我要检查它是否与此用户的另一个预订重叠。

我为每个预订请求存储了这两个变量,我想将其用于此查询:

selectedStartDate(时间戳) selectedEndDate(时间戳)

我尝试的方法无效:

bool overlappingBookingDateCheck(currentUserId, selectedDate) {

bool unavailable = false;

StreamBuilder(
    stream: FirebaseFirestore.instance
        .collection('users')
        .doc(currentUserId)
        .collection('bookings')
        .where("status", isEqualTo: "active")
        .where("selectedStartDate",
            isGreaterThanOrEqualTo: selectedDate.start)
        .where("selectedEndDate", isLessThanOrEqualTo: selectedDate.end)
        .snapshots(),
    builder: (ctx, streamSnapshot) {
      if (streamSnapshot.connectionState == ConnectionState.waiting) {
        return Center(
          child: CircularProgressIndicator(),
        );
      }
      // If there was a match in firebase, then there is an 
         // overlapping booking, so return unavaiable is true
      if (streamSnapshot.hasData) {
        unavailable = true;
      }
    });

return unavailable;
}

此代码有几个问题。一种是多重where语句是AND而不是OR。这使我无法检查开始日期或结束日期是否与另一个预订重叠。在两种情况下,都应拒绝预订。第二个是我收到一个错误,该错误无法用不等号运算符(<,<=,>或> =)过滤多个字段。

如果有人能帮助我如何获得所需的查询(检查所请求的预订日期范围是否与现有预订重叠),将感到非常高兴。

谢谢!

0 个答案:

没有答案