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}")]
|
||||
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
|
||||
|
|
|
@ -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
|
||||
services.AddScoped<ISpeiseRepository, FileSpeiseRepository>();
|
||||
services.AddScoped<IKategorieRepository, FileKategorieRepository>();
|
||||
|
||||
|
||||
// In production, the Angular files will be served from this directory
|
||||
|
|
Loading…
Reference in New Issue
Block a user