diff --git a/Aps Single Page Anwendung/Controllers/SpeisenController.cs b/Aps Single Page Anwendung/Controllers/SpeisenController.cs index ceb513e..41591c4 100644 --- a/Aps Single Page Anwendung/Controllers/SpeisenController.cs +++ b/Aps Single Page Anwendung/Controllers/SpeisenController.cs @@ -39,5 +39,16 @@ namespace Aps_Single_Page_Anwendung.Controllers } return Ok(sepeise); } + + [HttpPost] + public IActionResult Post([FromBody] Speise speise) + { + if(!ModelState.IsValid) + { + return BadRequest(ModelState); // Alle Felder müssen ausgefüllt werden, stonst Statuscode 400 + } + var result = _repository.CreateSpeise(speise); + return CreatedAtAction("Get",new { id = result.Id },result); //Name der Action (Get), gibt Statuscode 201 zurück + } } } diff --git a/Aps Single Page Anwendung/Models/Speise.cs b/Aps Single Page Anwendung/Models/Speise.cs index bb845f0..820d775 100644 --- a/Aps Single Page Anwendung/Models/Speise.cs +++ b/Aps Single Page Anwendung/Models/Speise.cs @@ -1,8 +1,11 @@ -namespace Aps_Single_Page_Anwendung.Models +using System.ComponentModel.DataAnnotations; + +namespace Aps_Single_Page_Anwendung.Models { public class Speise { public int Id { get; set; } + [Required] // Leere Felder sind damit nicht möglich public string Name { get; set; } public string Beschreibung { get; set; } public double Preis { get; set; } diff --git a/Aps Single Page Anwendung/Repositories/FileSpeiseRepository.cs b/Aps Single Page Anwendung/Repositories/FileSpeiseRepository.cs index cc3f1c0..25a31ae 100644 --- a/Aps Single Page Anwendung/Repositories/FileSpeiseRepository.cs +++ b/Aps Single Page Anwendung/Repositories/FileSpeiseRepository.cs @@ -20,7 +20,26 @@ namespace Aps_Single_Page_Anwendung.Repositories // Implementierung der Methoden vom Interfave ISpeisenRepository public Speise CreateSpeise(Speise speise) { - throw new System.NotImplementedException(); + var speisen = GetSpeisen()?.ToList() ?? new List(); + + if(speisen.Count == 0) + { + speise.Id = 1; + } + else + { + speise.Id = speisen.Max(speise_ => speise_.Id) + 1; // Id Auto increment + } + + speisen.Add(speise); + + var options = new JsonSerializerOptions + { + WriteIndented = true // Zeilenumbrüche + }; + var json = JsonSerializer.Serialize(speisen, options); + File.WriteAllText(_path, json); // schreibt ins File + return speise; } public void DeleteSpeise(int id) @@ -28,10 +47,10 @@ namespace Aps_Single_Page_Anwendung.Repositories throw new System.NotImplementedException(); } + public Speise GetSpeiseById(int id) { - return GetSpeisen()?.SingleOrDefault( - x => x.Id == id); + return GetSpeisen()?.SingleOrDefault(speise => speise.Id == id); // Einzelner Datensatz und davon die id } public IEnumerable GetSpeisen() diff --git a/Aps Single Page Anwendung/data/speisen.json b/Aps Single Page Anwendung/data/speisen.json index 37fe0a1..bb630ef 100644 --- a/Aps Single Page Anwendung/data/speisen.json +++ b/Aps Single Page Anwendung/data/speisen.json @@ -1,159 +1,186 @@ -[{ - "id": 1, - "name": "Gemischter Salat", - "beschreibung": "Salat nach Art des Hauses. Gemischter Salat, Mais, Paprika, Käse, Zwiebeln", - "preis": 3.49, - "kategorieid": 1 - }, - { - "id": 2, - "name": "Salat Diabolo", - "beschreibung": "Gemischter Salat mit Chillis, Paprika, Radieschen und Zwiebeln (scharf!)", - "preis": 3.99, - "kategorieid": 1 - }, - { - "id": 3, - "name": "Rote Suppe", - "beschreibung": "Tomatensuppe", - "preis": 3.29, - "kategorieid": 2 - }, - { - "id": 4, - "name": "Grüne Suppe", - "beschreibung": "Gemüsecremesuppe", - "preis": 4.39, - "kategorieid": 2 - }, - - { - "id": 5, - "name": "Tortilla de patatas", - "beschreibung": "Spanisches Omlett aus Eiern und Kartoffeln", - "preis": 4.99, - "kategorieid": 3 - }, - { - "id": 6, - "name": "Patatas bravas", - "beschreibung": "Gebratene Kartoffelstücke in pikanter Sauce", - "preis": 3.99, - "kategorieid": 3 - }, - { - "id": 7, - "name": "Pimientos al grill", - "beschreibung": "Gegrillte Paprika", - "preis": 2.99, - "kategorieid": 3 - }, - { - "id": 8, - "name": "Pan con alioli", - "beschreibung": "Ailoli mit Brot", - "preis": 2.29, - "kategorieid": 3 - }, - { - "id": 9, - "name": "Pan con tomate y ajo", - "beschreibung": "Brot mit Tomate und Knoblauch", - "preis": 2.29, - "kategorieid": 3 - }, - { - "id": 10, - "name": "Tortilla Chips", - "beschreibung": "Tortilla Chips mit Salsa Dip, Guacamole oder Alioli", - "preis": 1.29, - "kategorieid": 3 - }, - - { - "id": 11, - "name": "Chilli sin carne", - "beschreibung": "Vegetarisches Chilli, serviert mit Reis", - "preis": 5.39, - "kategorieid": 4 - }, - { - "id": 12, - "name": "Enchiladas de verduras", - "beschreibung": "Überbackene Maistortillas gefüllt mit Gemüse", - "preis": 4.99, - "kategorieid": 4 - }, - { - "id": 13, - "name": "Burritos de verduras", - "beschreibung": "Weizentortillas gefüllt mit Gemüse", - "preis": 4.99, - "kategorieid": 4 - }, - { - "id": 14, - "name": "Arroz con verduras", - "beschreibung": "Reis-/Gemüsepfanne", - "preis": 4.49, - "kategorieid": 4 - }, - { - "id": 15, - "name": "Empanadas de espinacas y maíz", - "beschreibung": "Teigtaschen gefüllt mit Spinat und Mais", - "preis": 4.49, - "kategorieid": 4 - }, - - { - "id": 16, - "name": "Crema Catalana", - "beschreibung": "Katalanische Creme", - "preis": 2.49, - "kategorieid": 5 - }, - { - "id": 17, - "name": "Ensalada de frutas", - "beschreibung": "Obstsalat mit frischen Früchten", - "preis": 2.99, - "kategorieid": 5 - }, - { - "id": 18, - "name": "Churros", - "beschreibung": "Spritzgebäck mit Zucker", - "preis": 1.99, - "kategorieid": 5 - }, - - { - "id": 19, - "name": "Agua mineral", - "beschreibung": "Mineralwasser", - "preis": 1.59, - "kategorieid": 6 - }, - { - "id": 20, - "name": "Zumo de manzana", - "beschreibung": "Apfelsaft", - "preis": 1.59, - "kategorieid": 6 - }, - { - "id": 21, - "name": "Limonada", - "beschreibung": "Zitronenlimonade", - "preis": 1.59, - "kategorieid": 6 - }, - { - "id": 22, - "name": "Café", - "beschreibung": "Kaffee", - "preis": 1.59, - "kategorieid": 6 - } +[ + { + "Id": 1, + "Name": "Gemischter Salat", + "Beschreibung": "Salat nach Art des Hauses. Gemischter Salat, Mais, Paprika, K\u00E4se, Zwiebeln", + "Preis": 3.49, + "KategorieId": 1, + "Kategorie": null + }, + { + "Id": 2, + "Name": "Salat Diabolo", + "Beschreibung": "Gemischter Salat mit Chillis, Paprika, Radieschen und Zwiebeln (scharf!)", + "Preis": 3.99, + "KategorieId": 1, + "Kategorie": null + }, + { + "Id": 3, + "Name": "Rote Suppe", + "Beschreibung": "Tomatensuppe", + "Preis": 3.29, + "KategorieId": 2, + "Kategorie": null + }, + { + "Id": 4, + "Name": "Gr\u00FCne Suppe", + "Beschreibung": "Gem\u00FCsecremesuppe", + "Preis": 4.39, + "KategorieId": 2, + "Kategorie": null + }, + { + "Id": 5, + "Name": "Tortilla de patatas", + "Beschreibung": "Spanisches Omlett aus Eiern und Kartoffeln", + "Preis": 4.99, + "KategorieId": 3, + "Kategorie": null + }, + { + "Id": 6, + "Name": "Patatas bravas", + "Beschreibung": "Gebratene Kartoffelst\u00FCcke in pikanter Sauce", + "Preis": 3.99, + "KategorieId": 3, + "Kategorie": null + }, + { + "Id": 7, + "Name": "Pimientos al grill", + "Beschreibung": "Gegrillte Paprika", + "Preis": 2.99, + "KategorieId": 3, + "Kategorie": null + }, + { + "Id": 8, + "Name": "Pan con alioli", + "Beschreibung": "Ailoli mit Brot", + "Preis": 2.29, + "KategorieId": 3, + "Kategorie": null + }, + { + "Id": 9, + "Name": "Pan con tomate y ajo", + "Beschreibung": "Brot mit Tomate und Knoblauch", + "Preis": 2.29, + "KategorieId": 3, + "Kategorie": null + }, + { + "Id": 10, + "Name": "Tortilla Chips", + "Beschreibung": "Tortilla Chips mit Salsa Dip, Guacamole oder Alioli", + "Preis": 1.29, + "KategorieId": 3, + "Kategorie": null + }, + { + "Id": 11, + "Name": "Chilli sin carne", + "Beschreibung": "Vegetarisches Chilli, serviert mit Reis", + "Preis": 5.39, + "KategorieId": 4, + "Kategorie": null + }, + { + "Id": 12, + "Name": "Enchiladas de verduras", + "Beschreibung": "\u00DCberbackene Maistortillas gef\u00FCllt mit Gem\u00FCse", + "Preis": 4.99, + "KategorieId": 4, + "Kategorie": null + }, + { + "Id": 13, + "Name": "Burritos de verduras", + "Beschreibung": "Weizentortillas gef\u00FCllt mit Gem\u00FCse", + "Preis": 4.99, + "KategorieId": 4, + "Kategorie": null + }, + { + "Id": 14, + "Name": "Arroz con verduras", + "Beschreibung": "Reis-/Gem\u00FCsepfanne", + "Preis": 4.49, + "KategorieId": 4, + "Kategorie": null + }, + { + "Id": 15, + "Name": "Empanadas de espinacas y ma\u00EDz", + "Beschreibung": "Teigtaschen gef\u00FCllt mit Spinat und Mais", + "Preis": 4.49, + "KategorieId": 4, + "Kategorie": null + }, + { + "Id": 16, + "Name": "Crema Catalana", + "Beschreibung": "Katalanische Creme", + "Preis": 2.49, + "KategorieId": 5, + "Kategorie": null + }, + { + "Id": 17, + "Name": "Ensalada de frutas", + "Beschreibung": "Obstsalat mit frischen Fr\u00FCchten", + "Preis": 2.99, + "KategorieId": 5, + "Kategorie": null + }, + { + "Id": 18, + "Name": "Churros", + "Beschreibung": "Spritzgeb\u00E4ck mit Zucker", + "Preis": 1.99, + "KategorieId": 5, + "Kategorie": null + }, + { + "Id": 19, + "Name": "Agua mineral", + "Beschreibung": "Mineralwasser", + "Preis": 1.59, + "KategorieId": 6, + "Kategorie": null + }, + { + "Id": 20, + "Name": "Zumo de manzana", + "Beschreibung": "Apfelsaft", + "Preis": 1.59, + "KategorieId": 6, + "Kategorie": null + }, + { + "Id": 21, + "Name": "Limonada", + "Beschreibung": "Zitronenlimonade", + "Preis": 1.59, + "KategorieId": 6, + "Kategorie": null + }, + { + "Id": 22, + "Name": "Caf\u00E9", + "Beschreibung": "Kaffee", + "Preis": 1.59, + "KategorieId": 6, + "Kategorie": null + }, + { + "Id": 23, + "Name": "Gemischter Salato", + "Beschreibung": "Salat nach Art des Hauses. Gemischter Salat, Mais, Paprika, K\u00E4se, Zwiebeln, Orange", + "Preis": 9.49, + "KategorieId": 1, + "Kategorie": null + } ] \ No newline at end of file