From a7a7393a4b7bcfbe1439467d8ba188604ab40bc2 Mon Sep 17 00:00:00 2001 From: Felipe D'Abrantes <felidabrantes@gmail> Date: Tue, 21 Mar 2023 22:42:19 +0000 Subject: [PATCH] Add functionality to fetch user's feed --- .../feed-service/app/models/Daily.scala | 10 +++++++++ .../app/repositories/DailyRepository.scala | 22 +++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/backend-services/feed-service/app/models/Daily.scala b/backend-services/feed-service/app/models/Daily.scala index 00460abd..64bb5554 100644 --- a/backend-services/feed-service/app/models/Daily.scala +++ b/backend-services/feed-service/app/models/Daily.scala @@ -44,6 +44,16 @@ object Daily { Await.result(future, timeout.seconds) } + def getUserFeedAsync(userId: ObjectId, timeout: Int = 4): Seq[Daily] = { + // Sequentially waits for Future objects to complete before calling next method + val result: Future[Seq[Daily]] = for { + friends: Seq[ObjectId] <- User.getUserFriends(userId) + feed: Seq[Daily] <- dailyRepo.getUserDailies(friends) + } yield feed + + Await.result(result, timeout.seconds) + } + // Convert from Daily object to JSON (serializing to JSON) def toJson(daily: Daily): JsValue = { val dailyJson = Seq( diff --git a/backend-services/feed-service/app/repositories/DailyRepository.scala b/backend-services/feed-service/app/repositories/DailyRepository.scala index d2b13184..5e188981 100644 --- a/backend-services/feed-service/app/repositories/DailyRepository.scala +++ b/backend-services/feed-service/app/repositories/DailyRepository.scala @@ -75,6 +75,28 @@ class DailyRepository extends MongoDBClient { }) } + /** + * Gets all the user's Dailies. + * + * @return A Future containing a sequence of the user's Daily objects. + */ + def getUserDailies(userIds: Seq[ObjectId]): Future[Seq[Daily]] = { + // The syntax userIds: _* is used to convert the List of ObjectId instances to a variable-length argument list + val userFilter = Filters.in("user_id", userIds: _*) + val documents: Future[Seq[Document]] = find(dailiesCollection, userFilter) + + documents.map(document => { + println(documents) + document.map(doc => Daily( + Some(doc.getObjectId("_id")), + doc.getObjectId("user_id"), + doc.getObjectId("question_id"), + doc.getString("content"), + doc.getInteger("likes") + )) + }) + } + /** * Inserts a Daily record into the database. * -- GitLab