add version 0.27.37.59 , add check slug in blogs
parent
8dfbc108f6
commit
b45b0450a7
|
@ -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": {
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
{
|
{
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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" />
|
||||||
|
|
Loading…
Reference in New Issue