From 0a3db8370456d9e12755a90b5419d67afcd1dcbe Mon Sep 17 00:00:00 2001 From: Ho Ngoc Hai Date: Thu, 15 Jan 2026 16:49:44 +0700 Subject: [PATCH] feat: Update Swagger configuration and launch settings for Membership Service API - Downgraded Swashbuckle.AspNetCore.Annotations package to version 7.2.0 for compatibility. - Enhanced Swagger documentation with detailed API description, features, and contact information. - Added JWT Bearer security definition to improve API security. - Updated launch settings to change the application URL from localhost:5000 to localhost:5003. --- .../MembershipService.API.csproj | 2 +- .../src/MembershipService.API/Program.cs | 58 ++++++++++++++++++- .../Properties/launchSettings.json | 2 +- 3 files changed, 58 insertions(+), 4 deletions(-) diff --git a/services/membership-service-net/src/MembershipService.API/MembershipService.API.csproj b/services/membership-service-net/src/MembershipService.API/MembershipService.API.csproj index 5bcd32b9..bbb47f1c 100644 --- a/services/membership-service-net/src/MembershipService.API/MembershipService.API.csproj +++ b/services/membership-service-net/src/MembershipService.API/MembershipService.API.csproj @@ -36,7 +36,7 @@ - + diff --git a/services/membership-service-net/src/MembershipService.API/Program.cs b/services/membership-service-net/src/MembershipService.API/Program.cs index 9770441a..0bb4b923 100644 --- a/services/membership-service-net/src/MembershipService.API/Program.cs +++ b/services/membership-service-net/src/MembershipService.API/Program.cs @@ -3,6 +3,7 @@ using FluentValidation; using Hellang.Middleware.ProblemDetails; using MembershipService.API.Application.Behaviors; using MembershipService.Infrastructure; +using Microsoft.OpenApi.Models; using Serilog; // EN: Configure Serilog early / VI: Cấu hình Serilog sớm @@ -68,12 +69,65 @@ try builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(options => { - options.SwaggerDoc("v1", new() + options.SwaggerDoc("v1", new OpenApiInfo { Title = "Membership Service API", Version = "v1", - Description = "Membership Service API - Manage member profiles and membership levels" + Description = """ + Membership Service API - Manage member profiles and membership levels + + ## Features + - Member profile management + - Membership levels (Free/Basic/Premium) + - User preferences + """, + Contact = new OpenApiContact + { + Name = "GoodGo Team", + Email = "support@goodgo.com", + Url = new Uri("https://github.com/goodgo") + }, + License = new OpenApiLicense + { + Name = "MIT License", + Url = new Uri("https://opensource.org/licenses/MIT") + } }); + + // EN: Include XML comments for better documentation + // VI: Include XML comments để documentation tốt hơn + var xmlFilename = $"{System.Reflection.Assembly.GetExecutingAssembly().GetName().Name}.xml"; + var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFilename); + if (File.Exists(xmlPath)) + { + options.IncludeXmlComments(xmlPath, includeControllerXmlComments: true); + } + + // EN: Add JWT Bearer security definition / VI: Thêm JWT Bearer security definition + options.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme + { + Type = SecuritySchemeType.Http, + Scheme = "bearer", + BearerFormat = "JWT", + Description = "JWT Authorization header using the Bearer scheme. Example: 'Bearer {token}'" + }); + + options.AddSecurityRequirement(new OpenApiSecurityRequirement + { + { + new OpenApiSecurityScheme + { + Reference = new OpenApiReference + { + Type = ReferenceType.SecurityScheme, + Id = "Bearer" + } + }, + Array.Empty() + } + }); + + // EN: Enable annotations / VI: Bật annotations options.EnableAnnotations(); }); diff --git a/services/membership-service-net/src/MembershipService.API/Properties/launchSettings.json b/services/membership-service-net/src/MembershipService.API/Properties/launchSettings.json index 6355d40b..ac85ad94 100644 --- a/services/membership-service-net/src/MembershipService.API/Properties/launchSettings.json +++ b/services/membership-service-net/src/MembershipService.API/Properties/launchSettings.json @@ -6,7 +6,7 @@ "dotnetRunMessages": true, "launchBrowser": true, "launchUrl": "swagger", - "applicationUrl": "http://localhost:5000", + "applicationUrl": "http://localhost:5003", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" }