using Aps_Single_Page_Anwendung.Models; using Microsoft.AspNetCore.Hosting; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text.Json; namespace Aps_Single_Page_Anwendung.Repositories { public class FileSpeiseRepository : ISpeiseRepository { private readonly string _path; // Um den Absoluten Pfad zu bekommen, unabhängig davon, wo das Programm liegt public FileSpeiseRepository(IWebHostEnvironment env) { _path = Path.Combine(env.ContentRootPath, "data", "speisen.json"); // Die Trennung via Slashes wird automatisch erkannt } // Implementierung der Methoden vom Interfave ISpeisenRepository public Speise CreateSpeise(Speise speise) { 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); Filesave(speisen); return speise; } // Löschen der Speise public void DeleteSpeise(int id) { var speisen = GetSpeisen().Where(speise_ => speise_.Id != id).ToList(); Filesave(speisen); } public Speise GetSpeiseById(int id) { return GetSpeisen()?.SingleOrDefault(speise => speise.Id == id); // Einzelner Datensatz und davon die id } public IEnumerable GetSpeisen() { var json = File.ReadAllText(_path); var option = new JsonSerializerOptions { AllowTrailingCommas = true, // Ignoriert letzte Komma, fals vorhanden PropertyNameCaseInsensitive = true // Ignoriert Groß und Kleinschreibung }; var speisen = JsonSerializer.Deserialize(json, option); return speisen; } public Speise UpdateSpeise(Speise speise) { var speisen = GetSpeisen().ToList(); var speiseToUpdate = speisen.SingleOrDefault(speise_ => speise_.Id == speise.Id); speiseToUpdate.Name = speise.Name; speiseToUpdate.Preis = speise.Preis; speiseToUpdate.Beschreibung = speise.Beschreibung; speiseToUpdate.KategorieId = speise.KategorieId; Filesave(speisen); return speiseToUpdate; } // Funktion zum schreiben in die Json Datai public void Filesave(List speisen) { var options = new JsonSerializerOptions { WriteIndented = true // Zeilenumbrüche bzw Daten werden eingerückt }; var json = JsonSerializer.Serialize(speisen, options); File.WriteAllText(_path, json); // schreibt ins File } } }