@@ -4,32 +4,57 @@ import 'package:e_commerce_app/data/repository/repository.dart';
4
4
5
5
class FirebaseMessageRepository implements MessageRepository {
6
6
final userCollection = FirebaseFirestore .instance.collection ("users" );
7
- DocumentSnapshot ? lastDocument;
8
7
9
- /// Get all messages of logged user
10
- Future <List <Message >> getMessages ({
8
+ /// Get 20 the first messages
9
+ Stream <List <Message >> getRecentMessages ({
11
10
required String uid,
12
11
required int messagesLimit,
13
- required bool isTheFirstTime,
14
- }) async {
15
- Query messagesQuery = userCollection
12
+ }) {
13
+ return userCollection
16
14
.doc (uid)
17
15
.collection ("messages" )
18
16
.orderBy ("createdAt" , descending: true )
19
- .limit (messagesLimit);
20
-
21
- if (isTheFirstTime == false && lastDocument != null ) {
22
- messagesQuery = messagesQuery.startAfterDocument (lastDocument! );
23
- }
17
+ .limit (messagesLimit)
18
+ .snapshots ()
19
+ .map (
20
+ (snapshot) =>
21
+ snapshot.docs.map ((doc) => Message .fromMap (doc.data ()! )).toList (),
22
+ );
23
+ }
24
24
25
- QuerySnapshot querySnapshot = await messagesQuery.get ();
26
- if (querySnapshot.docs.isNotEmpty) {
27
- lastDocument = querySnapshot.docs[querySnapshot.docs.length - 1 ];
28
- }
25
+ @override
26
+ Future <List <Message >> getPreviousMessages ({
27
+ required String uid,
28
+ required int messagesLimit,
29
+ required Message lastMessage,
30
+ }) async {
31
+ var messagesCollection = userCollection.doc (uid).collection ("messages" );
32
+ // Gets a reference to the last message in the existing list
33
+ DocumentSnapshot lastDocument =
34
+ await messagesCollection.doc (lastMessage.id).get ();
35
+ return messagesCollection
36
+ .orderBy ("createdAt" , descending: true )
37
+ .startAfterDocument (lastDocument)
38
+ .limit (messagesLimit)
39
+ .get ()
40
+ .then (
41
+ (snapshot) =>
42
+ snapshot.docs.map ((doc) => Message .fromMap (doc.data ()! )).toList (),
43
+ );
44
+ }
29
45
30
- return querySnapshot.docs
31
- .map ((doc) => Message .fromMap (doc.data ()! ))
32
- .toList ();
46
+ Future <Message ?> getLastestMessage ({
47
+ required String uid,
48
+ }) async {
49
+ // Gets the lastest message in the existing list
50
+ QuerySnapshot querySnapshot = await userCollection
51
+ .doc (uid)
52
+ .collection ("messages" )
53
+ .orderBy ("createdAt" , descending: true )
54
+ .limit (1 )
55
+ .get ();
56
+ if (querySnapshot.docs.isEmpty) return null ;
57
+ return Message .fromMap (querySnapshot.docs[0 ].data ()! );
33
58
}
34
59
35
60
/// Add item
0 commit comments