From 9040190d3359245cea4413062f28dd1b936358f9 Mon Sep 17 00:00:00 2001 From: Felipe D'Abrantes <felidabrantes@gmail> Date: Sat, 8 Apr 2023 00:02:43 +0100 Subject: [PATCH] Stop a user from liking a post numerous times --- .../feed-service/app/controllers/DailyController.scala | 2 ++ backend-services/feed-service/app/models/Daily.scala | 4 ++++ .../app/models/exceptions/ConflictException.scala | 3 +++ 3 files changed, 9 insertions(+) create mode 100644 backend-services/feed-service/app/models/exceptions/ConflictException.scala diff --git a/backend-services/feed-service/app/controllers/DailyController.scala b/backend-services/feed-service/app/controllers/DailyController.scala index 9b2dc147..0217dc2e 100644 --- a/backend-services/feed-service/app/controllers/DailyController.scala +++ b/backend-services/feed-service/app/controllers/DailyController.scala @@ -5,6 +5,7 @@ import play.api.mvc._ import play.api.libs.json.JsValue import models.{Daily} +import models.exceptions.ConflictException import scala.concurrent.TimeoutException import org.bson.types.ObjectId @@ -92,6 +93,7 @@ class DailyController @Inject()(val controllerComponents: ControllerComponents) Ok("Updated") } catch { case _: TimeoutException => BadRequest("Request timed out") + case ex: ConflictException => BadRequest(ex.getMessage()) case _: Throwable => BadRequest("Exception raised") } } diff --git a/backend-services/feed-service/app/models/Daily.scala b/backend-services/feed-service/app/models/Daily.scala index e4fa685f..db1c1098 100644 --- a/backend-services/feed-service/app/models/Daily.scala +++ b/backend-services/feed-service/app/models/Daily.scala @@ -1,6 +1,7 @@ package models import repositories.{DailyRepository} +import models.exceptions.{ConflictException} import scala.concurrent.ExecutionContext.Implicits.global import scala.concurrent.{Future, Await} @@ -67,6 +68,9 @@ object Daily { val result: Future[Unit] = for { daily: Daily <- dailyRepo.getById(dailyId) like: Unit <- { + // Check user has not already liked Daily + if (daily.usersLiked.contains(likerId)) throw new ConflictException("User has already liked this Daily.") + val updatedUsersLiked: Seq[ObjectId] = daily.usersLiked :+ likerId val update: Bson = Updates.set("usersLiked", updatedUsersLiked) diff --git a/backend-services/feed-service/app/models/exceptions/ConflictException.scala b/backend-services/feed-service/app/models/exceptions/ConflictException.scala new file mode 100644 index 00000000..bf99cc11 --- /dev/null +++ b/backend-services/feed-service/app/models/exceptions/ConflictException.scala @@ -0,0 +1,3 @@ +package models.exceptions + +case class ConflictException(message: String) extends Exception(message) -- GitLab