From 9f6af37e7f7c22ccca3f4dd47f0b1895ea6d88da Mon Sep 17 00:00:00 2001 From: "Amir.H Khademi" Date: Tue, 28 May 2024 10:46:18 +0330 Subject: [PATCH] feat (scalarUi) , fix (search) -Add scalar ui instead of swagger -Fix search product returns --- .../appsettings.DevelopmentHamyan.json | 13 ++---- Netina.Api/Controllers/SeedController.cs | 12 +++++ Netina.Api/Program.cs | 15 ++++--- Netina.Api/Properties/launchSettings.json | 2 +- .../ScalarUi/ScalarUiConfiguration.cs | 44 +++++++++++++++++++ Netina.Core/CoreServices/SearchService.cs | 11 ++--- Netina.Core/Utilities/ImageConvertor.cs | 3 +- 7 files changed, 73 insertions(+), 27 deletions(-) create mode 100644 Netina.Api/WebFramework/ScalarUi/ScalarUiConfiguration.cs diff --git a/Netina.Api/AppSettings/appsettings.DevelopmentHamyan.json b/Netina.Api/AppSettings/appsettings.DevelopmentHamyan.json index e043e74..198c7ba 100644 --- a/Netina.Api/AppSettings/appsettings.DevelopmentHamyan.json +++ b/Netina.Api/AppSettings/appsettings.DevelopmentHamyan.json @@ -13,11 +13,8 @@ "Microsoft.AspNetCore.Http.Connections": "Debug" } }, - "ShopSettings": { - "TaxesFee": 9 - }, "SiteSettings": { - "BaseUrl": "http://localhost:32770", + "BaseUrl": "https://api.hamyanedalat.com", "WebSiteUrl": "https://hamyanedalat.com", "AdminPanelBaseUrl": "https://admin.hamyanedalat.com", "StorageBaseUrl": "https://storage.hamyanedalat.com", @@ -28,18 +25,14 @@ "Email": "avvampier@gmail.com", "Password": "2Tsr87RWRn5T", "Phone": "09214802813", - "RoleName": "RootAdmin", - "FirstName": "همه کاره", - "LastName": "سیستم" + "RoleName": "RootAdmin" }, "Manager": { "Username": "09122171024", "Email": "kamran_mirzayi@gmail.com", "Password": "YAWEheKEi7gh", "Phone": "09128387004", - "RoleName": "Manager", - "FirstName": "کامران", - "LastName": "میرزایی" + "RoleName": "Manager" }, "StorageSetting": { "AccessKey": "de129835-b43a-4552-8ed4-865e2635ab3d", diff --git a/Netina.Api/Controllers/SeedController.cs b/Netina.Api/Controllers/SeedController.cs index 5e62a7e..6775979 100644 --- a/Netina.Api/Controllers/SeedController.cs +++ b/Netina.Api/Controllers/SeedController.cs @@ -17,6 +17,8 @@ public class SeedController : ICarterModule var group = app.NewVersionedApi("Seed") .MapGroup("api/seed"); + group.MapPost("sitemap", CreateSiteMapAsync) + .HasApiVersion(1.0); group.MapPost("product/categories", SeedCategoriesAsync) .WithDisplayName("SeedCategoriesAsync") @@ -43,6 +45,16 @@ public class SeedController : ICarterModule } + public async Task CreateSiteMapAsync([FromQuery] string key, ISiteMapService siteMapService, CancellationToken cancellationToken) + { + if (key != "kKAYskyG8xPxKnJrHkuYxub4Ao2bnz7AOmNtwDT0RaqzaG7ZvbvaP29tCrC8wJ823RczJFXOIQT2bDOec4F38A==") + throw new AppException("Key is not valid", ApiResultStatusCode.UnAuthorized); + + await siteMapService.CreateSiteMapAsync(); + + return TypedResults.Ok(); + } + public async Task SeedProductsAsync([FromBody] List request, [FromQuery] string key, IMediator mediator, CancellationToken cancellationToken) { if (key != "kKAYskyG8xPxKnJrHkuYxub4Ao2bnz7AOmNtwDT0RaqzaG7ZvbvaP29tCrC8wJ823RczJFXOIQT2bDOec4F38A==") diff --git a/Netina.Api/Program.cs b/Netina.Api/Program.cs index c3d3365..ea72f09 100644 --- a/Netina.Api/Program.cs +++ b/Netina.Api/Program.cs @@ -1,3 +1,4 @@ +using Netina.Api.WebFramework.ScalarUi; using Netina.Repository.Behaviors; var builder = WebApplication.CreateBuilder(args); @@ -97,12 +98,13 @@ var app = builder.Build(); // Configure the HTTP request pipeline. -if (app.Environment.IsDevelopment()) -{ - //app.UseSwagger(); - //app.UseSwaggerUI(); -} -else + +//app.UseCustomSwagger(siteSetting.BaseUrl); +app.UseSwagger(); +app.MapScalarUi(); +//app.UseSwaggerUI(); + +if (app.Environment.IsProduction()) { app.UseHsts(); } @@ -113,7 +115,6 @@ app.UseCors(x => x .AllowCredentials()); app.UseHttpsRedirection(); -app.UseCustomSwagger(siteSetting.BaseUrl); app.UseAuthorization(); app.UseAuthentication(); diff --git a/Netina.Api/Properties/launchSettings.json b/Netina.Api/Properties/launchSettings.json index 26842b5..8d264f8 100644 --- a/Netina.Api/Properties/launchSettings.json +++ b/Netina.Api/Properties/launchSettings.json @@ -21,7 +21,7 @@ "Docker": { "commandName": "Docker", "launchBrowser": true, - "launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}/swagger", + "launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}/scalar/v1", "environmentVariables": { "ASPNETCORE_URLS": "http://+:80" }, diff --git a/Netina.Api/WebFramework/ScalarUi/ScalarUiConfiguration.cs b/Netina.Api/WebFramework/ScalarUi/ScalarUiConfiguration.cs new file mode 100644 index 0000000..fe030dc --- /dev/null +++ b/Netina.Api/WebFramework/ScalarUi/ScalarUiConfiguration.cs @@ -0,0 +1,44 @@ +namespace Netina.Api.WebFramework.ScalarUi; + +public static class ScalarUiConfiguration +{ + public static void MapScalarUi(this IEndpointRouteBuilder app) + { + app.MapGet("/scalar/{documentName}", (string documentName) => + { + + var scalarScript = $$""" + + + + Scalar API Reference + + + + + + + + + + + + + + """; + + return Results.Content(scalarScript, "text/html"); + }).ExcludeFromDescription(); + } +} \ No newline at end of file diff --git a/Netina.Core/CoreServices/SearchService.cs b/Netina.Core/CoreServices/SearchService.cs index 2456e83..3c12659 100644 --- a/Netina.Core/CoreServices/SearchService.cs +++ b/Netina.Core/CoreServices/SearchService.cs @@ -1,6 +1,4 @@ -using MediatR; -using Netina.Domain.Dtos.ResponseDtos.Torob; -using Netina.Domain.Dtos.ResponseDtos.Zarehbin; +using Netina.Domain.Dtos.ResponseDtos.Zarehbin; using Netina.Domain.Entities.ProductCategories; namespace Netina.Core.CoreServices; @@ -15,17 +13,16 @@ public class SearchService : ISearchService } public async Task SearchAsync(string name, CancellationToken cancellationToken = default) { - var searchQuery = name.ToLower().Trim(); - int minSimilarityThreshold = 20; + var searchQuery = name; var products = await _repositoryWrapper.SetRepository() .TableNoTracking - .Where(p => FuzzySharp.Fuzz.PartialRatio(p.PersianName.ToLower().Trim(), searchQuery) >= minSimilarityThreshold) + .OrderByDescending(p => EF.Functions.TrigramsSimilarity(p.PersianName, searchQuery)) .Select(ProductMapper.ProjectToSDto) .ToListAsync(cancellationToken); var categories = await _repositoryWrapper.SetRepository() .TableNoTracking - .Where(p => FuzzySharp.Fuzz.PartialRatio(p.Name.ToLower().Trim(), searchQuery) >= minSimilarityThreshold) + .OrderByDescending(p => EF.Functions.TrigramsSimilarity(p.Name, searchQuery)) .Select(ProductCategoryMapper.ProjectToSDto) .ToListAsync(cancellationToken); diff --git a/Netina.Core/Utilities/ImageConvertor.cs b/Netina.Core/Utilities/ImageConvertor.cs index 4cb3253..960fda8 100644 --- a/Netina.Core/Utilities/ImageConvertor.cs +++ b/Netina.Core/Utilities/ImageConvertor.cs @@ -1,5 +1,4 @@ -using Netina.Common.Models.Api; -using SixLabors.ImageSharp; +using SixLabors.ImageSharp; using SixLabors.ImageSharp.Processing; namespace Netina.Core.Utilities;