From 8a13c6ed2e7393fdccea367865a2df5aa7bfaba1 Mon Sep 17 00:00:00 2001
From: Felipe D'Abrantes <felidabrantes@gmail>
Date: Tue, 28 Mar 2023 22:28:27 +0100
Subject: [PATCH] Add functionality to like a post

---
 .../feed-service/app/models/Daily.scala             |  9 +++++++++
 .../app/repositories/DailyRepository.scala          | 13 ++++++++++++-
 2 files changed, 21 insertions(+), 1 deletion(-)

diff --git a/backend-services/feed-service/app/models/Daily.scala b/backend-services/feed-service/app/models/Daily.scala
index 4432ce8e..38c239f3 100644
--- a/backend-services/feed-service/app/models/Daily.scala
+++ b/backend-services/feed-service/app/models/Daily.scala
@@ -61,6 +61,15 @@ object Daily {
         Await.result(result, timeout.seconds)
     }
 
+    def likeAsync(dailyId: ObjectId, userId: ObjectId, timeout: Int = 4): Unit = {
+        val result: Future[Unit] = for {
+            daily: Daily <- dailyRepo.getDaily(dailyId)
+            unit: Unit <- dailyRepo.like(daily, userId)
+        } yield unit
+
+        Await.result(result, timeout.seconds)
+    }
+
     // Convert from Daily object to JSON (serializing to JSON)
     def toJson(daily: Daily): JsValue = {
         val usersLikedAsJsStrings = daily.usersLiked.map(id => JsString(id.toString()))
diff --git a/backend-services/feed-service/app/repositories/DailyRepository.scala b/backend-services/feed-service/app/repositories/DailyRepository.scala
index ad58133a..cca9fe13 100644
--- a/backend-services/feed-service/app/repositories/DailyRepository.scala
+++ b/backend-services/feed-service/app/repositories/DailyRepository.scala
@@ -5,8 +5,9 @@ import com.typesafe.config.ConfigFactory
 import models.{Daily, MongoDBClient}
 
 import org.mongodb.scala.{MongoCollection, Document}
-import org.mongodb.scala.model.{Filters}
+import org.mongodb.scala.model.{Filters, Updates}
 import org.bson.types.ObjectId
+import org.bson.conversions.Bson
 
 import scala.concurrent.ExecutionContext.Implicits.global
 import scala.concurrent.{Future, Await}
@@ -108,6 +109,16 @@ class DailyRepository extends MongoDBClient {
             Future.successful(updatedDaily)
         })
     }
+
+    def like(daily: Daily, user: ObjectId): Future[Unit] = {
+        val updatedUsersLiked: Seq[ObjectId] = daily.usersLiked :+ user
+        val update: Bson = Updates.set("usersLiked", updatedUsersLiked)
+        val updates: Seq[Bson] = Seq(update)
+
+        val dailyId = daily.id.getOrElse(throw new RuntimeException)
+        val result = updateOne(dailiesCollection, dailyId, updates)
+        Future.successful(result)
+    }
 }
 
 
-- 
GitLab