From d53dfe31cd419483fe80dec6d7e90013fb8af668 Mon Sep 17 00:00:00 2001
From: gabor <gabor7d2@gmail.com>
Date: Wed, 28 Feb 2024 17:07:37 +0100
Subject: [PATCH] Add Submission entity, cleanup

---
 Rendelosch/Models/Field.cs                    |  5 +-
 Rendelosch/Models/ProductForm.cs              |  7 +-
 Rendelosch/Models/Submission.cs               | 14 +++
 Rendelosch/Pages/Index.cshtml                 | 14 +--
 Rendelosch/Pages/Index.cshtml.cs              | 21 +---
 .../Repository/IProductFormRepository.cs      | 11 ++-
 .../Repository/MemoryProductFormRepository.cs | 99 +++++++++++++++----
 7 files changed, 120 insertions(+), 51 deletions(-)
 create mode 100644 Rendelosch/Models/Submission.cs

diff --git a/Rendelosch/Models/Field.cs b/Rendelosch/Models/Field.cs
index 9eb3475..16a9f25 100644
--- a/Rendelosch/Models/Field.cs
+++ b/Rendelosch/Models/Field.cs
@@ -2,10 +2,13 @@
 
 public class Field
 {
+    public readonly string Key;
+    
     public readonly string Name;
 
-    public Field(string name)
+    public Field(string key, string name)
     {
+        Key = key;
         Name = name;
     }
 }
\ No newline at end of file
diff --git a/Rendelosch/Models/ProductForm.cs b/Rendelosch/Models/ProductForm.cs
index 6a689ca..e97fe59 100644
--- a/Rendelosch/Models/ProductForm.cs
+++ b/Rendelosch/Models/ProductForm.cs
@@ -5,11 +5,14 @@ public class ProductForm
     public readonly string Id;
     public readonly string Title;
     
-    public readonly List<Field> Fields = new();
+    public readonly List<Field> Fields;
+    
+    public readonly List<Submission> Submissions = new();
 
-    public ProductForm(string id, string title)
+    public ProductForm(string id, string title, List<Field> fields)
     {
         Id = id;
         Title = title;
+        Fields = fields;
     }
 }
\ No newline at end of file
diff --git a/Rendelosch/Models/Submission.cs b/Rendelosch/Models/Submission.cs
new file mode 100644
index 0000000..3053b02
--- /dev/null
+++ b/Rendelosch/Models/Submission.cs
@@ -0,0 +1,14 @@
+namespace Rendelosch.Models;
+
+public class Submission
+{
+    public readonly string Id;
+    
+    public readonly Dictionary<Field, string> FieldData;
+
+    public Submission(string id, Dictionary<Field, string> fieldData)
+    {
+        Id = id;
+        FieldData = fieldData;
+    }
+}
\ No newline at end of file
diff --git a/Rendelosch/Pages/Index.cshtml b/Rendelosch/Pages/Index.cshtml
index 8a1ca94..01e97a7 100644
--- a/Rendelosch/Pages/Index.cshtml
+++ b/Rendelosch/Pages/Index.cshtml
@@ -1,22 +1,22 @@
 @page
 @model Rendelosch.Pages.Index
 @{
-    ViewData["Title"] = "Index";
+    ViewData["Title"] = "Home";
 }
 
 <div class="container-lg">
