From 3192d472efb44e2cbc89e55f1a60fb597399608f Mon Sep 17 00:00:00 2001
From: gabor <gabor7d2@gmail.com>
Date: Wed, 13 Mar 2024 19:10:37 +0100
Subject: [PATCH] Add MongoDBRepository and stuff

---
 Rendelosch/Models/ProductForm.cs              |  11 +-
 Rendelosch/Models/Submission.cs               |   9 +-
 Rendelosch/Pages/SubmissionsPage.cshtml       |   2 +-
 Rendelosch/Program.cs                         |   2 +-
 Rendelosch/Properties/launchSettings.json     |   3 +-
 Rendelosch/Rendelosch.csproj                  |   4 +
 .../Repository/MemoryProductFormRepository.cs | 106 ------------------
 .../MongoDBProductFormRepository.cs           |  54 +++++++++
 8 files changed, 72 insertions(+), 119 deletions(-)
 delete mode 100644 Rendelosch/Repository/MemoryProductFormRepository.cs
 create mode 100644 Rendelosch/Repository/MongoDBProductFormRepository.cs

diff --git a/Rendelosch/Models/ProductForm.cs b/Rendelosch/Models/ProductForm.cs
index 97fb449..b7a3aa1 100644
--- a/Rendelosch/Models/ProductForm.cs
+++ b/Rendelosch/Models/ProductForm.cs
@@ -1,15 +1,15 @@
 using System.Collections;
+using MongoDB.Bson.Serialization.Attributes;
 
 namespace Rendelosch.Models;
 
-public class ProductForm : IEnumerable
+public class ProductForm
 {
+    [BsonId]
     public readonly string Id;
     public readonly string Title;
     
     public readonly List<Field> Fields;
-    
-    public readonly List<Submission> Submissions = new();
 
     public ProductForm(string id, string title, List<Field> fields)
     {
@@ -17,9 +17,4 @@ public class ProductForm : IEnumerable
         Title = title;
         Fields = fields;
     }
-
-    public IEnumerator GetEnumerator()
-    {
-        throw new NotImplementedException();
-    }
 }
