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