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