diff --git a/Webshop.Api/Controllers/Public/CategorieController.cs b/Webshop.Api/Controllers/Public/CategorieController.cs index 07fb737..a44ca88 100644 --- a/Webshop.Api/Controllers/Public/CategorieController.cs +++ b/Webshop.Api/Controllers/Public/CategorieController.cs @@ -1,8 +1,10 @@ // src/Webshop.Api/Controllers/Public/categoriesController.cs using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using System.Collections.Generic; using System.Threading.Tasks; +using Webshop.Application; using Webshop.Application.DTOs.Categorie; using Webshop.Application.Services.Public; @@ -21,18 +23,26 @@ namespace Webshop.Api.Controllers.Public } [HttpGet] - public async Task>> GetActivecategories() + [ProducesResponseType(typeof(IEnumerable), StatusCodes.Status200OK)] + public async Task GetActivecategories() { - var categories = await _categorieservice.GetAllActiveAsync(); - return Ok(categories); + var result = await _categorieservice.GetAllActiveAsync(); + return Ok(result.Value); } [HttpGet("{slug}")] - public async Task> GetcategorieBySlug(string slug) + [ProducesResponseType(typeof(CategorieDto), StatusCodes.Status200OK)] + [ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status404NotFound)] + public async Task GetcategorieBySlug(string slug) { - var categorie = await _categorieservice.GetBySlugAsync(slug); - if (categorie == null) return NotFound(); - return Ok(categorie); + var result = await _categorieservice.GetBySlugAsync(slug); + + return result.Type switch + { + ServiceResultType.Success => Ok(result.Value), + ServiceResultType.NotFound => NotFound(new { Message = result.ErrorMessage }), + _ => StatusCode(StatusCodes.Status500InternalServerError, "Ein unerwarteter Fehler ist aufgetreten.") + }; } } } \ No newline at end of file diff --git a/Webshop.Application/Services/Public/CategorieService.cs b/Webshop.Application/Services/Public/CategorieService.cs index fc35959..f32a3c6 100644 --- a/Webshop.Application/Services/Public/CategorieService.cs +++ b/Webshop.Application/Services/Public/CategorieService.cs @@ -2,7 +2,9 @@ using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; +using Webshop.Application; using Webshop.Application.DTOs.Categorie; +using Webshop.Domain.Entities; using Webshop.Domain.Interfaces; namespace Webshop.Application.Services.Public @@ -16,41 +18,41 @@ namespace Webshop.Application.Services.Public _categorieRepository = categorieRepository; } - public async Task> GetAllActiveAsync() + public async Task>> GetAllActiveAsync() { var categories = await _categorieRepository.GetAllAsync(); - // Hier könnte man eine Baumstruktur aufbauen, für den Anfang eine flache Liste - return categories + var activeCategories = categories .Where(c => c.IsActive) - .Select(c => new CategorieDto - { - Id = c.Id, - Name = c.Name, - Slug = c.Slug, - Description = c.Description, - ParentcategorieId = c.ParentcategorieId, - ImageUrl = c.ImageUrl, - IsActive = c.IsActive, - DisplayOrder = c.DisplayOrder - }).ToList(); + .Select(MapToDto) + .ToList(); + + return ServiceResult.Ok>(activeCategories); } - public async Task GetBySlugAsync(string slug) + public async Task> GetBySlugAsync(string slug) { var categorie = await _categorieRepository.GetBySlugAsync(slug); - if (categorie == null || !categorie.IsActive) return null; + if (categorie == null || !categorie.IsActive) + { + return ServiceResult.Fail(ServiceResultType.NotFound, $"Kategorie mit dem Slug '{slug}' wurde nicht gefunden oder ist nicht aktiv."); + } + return ServiceResult.Ok(MapToDto(categorie)); + } + + private CategorieDto MapToDto(Categorie c) + { return new CategorieDto { - Id = categorie.Id, - Name = categorie.Name, - Slug = categorie.Slug, - Description = categorie.Description, - ParentcategorieId = categorie.ParentcategorieId, - ImageUrl = categorie.ImageUrl, - IsActive = categorie.IsActive, - DisplayOrder = categorie.DisplayOrder + Id = c.Id, + Name = c.Name, + Slug = c.Slug, + Description = c.Description, + ParentcategorieId = c.ParentcategorieId, + ImageUrl = c.ImageUrl, + IsActive = c.IsActive, + DisplayOrder = c.DisplayOrder }; } } diff --git a/Webshop.Application/Services/Public/Interfaces/ICategorieService.cs b/Webshop.Application/Services/Public/Interfaces/ICategorieService.cs index b554fe4..448846b 100644 --- a/Webshop.Application/Services/Public/Interfaces/ICategorieService.cs +++ b/Webshop.Application/Services/Public/Interfaces/ICategorieService.cs @@ -1,13 +1,14 @@ // src/Webshop.Application/Services/Public/Icategorieservice.cs using System.Collections.Generic; using System.Threading.Tasks; +using Webshop.Application; using Webshop.Application.DTOs.Categorie; namespace Webshop.Application.Services.Public { public interface ICategorieService { - Task> GetAllActiveAsync(); - Task GetBySlugAsync(string slug); + Task>> GetAllActiveAsync(); + Task> GetBySlugAsync(string slug); } } \ No newline at end of file