From d63507086dce15d6b677c1b59066e20b0eb04106 Mon Sep 17 00:00:00 2001
From: Felipe D'Abrantes <felidabrantes@gmail>
Date: Tue, 21 Mar 2023 11:23:32 +0000
Subject: [PATCH] Move controller logic to model (#19)

---
 .../app/controllers/DailyController.scala     | 29 +++++++------------
 .../feed-service/app/models/Daily.scala       | 20 +++++++++----
 2 files changed, 25 insertions(+), 24 deletions(-)

diff --git a/backend-services/feed-service/app/controllers/DailyController.scala b/backend-services/feed-service/app/controllers/DailyController.scala
index 87f3cc4e..ebe63be3 100644
--- a/backend-services/feed-service/app/controllers/DailyController.scala
+++ b/backend-services/feed-service/app/controllers/DailyController.scala
@@ -6,8 +6,7 @@ import play.api.mvc._
 
 import models.Daily
 
-import scala.concurrent.ExecutionContext.Implicits.global
-import scala.concurrent.{Future, Await, TimeoutException}
+import scala.concurrent.TimeoutException
 import scala.concurrent.duration._
 import org.bson.types.ObjectId
 
@@ -23,34 +22,26 @@ class DailyController @Inject()(val controllerComponents: ControllerComponents)
   def getAll() = Action { implicit request: Request[AnyContent] =>
     println("DailyController:getAll")
 
-    var result = Daily.getAllDailies()
-
     try {
-        // Wait for 4 seconds for the Future to complete
-        val resultCompleted = Await.result(result, 4.seconds)
-
-        val jsonResult: Seq[String] = resultCompleted.map(daily => Daily.toString(daily))
+        val result: Seq[Daily] = Daily.getAllDailiesAsync()
+        val jsonResult: Seq[String] = result.map(daily => Daily.toString(daily))
         Ok(jsonResult.toString())
     } catch {
-        case e: TimeoutException =>
-            BadRequest("Request timed out")
+        case ex: TimeoutException => BadRequest("Request timed out")
+        case ex => BadRequest("Exception raised")
     }
   }
 
   def create() = Action { implicit request: Request[AnyContent] =>
     println("DailyController:create")
 
-    // Dummy data
-    var result = Daily.createDaily(None, new ObjectId("641128f7e80bcd1ba39d04ae"), new ObjectId("641128f7e80bcd1ba39d04ae"), "asddas", 20)
-
     try {
-        // Wait for 4 seconds for the Future to complete
-        val resultCompleted = Await.result(result, 4.seconds)
-
-        Ok(Daily.toString(resultCompleted))
+        // Dummy data
+        val result = Daily.createDailyAsync(None, new ObjectId("641128f7e80bcd1ba39d04ae"), new ObjectId("641128f7e80bcd1ba39d04ae"), "asddas", 221)
+        Ok(Daily.toString(result))
     } catch {
-        case e: TimeoutException =>
-            BadRequest("Request timed out")
+        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 df57ba9b..b307af14 100644
--- a/backend-services/feed-service/app/models/Daily.scala
+++ b/backend-services/feed-service/app/models/Daily.scala
@@ -3,7 +3,8 @@ package models
 import repositories.DailyRepository
 import org.bson.types.ObjectId
 import scala.concurrent.ExecutionContext.Implicits.global
-import scala.concurrent.Future
+import scala.concurrent.{Future, Await}
+import scala.concurrent.duration._
 
 
 case class Daily(
@@ -17,15 +18,24 @@ case class Daily(
 object Daily {
     val dailyRepo = new DailyRepository()
 
-    def createDaily(
+    def createDailyAsync(
         id: Option[ObjectId],
         userId: ObjectId,
         questionId: ObjectId,
         content: String,
-        likes: Int
-    ): Future[Daily] = {
+        likes: Int,
+        timeout: Int = 4
+    ): Daily = {
         val daily: Daily = Daily(None, userId, questionId, content, likes)
-        dailyRepo.insertDaily(daily)
+        val future: Future[Daily] = dailyRepo.insertDaily(daily)
+        Await.result(future, timeout.seconds)
+    }
+
+    def getAllDailiesAsync(timeout: Int = 4): Seq[Daily] = {
+        val future: Future[Seq[Daily]] = dailyRepo.getAllDailies()
+        Await.result(future, timeout.seconds)
+    }
+
     }
 
     def getAllDailies(): Future[Seq[Daily]] = {
-- 
GitLab