// src/Webshop.Application/Services/Public/PaymentMethodService.cs using System.Collections.Generic; using System.Linq; using System.Text.Json; using System.Threading.Tasks; using Webshop.Application; using Webshop.Application.DTOs.Payments; using Webshop.Domain.Enums; using Webshop.Domain.Interfaces; namespace Webshop.Application.Services.Public { public class PaymentMethodService : IPaymentMethodService { private readonly IPaymentMethodRepository _paymentMethodRepository; public PaymentMethodService(IPaymentMethodRepository paymentMethodRepository) { _paymentMethodRepository = paymentMethodRepository; } public async Task>> GetAllActiveAsync() { var paymentMethods = await _paymentMethodRepository.GetAllAsync(); var activeMethods = paymentMethods .Where(pm => pm.IsActive) .Select(pm => new PaymentMethodDto { Id = pm.Id, Name = pm.Name, Description = pm.Description, PaymentGatewayType = pm.PaymentGatewayType, ProcessingFee = pm.ProcessingFee, PublicConfiguration = GetPublicConfiguration(pm.PaymentGatewayType, pm.Configuration) }).ToList(); return ServiceResult.Ok>(activeMethods); } private object? GetPublicConfiguration(PaymentGatewayType type, string? configJson) { if (string.IsNullOrEmpty(configJson)) return null; try { var config = JsonSerializer.Deserialize>(configJson); if (config == null) return null; if (type == PaymentGatewayType.BankTransfer) { return new { IBAN = config.ContainsKey("IBAN") ? config["IBAN"].GetString() : null, BIC = config.ContainsKey("BIC") ? config["BIC"].GetString() : null, BankName = config.ContainsKey("BankName") ? config["BankName"].GetString() : null }; } if (type == PaymentGatewayType.Stripe) { return new { PublicKey = config.ContainsKey("PublicKey") ? config["PublicKey"].GetString() : null }; } // Für PayPal oder andere geben wir keine öffentlichen Konfigurationsdetails preis return null; } catch (JsonException) { // Log error if needed, but return null to the client return null; } } } }