-    <form method="post">
-        <a class="btn btn-primary my-4">Új űrlap létrehozása</a>
-    </form>
+    <a class="btn btn-primary my-4" asp-page="CreateProductForm">Create Product Form</a>
     <div>
         @{
-            foreach (var productForm in Model.GetRepository().GetProductForms())
+            foreach (var productForm in Model.Repository.GetProductForms())
             {
                 <div class="card mb-3">
                     <div class="card-body">
                         <div class="d-flex flex-row align-items-center">
-                            <h5 class="card-title m-0 me-3">@productForm.Title</h5>
-                            <a class="btn btn-outline-primary">Kitöltés</a>
+                            <a asp-page="SubmitForm" asp-route-id="@productForm.Id">
+                                <h5 class="card-title m-0 me-3">@productForm.Title</h5>
+                            </a>
+                            <a class="btn btn-outline-primary mx-1" asp-page="SubmittedForms" asp-route-id="@productForm.Id">Submissions</a>
                         </div>
                     </div>
                 </div>
diff --git a/Rendelosch/Pages/Index.cshtml.cs b/Rendelosch/Pages/Index.cshtml.cs
index e99ba2d..cd24ff2 100644
--- a/Rendelosch/Pages/Index.cshtml.cs
+++ b/Rendelosch/Pages/Index.cshtml.cs
@@ -6,25 +6,10 @@ namespace Rendelosch.Pages;
 
 public class Index : PageModel
 {
-    private readonly IProductFormRepository _repository;
-
-    public Index(IProductFormRepository repository)
-    {
-        _repository = repository;
-    }
+    public IProductFormRepository Repository { get; }
     
-    public IProductFormRepository GetRepository()
-    {
-        return _repository;
-    }
-    
-    public void OnGet()
-    {
-        
-    }
-
-    public void OnPost()
+    public Index(IProductFormRepository repository)
     {
-        
+        Repository = repository;
     }
 }
\ No newline at end of file
diff --git a/Rendelosch/Repository/IProductFormRepository.cs b/Rendelosch/Repository/IProductFormRepository.cs
index e88bc38..c4b55bb 100644
--- a/Rendelosch/Repository/IProductFormRepository.cs
+++ b/Rendelosch/Repository/IProductFormRepository.cs
@@ -5,8 +5,13 @@ namespace Rendelosch.Repository;
 public interface IProductFormRepository
 {
     public List<ProductForm> GetProductForms();
-    
-    public string CreateProductForm(string formTitle);
 
-    public bool AddFieldToProductForm(string formId, string fieldName);
+    public ProductForm? GetProductForm(string formId);
+    
+    public ProductForm CreateProductForm(string formTitle, List<Field> formFields);
+    
+    
+    public List<Submission>? GetSubmissionsForProductForm(string formId);
+    
+    public Submission? AddSubmissionToProductForm(string formId, Dictionary<string, string> fieldData);
 }
\ No newline at end of file
diff --git a/Rendelosch/Repository/MemoryProductFormRepository.cs b/Rendelosch/Repository/MemoryProductFormRepository.cs
index 683cac4..32011b3 100644
--- a/Rendelosch/Repository/MemoryProductFormRepository.cs
+++ b/Rendelosch/Repository/MemoryProductFormRepository.cs
@@ -8,20 +8,54 @@ public class MemoryProductFormRepository : IProductFormRepository
 
     public MemoryProductFormRepository()
     {
-        var sampleForm1 = new ProductForm(Guid.NewGuid().ToString(), "DevTeam pulcsi");
-        sampleForm1.Fields.Add(new Field("Név"));
-        sampleForm1.Fields.Add(new Field("Email"));
-        sampleForm1.Fields.Add(new Field("Méret (XS/S/M/L/XL/XXL)"));
-        
-        var sampleForm2 = new ProductForm(Guid.NewGuid().ToString(), "DevTeam kiskacsa");
-        sampleForm2.Fields.Add(new Field("Név"));
-        sampleForm2.Fields.Add(new Field("Email"));
-        sampleForm2.Fields.Add(new Field("Telefonszám"));
-        sampleForm2.Fields.Add(new Field("Szín (sárga/zöld/kék)"));
-        sampleForm2.Fields.Add(new Field("Megjegyzés"));
-        
+        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()
@@ -29,19 +63,44 @@ public class MemoryProductFormRepository : IProductFormRepository
         return _productForms;
     }
 
-    public string CreateProductForm(string formTitle)
+    public ProductForm? GetProductForm(string formId)
     {
-        var guid = Guid.NewGuid().ToString();
-        _productForms.Add(new ProductForm(guid, formTitle));
-        return guid;
+        return _productForms.Find(f => f.Id == formId);
     }
 
-    public bool AddFieldToProductForm(string formId, string fieldName)
+    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 false;
-        form.Fields.Add(new Field(fieldName));
+        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);
+        }
         
-        return true;
+        var submission = new Submission(Guid.NewGuid().ToString(), submissionFieldData);
+        form.Submissions.Add(submission);
+        return submission;
     }
 }
\ No newline at end of file
-- 
GitLab