diff --git a/.version b/.version index d5a7440..ddd44eb 100644 --- a/.version +++ b/.version @@ -1 +1 @@ -0.27.36.58 \ No newline at end of file +0.27.37.59 \ No newline at end of file diff --git a/Netina.Api/AppSettings/appsettings.DevelopmentHamyan.json b/Netina.Api/AppSettings/appsettings.DevelopmentHamyan.json index 048be2f..e043e74 100644 --- a/Netina.Api/AppSettings/appsettings.DevelopmentHamyan.json +++ b/Netina.Api/AppSettings/appsettings.DevelopmentHamyan.json @@ -18,9 +18,9 @@ }, "SiteSettings": { "BaseUrl": "http://localhost:32770", - "WebSiteUrl": "https://hamyan.visabartar.com", - "AdminPanelBaseUrl": "https://admin.hamyan.visabartar.com", - "StorageBaseUrl": "https://storage.visabartar.com", + "WebSiteUrl": "https://hamyanedalat.com", + "AdminPanelBaseUrl": "https://admin.hamyanedalat.com", + "StorageBaseUrl": "https://storage.hamyanedalat.com", "KaveNegarApiKey": "3735494B4143727A794346457461576A2B4B6668414973424E333561505A694B", "LoginOtpTemplate": "login", "UserSetting": { diff --git a/Netina.Api/Controllers/BlogController.cs b/Netina.Api/Controllers/BlogController.cs index c6aa858..2b7bfe9 100644 --- a/Netina.Api/Controllers/BlogController.cs +++ b/Netina.Api/Controllers/BlogController.cs @@ -1,6 +1,8 @@ using Marten.Events; +using Microsoft.Extensions.Options; using Netina.Domain.Entities.Blogs; using Netina.Domain.Entities.Products; +using System.Web; namespace Netina.Api.Controllers; @@ -37,6 +39,25 @@ public class BlogController : ICarterModule builder.AddAuthenticationSchemes("Bearer").RequireAuthenticatedUser() .RequireClaim(CustomClaimType.Permission, ApplicationPermission.ManageBlogs)) .HasApiVersion(1.0); + + group.MapGet("/newlink", GetBlogNewLinkAsync) + .WithDisplayName("GetBlogNewLink") + .HasApiVersion(1.0); + + } + + private async Task GetBlogNewLinkAsync([FromQuery]string slug,IRepositoryWrapper repositoryWrapper,IOptionsSnapshot snapshot,CancellationToken cancellationToken) + { + var htmlSlug = HttpUtility.UrlEncode(slug); + + var blog = await repositoryWrapper.SetRepository() + .TableNoTracking + .FirstOrDefaultAsync(b => b.Slug== htmlSlug, cancellationToken); + if (blog == null) + throw new BaseApiException(ApiResultStatusCode.NotFound, "Blog not found"); + var website = snapshot.Value.WebSiteUrl; + var response = $"{website}/blogs/{blog.Id}/{blog.Slug}"; + return TypedResults.Content(response); } // GET:Get All Entity diff --git a/Netina.Api/Netina.Api.csproj b/Netina.Api/Netina.Api.csproj index 384a9d4..9a98232 100644 --- a/Netina.Api/Netina.Api.csproj +++ b/Netina.Api/Netina.Api.csproj @@ -6,8 +6,8 @@ enable true Linux - 0.27.35.57 - 0.27.35.57 + 0.27.37.59 + 0.27.37.59 diff --git a/Netina.Api/Program.cs b/Netina.Api/Program.cs index c3d3365..a200ed6 100644 --- a/Netina.Api/Program.cs +++ b/Netina.Api/Program.cs @@ -8,7 +8,7 @@ string env = builder.Environment.IsDevelopment() == true ? "Development" : "Prod builder.Host.UseContentRoot(Directory.GetCurrentDirectory()); if (builder.Environment.IsDevelopment()) { - string projectName = "Vesmeh"; + string projectName = "Hamyan"; builder.Configuration.AddJsonFile($"AppSettings/appsettings.json").AddJsonFile($"AppSettings/appsettings.{env}{projectName}.json"); } diff --git a/Netina.Core/CoreServices/Abstracts/IAccountService.cs b/Netina.Core/CoreServices/Abstracts/IAccountService.cs index a12537a..de3ed04 100644 --- a/Netina.Core/CoreServices/Abstracts/IAccountService.cs +++ b/Netina.Core/CoreServices/Abstracts/IAccountService.cs @@ -1,10 +1,4 @@ -using Netina.Common.Models; -using Netina.Common.Models.Api; -using Netina.Domain.Dtos.RequestDtos; -using Netina.Domain.Dtos.ResponseDtos; -using Netina.Domain.Dtos.SmallDtos; - -namespace Netina.Core.CoreServices.Abstracts; +namespace Netina.Core.CoreServices.Abstracts; public interface IAccountService : IScopedDependency { diff --git a/Netina.Core/CoreServices/SearchService.cs b/Netina.Core/CoreServices/SearchService.cs index 4515e24..c14dc2f 100644 --- a/Netina.Core/CoreServices/SearchService.cs +++ b/Netina.Core/CoreServices/SearchService.cs @@ -1,4 +1,5 @@ -using Netina.Domain.Dtos.ResponseDtos.Torob; +using MediatR; +using Netina.Domain.Dtos.ResponseDtos.Torob; using Netina.Domain.Dtos.ResponseDtos.Zarehbin; using Netina.Domain.Entities.ProductCategories; @@ -14,15 +15,17 @@ public class SearchService : ISearchService } public async Task SearchAsync(string name, CancellationToken cancellationToken = default) { + var searchQuery = name.ToLowerInvariant().Trim(); + int minSimilarityThreshold = 20; var products = await _repositoryWrapper.SetRepository() .TableNoTracking - .Where(p => p.PersianName.Trim().ToLower().Contains(name.Trim().ToLower())) + .Where(p => FuzzySharp.Fuzz.PartialRatio(p.PersianName.ToLowerInvariant().Trim(), searchQuery) >= minSimilarityThreshold) .Select(ProductMapper.ProjectToSDto) .ToListAsync(cancellationToken); var categories = await _repositoryWrapper.SetRepository() .TableNoTracking - .Where(p => p.Name.Trim().ToLower().Contains(name.Trim().ToLower())) + .Where(p => FuzzySharp.Fuzz.PartialRatio(p.Name.ToLowerInvariant().Trim(), searchQuery) >= minSimilarityThreshold) .Select(ProductCategoryMapper.ProjectToSDto) .ToListAsync(cancellationToken); @@ -35,16 +38,18 @@ public class SearchService : ISearchService public async Task ThumbSearchAsync(string name, CancellationToken cancellationToken = default) { + var searchQuery = name.ToLowerInvariant().Trim(); + int minSimilarityThreshold = 20; var products = await _repositoryWrapper.SetRepository() .TableNoTracking - .Where(p => p.PersianName.Trim().ToLower().Contains(name.Trim().ToLower())) + .Where(p => FuzzySharp.Fuzz.PartialRatio(p.PersianName.ToLowerInvariant().Trim(), searchQuery) >= minSimilarityThreshold) .Take(8) .Select(ProductMapper.ProjectToSDto) .ToListAsync(cancellationToken); var categories = await _repositoryWrapper.SetRepository() .TableNoTracking - .Where(p => p.Name.Trim().ToLower().Contains(name.Trim().ToLower())) + .Where(p => FuzzySharp.Fuzz.PartialRatio(p.Name.ToLowerInvariant().Trim(), searchQuery) >= minSimilarityThreshold) .Select(ProductCategoryMapper.ProjectToSDto) .ToListAsync(cancellationToken); diff --git a/Netina.Core/Models/Api/ApiResult.cs b/Netina.Core/Models/Api/ApiResult.cs index be2b080..bec2426 100644 --- a/Netina.Core/Models/Api/ApiResult.cs +++ b/Netina.Core/Models/Api/ApiResult.cs @@ -1,7 +1,4 @@ -using Netina.Common.Extensions; -using Netina.Common.Models.Api; - -namespace Netina.Core.Models.Api; +namespace Netina.Core.Models.Api; public class ApiResult { public ApiResult(bool isSuccess, ApiResultStatusCode statusCode, string message = null) diff --git a/Netina.Repository/Netina.Repository.csproj b/Netina.Repository/Netina.Repository.csproj index f429738..c470b9e 100644 --- a/Netina.Repository/Netina.Repository.csproj +++ b/Netina.Repository/Netina.Repository.csproj @@ -8,6 +8,7 @@ +