diff --git a/Aps Single Page Anwendung/Controllers/KategorienController.cs b/Aps Single Page Anwendung/Controllers/KategorienController.cs new file mode 100644 index 0000000..b86a6c0 --- /dev/null +++ b/Aps Single Page Anwendung/Controllers/KategorienController.cs @@ -0,0 +1,96 @@ +using Aps_Single_Page_Anwendung.Models; +using Aps_Single_Page_Anwendung.Repositories; +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Mvc; +using System.Collections.Generic; + + +namespace Aps_Single_Page_Anwendung.Controllers +{ + [Route("api/[controller]")] + public class KategorienController : Controller + { + private readonly IKategorieRepository _repository; + private readonly string _path; + + public KategorienController(IKategorieRepository repository, IWebHostEnvironment env) + { + _repository = repository; + _path = System.IO.Path.Combine(env.ContentRootPath, "data", "images", "kategorien"); + } + [HttpGet] + public IEnumerable Get() + { + return _repository.GetKategorien(); + } + + [HttpGet("{id}")] + + public IActionResult Get(int id) + { + var kategorie = _repository.GetKategorieByID(id); + if(kategorie == null) + { + return NotFound(); + } + return Ok(kategorie); + } + + [HttpPost] + + public IActionResult Post([FromBody] Kategorie kategorie) + { + if (!ModelState.IsValid) + { + return BadRequest(ModelState); + } + + var result = _repository.CreateKategorie(kategorie); + return CreatedAtAction("Get", new {id = kategorie.Id}, result); + } + + [HttpPut("{id}")] + + public IActionResult Put(int id, [FromBody] Kategorie kategorie) + { + if (id != kategorie.Id) + { + return BadRequest(); + } + if (!ModelState.IsValid) + { + return BadRequest(ModelState); + } + if (_repository.GetKategorieByID(id) == null) + { + return NotFound(); + } + + var result = _repository.UpdateKategorie(kategorie); + return Ok(result); + } + + [HttpDelete("{id}")] + public IActionResult Delete(int id) + { + if(_repository.GetKategorieByID(id) == null) + { + return NotFound(); + } + _repository.DeleteKategorie(id); + return NoContent(); + } + [HttpGet("{id}/image")] + + public IActionResult Image(int id) + { + var file = System.IO.Path.Combine(_path, $"{id}.jpg"); + if (System.IO.File.Exists(file)) + { + var bytes = System.IO.File.ReadAllBytes(file); + return File(bytes, "image/jpeg"); + } + return NotFound(); + } + } +} diff --git a/Aps Single Page Anwendung/Controllers/SpeisenController.cs b/Aps Single Page Anwendung/Controllers/SpeisenController.cs index 3afe970..3aba5a7 100644 --- a/Aps Single Page Anwendung/Controllers/SpeisenController.cs +++ b/Aps Single Page Anwendung/Controllers/SpeisenController.cs @@ -35,12 +35,12 @@ namespace Aps_Single_Page_Anwendung.Controllers [HttpGet("{id}")] public IActionResult Get(int id) { - var sepeise = _repository.GetSpeiseById(id); - if (sepeise == null) + var speise = _repository.GetSpeiseById(id); + if (speise == null) { return NotFound(); // StatusCode 404 } - return Ok(sepeise); + return Ok(speise); } // Zum Hinzufügen von Daten diff --git a/Aps Single Page Anwendung/Repositories/FileKategorieRepository.cs b/Aps Single Page Anwendung/Repositories/FileKategorieRepository.cs new file mode 100644 index 0000000..d9a89fd --- /dev/null +++ b/Aps Single Page Anwendung/Repositories/FileKategorieRepository.cs @@ -0,0 +1,92 @@ +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 FileKategorieRepository : IKategorieRepository + { + private readonly string _path; + private readonly string _speisepfad; + + public FileKategorieRepository(IWebHostEnvironment env) + { + _path = Path.Combine(env.ContentRootPath, "data", "kategorie.json"); + _speisepfad = Path.Combine(env.ContentRootPath, "data", "speisen.json"); + } + public Kategorie CreateKategorie(Kategorie kategorie) + { + var kategorien = GetKategorien()?.ToList() ?? new List(); + if(kategorien.Count == 0) + { + kategorie.Id = 1; + } + else + { + kategorie.Id = kategorien.Max(kategorie => kategorie.Id) + 1; + } + kategorien.Add(kategorie); + + Filesave(kategorien); + return kategorie; + } + + public void DeleteKategorie(int id) + { + var kategorien = GetKategorien().Where(kategorie_ => kategorie_.Id != id).ToList(); + Filesave(kategorien); + } + + public Kategorie GetKategorieByID(int id) + { + return GetKategorien()?.FirstOrDefault(kategorie => kategorie.Id == id); + } + + public IEnumerable GetKategorien() + { + var json = File.ReadAllText(_path); + var option = new JsonSerializerOptions + { + AllowTrailingCommas = true, + PropertyNameCaseInsensitive = true + }; + var kategorien = JsonSerializer.Deserialize(json,option); + + json = File.ReadAllText(_speisepfad); + var speisen = JsonSerializer.Deserialize(json,option); + + foreach (var kategorie in kategorien) + { + kategorie.Speisen = speisen.Where(speise => speise.KategorieId == kategorie.Id).ToList(); + } + + return kategorien; + } + + public Kategorie UpdateKategorie(Kategorie kategorie) + { + var kategorien = GetKategorien().ToList(); + var kategorieToUpdate = kategorien.SingleOrDefault(kategorie_ => kategorie_.Id == kategorie.Id); + kategorieToUpdate.Name = kategorie.Name; + kategorieToUpdate.Beschreibung = kategorie.Beschreibung; + + + Filesave(kategorien); + return kategorie; + } + // Funktion zum schreiben in die Json Datai + public void Filesave(List kategorien) + { + var options = new JsonSerializerOptions + { + WriteIndented = true // Zeilenumbrüche bzw Daten werden eingerückt + }; + var json = JsonSerializer.Serialize(kategorien, options); + File.WriteAllText(_path, json); // schreibt ins File + + } + } +} diff --git a/Aps Single Page Anwendung/Repositories/IKategorieRepository.cs b/Aps Single Page Anwendung/Repositories/IKategorieRepository.cs new file mode 100644 index 0000000..ff39c2a --- /dev/null +++ b/Aps Single Page Anwendung/Repositories/IKategorieRepository.cs @@ -0,0 +1,14 @@ +using Aps_Single_Page_Anwendung.Models; +using System.Collections.Generic; + +namespace Aps_Single_Page_Anwendung.Repositories +{ + public interface IKategorieRepository + { + IEnumerable GetKategorien(); + Kategorie GetKategorieByID(int id); + Kategorie CreateKategorie(Kategorie kategorie); + Kategorie UpdateKategorie(Kategorie kategorie); + void DeleteKategorie(int id); + } +} diff --git a/Aps Single Page Anwendung/Startup.cs b/Aps Single Page Anwendung/Startup.cs index db5dc93..da06a73 100644 --- a/Aps Single Page Anwendung/Startup.cs +++ b/Aps Single Page Anwendung/Startup.cs @@ -25,6 +25,7 @@ namespace Aps_Single_Page_Anwendung // Sorgt dafür, das jedesmal wenn ein ISpeiseRep angefragt wird, wird ein FileSpeiseRep zurückgegeben services.AddScoped(); + services.AddScoped(); // In production, the Angular files will be served from this directory