diff --git a/lib/main_screen.dart b/lib/main_screen.dart index 8dac8fb..593c7a0 100644 --- a/lib/main_screen.dart +++ b/lib/main_screen.dart @@ -1,6 +1,8 @@ import 'package:flutter/material.dart'; import 'meetings.dart'; +import 'package:cloud_firestore/cloud_firestore.dart'; + class MainScreen extends StatefulWidget { const MainScreen({Key? key}) : super(key: key); @@ -11,6 +13,13 @@ class MainScreen extends StatefulWidget { class _MainScreenState extends State { @override Widget build(BuildContext context) { + print("OOOGABOOGA"); + getSellers(Filter( + ["Sbarro"], + PriceRange(8, 10), + TimeRange(Timestamp.fromDate(DateTime(2023, 2, 26, 12, 50)), + Timestamp.fromDate(DateTime(2023, 2, 26, 11, 50))))) + .then((value) => {print(value)}); return Scaffold( appBar: AppBar( title: const Text("Main Beens"), diff --git a/lib/meetings.dart b/lib/meetings.dart index 1b094cb..824a799 100644 --- a/lib/meetings.dart +++ b/lib/meetings.dart @@ -3,8 +3,8 @@ import 'dart:ffi'; import 'package:cloud_firestore/cloud_firestore.dart'; class TimeRange { - late DateTime startTime; - late DateTime endTime; + late Timestamp startTime; + late Timestamp endTime; TimeRange(this.startTime, this.endTime); } @@ -16,14 +16,24 @@ class PriceRange { PriceRange(this.low, this.high); } -class Seller { +class Seller implements Comparable { String name = ""; String uid = ""; - List location; + List location; TimeRange availableTime; int price; Seller(this.name, this.uid, this.location, this.availableTime, this.price); + + @override + String toString() { + return "Name: $name, Price: $price"; + } + + @override + int compareTo(Seller other) { + return this.name.compareTo(other.name); + } } class Filter { @@ -36,21 +46,35 @@ class Filter { Future> getSellers(Filter filter) async { CollectionReference users = FirebaseFirestore.instance.collection('sellers'); - List sellers = List.empty(); + List sellers = List.empty(growable: true); final Query query = users .where('location', arrayContainsAny: filter.locations) .where('price', isGreaterThanOrEqualTo: filter.price?.low, - isLessThanOrEqualTo: filter.price?.high) - .where('start-time', - isGreaterThanOrEqualTo: filter.meetingTime?.startTime) - .where('end-time', isLessThanOrEqualTo: filter.meetingTime?.endTime); + isLessThanOrEqualTo: filter.price?.high); final QuerySnapshot snapshot = await query.get(); - for (var doc in snapshot.docs) { - sellers.add(Seller(doc["name"], doc["uid"], doc["location"], - TimeRange(doc["start-time"], doc["end-time"]), doc["price"])); + final startTime = filter.meetingTime?.endTime; + final endTime = filter.meetingTime?.startTime; + + if (startTime != null && endTime != null) { + var docs = snapshot.docs + .where((element) => + startTime.compareTo(element["start-time"]) > 0 || + element["start-time"] == (startTime)) + .where((element) => + endTime.compareTo(element["end-time"]) < 0 || + element["end-time"] == (endTime)); + for (var doc in docs) { + sellers.add(Seller(doc["name"], doc["uid"], doc["location"], + TimeRange(doc["start-time"], doc["end-time"]), doc["price"])); + } + } else { + for (var doc in snapshot.docs) { + sellers.add(Seller(doc["name"], doc["uid"], doc["location"], + TimeRange(doc["start-time"], doc["end-time"]), doc["price"])); + } } return sellers; }