diff --git a/Rendelosch/Models/ProductForm.cs b/Rendelosch/Models/ProductForm.cs index 97fb44968dab4ace869da1db802ec471c62be732..b7a3aa110b641b52aa92875de1e594b5e7f6130e 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 3053b02ef044c5e1448cbaff11bab7a7e59361ef..d4bee793022e083d11e8697757f8d46c3a15dbf8 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 b3864a4d2bae06b2911908c9526cfea392c71195..81750e5856e057ad399b7beccb2b03cf26cc9abc 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 e9377a5752435c80c06fb4ae671e199202317bb5..1d7a765693562811e460b1039b097ff745fdbd67 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 72f0121acb7d4e998f19e610b00b6eb7559195c9..c82203a4c03694d57870cadb30fed7db4339f3fc 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 25ffd99378253dc5a9cd59b744cd9d1d75feada6..247d9c0dc6223022f74025fa48204b2d89964f84 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 32011b354f3015345a9dead212fa02236c3d79bb..0000000000000000000000000000000000000000 --- 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 0000000000000000000000000000000000000000..389b3af1a8603968489f5266b3bae7108c30563e --- /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