From bb169e749dc1822ba32df64fc3686f40f996d5c0 Mon Sep 17 00:00:00 2001 From: Felipe D'Abrantes <felidabrantes@gmail> Date: Wed, 15 Mar 2023 02:55:41 +0000 Subject: [PATCH] Construct Daily repository with fetch method (#19) --- .../app/repositories/DailyRepository.scala | 56 +++++++++++++++++++ .../feed-service/conf/application.conf | 6 +- 2 files changed, 59 insertions(+), 3 deletions(-) create mode 100644 backend-services/feed-service/app/repositories/DailyRepository.scala diff --git a/backend-services/feed-service/app/repositories/DailyRepository.scala b/backend-services/feed-service/app/repositories/DailyRepository.scala new file mode 100644 index 00000000..8daeddc4 --- /dev/null +++ b/backend-services/feed-service/app/repositories/DailyRepository.scala @@ -0,0 +1,56 @@ +package repositories + +import com.typesafe.config.ConfigFactory + +import models.{Daily, MongoDBClient} + +import org.mongodb.scala.{MongoCollection, Document} +import org.bson.types.ObjectId + +import scala.concurrent.ExecutionContext.Implicits.global +import scala.concurrent.{Future, Await} +import scala.concurrent.duration._ + + +class DailyRepository extends MongoDBClient { + // Loads the default configuration + private val config = ConfigFactory.load() + + private val databaseName = config.getString("mongo.feedService.db") + private val collectionName = config.getString("mongo.dailies.collection") + + /** + * Returns a reference to a MongoDB collection within a database. + * Once Future completes, collection reference is returned. + * + * @return a MongoCollection[Document] object representing the dailies collection. + * @throws TimeoutException if the Future doesn't complete within the 3 second timeout. + */ + private def dailiesCollection: MongoCollection[Document] = { + val futureCollection = for { + database <- getDatabase(databaseName) + collection <- getCollection(database, collectionName) + } yield collection + + Await.result(futureCollection, 3.seconds) + } + + /** + * Gets all the Daily records. + * + * @return A Future containing a sequence of matching Daily objects. + */ + def getAllDailies(): Future[Seq[Daily]] = { + val documents: Future[Seq[Document]] = find(dailiesCollection) + + documents.map(document => { + document.map(doc => Daily( + Some(doc.getObjectId("_id")), + doc.getObjectId("user_id"), + doc.getObjectId("question_id"), + doc.getString("content"), + doc.getInteger("likes") + )) + }) + } +} diff --git a/backend-services/feed-service/conf/application.conf b/backend-services/feed-service/conf/application.conf index 852c11d6..21793f26 100644 --- a/backend-services/feed-service/conf/application.conf +++ b/backend-services/feed-service/conf/application.conf @@ -1,4 +1,4 @@ -# Default Configuration File - # MongoDB Connection Strings -mongodb.uri = "mongodb://localhost:27017/" +mongodb.uri="mongodb://localhost:27017/" +mongo.feedService.db = "feed-service" +mongo.dailies.collection = "dailies" -- GitLab