Kategorien eingepflegt *System.IO.Path*
This commit is contained in:
parent
7f6ddac2b8
commit
fcb3c844e3
|
@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue
Block a user