\ No newline at end of file
diff --git a/Rendelosch/Models/Submission.cs b/Rendelosch/Models/Submission.cs
index 3053b02..d4bee79 100644
--- a/Rendelosch/Models/Submission.cs
+++ b/Rendelosch/Models/Submission.cs
@@ -1,12 +1,17 @@
+using MongoDB.Bson.Serialization.Attributes;
+
 namespace Rendelosch.Models;
 
 public class Submission
 {
+    [BsonId]
     public readonly string Id;
+
+    public readonly string ProductFormId;
     
-    public readonly Dictionary<Field, string> FieldData;
+    public readonly Dictionary<string, string> FieldData;
 
-    public Submission(string id, Dictionary<Field, string> fieldData)
+    public Submission(string id, Dictionary<string, string> fieldData)
     {
         Id = id;
         FieldData = fieldData;
diff --git a/Rendelosch/Pages/SubmissionsPage.cshtml b/Rendelosch/Pages/SubmissionsPage.cshtml
index b3864a4..81750e5 100644
--- a/Rendelosch/Pages/SubmissionsPage.cshtml
+++ b/Rendelosch/Pages/SubmissionsPage.cshtml
@@ -23,7 +23,7 @@
             foreach (var field in submission.FieldData)
             {
                 <div class="col-4">
-                                    <h5 class="card-title">@field.Key.Name</h5>
+                                    <h5 class="card-title">@field.Key</h5>
 
                                     <p>@field.Value</p>
                                 </div>
diff --git a/Rendelosch/Program.cs b/Rendelosch/Program.cs
index e9377a5..1d7a765 100644
--- a/Rendelosch/Program.cs
+++ b/Rendelosch/Program.cs
@@ -5,7 +5,7 @@ var builder = WebApplication.CreateBuilder(args);
 // Add services to the container.
 builder.Services.AddRazorPages();
 
-builder.Services.AddSingleton<IProductFormRepository>(new MemoryProductFormRepository());
+builder.Services.AddSingleton<IProductFormRepository>(new MongoDBProductFormRepository());
 
 var app = builder.Build();
 
diff --git a/Rendelosch/Properties/launchSettings.json b/Rendelosch/Properties/launchSettings.json
index 72f0121..c82203a 100644
--- a/Rendelosch/Properties/launchSettings.json
+++ b/Rendelosch/Properties/launchSettings.json
@@ -15,7 +15,8 @@
       "launchBrowser": false,
       "applicationUrl": "http://localhost:5081",
       "environmentVariables": {
-        "ASPNETCORE_ENVIRONMENT": "Development"
+        "ASPNETCORE_ENVIRONMENT": "Development",
+        "MONGODB_URI":  "mongodb://localhost:27017"
       }
     },
     "https": {
diff --git a/Rendelosch/Rendelosch.csproj b/Rendelosch/Rendelosch.csproj
index 25ffd99..247d9c0 100644
--- a/Rendelosch/Rendelosch.csproj
+++ b/Rendelosch/Rendelosch.csproj
@@ -10,4 +10,8 @@
     <_ContentIncludedByDefault Remove="wwwroot\css\site.css" />
   </ItemGroup>
 
+  <ItemGroup>
+    <PackageReference Include="MongoDB.Driver" Version="2.24.0" />
+  </ItemGroup>
+
 </Project>
diff --git a/Rendelosch/Repository/MemoryProductFormRepository.cs b/Rendelosch/Repository/MemoryProductFormRepository.cs
deleted file mode 100644
index 32011b3..0000000
--- a/Rendelosch/Repository/MemoryProductFormRepository.cs
+++ /dev/null
@@ -1,106 +0,0 @@
-using Rendelosch.Models;
-
-namespace Rendelosch.Repository;
-
-public class MemoryProductFormRepository : IProductFormRepository
-{
-    private List<ProductForm> _productForms = new();
-
-    public MemoryProductFormRepository()
-    {
-        var form1Fields = new List<Field>
-        {
-            new Field("name", "Név"),
-            new Field("email", "Email"),
-            new Field("size", "Méret (XS/S/M/L/XL/XXL)")
-        };
-        var sampleForm1 = new ProductForm("551d6601-7f08-4bd5-ab3a-a391c171e188", "DevTeam pulcsi", form1Fields);
-        _productForms.Add(sampleForm1);
-        
-        var form2Fields = new List<Field>
-        {
-            new Field("name", "Név"),
-            new Field("email", "Email"),
-            new Field("phone_number", "Telefonszám"),
-            new Field("colour", "Szín (sárga/zöld/kék)"),
-            new Field("note", "Megjegyzés")
-        };
-        var sampleForm2 = new ProductForm("64996c3e-51ca-444a-90ec-b387f73a84ed", "DevTeam kiskacsa", form2Fields);
-        _productForms.Add(sampleForm2);
-
-        var sampleSubmission1FieldData = new Dictionary<Field, string>
-        {
-            { sampleForm1.Fields[0], "Kovács Béla" },
-            { sampleForm1.Fields[1], "asd@gmail.com" },
-            { sampleForm1.Fields[2], "M" }
-        };
-        var sampleSubmission1 = new Submission("ce9a1a9e-1123-464d-a3ec-740058502f6d", sampleSubmission1FieldData);
-        sampleForm1.Submissions.Add(sampleSubmission1);
-        
-        var sampleSubmission2FieldData = new Dictionary<Field, string>
-        {
-            { sampleForm2.Fields[0], "Teszt Elek" },
-            { sampleForm2.Fields[1], "erogr@sd.hu" },
-            { sampleForm2.Fields[2], "06301234567" },
-            { sampleForm2.Fields[3], "zöld" },
-            { sampleForm2.Fields[4], "Rántotta" }
-        };
-        var sampleSubmission2 = new Submission("d84cf551-96cc-4620-962f-023fefa94b2f", sampleSubmission2FieldData);
-        sampleForm2.Submissions.Add(sampleSubmission2);
-        
-        var sampleSubmission3FieldData = new Dictionary<Field, string>
-        {
-            { sampleForm1.Fields[0], "kisegér" },
-            { sampleForm1.Fields[1], "123123" },
-            { sampleForm1.Fields[2], "óriási, hatalmas, leviatán" }
-        };
-        var sampleSubmission3 = new Submission("106a67ca-acc0-42b5-9a40-18f12a6c7aa1", sampleSubmission3FieldData);
-        sampleForm1.Submissions.Add(sampleSubmission3);
-    }
-
-    public List<ProductForm> GetProductForms()
-    {
-        return _productForms;
-    }
-
-    public ProductForm? GetProductForm(string formId)
-    {
-        return _productForms.Find(f => f.Id == formId);
-    }
-
-    public ProductForm CreateProductForm(string formTitle, List<Field> formFields)
-    {
-        var newForm = new ProductForm(Guid.NewGuid().ToString(), formTitle, formFields);
-        _productForms.Add(newForm);
-        return newForm;
-    }
-
-    public List<Submission>? GetSubmissionsForProductForm(string formId)
-    {
-        var form = _productForms.Find(f => f.Id == formId);
-        if (form == null) return null;
-        
-        return form.Submissions;
-    }
-
-    public Submission? AddSubmissionToProductForm(string formId, Dictionary<string, string> fieldData)
-    {
-        // find form
-        var form = _productForms.Find(f => f.Id == formId);
-        if (form == null) return null;
-        
-        // construct submission field data
-        var submissionFieldData = new Dictionary<Field, string>();
-        foreach (var (key, value) in fieldData)
-        {
-            // find field in form
-            var field = form.Fields.Find(f => f.Key == key);
-            if (field == null) return null;
-            submissionFieldData.Add(field, value);
-        }
-        
-        var submission = new Submission(Guid.NewGuid().ToString(), submissionFieldData);
-        form.Submissions.Add(submission);
-        return submission;
-    }
-}
\ No newline at end of file
diff --git a/Rendelosch/Repository/MongoDBProductFormRepository.cs b/Rendelosch/Repository/MongoDBProductFormRepository.cs
new file mode 100644
index 0000000..389b3af
--- /dev/null
+++ b/Rendelosch/Repository/MongoDBProductFormRepository.cs
@@ -0,0 +1,54 @@
+using MongoDB.Driver;
+using Rendelosch.Models;
+
+namespace Rendelosch.Repository;
+
+public class MongoDBProductFormRepository : IProductFormRepository
+{
+
+    public MongoDBProductFormRepository()
+    {
+        var connectionString = Environment.GetEnvironmentVariable("MONGODB_URI");
+        if (connectionString == null)
+        {
+            Console.WriteLine("MONGODB_URI environment variable is not set");
+            Environment.Exit(0);
+        }
+        
+        var client = new MongoClient(connectionString);
+
+        var database = client.GetDatabase("rendelosch");
+        var productFormsCollection = database.GetCollection<ProductForm>("productForms");
+        var submissionsCollection = database.GetCollection<Submission>("submissions");
+
+        var productForm = productFormsCollection.Find(c => c.Id == "c9d52472-9263-4610-93ca-ce16ba02c4d7").First();
+
+        Console.WriteLine("Product Form: " + productForm);
+    }
+    
+    
+    public List<ProductForm> GetProductForms()
+    {
+        throw new NotImplementedException();
+    }
+
+    public ProductForm? GetProductForm(string formId)
+    {
+        throw new NotImplementedException();
+    }
+
+    public ProductForm CreateProductForm(string formTitle, List<Field> formFields)
+    {
+        throw new NotImplementedException();
+    }
+
+    public List<Submission>? GetSubmissionsForProductForm(string formId)
+    {
+        throw new NotImplementedException();
+    }
+
+    public Submission? AddSubmissionToProductForm(string formId, Dictionary<string, string> fieldData)
+    {
+        throw new NotImplementedException();
+    }
+}
\ No newline at end of file
-- 
GitLab