diff --git a/.github/workflows/flutter.yml b/.github/workflows/melos-ci.yml similarity index 100% rename from .github/workflows/flutter.yml rename to .github/workflows/melos-ci.yml diff --git a/.gitignore b/.gitignore index e4d7ae3..57e0157 100644 --- a/.gitignore +++ b/.gitignore @@ -29,6 +29,8 @@ pubspec.lock .packages build/ .metadata +.flutter-plugins +.flutter-plugins-dependencies android/ ios/ diff --git a/packages/flutter_timetable_firebase/example/lib/main.dart b/packages/flutter_timetable_firebase/example/lib/main.dart index 5eae2ef..e1f963f 100644 --- a/packages/flutter_timetable_firebase/example/lib/main.dart +++ b/packages/flutter_timetable_firebase/example/lib/main.dart @@ -16,7 +16,7 @@ class MyRosterModel extends TimetableEvent { final myRosterServiceProvider = Provider( (ref) => FirebaseTimetableService( - options: FirebaseTimetableOptions(timelineCollectionName: 'roster'), + options: FirebaseTimetableOptions(timetableCollectionName: 'roster'), ), ); diff --git a/packages/flutter_timetable_firebase/lib/src/config/firebase_timetable_options.dart b/packages/flutter_timetable_firebase/lib/src/config/firebase_timetable_options.dart index 7accb14..2f00be2 100644 --- a/packages/flutter_timetable_firebase/lib/src/config/firebase_timetable_options.dart +++ b/packages/flutter_timetable_firebase/lib/src/config/firebase_timetable_options.dart @@ -7,15 +7,23 @@ import 'package:flutter/material.dart'; @immutable class FirebaseTimetableOptions { const FirebaseTimetableOptions({ - this.timelineCollectionName = 'timetable', + this.timetableCollectionName = 'timetable', + this.cachingStrategy = TimetableCachingStrategy.alwaysFetch, }); + // the collection reference name + final String timetableCollectionName; - final String timelineCollectionName; + /// Changes the Firebase Timetable Service to use different caching approaches + final TimetableCachingStrategy cachingStrategy; } -enum FirebaseTimetableServiceStrategy { +enum TimetableCachingStrategy { + // Everytime the timetable is requested it will be fetched from the database alwaysFetch, + // if you use fetchOnce the timetable events will be fetched only once fetchOnce, + // will first be fetched and after that updates will be listened to fetchOnceAndListen, + // if you use listen the timetable events will be updated in real time listen, } diff --git a/packages/flutter_timetable_firebase/lib/src/services/firebase_timetable_service.dart b/packages/flutter_timetable_firebase/lib/src/services/firebase_timetable_service.dart index 1a48420..881335e 100644 --- a/packages/flutter_timetable_firebase/lib/src/services/firebase_timetable_service.dart +++ b/packages/flutter_timetable_firebase/lib/src/services/firebase_timetable_service.dart @@ -1,23 +1,33 @@ +import 'package:cloud_firestore/cloud_firestore.dart'; +import 'package:firebase_core/firebase_core.dart'; import 'package:flutter/material.dart'; import 'package:flutter_timetable_firebase/src/config/firebase_timetable_options.dart'; import 'package:flutter_timetable_interface/flutter_timetable_interface.dart'; -class FirebaseTimetableService +class FirebaseTimetableService with ChangeNotifier implements TimetableService { FirebaseTimetableService({ - required this.options, - }); + FirebaseApp? app, + options = const FirebaseTimetableOptions(), + }) { + var appInstance = app ?? Firebase.app(); + _db = FirebaseFirestore.instanceFor(app: appInstance); + _options = options; + } - final FirebaseTimetableOptions options; + late FirebaseTimetableOptions _options; + late FirebaseFirestore _db; @override - Future addEvent(event) async { + Future addEvent(Event event) async { + event.toJson(); + throw UnimplementedError(); } @override - Future checkForConflict(event, DateTime day) async { + Future checkForConflict(Event event, DateTime day) async { throw UnimplementedError(); } @@ -27,12 +37,13 @@ class FirebaseTimetableService } @override - Future> fetchEventsForDay(DateTime day) async { + Future> fetchEventsForDay(DateTime day, + {String? category}) async { throw UnimplementedError(); } @override - List getEventsForDay(DateTime day) { + List getEventsForDay(DateTime day, {String? category}) { throw UnimplementedError(); } diff --git a/packages/flutter_timetable_firebase/pubspec.yaml b/packages/flutter_timetable_firebase/pubspec.yaml index 38a6512..8785b8e 100644 --- a/packages/flutter_timetable_firebase/pubspec.yaml +++ b/packages/flutter_timetable_firebase/pubspec.yaml @@ -13,6 +13,8 @@ environment: flutter: ">=1.17.0" dependencies: + cloud_firestore: ^4.13.3 + firebase_core: ^2.24.0 flutter: sdk: flutter flutter_timetable_interface: diff --git a/packages/flutter_timetable_interface/lib/src/models/timetable_event.dart b/packages/flutter_timetable_interface/lib/src/models/timetable_event.dart index d3d7ce1..62215a3 100644 --- a/packages/flutter_timetable_interface/lib/src/models/timetable_event.dart +++ b/packages/flutter_timetable_interface/lib/src/models/timetable_event.dart @@ -12,6 +12,7 @@ class TimetableEvent { required this.end, required this.entityId, required this.eventId, + this.category, }); /// The date at which the event starts @@ -27,4 +28,18 @@ class TimetableEvent { /// The identifier of the entity that the event belongs to /// This is used to check for conflicts between entities final String entityId; + + /// This can be used to filter events + final String? category; + + // tojson method and a factory fromJson contructor + Map toJson() => {}; + + factory TimetableEvent.fromJson(String eventId, Map json) => + TimetableEvent( + start: json['start'], + end: json['end'], + entityId: json[''], + eventId: eventId, + ); } diff --git a/packages/flutter_timetable_interface/lib/src/services/timetable_service.dart b/packages/flutter_timetable_interface/lib/src/services/timetable_service.dart index efffb60..e570767 100644 --- a/packages/flutter_timetable_interface/lib/src/services/timetable_service.dart +++ b/packages/flutter_timetable_interface/lib/src/services/timetable_service.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; abstract class TimetableService with ChangeNotifier { - Future> fetchEventsForDay(DateTime day); - List getEventsForDay(DateTime day); + Future> fetchEventsForDay(DateTime day, {String? category}); + List getEventsForDay(DateTime day, {String? category}); Future addEvent(Event event); Future updateEvent(Event event); Future deleteEvent(Event event);