diff --git a/EnvelopeGenerator.GeneratorAPI/Controllers/LocalizationController.cs b/EnvelopeGenerator.GeneratorAPI/Controllers/LocalizationController.cs index 2636d67c..244bbc47 100644 --- a/EnvelopeGenerator.GeneratorAPI/Controllers/LocalizationController.cs +++ b/EnvelopeGenerator.GeneratorAPI/Controllers/LocalizationController.cs @@ -6,85 +6,114 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Caching.Memory; using Microsoft.Extensions.Localization; -namespace EnvelopeGenerator.GeneratorAPI.Controllers +namespace EnvelopeGenerator.GeneratorAPI.Controllers; + +/// +/// Controller für die Verwaltung der Lokalisierung und Spracheinstellungen. +/// +[Route("api/[controller]")] +[ApiController] +public class LocalizationController : ControllerBase { - [Route("api/[controller]")] - [ApiController] - public class LocalizationController : ControllerBase + private static readonly Guid L_KEY = Guid.NewGuid(); + + private readonly ILogger _logger; + private readonly IStringLocalizer _mLocalizer; + private readonly IStringLocalizer _localizer; + private readonly IMemoryCache _cache; + + /// + /// Konstruktor für den . + /// + /// Logger für die Protokollierung. + /// Lokalisierungsdienst für Ressourcen. + /// Speicher-Cache für die Zwischenspeicherung von Daten. + /// Lokalisierungsdienst für Modelle. + public LocalizationController( + ILogger logger, + IStringLocalizer localizer, + IMemoryCache memoryCache, + IStringLocalizer _modelLocalizer) { - private static readonly Guid L_KEY = Guid.NewGuid(); + _logger = logger; + _localizer = localizer; + _cache = memoryCache; + _mLocalizer = _modelLocalizer; + } - private readonly ILogger _logger; - private readonly IStringLocalizer _mLocalizer; - private readonly IStringLocalizer _localizer; - private readonly IMemoryCache _cache; + /// + /// Ruft alle lokalisierten Daten ab. + /// + /// Eine Liste aller lokalisierten Daten. + [HttpGet] + public IActionResult GetAll() => Ok(_cache.GetOrCreate(Language ?? string.Empty + L_KEY, _ => _mLocalizer.ToDictionary())); - public LocalizationController( - ILogger logger, - IStringLocalizer localizer, - IMemoryCache memoryCache, - IStringLocalizer _modelLocalizer) + /// + /// Ruft die aktuelle Sprache ab. + /// + /// Die aktuelle Sprache oder ein NotFound-Ergebnis, wenn keine Sprache gesetzt ist. + [HttpGet("lang")] + public IActionResult GetLanguage() => Language is null ? NotFound() : Ok(Language); + + /// + /// Setzt die Sprache. + /// + /// Die zu setzende Sprache. + /// Ein Ok-Ergebnis, wenn die Sprache erfolgreich gesetzt wurde, oder ein BadRequest-Ergebnis, wenn die Eingabe ungültig ist. + [HttpPost("lang")] + public IActionResult SetLanguage([FromQuery] string language) + { + if (string.IsNullOrEmpty(language)) + return BadRequest(); + + Language = language; + return Ok(); + } + + /// + /// Löscht die aktuelle Sprache. + /// + /// Ein Ok-Ergebnis, wenn die Sprache erfolgreich gelöscht wurde. + [HttpDelete("lang")] + public IActionResult DeleteLanguage() + { + Language = null; + return Ok(); + } + + /// + /// Eigenschaft für die Verwaltung der aktuellen Sprache über Cookies. + /// + private string? Language + { + get { - _logger = logger; - _localizer = localizer; - _cache = memoryCache; - _mLocalizer = _modelLocalizer; + var cookieValue = Request.Cookies[CookieRequestCultureProvider.DefaultCookieName]; + + if (string.IsNullOrEmpty(cookieValue)) + return null; + + var culture = CookieRequestCultureProvider.ParseCookieValue(cookieValue)?.Cultures[0]; + return culture?.Value ?? null; } - - [HttpGet] - public IActionResult GetAll() => Ok(_cache.GetOrCreate(Language ?? string.Empty + L_KEY, _ => _mLocalizer.ToDictionary())); - - [HttpGet("lang")] - public IActionResult GetLanguage() => Language is null ? NotFound() : Ok(Language); - - [HttpPost("lang")] - public IActionResult SetLanguage([FromQuery] string language) + set { - if (string.IsNullOrEmpty(language)) - return BadRequest(); - - Language = language; - return Ok(); - } - - [HttpDelete("lang")] - public IActionResult DeleteLanguage() - { - Language = null; - return Ok(); - } - - private string? Language - { - get + if (value is null) + Response.Cookies.Delete(CookieRequestCultureProvider.DefaultCookieName); + else { - var cookieValue = Request.Cookies[CookieRequestCultureProvider.DefaultCookieName]; - - if (string.IsNullOrEmpty(cookieValue)) - return null; - - var culture = CookieRequestCultureProvider.ParseCookieValue(cookieValue)?.Cultures[0]; - return culture?.Value ?? null; - } - set - { - if (value is null) - Response.Cookies.Delete(CookieRequestCultureProvider.DefaultCookieName); - else + var cookieOptions = new CookieOptions() { - var cookieOptions = new CookieOptions() - { - Expires = DateTimeOffset.UtcNow.AddYears(1), - Secure = false, - SameSite = SameSiteMode.Strict, - HttpOnly = true - }; + Expires = DateTimeOffset.UtcNow.AddYears(1), + Secure = false, + SameSite = SameSiteMode.Strict, + HttpOnly = true + }; - Response.Cookies.Append( - CookieRequestCultureProvider.DefaultCookieName, - CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(value)), - cookieOptions); - } + Response.Cookies.Append( + CookieRequestCultureProvider.DefaultCookieName, + CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(value)), + cookieOptions); } } }