Add project files.
This commit is contained in:
		| @@ -0,0 +1,65 @@ | ||||
| using Core.Blueprint.External.Clients.Blueprint; | ||||
| using Core.Blueprint.External.GatewayConfigurations; | ||||
| using Lib.Architecture.BuildingBlocks.Helpers.Token; | ||||
| using Microsoft.AspNetCore.Http; | ||||
| using Microsoft.Extensions.Configuration; | ||||
| using Microsoft.Extensions.DependencyInjection; | ||||
| using Refit; | ||||
|  | ||||
| namespace Core.Blueprint.External.ClientConfiguration | ||||
| { | ||||
|     public static class RegisterClientConfiguration | ||||
|     { | ||||
|         public static IServiceCollection RegisterExternalLayer(this IServiceCollection services, IConfiguration configuration) | ||||
|         { | ||||
|             var gatewayConfiguration = new GatewayConfiguration(); | ||||
|             var gatewaySettingsConfiguration = new GatewaySettingsConfigurations(configuration); | ||||
|  | ||||
|             // Register GatewayConfiguration as a singleton | ||||
|             services.AddSingleton(gatewayConfiguration); | ||||
|  | ||||
|             // Register IHttpContextAccessor | ||||
|             services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>(); | ||||
|  | ||||
|             // Register ITokenProvider | ||||
|             services.AddSingleton<ITokenProvider, HttpContextTokenProvider>(); | ||||
|  | ||||
|             // Register the custom AuthenticatedHttpClientHandler | ||||
|             services.AddTransient(provider => | ||||
|             { | ||||
|                 var tokenProvider = provider.GetRequiredService<ITokenProvider>(); | ||||
|                 var trackingIdHandler = new TrackingMechanismExtension(provider.GetRequiredService<IHttpContextAccessor>()); | ||||
|  | ||||
|                 var handler = new AuthenticatedHttpClientHandler(tokenProvider) | ||||
|                 { | ||||
|                     InnerHandler = new HttpClientHandler() // Setting the InnerHandler manually | ||||
|                 }; | ||||
|  | ||||
|                 // Attach the TrackingIdHandler as the outermost handler | ||||
|                 trackingIdHandler.InnerHandler = handler; | ||||
|  | ||||
|                 return handler; | ||||
|             }); | ||||
|  | ||||
|             var blueprintServiceApiUrl = GatewaySettingsConfigurations.GetBlueprintServiceAPIEndpoint().Endpoint.Url; | ||||
|  | ||||
|             // Register IDashBoardServiceClient with the manually created HttpClient | ||||
|             services.AddScoped(provider => | ||||
|             { | ||||
|                 var handler = provider.GetRequiredService<AuthenticatedHttpClientHandler>(); | ||||
|                 var handlerTrackingId = new TrackingMechanismExtension(provider.GetRequiredService<IHttpContextAccessor>()); // Using the TrackingIdHandler here | ||||
|                                                                                                                              // Chain the handlers | ||||
|                 handlerTrackingId.InnerHandler = handler; //chaining | ||||
|  | ||||
|                 var httpClient = new HttpClient(handlerTrackingId) | ||||
|                 { | ||||
|                     BaseAddress = new Uri(blueprintServiceApiUrl), | ||||
|                     Timeout = TimeSpan.FromMinutes(1) | ||||
|                 }; | ||||
|                 return RestService.For<IBlueprintServiceClient>(httpClient); | ||||
|             }); | ||||
|  | ||||
|             return services; | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,17 @@ | ||||
| using Core.Blueprint.External.Clients.Blueprint.Requests; | ||||
|  | ||||
| namespace Core.Blueprint.External.Clients.Blueprint.Adapters | ||||
| { | ||||
|     public class BlueprintAdapter | ||||
|     { | ||||
|         public string Name { get; set; } = null!; | ||||
|         public string? Description { get; set; } | ||||
|         public string _Id { get; set; } = null!; | ||||
|         public string Id { get; init; } = null!; | ||||
|         public DateTime CreatedAt { get; set; } | ||||
|         public string? CreatedBy { get; set; } | ||||
|         public DateTime? UpdatedAt { get; set; } | ||||
|         public string? UpdatedBy { get; set; } | ||||
|         public StatusEnum Status { get; set; } | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,10 @@ | ||||
| using Core.Blueprint.KeyVault; | ||||
|  | ||||
| namespace Core.Blueprint.External.Clients.Blueprint.Adapters | ||||
| { | ||||
|     public class KeyVaultAdapter | ||||
|     { | ||||
|         public KeyVaultResponse Item1 { get; set; } | ||||
|         public string Item2 { get; set; } | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,18 @@ | ||||
| using Core.Blueprint.External.Clients.Blueprint.Requests; | ||||
|  | ||||
| namespace Core.Blueprint.External.Clients.Blueprint.Adapters | ||||
| { | ||||
|     public class UserProjectAdapter | ||||
|     { | ||||
|         public string ProjectCode { get; set; } = null!; | ||||
|         public string ProjectDescription { get; set; } = null!; | ||||
|         public string UserId { get; set; } = null!; | ||||
|         public int Id { get; set; } | ||||
|         public string Guid { get; set; } = null!; | ||||
|         public DateTime CreatedAt { get; set; } | ||||
|         public string? CreatedBy { get; set; } | ||||
|         public DateTime? UpdatedAt { get; set; } | ||||
|         public string? UpdatedBy { get; set; } | ||||
|         public StatusEnum Status { get; set; } | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,70 @@ | ||||
| using Core.Blueprint.External.Clients.Blueprint.Adapters; | ||||
| using Core.Blueprint.External.Clients.Blueprint.Requests.BlobStorage; | ||||
| using Core.Blueprint.External.Clients.Blueprint.Requests.KeyVault; | ||||
| using Core.Blueprint.External.Clients.Blueprint.Requests.Mongo; | ||||
| using Core.Blueprint.External.Clients.Blueprint.Requests.SQL; | ||||
| using Core.Blueprint.KeyVault; | ||||
| using Core.Blueprint.Storage; | ||||
| using Core.Blueprint.Storage.Adapters; | ||||
| using Microsoft.AspNetCore.Mvc; | ||||
| using Refit; | ||||
|  | ||||
| namespace Core.Blueprint.External.Clients.Blueprint | ||||
| { | ||||
|     public interface IBlueprintServiceClient | ||||
|     { | ||||
|         [Post("/v1/MongoBlueprint/Create")] | ||||
|         Task<ApiResponse<BlueprintAdapter>> CreateBlueprintService([Body] CreateBlueprintRequest newBlueprint, CancellationToken cancellationToken = default); | ||||
|  | ||||
|         [Get("/v1/MongoBlueprint/GetAll")] | ||||
|         Task<ApiResponse<IEnumerable<BlueprintAdapter>>> GetAllBlueprintsService(CancellationToken cancellationToken = default); | ||||
|  | ||||
|         [Post("/v1/MongoBlueprint/GetById")] | ||||
|         Task<ApiResponse<BlueprintAdapter>> GetBlueprintByIdService([Body] GetBlueprintRequest request, CancellationToken cancellationToken = default); | ||||
|  | ||||
|         [Put("/v1/MongoBlueprint/Update")] | ||||
|         Task<ApiResponse<BlueprintAdapter>> UpdateBlueprintService([Body] UpdateBlueprintRequest entity, CancellationToken cancellationToken = default); | ||||
|  | ||||
|         [Delete("/v1/MongoBlueprint/Delete")] | ||||
|         Task<ApiResponse<BlueprintAdapter>> DeleteBlueprintService([Body] DeleteBlueprintRequest request, CancellationToken cancellationToken = default); | ||||
|  | ||||
|         [Post("/v1/SQLUserProject/Create")] | ||||
|         Task<ApiResponse<UserProjectAdapter>> CreateUserProjectService([Body] CreateUserProjectRequest newUserProject, CancellationToken cancellationToken = default); | ||||
|  | ||||
|         [Get("/v1/SQLUserProject/GetAll")] | ||||
|         Task<ApiResponse<IEnumerable<UserProjectAdapter>>> GetAllUserProjectsService(CancellationToken cancellationToken = default); | ||||
|  | ||||
|         [Post("/v1/SQLUserProject/GetById")] | ||||
|         Task<ApiResponse<UserProjectAdapter>> GetUserProjectByIdService([Body] GetUserProjectRequest request, CancellationToken cancellationToken = default); | ||||
|  | ||||
|         [Put("/v1/SQLUserProject/Update")] | ||||
|         Task<ApiResponse<UserProjectAdapter>> UpdateUserProjectService([Body] UpdateUserProjectRequest entity, CancellationToken cancellationToken = default); | ||||
|  | ||||
|         [Delete("/v1/SQLUserProject/Delete")] | ||||
|         Task<ApiResponse<UserProjectAdapter>> DeleteUserProjectService([Body] DeleteUserProjectRequest request, CancellationToken cancellationToken = default); | ||||
|  | ||||
|         [Post("/v1/KeyVault/CreateSecret")] | ||||
|         Task<ApiResponse<KeyVaultResponse>> CreateSecretService([Body] CreateSecretRequest newKeyVault, CancellationToken cancellationToken = default); | ||||
|  | ||||
|         [Post("/v1/KeyVault/GetSecretByName")] | ||||
|         Task<ApiResponse<KeyVaultAdapter>> GetSecretByNameService([Body] GetSecretRequest request, CancellationToken cancellationToken = default); | ||||
|  | ||||
|         [Put("/v1/KeyVault/UpdateSecret")] | ||||
|         Task<ApiResponse<KeyVaultAdapter>> UpdateSecretService([Body] UpdateSecretRequest entity, CancellationToken cancellationToken = default); | ||||
|  | ||||
|         [Delete("/v1/KeyVault/DeleteSecret")] | ||||
|         Task<ApiResponse<KeyVaultAdapter>> DeleteSecretService([Body] DeleteSecretRequest request, CancellationToken cancellationToken = default); | ||||
|  | ||||
|         [Post("/v1/BlobStorage/UploadBlob")] | ||||
|         Task<ApiResponse<BlobFileAdapter>> UploadBlobService([Body] UploadBlobRequest request, CancellationToken cancellationToken = default); | ||||
|  | ||||
|         [Get("/v1/BlobStorage/GetBlobList")] | ||||
|         Task<ApiResponse<List<BlobFileAdapter>>> GetBlobListAsync([FromQuery] string? prefix, CancellationToken cancellationToken = default); | ||||
|  | ||||
|         [Post("/v1/BlobStorage/DownloadBlob")] | ||||
|         Task<ApiResponse<BlobDownloadUriAdapter>> DownloadBlobAsync([Body] DownloadBlobRequest request, CancellationToken cancellationToken = default); | ||||
|  | ||||
|         [Delete("/v1/BlobStorage/DeleteBlob")] | ||||
|         Task<ApiResponse<BlobFileAdapter>> DeleteBlobService([Body] DeleteBlobRequest request, CancellationToken cancellationToken = default); | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,7 @@ | ||||
| namespace Core.Blueprint.External.Clients.Blueprint.Requests.BlobStorage | ||||
| { | ||||
|     public class DeleteBlobRequest | ||||
|     { | ||||
|         public string BlobName { get; set; } = null!; | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,7 @@ | ||||
| namespace Core.Blueprint.External.Clients.Blueprint.Requests.BlobStorage | ||||
| { | ||||
|     public class DownloadBlobRequest | ||||
|     { | ||||
|         public string BlobName { get; set; } = null!; | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,7 @@ | ||||
| namespace Core.Blueprint.External.Clients.Blueprint.Requests.BlobStorage | ||||
| { | ||||
|     public class GetBlobListRequest | ||||
|     { | ||||
|         public string? Prefix { get; set; } | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,9 @@ | ||||
| namespace Core.Blueprint.External.Clients.Blueprint.Requests.BlobStorage | ||||
| { | ||||
|     public class UploadBlobRequest | ||||
|     { | ||||
|         public string BlobName { get; set; } = null!; | ||||
|  | ||||
|         public byte[] BlobContent { get; set; } = null!; | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,9 @@ | ||||
| namespace Core.Blueprint.External.Clients.Blueprint.Requests.KeyVault | ||||
| { | ||||
|     public class CreateSecretRequest | ||||
|     { | ||||
|         public string Name { get; set; } = null!; | ||||
|  | ||||
|         public string Value { get; set; } = null!; | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,6 @@ | ||||
| namespace Core.Blueprint.External.Clients.Blueprint.Requests.KeyVault; | ||||
|  | ||||
| public class DeleteSecretRequest | ||||
| { | ||||
|     public string Name { get; set; } | ||||
| } | ||||
| @@ -0,0 +1,7 @@ | ||||
| namespace Core.Blueprint.External.Clients.Blueprint.Requests.KeyVault | ||||
| { | ||||
|     public class GetSecretRequest | ||||
|     { | ||||
|         public string Name { get; set; } | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,8 @@ | ||||
| namespace Core.Blueprint.External.Clients.Blueprint.Requests.KeyVault | ||||
| { | ||||
|     public class UpdateSecretRequest | ||||
|     { | ||||
|         public string Name { get; set; } = null!; | ||||
|         public string Value { get; set; } = null!; | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,9 @@ | ||||
| namespace Core.Blueprint.External.Clients.Blueprint.Requests.Mongo | ||||
| { | ||||
|     public class CreateBlueprintRequest | ||||
|     { | ||||
|         public string Name { get; set; } = null!; | ||||
|  | ||||
|         public string? Description { get; set; } | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,7 @@ | ||||
| namespace Core.Blueprint.External.Clients.Blueprint.Requests.Mongo | ||||
| { | ||||
|     public class DeleteBlueprintRequest | ||||
|     { | ||||
|         public string _Id { get; set; } | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,6 @@ | ||||
| namespace Core.Blueprint.External.Clients.Blueprint.Requests.Mongo | ||||
| { | ||||
|     public class GetAllBlueprintsRequest | ||||
|     { | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,7 @@ | ||||
| namespace Core.Blueprint.External.Clients.Blueprint.Requests.Mongo | ||||
| { | ||||
|     public class GetBlueprintRequest | ||||
|     { | ||||
|         public string _Id { get; set; } | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,15 @@ | ||||
| namespace Core.Blueprint.External.Clients.Blueprint.Requests.Mongo | ||||
| { | ||||
|     public class UpdateBlueprintRequest | ||||
|     { | ||||
|         public string Name { get; set; } = null!; | ||||
|         public string? Description { get; set; } | ||||
|         public string _Id { get; set; } = null!; | ||||
|         public string Id { get; init; } = null!; | ||||
|         public DateTime CreatedAt { get; set; } | ||||
|         public string? CreatedBy { get; set; } | ||||
|         public DateTime? UpdatedAt { get; set; } | ||||
|         public string? UpdatedBy { get; set; } | ||||
|         public StatusEnum Status { get; set; } | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,9 @@ | ||||
| namespace Core.Blueprint.External.Clients.Blueprint.Requests.SQL | ||||
| { | ||||
|     public class CreateUserProjectRequest | ||||
|     { | ||||
|         public string ProjectCode { get; set; } = null!; | ||||
|         public string ProjectDescription { get; set; } = null!; | ||||
|         public string UserId { get; set; } = null!; | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,7 @@ | ||||
| namespace Core.Blueprint.External.Clients.Blueprint.Requests.SQL | ||||
| { | ||||
|     public class DeleteUserProjectRequest | ||||
|     { | ||||
|         public int Id { get; set; } | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,6 @@ | ||||
| namespace Core.Blueprint.External.Clients.Blueprint.Requests.SQL | ||||
| { | ||||
|     public class GetAllUserProjectsRequest | ||||
|     { | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,7 @@ | ||||
| namespace Core.Blueprint.External.Clients.Blueprint.Requests.SQL | ||||
| { | ||||
|     public class GetUserProjectRequest | ||||
|     { | ||||
|         public int Id { get; set; } | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,16 @@ | ||||
| namespace Core.Blueprint.External.Clients.Blueprint.Requests.SQL | ||||
| { | ||||
|     public class UpdateUserProjectRequest | ||||
|     { | ||||
|         public string ProjectCode { get; set; } = null!; | ||||
|         public string ProjectDescription { get; set; } = null!; | ||||
|         public string UserId { get; set; } = null!; | ||||
|         public int Id { get; set; } | ||||
|         public string Guid { get; set; } = null!; | ||||
|         public DateTime CreatedAt { get; set; } | ||||
|         public string? CreatedBy { get; set; } | ||||
|         public DateTime? UpdatedAt { get; set; } | ||||
|         public string? UpdatedBy { get; set; } | ||||
|         public StatusEnum Status { get; set; } | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,15 @@ | ||||
| using System.Text.Json.Serialization; | ||||
|  | ||||
| namespace Core.Blueprint.External.Clients.Blueprint.Requests | ||||
| { | ||||
|     [JsonConverter(typeof(JsonStringEnumConverter))] | ||||
|     public enum StatusEnum | ||||
|     { | ||||
|  | ||||
|         Active = 0, | ||||
|  | ||||
|         Inactive = 1, | ||||
|  | ||||
|         Deleted = 2 | ||||
|     } | ||||
| } | ||||
							
								
								
									
										20
									
								
								Core.Blueprint.External/Core.Blueprint.External.csproj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								Core.Blueprint.External/Core.Blueprint.External.csproj
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,20 @@ | ||||
| <Project Sdk="Microsoft.NET.Sdk"> | ||||
|  | ||||
|   <PropertyGroup> | ||||
|     <TargetFramework>net8.0</TargetFramework> | ||||
|     <ImplicitUsings>enable</ImplicitUsings> | ||||
|     <Nullable>enable</Nullable> | ||||
|   </PropertyGroup> | ||||
|  | ||||
|   <ItemGroup> | ||||
|     <PackageReference Include="Core.Blueprint.KeyVault" Version="0.3.0-alpha0037" /> | ||||
|     <PackageReference Include="Core.Blueprint.Storage" Version="0.3.0-alpha0049" /> | ||||
|     <PackageReference Include="Lib.Architecture.BuildingBlocks" Version="0.9.0-alpha0008" /> | ||||
|     <PackageReference Include="Microsoft.AspNetCore.Http" Version="2.2.2" /> | ||||
|     <PackageReference Include="Microsoft.AspNetCore.Http.Abstractions" Version="2.2.0" /> | ||||
|     <PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="9.0.0" /> | ||||
|     <PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="9.0.0" /> | ||||
|     <PackageReference Include="Refit" Version="8.0.0" /> | ||||
|   </ItemGroup> | ||||
|  | ||||
| </Project> | ||||
| @@ -0,0 +1,17 @@ | ||||
| namespace Core.Blueprint.External.GatewayConfigurations | ||||
| { | ||||
|     public record GatewayConfiguration | ||||
|     { | ||||
|         public GatewayConfiguration() | ||||
|         { | ||||
|             BlueprintService = new BlueprintServiceAPI(); | ||||
|         } | ||||
|  | ||||
|         public BlueprintServiceAPI BlueprintService { get; set; } | ||||
|     } | ||||
|     public record BlueprintServiceAPI | ||||
|     { | ||||
|         public string Channel { get; set; } | ||||
|         public BaseEndpoint Endpoint { get; set; } | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,46 @@ | ||||
| using Microsoft.Extensions.Configuration; | ||||
|  | ||||
| namespace Core.Blueprint.External.GatewayConfigurations | ||||
| { | ||||
|     public class GatewaySettingsConfigurations | ||||
|     { | ||||
|         private static GatewayConfiguration GatewayConfigurations { get; set; } = new GatewayConfiguration(); | ||||
|         private readonly IConfiguration _configuration; | ||||
|  | ||||
|         public GatewaySettingsConfigurations(IConfiguration configuration) | ||||
|         { | ||||
|             _configuration = configuration; | ||||
|             SetBlueprintServiceAPIEndpoint(); | ||||
|         } | ||||
|         public static BlueprintServiceAPI GetBlueprintServiceAPIEndpoint() | ||||
|         { | ||||
|             return GatewayConfigurations.BlueprintService; | ||||
|         } | ||||
|         private GatewayConfiguration SetBlueprintServiceAPIEndpoint() | ||||
|         { | ||||
|             IConfigurationSection source; | ||||
|             var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? string.Empty; | ||||
|  | ||||
|             if (environment == "Local") | ||||
|                 source = _configuration.GetSection("LocalGateways"); | ||||
|             else | ||||
|                 source = _configuration.GetSection("Gateways"); | ||||
|  | ||||
|             var endpoint = source["BlueprintService"] ?? string.Empty; | ||||
|  | ||||
|             GatewayConfigurations.BlueprintService = new BlueprintServiceAPI() | ||||
|             { | ||||
|                 Endpoint = new BaseEndpoint() | ||||
|                 { | ||||
|                     Uri = new Uri(endpoint), | ||||
|                     Url = endpoint, | ||||
|                     Token = string.Empty, | ||||
|                     APIName = "Blueprint Service" | ||||
|                 } | ||||
|             }; | ||||
|  | ||||
|             return GatewayConfigurations; | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
							
								
								
									
										18
									
								
								Core.Blueprint.External/TrackingMechanismExtension.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								Core.Blueprint.External/TrackingMechanismExtension.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,18 @@ | ||||
| using Microsoft.AspNetCore.Http; | ||||
|  | ||||
| namespace Core.Blueprint.External | ||||
| { | ||||
|     public sealed class TrackingMechanismExtension(IHttpContextAccessor httpContextAccessor) : DelegatingHandler | ||||
|     { | ||||
|         private readonly IHttpContextAccessor _httpContextAccessor = httpContextAccessor ?? throw new ArgumentNullException(nameof(httpContextAccessor)); | ||||
|  | ||||
|         protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) | ||||
|         { | ||||
|             if (_httpContextAccessor.HttpContext != null) | ||||
|             { | ||||
|                 request.Headers.Add("TrackingId", Guid.NewGuid().ToString()); | ||||
|             } | ||||
|             return await base.SendAsync(request, cancellationToken).ConfigureAwait(false); | ||||
|         } | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user
	 Sergio Matias Urquin
					Sergio Matias Urquin