From 7338eb288e3f860768fae8523f5a9d22ded66764 Mon Sep 17 00:00:00 2001
From: Felipe D'Abrantes <felidabrantes@gmail>
Date: Tue, 21 Mar 2023 11:29:12 +0000
Subject: [PATCH] Return JSON intead of string (#19)

---
 .../app/controllers/DailyController.scala     |  7 ++++---
 .../feed-service/app/models/Daily.scala       | 21 +++++++++++++++++--
 2 files changed, 23 insertions(+), 5 deletions(-)

diff --git a/backend-services/feed-service/app/controllers/DailyController.scala b/backend-services/feed-service/app/controllers/DailyController.scala
index ebe63be3..1c1f1350 100644
--- a/backend-services/feed-service/app/controllers/DailyController.scala
+++ b/backend-services/feed-service/app/controllers/DailyController.scala
@@ -24,8 +24,8 @@ class DailyController @Inject()(val controllerComponents: ControllerComponents)
 
     try {
         val result: Seq[Daily] = Daily.getAllDailiesAsync()
-        val jsonResult: Seq[String] = result.map(daily => Daily.toString(daily))
-        Ok(jsonResult.toString())
+        val jsonResult = Daily.toJson(result)
+        Ok(jsonResult)
     } catch {
         case ex: TimeoutException => BadRequest("Request timed out")
         case ex => BadRequest("Exception raised")
@@ -38,7 +38,8 @@ class DailyController @Inject()(val controllerComponents: ControllerComponents)
     try {
         // Dummy data
         val result = Daily.createDailyAsync(None, new ObjectId("641128f7e80bcd1ba39d04ae"), new ObjectId("641128f7e80bcd1ba39d04ae"), "asddas", 221)
-        Ok(Daily.toString(result))
+        val jsonResult = Daily.toJson(result)
+        Ok(jsonResult)
     } catch {
         case e: TimeoutException => BadRequest("Request timed out")
         case ex => BadRequest("Exception raised")
diff --git a/backend-services/feed-service/app/models/Daily.scala b/backend-services/feed-service/app/models/Daily.scala
index b307af14..b5cfbc2c 100644
--- a/backend-services/feed-service/app/models/Daily.scala
+++ b/backend-services/feed-service/app/models/Daily.scala
@@ -6,6 +6,9 @@ import scala.concurrent.ExecutionContext.Implicits.global
 import scala.concurrent.{Future, Await}
 import scala.concurrent.duration._
 
+import play.api.libs.json.Json
+import play.api.libs.json.{Json, JsValue, JsString, JsNumber, JsObject, JsArray}
+
 
 case class Daily(
     id: Option[ObjectId],
@@ -36,10 +39,24 @@ object Daily {
         Await.result(future, timeout.seconds)
     }
 
+    // Convert from Daily object to JSON (serializing to JSON)
+    def toJson(daily: Daily): JsValue = {
+        val dailyJson = Seq(
+            "id" -> JsString(daily.id.getOrElse("").toString()),
+            "userId" -> JsString(daily.userId.toString()),
+            "questionId" -> JsString(daily.questionId.toString()),
+            "content" -> JsString(daily.content),
+            "likes" -> JsNumber(daily.likes)
+        )
+        
+        Json.toJson(JsObject(dailyJson))
     }
 
-    def getAllDailies(): Future[Seq[Daily]] = {
-        dailyRepo.getAllDailies()
+    // Convert from Daily set to JSON (serializing to JSON)
+    def toJson(dailies: Seq[Daily]): JsValue = {
+        val dailiesJson = dailies.map(daily => Daily.toJson(daily))
+
+        Json.toJson(JsArray(dailiesJson))
     }
 
     def toString(daily: Daily): String =
-- 
GitLab