Kategorien eingepflegt *System.IO.Path*

This commit is contained in:
marcusferl@weifer.de 2022-06-03 08:58:10 +02:00
parent 7f6ddac2b8
commit fcb3c844e3
5 changed files with 206 additions and 3 deletions

View File

@ -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<Kategorie> 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();
}
}
}

View File

@ -35,12 +35,12 @@ namespace Aps_Single_Page_Anwendung.Controllers
[HttpGet("{id}")] [HttpGet("{id}")]
public IActionResult Get(int id) public IActionResult Get(int id)
{ {
var sepeise = _repository.GetSpeiseById(id); var speise = _repository.GetSpeiseById(id);
if (sepeise == null) if (speise == null)
{ {
return NotFound(); // StatusCode 404 return NotFound(); // StatusCode 404
} }
return Ok(sepeise); return Ok(speise);
} }
// Zum Hinzufügen von Daten // Zum Hinzufügen von Daten

View File

@ -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<Kategorie>();
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<Kategorie> GetKategorien()
{
var json = File.ReadAllText(_path);
var option = new JsonSerializerOptions
{
AllowTrailingCommas = true,
PropertyNameCaseInsensitive = true
};
var kategorien = JsonSerializer.Deserialize<Kategorie[]>(json,option);
json = File.ReadAllText(_speisepfad);
var speisen = JsonSerializer.Deserialize<Speise[]>(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<Kategorie> 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
}
}
}

View File

@ -0,0 +1,14 @@
using Aps_Single_Page_Anwendung.Models;
using System.Collections.Generic;
namespace Aps_Single_Page_Anwendung.Repositories
{
public interface IKategorieRepository
{
IEnumerable<Kategorie> GetKategorien();
Kategorie GetKategorieByID(int id);
Kategorie CreateKategorie(Kategorie kategorie);
Kategorie UpdateKategorie(Kategorie kategorie);
void DeleteKategorie(int id);
}
}

View File

@ -25,6 +25,7 @@ namespace Aps_Single_Page_Anwendung
// Sorgt dafür, das jedesmal wenn ein ISpeiseRep angefragt wird, wird ein FileSpeiseRep zurückgegeben // Sorgt dafür, das jedesmal wenn ein ISpeiseRep angefragt wird, wird ein FileSpeiseRep zurückgegeben
services.AddScoped<ISpeiseRepository, FileSpeiseRepository>(); services.AddScoped<ISpeiseRepository, FileSpeiseRepository>();
services.AddScoped<IKategorieRepository, FileKategorieRepository>();
// In production, the Angular files will be served from this directory // In production, the Angular files will be served from this directory