From 226e82c5139f97001c64209f398181852bdfcf10 Mon Sep 17 00:00:00 2001 From: "Tizian.Breuch" Date: Wed, 23 Jul 2025 21:21:18 +0200 Subject: [PATCH] swagger test data --- Webshop.Api/Program.cs | 18 +- .../SwaggerFilters/AddExampleSchemaFilter.cs | 375 ++++++++++++++---- .../LoginExampleOperationFilter.cs | 56 +++ 3 files changed, 374 insertions(+), 75 deletions(-) create mode 100644 Webshop.Api/SwaggerFilters/LoginExampleOperationFilter.cs diff --git a/Webshop.Api/Program.cs b/Webshop.Api/Program.cs index 97b0519..215c100 100644 --- a/Webshop.Api/Program.cs +++ b/Webshop.Api/Program.cs @@ -118,6 +118,8 @@ builder.Services.AddSwaggerGen(c => // 3. Optional: Filtern und Anzeigen von Autorisierungsinformationen (Rollen) // Damit Swagger die "Authorize"-Informationen von Ihren Controllern anzeigt. c.OperationFilter(); + c.OperationFilter(); + c.SchemaFilter(); }); // --- ENDE: DIENSTE ZUM CONTAINER HINZUFÜGEN --- @@ -152,16 +154,16 @@ using (var scope = app.Services.CreateScope()) } // Erstelle einen initialen Admin-Benutzer - var adminUser = await userManager.FindByEmailAsync("admin-user@example.com"); // << ANPASSEN >> + var adminUser = await userManager.FindByEmailAsync("admin@yourwebshop.com"); // << ANPASSEN >> if (adminUser == null) { adminUser = new IdentityUser { - UserName = "admin-user@example.com", // << ANPASSEN >> - Email = "admin-user@example.com", // << ANPASSEN >> + UserName = "admin@yourwebshop.com", // << ANPASSEN >> + Email = "admin@yourwebshop.com", // << ANPASSEN >> EmailConfirmed = true }; - var createAdmin = await userManager.CreateAsync(adminUser, "string"); // << ANPASSEN >> + var createAdmin = await userManager.CreateAsync(adminUser, "SecureAdminPass123!"); // << ANPASSEN >> if (createAdmin.Succeeded) { await userManager.AddToRoleAsync(adminUser, "Admin"); @@ -174,16 +176,16 @@ using (var scope = app.Services.CreateScope()) } // Erstelle einen initialen Kunden-Benutzer - var customerUser = await userManager.FindByEmailAsync("customer-user@example.com"); // << ANPASSEN >> + var customerUser = await userManager.FindByEmailAsync("customer@yourwebshop.com"); // << ANPASSEN >> if (customerUser == null) { customerUser = new IdentityUser { - UserName = "customer-user@example.com", // << ANPASSEN >> - Email = "customer-user@example.com", // << ANPASSEN >> + UserName = "customer@yourwebshop.com", // << ANPASSEN >> + Email = "customer@yourwebshop.com", // << ANPASSEN >> EmailConfirmed = true }; - var createCustomer = await userManager.CreateAsync(customerUser, "string"); // << ANPASSEN >> + var createCustomer = await userManager.CreateAsync(customerUser, "SecureCustomerPass123!"); // << ANPASSEN >> if (createCustomer.Succeeded) { await userManager.AddToRoleAsync(customerUser, "Customer"); diff --git a/Webshop.Api/SwaggerFilters/AddExampleSchemaFilter.cs b/Webshop.Api/SwaggerFilters/AddExampleSchemaFilter.cs index 86051d9..0a4e507 100644 --- a/Webshop.Api/SwaggerFilters/AddExampleSchemaFilter.cs +++ b/Webshop.Api/SwaggerFilters/AddExampleSchemaFilter.cs @@ -2,9 +2,10 @@ using Microsoft.OpenApi.Models; using Swashbuckle.AspNetCore.SwaggerGen; using Microsoft.OpenApi.Any; // Wichtig für OpenApiString, OpenApiDouble etc. -using Webshop.Application.DTOs; // Ihre DTOs -using Webshop.Application.DTOs.Auth; -using Webshop.Application.DTOs.Users; +using Webshop.Application.DTOs; // ProductDto, AdminProductDto, SupplierDto +using Webshop.Application.DTOs.Auth; // LoginRequestDto, RegisterRequestDto, AuthResponseDto +using Webshop.Application.DTOs.Users; // UserDto +using Webshop.Domain.Enums; // Für Enums in DTOs (z.B. AddressType, DiscountType etc.) namespace Webshop.Api.SwaggerFilters { @@ -12,75 +13,19 @@ namespace Webshop.Api.SwaggerFilters { public void Apply(OpenApiSchema schema, SchemaFilterContext context) { - // Überprüfe den Typ des DTOs und setze ein Beispiel - if (context.Type == typeof(AdminProductDto)) + var type = context.Type; + + // --- Authentifizierung & Benutzer --- + if (type == typeof(LoginRequestDto)) { - // Beispiel für AdminProductDto (beachten Sie die realistischen Werte) schema.Example = new OpenApiObject { - // Bei POST-Requests wird die ID von der API generiert, daher hier eine Null-GUID oder weglassen. - ["id"] = new OpenApiString(Guid.Empty.ToString()), - ["name"] = new OpenApiString("Admin Testprodukt XYZ"), - ["description"] = new OpenApiString("Vollständige Beschreibung des Admin Testprodukts mit allen Details."), - ["sku"] = new OpenApiString("ADM-XYZ-001"), // Muss einzigartig sein! - ["price"] = new OpenApiDouble(199.99), - ["oldPrice"] = new OpenApiNull(), - ["isActive"] = new OpenApiBoolean(true), - ["isInStock"] = new OpenApiBoolean(true), - ["stockQuantity"] = new OpenApiInteger(50), - ["weight"] = new OpenApiDouble(2.5), - ["imageUrl"] = new OpenApiString("https://example.com/images/admin_test_xyz.jpg"), - ["slug"] = new OpenApiString("admin-testprodukt-xyz"), // Muss einzigartig sein! - ["createdDate"] = new OpenApiString(DateTimeOffset.UtcNow.ToString("o")), - ["lastModifiedDate"] = new OpenApiNull(), - // Wichtig: supplierId auf null setzen, wenn noch keine Lieferanten in DB sind. - // Ansonsten eine echte, existierende Lieferanten-ID hier eintragen. - ["supplierId"] = new OpenApiNull(), // Oder new OpenApiString("HIER-EINE-ECHTE-SUPPLIER-ID-EINFUEGEN") - ["purchasePrice"] = new OpenApiDouble(120.00) + ["email"] = new OpenApiString("admin@yourwebshop.com"), + ["password"] = new OpenApiString("SecureAdminPass123!") }; } - else if (context.Type == typeof(ProductDto)) + else if (type == typeof(RegisterRequestDto)) { - // Beispiel für Public ProductDto - schema.Example = new OpenApiObject - { - ["id"] = new OpenApiString(Guid.Empty.ToString()), - ["name"] = new OpenApiString("Öffentliches Beispielprodukt"), - ["description"] = new OpenApiString("Eine kurze Beschreibung des Produkts für den Webshop."), - ["sku"] = new OpenApiString("PUB-ABC-001"), - ["price"] = new OpenApiDouble(49.99), - ["isActive"] = new OpenApiBoolean(true), - ["isInStock"] = new OpenApiBoolean(true), - ["stockQuantity"] = new OpenApiInteger(100), - ["imageUrl"] = new OpenApiString("https://example.com/images/public_abc.jpg") - }; - } - else if (context.Type == typeof(SupplierDto)) - { - // Beispiel für SupplierDto - schema.Example = new OpenApiObject - { - ["id"] = new OpenApiString(Guid.Empty.ToString()), - ["name"] = new OpenApiString("Lieferant A GmbH"), - ["contactPerson"] = new OpenApiString("Max Mustermann"), - ["email"] = new OpenApiString("kontakt@lieferant-a.com"), - ["phoneNumber"] = new OpenApiString("+49170123456"), - ["addressId"] = new OpenApiNull(), - ["notes"] = new OpenApiString("Hauptlieferant für Hardware.") - }; - } - else if (context.Type == typeof(LoginRequestDto)) - { - // Beispiel für LoginRequestDto - schema.Example = new OpenApiObject - { - ["email"] = new OpenApiString("admin@yourwebshop.com"), // Oder customer@yourwebshop.com - ["password"] = new OpenApiString("SecureAdminPass123!") // Oder SecureCustomerPass123! - }; - } - else if (context.Type == typeof(RegisterRequestDto)) - { - // Beispiel für RegisterRequestDto schema.Example = new OpenApiObject { ["email"] = new OpenApiString("neuer.kunde@example.com"), @@ -90,7 +35,303 @@ namespace Webshop.Api.SwaggerFilters ["lastName"] = new OpenApiString("Musterfrau") }; } - // Fügen Sie hier weitere else if Blöcke für andere DTOs hinzu, die Beispielwerte benötigen + else if (type == typeof(AuthResponseDto)) + { + schema.Example = new OpenApiObject + { + ["isAuthSuccessful"] = new OpenApiBoolean(true), + ["errorMessage"] = new OpenApiString(""), + ["token"] = new OpenApiString("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"), + ["userId"] = new OpenApiString(Guid.NewGuid().ToString()), + ["email"] = new OpenApiString("test@example.com"), + ["roles"] = new OpenApiArray { new OpenApiString("Customer") } + }; + } + else if (type == typeof(UserDto)) + { + schema.Example = new OpenApiObject + { + ["id"] = new OpenApiString(Guid.NewGuid().ToString()), + ["email"] = new OpenApiString("admin@yourwebshop.com"), + ["userName"] = new OpenApiString("admin@yourwebshop.com"), + ["roles"] = new OpenApiArray { new OpenApiString("Admin") }, + ["createdDate"] = new OpenApiString(DateTimeOffset.UtcNow.ToString("o")), + ["emailConfirmed"] = new OpenApiBoolean(true) + }; + } + // --- Produkte & Lieferanten --- + else if (type == typeof(ProductDto)) + { + schema.Example = new OpenApiObject + { + ["id"] = new OpenApiString(Guid.Empty.ToString()), // Bei POST leer lassen/null + ["name"] = new OpenApiString("Beispiel Produkt X"), + ["description"] = new OpenApiString("Eine kurze Beschreibung für das Produkt X."), + ["sku"] = new OpenApiString("SKU-PUB-X001"), // Muss einzigartig sein! + ["price"] = new OpenApiDouble(29.99), + ["isActive"] = new OpenApiBoolean(true), + ["isInStock"] = new OpenApiBoolean(true), + ["stockQuantity"] = new OpenApiInteger(100), + ["imageUrl"] = new OpenApiString("https://example.com/images/productX.jpg") + }; + } + else if (type == typeof(AdminProductDto)) + { + schema.Example = new OpenApiObject + { + ["id"] = new OpenApiString(Guid.Empty.ToString()), // Bei POST leer lassen/null + ["name"] = new OpenApiString("Admin Produkt Z (Full Details)"), + ["description"] = new OpenApiString("Detaillierte Beschreibung für das Admin-Produkt Z."), + ["sku"] = new OpenApiString("SKU-ADM-Z001"), // Muss einzigartig sein! + ["price"] = new OpenApiDouble(149.99), + ["oldPrice"] = new OpenApiNull(), + ["isActive"] = new OpenApiBoolean(true), + ["isInStock"] = new OpenApiBoolean(true), + ["stockQuantity"] = new OpenApiInteger(50), + ["weight"] = new OpenApiDouble(1.2), + ["imageUrl"] = new OpenApiString("https://example.com/images/admin_prodZ.jpg"), + ["slug"] = new OpenApiString("admin-produkt-z-details"), // Muss einzigartig sein! + ["createdDate"] = new OpenApiString(DateTimeOffset.UtcNow.ToString("o")), + ["lastModifiedDate"] = new OpenApiNull(), + ["supplierId"] = new OpenApiNull(), // ODER new OpenApiString("IHR-ECHTER-LIEFERANTEN-GUID-HIER"), wenn schon in DB + ["purchasePrice"] = new OpenApiDouble(80.00) + }; + } + else if (type == typeof(SupplierDto)) + { + schema.Example = new OpenApiObject + { + ["id"] = new OpenApiString(Guid.Empty.ToString()), // Bei POST leer lassen/null + ["name"] = new OpenApiString("Zulieferer Solutions GmbH"), + ["contactPerson"] = new OpenApiString("Anna Bauer"), + ["email"] = new OpenApiString("kontakt@zulieferer.com"), + ["phoneNumber"] = new OpenApiString("+49 151 98765432"), + ["addressId"] = new OpenApiNull(), // Oder new OpenApiString("IHR-ECHTER-ADRESS-GUID-HIER") + ["notes"] = new OpenApiString("Wichtiger Lieferant für Rohstoffe.") + }; + } + else if (type == typeof(ProductVariantDto)) + { + schema.Example = new OpenApiObject + { + ["id"] = new OpenApiString(Guid.Empty.ToString()), + ["productId"] = new OpenApiString("PRODUCT_ID_HERE"), // MUSS ECHTE Produkt-ID sein + ["name"] = new OpenApiString("Farbe"), + ["value"] = new OpenApiString("Rot"), + ["sku"] = new OpenApiString("VAR-RED-001"), + ["priceAdjustment"] = new OpenApiDouble(5.00), + ["stockQuantity"] = new OpenApiInteger(20), + ["imageUrl"] = new OpenApiString("https://example.com/images/prod-variant-red.jpg"), + ["isActive"] = new OpenApiBoolean(true) + }; + } + // --- Kategorien --- + else if (type == typeof(CategoryDto)) + { + schema.Example = new OpenApiObject + { + ["id"] = new OpenApiString(Guid.Empty.ToString()), + ["name"] = new OpenApiString("Elektronik"), + ["slug"] = new OpenApiString("elektronik"), + ["description"] = new OpenApiString("Produkte rund um Elektronik."), + ["parentCategoryId"] = new OpenApiNull(), + ["imageUrl"] = new OpenApiString("https://example.com/images/category_electronics.jpg"), + ["isActive"] = new OpenApiBoolean(true), + ["displayOrder"] = new OpenApiInteger(1) + }; + } + else if (type == typeof(CreateCategoryDto)) + { + schema.Example = new OpenApiObject + { + ["name"] = new OpenApiString("Neue Kategorie"), + ["slug"] = new OpenApiString("neue-kategorie"), // Muss einzigartig sein! + ["description"] = new OpenApiString("Eine Beschreibung für die neue Kategorie."), + ["parentCategoryId"] = new OpenApiNull(), + ["imageUrl"] = new OpenApiString("https://example.com/images/new_category.jpg"), + ["isActive"] = new OpenApiBoolean(true), + ["displayOrder"] = new OpenApiInteger(1) + }; + } + // --- Adressen --- + else if (type == typeof(AddressDto)) + { + schema.Example = new OpenApiObject + { + ["id"] = new OpenApiString(Guid.Empty.ToString()), + ["street"] = new OpenApiString("Musterstraße"), + ["houseNumber"] = new OpenApiString("123a"), + ["city"] = new OpenApiString("Musterstadt"), + ["postalCode"] = new OpenApiString("12345"), + ["country"] = new OpenApiString("Deutschland"), + ["type"] = new OpenApiString(AddressType.Shipping.ToString()) // Enum-Beispiel + }; + } + // --- Kunden --- + else if (type == typeof(CustomerDto)) + { + schema.Example = new OpenApiObject + { + ["id"] = new OpenApiString(Guid.Empty.ToString()), + ["userId"] = new OpenApiString("EXISTING_IDENTITY_USER_ID"), // MUSS ECHTE IdentityUser ID sein + ["firstName"] = new OpenApiString("Max"), + ["lastName"] = new OpenApiString("Mustermann"), + ["email"] = new OpenApiString("max.mustermann@example.com"), + ["phoneNumber"] = new OpenApiString("+491719876543"), + ["defaultShippingAddressId"] = new OpenApiNull(), + ["defaultBillingAddressId"] = new OpenApiNull() + }; + } + // --- Rabatte --- + else if (type == typeof(DiscountDto)) + { + schema.Example = new OpenApiObject + { + ["id"] = new OpenApiString(Guid.Empty.ToString()), + ["name"] = new OpenApiString("Sommerrabatt"), + ["description"] = new OpenApiString("10% Rabatt auf alles"), + ["type"] = new OpenApiString(DiscountType.Percentage.ToString()), + ["value"] = new OpenApiDouble(10.00), + ["couponCode"] = new OpenApiString("SOMMER2025"), // Optional, muss eindeutig sein + ["startDate"] = new OpenApiString(DateTimeOffset.UtcNow.AddDays(1).ToString("o")), + ["endDate"] = new OpenApiString(DateTimeOffset.UtcNow.AddDays(30).ToString("o")), + ["isActive"] = new OpenApiBoolean(true), + ["maxUses"] = new OpenApiInteger(100), + ["currentUses"] = new OpenApiInteger(0) + }; + } + // --- Bestellungen --- + else if (type == typeof(CreateOrderDto)) + { + schema.Example = new OpenApiObject + { + ["customerId"] = new OpenApiString("CUSTOMER_ID_HERE"), // Oder null für Gastbestellung + ["guestEmail"] = new OpenApiString("guest@example.com"), // Nur bei Gastbestellung + ["guestPhoneNumber"] = new OpenApiString("+491701234567"), + ["shippingAddressId"] = new OpenApiString("VALID_ADDRESS_ID_HERE"), // MUSS EXISTIEREN + ["billingAddressId"] = new OpenApiString("VALID_ADDRESS_ID_HERE"), // MUSS EXISTIEREN + ["paymentMethodId"] = new OpenApiString("VALID_PAYMENT_METHOD_ID_HERE"), // MUSS EXISTIEREN + ["shippingMethodId"] = new OpenApiString("VALID_SHIPPING_METHOD_ID_HERE"), // MUSS EXISTIEREN + ["items"] = new OpenApiArray + { + new OpenApiObject + { + ["productId"] = new OpenApiString("VALID_PRODUCT_ID_HERE"), // MUSS EXISTIEREN + ["quantity"] = new OpenApiInteger(1) + }, + new OpenApiObject + { + ["productId"] = new OpenApiString("ANOTHER_PRODUCT_ID_HERE"), + ["productVariantId"] = new OpenApiString("VALID_VARIANT_ID_HERE"), // Optional + ["quantity"] = new OpenApiInteger(2) + } + } + }; + } + else if (type == typeof(CreateOrderItemDto)) + { + schema.Example = new OpenApiObject + { + ["productId"] = new OpenApiString("VALID_PRODUCT_ID_HERE"), + ["productVariantId"] = new OpenApiNull(), // Oder new OpenApiString("VALID_VARIANT_ID_HERE") + ["quantity"] = new OpenApiInteger(1) + }; + } + else if (type == typeof(OrderSummaryDto)) + { + schema.Example = new OpenApiObject + { + ["id"] = new OpenApiString(Guid.NewGuid().ToString()), + ["orderNumber"] = new OpenApiString("WS-2025-0001"), + ["orderDate"] = new OpenApiString(DateTimeOffset.UtcNow.ToString("o")), + ["status"] = new OpenApiString(OrderStatus.Processing.ToString()), + ["totalAmount"] = new OpenApiDouble(123.45), + ["paymentStatus"] = new OpenApiString(PaymentStatus.Paid.ToString()), + ["paymentMethodName"] = new OpenApiString("Kreditkarte"), + ["shippingMethodName"] = new OpenApiString("Standardversand") + }; + } + else if (type == typeof(OrderDetailDto)) + { + schema.Example = new OpenApiObject + { + ["id"] = new OpenApiString(Guid.NewGuid().ToString()), + ["orderNumber"] = new OpenApiString("WS-2025-0002"), + ["customerId"] = new OpenApiString(Guid.NewGuid().ToString()), + ["orderDate"] = new OpenApiString(DateTimeOffset.UtcNow.ToString("o")), + ["status"] = new OpenApiString(OrderStatus.Shipped.ToString()), + ["totalAmount"] = new OpenApiDouble(245.67), + ["shippingAddressId"] = new OpenApiString("VALID_ADDRESS_ID"), + ["billingAddressId"] = new OpenApiString("VALID_ADDRESS_ID"), + ["paymentMethodId"] = new OpenApiString("VALID_PAYMENT_METHOD_ID"), + ["orderItems"] = new OpenApiArray { + new OpenApiObject { ["id"] = new OpenApiString(Guid.NewGuid().ToString()), ["productId"] = new OpenApiString("PROD_A_ID"), ["productName"] = new OpenApiString("Produkt A"), ["quantity"] = new OpenApiInteger(1), ["unitPrice"] = new OpenApiDouble(100.00), ["totalPrice"] = new OpenApiDouble(100.00) } + } + }; + } + // --- Bewertungen --- + else if (type == typeof(ReviewDto)) + { + schema.Example = new OpenApiObject + { + ["id"] = new OpenApiString(Guid.NewGuid().ToString()), + ["productId"] = new OpenApiString("PRODUCT_ID_HERE"), + ["customerId"] = new OpenApiString("CUSTOMER_ID_HERE"), + ["rating"] = new OpenApiInteger(5), + ["title"] = new OpenApiString("Super Produkt!"), + ["comment"] = new OpenApiString("Ich bin sehr zufrieden mit diesem Produkt."), + ["reviewDate"] = new OpenApiString(DateTimeOffset.UtcNow.ToString("o")), + ["isApproved"] = new OpenApiBoolean(true) + }; + } + else if (type == typeof(CreateReviewDto)) + { + schema.Example = new OpenApiObject + { + ["productId"] = new OpenApiString("PRODUCT_ID_HERE"), + ["rating"] = new OpenApiInteger(4), + ["title"] = new OpenApiString("Gute Qualität"), + ["comment"] = new OpenApiString("Das Produkt ist gut, aber die Lieferung dauerte etwas.") + }; + } + // --- Einstellungen --- + else if (type == typeof(SettingDto)) + { + schema.Example = new OpenApiObject + { + ["key"] = new OpenApiString("ShippingCostFlatRate"), + ["value"] = new OpenApiString("5.99"), + ["description"] = new OpenApiString("Pauschale Versandkosten für alle Bestellungen"), + ["lastModifiedDate"] = new OpenApiString(DateTimeOffset.UtcNow.ToString("o")) + }; + } + // --- Zahlungsmethoden --- + else if (type == typeof(PaymentMethodDto)) + { + schema.Example = new OpenApiObject + { + ["id"] = new OpenApiString(Guid.Empty.ToString()), + ["name"] = new OpenApiString("Kreditkarte (Stripe)"), + ["description"] = new OpenApiString("Zahlung über Stripe-Gateway."), + ["isActive"] = new OpenApiBoolean(true), + ["gatewayType"] = new OpenApiString(PaymentGatewayType.Stripe.ToString()), + ["processingFee"] = new OpenApiDouble(0.02) + }; + } + // --- Versandmethoden --- + else if (type == typeof(ShippingMethodDto)) + { + schema.Example = new OpenApiObject + { + ["id"] = new OpenApiString(Guid.Empty.ToString()), + ["name"] = new OpenApiString("Standardversand DHL"), + ["description"] = new OpenApiString("Standardlieferung innerhalb von 2-3 Werktagen."), + ["cost"] = new OpenApiDouble(4.99), + ["isActive"] = new OpenApiBoolean(true), + ["minDeliveryDays"] = new OpenApiInteger(2), + ["maxDeliveryDays"] = new OpenApiInteger(3) + }; + } } } } \ No newline at end of file diff --git a/Webshop.Api/SwaggerFilters/LoginExampleOperationFilter.cs b/Webshop.Api/SwaggerFilters/LoginExampleOperationFilter.cs new file mode 100644 index 0000000..306d2f6 --- /dev/null +++ b/Webshop.Api/SwaggerFilters/LoginExampleOperationFilter.cs @@ -0,0 +1,56 @@ +// src/Webshop.Api/SwaggerFilters/LoginExampleOperationFilter.cs +using Microsoft.OpenApi.Models; +using Swashbuckle.AspNetCore.SwaggerGen; +using Microsoft.OpenApi.Any; +using Webshop.Application.DTOs.Auth; +using System.Linq; // Für .FirstOrDefault() +using System.Net.Mime; // Für MediaTypeNames + +namespace Webshop.Api.SwaggerFilters +{ + public class LoginExampleOperationFilter : IOperationFilter + { + public void Apply(OpenApiOperation operation, OperationFilterContext context) + { + // Prüfen, ob dies der AuthController und eine der Login-Methoden ist + if (context.MethodInfo.DeclaringType == typeof(Controllers.Auth.AuthController) && + (context.MethodInfo.Name == "LoginAdmin" || context.MethodInfo.Name == "LoginCustomer")) + { + // Beispiel für Admin-Login + if (context.MethodInfo.Name == "LoginAdmin") + { + operation.RequestBody.Content[MediaTypeNames.Application.Json].Examples["AdminLoginExample"] = new OpenApiExample + { + Value = new OpenApiObject + { + ["email"] = new OpenApiString("admin@yourwebshop.com"), + ["password"] = new OpenApiString("SecureAdminPass123!") + } + }; + // Optional: Entfernen Sie andere Beispiele, falls sie den Standard überschreiben + // operation.RequestBody.Content[MediaTypeNames.Application.Json].Examples.Remove("Default"); + } + // Beispiel für Customer-Login + else if (context.MethodInfo.Name == "LoginCustomer") + { + operation.RequestBody.Content[MediaTypeNames.Application.Json].Examples["CustomerLoginExample"] = new OpenApiExample + { + Value = new OpenApiObject + { + ["email"] = new OpenApiString("customer@yourwebshop.com"), + ["password"] = new OpenApiString("SecureCustomerPass123!") + } + }; + // Optional: Entfernen Sie andere Beispiele + // operation.RequestBody.Content[MediaTypeNames.Application.Json].Examples.Remove("Default"); + } + + // Stellen Sie sicher, dass der Default-Beispielwert für LoginRequestDto aus dem Schemafilter nicht angezeigt wird, + // wenn wir hier spezifische Beispiele hinzufügen. + // Dies kann je nach Swashbuckle-Version und Konfiguration variieren. + // Eine Möglichkeit: Setzen Sie den Schema-Beispiel explizit auf Null für diese DTOs, + // oder lassen Sie ihn im SchemaFilter nur für DTOs, die keine OperationFilter erhalten. + } + } + } +} \ No newline at end of file