diff --git a/lib/services/firestore_database.dart b/lib/services/firestore_database.dart index 642de8a4..44f28c86 100755 --- a/lib/services/firestore_database.dart +++ b/lib/services/firestore_database.dart @@ -20,24 +20,39 @@ setAllTodoComplete is require to change all todos item to have the complete stat changed to true. */ -class FirestoreDatabase { - FirestoreDatabase({required this.uid}) : assert(uid != null); - final String uid; +abstract class IFirestoreDatabase { final _firestoreService = FirestoreService.instance; + + Future setTodo(TodoModel todo); + Future deleteTodo(TodoModel todo); + Stream todoStream({required String todoId}); + Stream> todosStream(); + Future setAllTodoComplete(); + Future deleteAllTodoWithComplete(); + + +} + +class FirestoreDatabase extends IFirestoreDatabase { + FirestoreDatabase({required this.uid}) : assert(uid != null); + final String uid; //Method to create/update todoModel + @override Future setTodo(TodoModel todo) async => await _firestoreService.set( path: FirestorePath.todo(uid, todo.id), data: todo.toMap(), ); //Method to delete todoModel entry + @override Future deleteTodo(TodoModel todo) async { await _firestoreService.deleteData(path: FirestorePath.todo(uid, todo.id)); } //Method to retrieve todoModel object based on the given todoId + @override Stream todoStream({required String todoId}) => _firestoreService.documentStream( path: FirestorePath.todo(uid, todoId), @@ -45,12 +60,14 @@ class FirestoreDatabase { ); //Method to retrieve all todos item from the same user based on uid + @override Stream> todosStream() => _firestoreService.collectionStream( path: FirestorePath.todos(uid), builder: (data, documentId) => TodoModel.fromMap(data, documentId), ); //Method to mark all todoModel to be complete + @override Future setAllTodoComplete() async { final batchUpdate = FirebaseFirestore.instance.batch(); @@ -63,7 +80,8 @@ class FirestoreDatabase { } await batchUpdate.commit(); } - + + @override Future deleteAllTodoWithComplete() async { final batchDelete = FirebaseFirestore.instance.batch();