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