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 { // Routing für den Controller [ApiController] [Route("api/[controller]")] // Muss von ControllerBase erben, sonst muss die Schnittstelle selbst implmentiert werden public class SpeisenController : ControllerBase { private readonly ISpeiseRepository _repository; private readonly string _path; public SpeisenController(ISpeiseRepository repository, IWebHostEnvironment env) { _repository = repository; _path = System.IO.Path.Combine(env.ContentRootPath, "data", "images", "speisen"); } [HttpGet] // Muss etwas zurück geben public IEnumerable Get() { return _repository.GetSpeisen(); } // api/speisen/1 wird zur angegebenen id geroutet [HttpGet("{id}")] public IActionResult Get(int id) { var sepeise = _repository.GetSpeiseById(id); if (sepeise == null) { return NotFound(); // StatusCode 404 } return Ok(sepeise); } // Zum Hinzufügen von Daten [HttpPost] public IActionResult Post([FromBody] Speise speise) { if (!ModelState.IsValid) { return BadRequest(ModelState); // Alle Felder müssen ausgefüllt werden, stonst Statuscode 400 } var result = _repository.CreateSpeise(speise); return CreatedAtAction("Get", new { id = result.Id }, result); //Name der Action (Get), gibt Statuscode 201 zurück } [HttpPut("{id}")] // Zum ändern der Daten der Speise public IActionResult Put(int id, [FromBody] Speise speise) { if (id != speise.Id) { return BadRequest(); } if (!ModelState.IsValid) { return BadRequest(ModelState); } if (_repository.GetSpeiseById(id) == null) { return NotFound(); } var result = _repository.UpdateSpeise(speise); return Ok(result); } [HttpDelete("{id}")] public IActionResult Delete(int id) { if (_repository.GetSpeiseById(id) == null) { return NotFound(); } _repository.DeleteSpeise(id); return NoContent(); } // Über die Id wird das Image ausgegeben [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(); } } }