From a3b764084088d852ba4b4c5ba756ba6fdb8977f9 Mon Sep 17 00:00:00 2001
From: Felipe D'Abrantes <felidabrantes@gmail>
Date: Sat, 25 Mar 2023 21:54:32 +0000
Subject: [PATCH] Update liked attribute to list of user IDs

---
 backend-services/feed-service/app/models/Daily.scala     | 9 ++++++---
 .../feed-service/app/repositories/DailyRepository.scala  | 6 ++++--
 2 files changed, 10 insertions(+), 5 deletions(-)

diff --git a/backend-services/feed-service/app/models/Daily.scala b/backend-services/feed-service/app/models/Daily.scala
index 3d9f9fdf..4432ce8e 100644
--- a/backend-services/feed-service/app/models/Daily.scala
+++ b/backend-services/feed-service/app/models/Daily.scala
@@ -20,7 +20,7 @@ case class Daily(
     userId: ObjectId,
     questionId: ObjectId,
     content: String,
-    likes: Int,
+    usersLiked: Seq[ObjectId],
     createdAt: Date,
     updatedAt: Date
 )
@@ -36,7 +36,7 @@ object Daily {
         timeout: Int = 4
     ): Daily = {
         val now: Date = Date.from(Instant.now())
-        val daily: Daily = Daily(None, userId, questionId, content, 0, now, now)
+        val daily: Daily = Daily(None, userId, questionId, content, Seq.empty[ObjectId], now, now)
         val future: Future[Daily] = dailyRepo.insertDaily(daily)
         Await.result(future, timeout.seconds)
     }
@@ -63,6 +63,8 @@ object Daily {
 
     // Convert from Daily object to JSON (serializing to JSON)
     def toJson(daily: Daily): JsValue = {
+        val usersLikedAsJsStrings = daily.usersLiked.map(id => JsString(id.toString()))
+
         val dateFormat: SimpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'")
         val formattedCreatedAt: String = dateFormat.format(daily.createdAt)
         val formattedUpdatedAt: String = dateFormat.format(daily.updatedAt)
@@ -72,6 +74,7 @@ object Daily {
             "userId" -> JsString(daily.userId.toString()),
             "questionId" -> JsString(daily.questionId.toString()),
             "content" -> JsString(daily.content),
+            "usersLiked" -> JsArray(usersLikedAsJsStrings),
             "createdAt" -> JsString(formattedCreatedAt),
             "updatedAt" -> JsString(formattedUpdatedAt)
         )
@@ -87,5 +90,5 @@ object Daily {
     }
 
     def toString(daily: Daily): String =
-        return s"Daily(${daily.id.toString()}, ${daily.userId.toString()}, ${daily.questionId.toString()}, ${daily.content}, ${daily.likes})"
+        return s"Daily(${daily.id.toString()}, ${daily.userId.toString()}, ${daily.questionId.toString()}, ${daily.content}, ${daily.usersLiked.toString()})"
 }
diff --git a/backend-services/feed-service/app/repositories/DailyRepository.scala b/backend-services/feed-service/app/repositories/DailyRepository.scala
index facbd0f4..612cc4fd 100644
--- a/backend-services/feed-service/app/repositories/DailyRepository.scala
+++ b/backend-services/feed-service/app/repositories/DailyRepository.scala
@@ -12,6 +12,8 @@ import scala.concurrent.ExecutionContext.Implicits.global
 import scala.concurrent.{Future, Await}
 import scala.concurrent.duration._
 
+import scala.collection.JavaConverters._
+
 
 class DailyRepository extends MongoDBClient {
     // Loads the default configuration
@@ -82,7 +84,7 @@ class DailyRepository extends MongoDBClient {
             "user_id" -> daily.userId,
             "question_id" -> daily.questionId,
             "content" -> daily.content,
-            "likes" -> daily.likes,
+            "usersLiked" -> daily.usersLiked,
             "createdAt" -> daily.createdAt,
             "updatedAt" -> daily.updatedAt
         )
@@ -105,7 +107,7 @@ object DailyRepository {
             document.getObjectId("user_id"),
             document.getObjectId("question_id"),
             document.getString("content"),
-            document.getInteger("likes"),
+            document.getList("usersLiked", classOf[ObjectId]).asScala.toSeq,
             document.getDate("createdAt"),
             document.getDate("updatedAt")
         )
-- 
GitLab