This commit is contained in:
Tizian.Breuch
2025-07-22 17:09:38 +02:00
parent 5568574d9c
commit 0cbf088747
16 changed files with 429 additions and 57 deletions

View File

@@ -0,0 +1,79 @@
// src/Webshop.Application/Services/ProductService.cs
using Webshop.Application.DTOs;
using Webshop.Domain.Entities;
using Webshop.Domain.Interfaces;
namespace Webshop.Application.Services.Public
{
public class ProductService
{
private readonly IProductRepository _productRepository;
public ProductService(IProductRepository productRepository)
{
_productRepository = productRepository;
}
public async Task<IEnumerable<ProductDto>> GetAllProductsAsync()
{
var productsFromDb = await _productRepository.GetAllProductsAsync();
var productDtos = productsFromDb.Select(p => new ProductDto
{
Id = p.Id,
Name = p.Name,
Description = p.Description,
Price = p.Price,
Sku = p.SKU
});
return productDtos;
}
public async Task<ProductDto> CreateProductAsync(ProductDto productDto)
{
var newProduct = new Product
{
// Felder aus DTO
Name = productDto.Name,
Description = productDto.Description,
Price = productDto.Price,
SKU = productDto.Sku,
ShortDescription = productDto.ShortDescription,
IsActive = productDto.IsActive,
IsInStock = productDto.IsInStock,
StockQuantity = productDto.StockQuantity,
Slug = productDto.Slug,
Id = Guid.NewGuid(),
CreatedDate = DateTimeOffset.UtcNow,
LastModifiedDate = null,
};
if (string.IsNullOrWhiteSpace(newProduct.Slug) && !string.IsNullOrWhiteSpace(newProduct.Name))
{
newProduct.Slug = GenerateSlug(newProduct.Name);
}
await _productRepository.AddProductAsync(newProduct);
productDto.Id = newProduct.Id;
return productDto;
}
private string GenerateSlug(string name)
{
if (string.IsNullOrWhiteSpace(name)) return Guid.NewGuid().ToString(); // Fallback
var slug = name.ToLowerInvariant()
.Replace(" ", "-")
.Replace("ä", "ae").Replace("ö", "oe").Replace("ü", "ue")
.Replace("ß", "ss")
.Trim();
// Entferne ungültige Zeichen
slug = System.Text.RegularExpressions.Regex.Replace(slug, @"[^a-z0-9-]", "");
return slug;
}
}
}