add version 0.27.37.59 , add check slug in blogs

release
Amir Hossein Khademi 2024-05-21 14:18:15 +03:30
parent 8dfbc108f6
commit b45b0450a7
9 changed files with 41 additions and 23 deletions

View File

@ -1 +1 @@
0.27.36.58 0.27.37.59

View File

@ -18,9 +18,9 @@
}, },
"SiteSettings": { "SiteSettings": {
"BaseUrl": "http://localhost:32770", "BaseUrl": "http://localhost:32770",
"WebSiteUrl": "https://hamyan.visabartar.com", "WebSiteUrl": "https://hamyanedalat.com",
"AdminPanelBaseUrl": "https://admin.hamyan.visabartar.com", "AdminPanelBaseUrl": "https://admin.hamyanedalat.com",
"StorageBaseUrl": "https://storage.visabartar.com", "StorageBaseUrl": "https://storage.hamyanedalat.com",
"KaveNegarApiKey": "3735494B4143727A794346457461576A2B4B6668414973424E333561505A694B", "KaveNegarApiKey": "3735494B4143727A794346457461576A2B4B6668414973424E333561505A694B",
"LoginOtpTemplate": "login", "LoginOtpTemplate": "login",
"UserSetting": { "UserSetting": {

View File

@ -1,6 +1,8 @@
using Marten.Events; using Marten.Events;
using Microsoft.Extensions.Options;
using Netina.Domain.Entities.Blogs; using Netina.Domain.Entities.Blogs;
using Netina.Domain.Entities.Products; using Netina.Domain.Entities.Products;
using System.Web;
namespace Netina.Api.Controllers; namespace Netina.Api.Controllers;
@ -37,6 +39,25 @@ public class BlogController : ICarterModule
builder.AddAuthenticationSchemes("Bearer").RequireAuthenticatedUser() builder.AddAuthenticationSchemes("Bearer").RequireAuthenticatedUser()
.RequireClaim(CustomClaimType.Permission, ApplicationPermission.ManageBlogs)) .RequireClaim(CustomClaimType.Permission, ApplicationPermission.ManageBlogs))
.HasApiVersion(1.0); .HasApiVersion(1.0);
group.MapGet("/newlink", GetBlogNewLinkAsync)
.WithDisplayName("GetBlogNewLink")
.HasApiVersion(1.0);
}
private async Task<IResult> GetBlogNewLinkAsync([FromQuery]string slug,IRepositoryWrapper repositoryWrapper,IOptionsSnapshot<SiteSettings> snapshot,CancellationToken cancellationToken)
{
var htmlSlug = HttpUtility.UrlEncode(slug);
var blog = await repositoryWrapper.SetRepository<Blog>()
.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 // GET:Get All Entity

View File

@ -6,8 +6,8 @@
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<InvariantGlobalization>true</InvariantGlobalization> <InvariantGlobalization>true</InvariantGlobalization>
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS> <DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
<AssemblyVersion>0.27.35.57</AssemblyVersion> <AssemblyVersion>0.27.37.59</AssemblyVersion>
<FileVersion>0.27.35.57</FileVersion> <FileVersion>0.27.37.59</FileVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>

View File

@ -8,7 +8,7 @@ string env = builder.Environment.IsDevelopment() == true ? "Development" : "Prod
builder.Host.UseContentRoot(Directory.GetCurrentDirectory()); builder.Host.UseContentRoot(Directory.GetCurrentDirectory());
if (builder.Environment.IsDevelopment()) if (builder.Environment.IsDevelopment())
{ {
string projectName = "Vesmeh"; string projectName = "Hamyan";
builder.Configuration.AddJsonFile($"AppSettings/appsettings.json").AddJsonFile($"AppSettings/appsettings.{env}{projectName}.json"); builder.Configuration.AddJsonFile($"AppSettings/appsettings.json").AddJsonFile($"AppSettings/appsettings.{env}{projectName}.json");
} }

View File

@ -1,10 +1,4 @@
using Netina.Common.Models; namespace Netina.Core.CoreServices.Abstracts;
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;
public interface IAccountService : IScopedDependency public interface IAccountService : IScopedDependency
{ {

View File

@ -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.Dtos.ResponseDtos.Zarehbin;
using Netina.Domain.Entities.ProductCategories; using Netina.Domain.Entities.ProductCategories;
@ -14,15 +15,17 @@ public class SearchService : ISearchService
} }
public async Task<SearchResponseDto> SearchAsync(string name, CancellationToken cancellationToken = default) public async Task<SearchResponseDto> SearchAsync(string name, CancellationToken cancellationToken = default)
{ {
var searchQuery = name.ToLowerInvariant().Trim();
int minSimilarityThreshold = 20;
var products = await _repositoryWrapper.SetRepository<Product>() var products = await _repositoryWrapper.SetRepository<Product>()
.TableNoTracking .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) .Select(ProductMapper.ProjectToSDto)
.ToListAsync(cancellationToken); .ToListAsync(cancellationToken);
var categories = await _repositoryWrapper.SetRepository<ProductCategory>() var categories = await _repositoryWrapper.SetRepository<ProductCategory>()
.TableNoTracking .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) .Select(ProductCategoryMapper.ProjectToSDto)
.ToListAsync(cancellationToken); .ToListAsync(cancellationToken);
@ -35,16 +38,18 @@ public class SearchService : ISearchService
public async Task<SearchResponseDto> ThumbSearchAsync(string name, CancellationToken cancellationToken = default) public async Task<SearchResponseDto> ThumbSearchAsync(string name, CancellationToken cancellationToken = default)
{ {
var searchQuery = name.ToLowerInvariant().Trim();
int minSimilarityThreshold = 20;
var products = await _repositoryWrapper.SetRepository<Product>() var products = await _repositoryWrapper.SetRepository<Product>()
.TableNoTracking .TableNoTracking
.Where(p => p.PersianName.Trim().ToLower().Contains(name.Trim().ToLower())) .Where(p => FuzzySharp.Fuzz.PartialRatio(p.PersianName.ToLowerInvariant().Trim(), searchQuery) >= minSimilarityThreshold)
.Take(8) .Take(8)
.Select(ProductMapper.ProjectToSDto) .Select(ProductMapper.ProjectToSDto)
.ToListAsync(cancellationToken); .ToListAsync(cancellationToken);
var categories = await _repositoryWrapper.SetRepository<ProductCategory>() var categories = await _repositoryWrapper.SetRepository<ProductCategory>()
.TableNoTracking .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) .Select(ProductCategoryMapper.ProjectToSDto)
.ToListAsync(cancellationToken); .ToListAsync(cancellationToken);

View File

@ -1,7 +1,4 @@
using Netina.Common.Extensions; namespace Netina.Core.Models.Api;
using Netina.Common.Models.Api;
namespace Netina.Core.Models.Api;
public class ApiResult public class ApiResult
{ {
public ApiResult(bool isSuccess, ApiResultStatusCode statusCode, string message = null) public ApiResult(bool isSuccess, ApiResultStatusCode statusCode, string message = null)

View File

@ -8,6 +8,7 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="FuzzySharp" Version="2.0.2" />
<PackageReference Include="MediatR" Version="12.2.0" /> <PackageReference Include="MediatR" Version="12.2.0" />
<PackageReference Include="FluentValidation" Version="11.9.0" /> <PackageReference Include="FluentValidation" Version="11.9.0" />
<PackageReference Include="Microsoft.AspNetCore" Version="2.2.0" /> <PackageReference Include="Microsoft.AspNetCore" Version="2.2.0" />