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