Add MetaTags support and update project configurations

- Removed unused @using directives in App.razor and BrandsPage.razor.
- Added UI elements for meta tags in BrandActionDialogBox.razor.
- Updated BrandActionDialogBoxViewModel to handle meta tags.
- Changed label text in DiscountActionDialogBox.razor.
- Updated assembly and file versions in Netina.AdminPanel.PWA.csproj.
- Added BlogMetaTag and BrandMetaTag classes.
- Added migration to update database schema for meta tags.
- Updated BlogController to handle meta tags.
- Set LangVersion to latest in multiple project files.
- Changed array initialization syntax in various files.
- Added MetaTags property to BlogLDto and BrandLDto classes.
- Updated Blog and Brand classes to handle meta tags.
- Refactored mappers to include meta tags handling.
- Improved product sorting in GetProductsQueryHandler.cs.
- Updated ApplicationContextModelSnapshot for new entities.
subProduct
Amir Hossein Khademi 2024-12-11 00:25:26 +03:30
parent 53dc2eac0c
commit 559ab04d9b
52 changed files with 3250 additions and 469 deletions

View File

@ -1 +1 @@
1.7.20.34 1.10.21.36

View File

@ -1,5 +1,4 @@
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
using Netina.Api.Services;
using Netina.Domain.Entities.Blogs; using Netina.Domain.Entities.Blogs;
using System.Web; using System.Web;
using Netina.Repository.Abstracts; using Netina.Repository.Abstracts;
@ -98,6 +97,8 @@ public class BlogController : ICarterModule
{ {
ent.AddFile(file.Name, file.FileLocation, file.FileName, file.IsHeader, file.IsPrimary, file.FileType); ent.AddFile(file.Name, file.FileLocation, file.FileName, file.IsHeader, file.IsPrimary, file.FileType);
} }
foreach (var item in dto.MetaTags)
ent.AddMetaTag(item.Type, item.Value);
repositoryWrapper.SetRepository<Blog>().Add(ent); repositoryWrapper.SetRepository<Blog>().Add(ent);
await repositoryWrapper.SaveChangesAsync(cancellationToken); await repositoryWrapper.SaveChangesAsync(cancellationToken);
@ -133,6 +134,21 @@ public class BlogController : ICarterModule
foreach (var file in dto.Files.Where(f => f.Id == default)) foreach (var file in dto.Files.Where(f => f.Id == default))
newEnt.AddFile(file.Name, file.FileLocation, file.FileName, file.IsHeader, file.IsPrimary, file.FileType); newEnt.AddFile(file.Name, file.FileLocation, file.FileName, file.IsHeader, file.IsPrimary, file.FileType);
//Check MetaTags
var dbMetaTags = await repositoryWrapper.SetRepository<BlogMetaTag>()
.TableNoTracking
.Where(f => f.BlogId == ent.Id)
.ToListAsync(cancellationToken);
foreach (var feature in dbMetaTags.Where(feature => dto.MetaTags.Any(f => f.Type == feature.Type) == false))
{
repositoryWrapper.SetRepository<BlogMetaTag>()
.Delete(feature);
await repositoryWrapper.SaveChangesAsync(cancellationToken);
}
foreach (var item in dto.MetaTags.Where(f => dbMetaTags.Any(dbf => dbf.Type == f.Type) == false))
newEnt.AddMetaTag(item.Type, item.Value);
repositoryWrapper.SetRepository<Blog>().Update(newEnt); repositoryWrapper.SetRepository<Blog>().Update(newEnt);
await repositoryWrapper.SaveChangesAsync(cancellationToken); await repositoryWrapper.SaveChangesAsync(cancellationToken);
return TypedResults.Ok(); return TypedResults.Ok();

View File

@ -6,8 +6,9 @@
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<InvariantGlobalization>true</InvariantGlobalization> <InvariantGlobalization>true</InvariantGlobalization>
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS> <DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
<AssemblyVersion>1.7.20.34</AssemblyVersion> <AssemblyVersion>1.10.21.36</AssemblyVersion>
<FileVersion>1.7.20.34</FileVersion> <FileVersion>1.10.21.36</FileVersion>
<LangVersion>latest</LangVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>

View File

@ -52,14 +52,14 @@ public static class ServiceExtensions
{ {
new() new()
{ {
Hosts = new[] Hosts =
{ [
new RedisHost new RedisHost
{ {
Port = siteSettings.MasterRedisConfiguration.Port, Port = siteSettings.MasterRedisConfiguration.Port,
Host = siteSettings.MasterRedisConfiguration.Host Host = siteSettings.MasterRedisConfiguration.Host
} }
}, ],
Password = siteSettings.MasterRedisConfiguration.Password, Password = siteSettings.MasterRedisConfiguration.Password,
Ssl = false Ssl = false
} }

View File

@ -1,10 +1,11 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<TargetFramework>net8.0</TargetFramework> <TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
</PropertyGroup> <LangVersion>latest</LangVersion>
</PropertyGroup>
<ItemGroup> <ItemGroup>
@ -16,7 +17,7 @@
<!--<PropertyGroup> <!--<PropertyGroup>
<TargetFramework>net5.0</TargetFramework> <TargetFramework>net5.0</TargetFramework>
<LangVersion>10</LangVersion> <LangVersion>latest</LangVersion>
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup> </PropertyGroup>
@ -26,7 +27,7 @@
<PackageReference Include="System.ComponentModel.Annotations" Version="5.0.0" /> <PackageReference Include="System.ComponentModel.Annotations" Version="5.0.0" />
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="7.3.1" /> <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="7.3.1" />
</ItemGroup>--> </ItemGroup>-->
<ItemGroup> <ItemGroup>
<Using Include="MD.PersianDateTime.Standard" /> <Using Include="MD.PersianDateTime.Standard" />
<Using Include="Newtonsoft.Json" /> <Using Include="Newtonsoft.Json" />

View File

@ -7,12 +7,12 @@ public static class SiteMapUIds
public const string BlogCategories = "B5FF333DC4FF4BB4A309CE3AA32CE45A"; public const string BlogCategories = "B5FF333DC4FF4BB4A309CE3AA32CE45A";
public const string Pages = "B463B6C4CC53432C822D79934F528D3E"; public const string Pages = "B463B6C4CC53432C822D79934F528D3E";
public static List<string> AllSiteMapsUIds => new List<string> public static List<string> AllSiteMapsUIds =>
{ [
BlogCategories, BlogCategories,
Categories, Categories,
Blogs, Blogs,
Brands, Brands,
Pages Pages
}; ];
} }

View File

@ -4,6 +4,7 @@
<TargetFramework>net8.0</TargetFramework> <TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<LangVersion>latest</LangVersion>
</PropertyGroup> </PropertyGroup>

View File

@ -16,5 +16,6 @@ public class BlogLDto : BaseDto<BlogLDto , Blog>
public string CategoryName { get; set; } = string.Empty; public string CategoryName { get; set; } = string.Empty;
public Guid AuthorId { get; set; } public Guid AuthorId { get; set; }
public string AuthorFullName { get; set; } = string.Empty; public string AuthorFullName { get; set; } = string.Empty;
public List<MetaTagSDto> MetaTags { get; set; } = new();
public List<StorageFileSDto> Files { get; set; } = new(); public List<StorageFileSDto> Files { get; set; } = new();
} }

View File

@ -10,4 +10,5 @@ public class BrandLDto : BaseDto<BrandLDto,Brand>
public string PageUrl { get; set; } = string.Empty; public string PageUrl { get; set; } = string.Empty;
public string HeaderFileName { get; set; } = string.Empty; public string HeaderFileName { get; set; } = string.Empty;
public List<StorageFileSDto> Files { get; internal set; } = new(); public List<StorageFileSDto> Files { get; internal set; } = new();
public List<MetaTagSDto> MetaTags { get; set; } = new();
} }

View File

@ -1,8 +1,8 @@
namespace Netina.Domain.Entities.Accounting; namespace Netina.Domain.Entities.Accounting;
[AdaptTwoWays("[name]LDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Map | MapType.MapToTarget | MapType.Projection)] [AdaptTwoWays("[name]LDto", IgnoreAttributes = [typeof(AdaptIgnoreAttribute)], MapType = MapType.Map | MapType.MapToTarget | MapType.Projection)]
[AdaptTwoWays("[name]SDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Map | MapType.MapToTarget)] [AdaptTwoWays("[name]SDto", IgnoreAttributes = [typeof(AdaptIgnoreAttribute)], MapType = MapType.Map | MapType.MapToTarget)]
[AdaptTo("[name]SDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Projection)] [AdaptTo("[name]SDto", IgnoreAttributes = [typeof(AdaptIgnoreAttribute)], MapType = MapType.Projection)]
[GenerateMapper] [GenerateMapper]
public partial class Payment : ApiEntity public partial class Payment : ApiEntity

View File

@ -8,6 +8,9 @@ public partial class Blog
return new Blog(title, slug, content, tags, readingTime, summery, isSuggested, categoryId,authorId); return new Blog(title, slug, content, tags, readingTime, summery, isSuggested, categoryId,authorId);
} }
public void AddMetaTag(string key, string value)
=> MetaTags.Add(BlogMetaTag.Create(key, value, Id));
public static Blog Create(string title, string slug, string content, string tags, int readingTime, string summery, bool isSuggested, Guid categoryId, Guid authorId) public static Blog Create(string title, string slug, string content, string tags, int readingTime, string summery, bool isSuggested, Guid categoryId, Guid authorId)
{ {
if (slug.IsNullOrEmpty()) if (slug.IsNullOrEmpty())
@ -22,6 +25,12 @@ public partial class Blog
} }
} }
public partial class BlogMetaTag
{
public static BlogMetaTag Create(string key, string value, Guid brandId)
=> new(key, value, brandId);
}
public partial class BlogStorageFile public partial class BlogStorageFile
{ {
public static BlogStorageFile Create(string name, string fileLocation, string fileName, bool isHeader, bool isPrimary, StorageFileType fileType, Guid blogId) public static BlogStorageFile Create(string name, string fileLocation, string fileName, bool isHeader, bool isPrimary, StorageFileType fileType, Guid blogId)

View File

@ -1,8 +1,8 @@
namespace Netina.Domain.Entities.Blogs; namespace Netina.Domain.Entities.Blogs;
[AdaptTwoWays("[name]LDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Map | MapType.MapToTarget | MapType.Projection)] [AdaptTwoWays("[name]LDto", IgnoreAttributes = [typeof(AdaptIgnoreAttribute)], MapType = MapType.Map | MapType.MapToTarget | MapType.Projection)]
[AdaptTwoWays("[name]SDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Map | MapType.MapToTarget)] [AdaptTwoWays("[name]SDto", IgnoreAttributes = [typeof(AdaptIgnoreAttribute)], MapType = MapType.Map | MapType.MapToTarget)]
[AdaptTo("[name]SDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Projection)] [AdaptTo("[name]SDto", IgnoreAttributes = [typeof(AdaptIgnoreAttribute)], MapType = MapType.Projection)]
[GenerateMapper] [GenerateMapper]
public partial class Blog : ApiEntity public partial class Blog : ApiEntity
@ -32,7 +32,8 @@ public partial class Blog : ApiEntity
public bool IsSuggested { get; internal set; } public bool IsSuggested { get; internal set; }
public Guid CategoryId { get; internal set; } public Guid CategoryId { get; internal set; }
public BlogCategory? Category { get; internal set; } public BlogCategory? Category { get; internal set; }
public List<BlogStorageFile> Files { get; internal set; } = new(); public List<BlogStorageFile> Files { get; internal set; } = [];
public List<BlogMetaTag> MetaTags { get; set; } = [];
public Guid AuthorId { get; internal set; } public Guid AuthorId { get; internal set; }
public ApplicationUser? Author { get; internal set; } public ApplicationUser? Author { get; internal set; }

View File

@ -1,7 +1,7 @@
namespace Netina.Domain.Entities.Blogs; namespace Netina.Domain.Entities.Blogs;
[AdaptTwoWays("[name]LDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Map | MapType.MapToTarget | MapType.Projection)] [AdaptTwoWays("[name]LDto", IgnoreAttributes = [typeof(AdaptIgnoreAttribute)], MapType = MapType.Map | MapType.MapToTarget | MapType.Projection)]
[AdaptTwoWays("[name]SDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Map | MapType.MapToTarget)] [AdaptTwoWays("[name]SDto", IgnoreAttributes = [typeof(AdaptIgnoreAttribute)], MapType = MapType.Map | MapType.MapToTarget)]
[AdaptTo("[name]SDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Projection)] [AdaptTo("[name]SDto", IgnoreAttributes = [typeof(AdaptIgnoreAttribute)], MapType = MapType.Projection)]
[GenerateMapper] [GenerateMapper]
public partial class BlogCategory : ApiEntity public partial class BlogCategory : ApiEntity
{ {
@ -23,5 +23,5 @@ public partial class BlogCategory : ApiEntity
public bool IsMain { get; set; } public bool IsMain { get; set; }
public Guid? ParentId { get; set; } public Guid? ParentId { get; set; }
public BlogCategory? Parent { get; set; } public BlogCategory? Parent { get; set; }
public List<Blog> Blogs { get; internal set; } = new(); public List<Blog> Blogs { get; internal set; } = [];
} }

View File

@ -0,0 +1,17 @@
namespace Netina.Domain.Entities.Blogs;
public partial class BlogMetaTag : MetaTag
{
public BlogMetaTag()
{
}
public BlogMetaTag(string type, string value, Guid blogId) : base(type, value)
{
BlogId = blogId;
}
public Guid BlogId { get; set; }
public Blog? Brand { get; set; }
}

View File

@ -9,6 +9,9 @@ public partial class Brand
return new Brand(persianName, slug, englishName, description, hasSpecialPage, pageUrl); return new Brand(persianName, slug, englishName, description, hasSpecialPage, pageUrl);
} }
public void AddMetaTag(string key, string value)
=> MetaTags.Add(BrandMetaTag.Create(key, value, Id));
public BrandStorageFile AddFile(string name, string fileLocation, string fileName, bool isHeader, bool isPrimary, StorageFileType fileType) public BrandStorageFile AddFile(string name, string fileLocation, string fileName, bool isHeader, bool isPrimary, StorageFileType fileType)
{ {
var file = BrandStorageFile.Create(name, fileLocation, fileName, isHeader, isPrimary, fileType, this.Id); var file = BrandStorageFile.Create(name, fileLocation, fileName, isHeader, isPrimary, fileType, this.Id);
@ -17,6 +20,12 @@ public partial class Brand
} }
} }
public partial class BrandMetaTag
{
public static BrandMetaTag Create(string key, string value, Guid brandId)
=> new (key, value, brandId);
}
public partial class BrandStorageFile public partial class BrandStorageFile
{ {
public static BrandStorageFile Create(string name, string fileLocation, string fileName, bool isHeader, bool isPrimary, StorageFileType fileType, Guid brandId) public static BrandStorageFile Create(string name, string fileLocation, string fileName, bool isHeader, bool isPrimary, StorageFileType fileType, Guid brandId)

View File

@ -1,8 +1,8 @@
namespace Netina.Domain.Entities.Brands; namespace Netina.Domain.Entities.Brands;
[AdaptTwoWays("[name]LDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Map | MapType.MapToTarget | MapType.Projection)] [AdaptTwoWays("[name]LDto", IgnoreAttributes = [typeof(AdaptIgnoreAttribute)], MapType = MapType.Map | MapType.MapToTarget | MapType.Projection)]
[AdaptTwoWays("[name]SDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Map | MapType.MapToTarget)] [AdaptTwoWays("[name]SDto", IgnoreAttributes = [typeof(AdaptIgnoreAttribute)], MapType = MapType.Map | MapType.MapToTarget)]
[AdaptTo("[name]SDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Projection)] [AdaptTo("[name]SDto", IgnoreAttributes = [typeof(AdaptIgnoreAttribute)], MapType = MapType.Projection)]
[GenerateMapper] [GenerateMapper]
//[Index(nameof(Slug), IsUnique = true)] //[Index(nameof(Slug), IsUnique = true)]
@ -28,6 +28,7 @@ public partial class Brand : ApiEntity
public string Description { get; internal set; } = string.Empty; public string Description { get; internal set; } = string.Empty;
public bool HasSpecialPage { get; internal set; } public bool HasSpecialPage { get; internal set; }
public string PageUrl { get; internal set; } = string.Empty; public string PageUrl { get; internal set; } = string.Empty;
public List<Product> Products { get; internal set; } = new(); public List<Product> Products { get; internal set; } = [];
public List<BrandStorageFile> Files { get; internal set; } = new(); public List<BrandStorageFile> Files { get; internal set; } = [];
public List<BrandMetaTag> MetaTags { get; set; } = [];
} }

View File

@ -0,0 +1,17 @@
namespace Netina.Domain.Entities.Brands;
public partial class BrandMetaTag : MetaTag
{
public BrandMetaTag()
{
}
public BrandMetaTag(string type, string value, Guid branId) : base(type, value)
{
BrandId = branId;
}
public Guid BrandId { get; set; }
public Brand? Brand { get; set; }
}

View File

@ -1,7 +1,7 @@
namespace Netina.Domain.Entities.Comments; namespace Netina.Domain.Entities.Comments;
[AdaptTwoWays("[name]LDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Map | MapType.MapToTarget | MapType.Projection)] [AdaptTwoWays("[name]LDto", IgnoreAttributes = [typeof(AdaptIgnoreAttribute)], MapType = MapType.Map | MapType.MapToTarget | MapType.Projection)]
[AdaptTwoWays("[name]SDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Map | MapType.MapToTarget)] [AdaptTwoWays("[name]SDto", IgnoreAttributes = [typeof(AdaptIgnoreAttribute)], MapType = MapType.Map | MapType.MapToTarget)]
[AdaptTo("[name]SDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Projection)] [AdaptTo("[name]SDto", IgnoreAttributes = [typeof(AdaptIgnoreAttribute)], MapType = MapType.Projection)]
[GenerateMapper] [GenerateMapper]
public partial class Comment : ApiEntity public partial class Comment : ApiEntity
{ {
@ -29,7 +29,7 @@ public partial class Comment : ApiEntity
public Comment? Parent { get; internal set; } public Comment? Parent { get; internal set; }
public List<Comment> Children { get; internal set; } = new(); public List<Comment> Children { get; internal set; } = [];
public Guid UserId { get; internal set; } public Guid UserId { get; internal set; }
public ApplicationUser? User { get; internal set; } public ApplicationUser? User { get; internal set; }

View File

@ -1,8 +1,8 @@
namespace Netina.Domain.Entities.Discounts; namespace Netina.Domain.Entities.Discounts;
[AdaptTwoWays("[name]LDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Map | MapType.MapToTarget | MapType.Projection)] [AdaptTwoWays("[name]LDto", IgnoreAttributes = [typeof(AdaptIgnoreAttribute)], MapType = MapType.Map | MapType.MapToTarget | MapType.Projection)]
[AdaptTwoWays("[name]SDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Map | MapType.MapToTarget)] [AdaptTwoWays("[name]SDto", IgnoreAttributes = [typeof(AdaptIgnoreAttribute)], MapType = MapType.Map | MapType.MapToTarget)]
[AdaptTo("[name]SDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Projection)] [AdaptTo("[name]SDto", IgnoreAttributes = [typeof(AdaptIgnoreAttribute)], MapType = MapType.Projection)]
[GenerateMapper] [GenerateMapper]
public partial class Discount : ApiEntity public partial class Discount : ApiEntity
@ -80,5 +80,5 @@ public partial class Discount : ApiEntity
public Guid? MarketerId { get; internal set; } public Guid? MarketerId { get; internal set; }
public Marketer? Marketer { get; internal set; } public Marketer? Marketer { get; internal set; }
public List<Order> Orders { get; internal set; } = new(); public List<Order> Orders { get; internal set; } = [];
} }

View File

@ -2,9 +2,9 @@
namespace Netina.Domain.Entities.Orders; namespace Netina.Domain.Entities.Orders;
[AdaptTwoWays("[name]LDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Map | MapType.MapToTarget | MapType.Projection)] [AdaptTwoWays("[name]LDto", IgnoreAttributes = [typeof(AdaptIgnoreAttribute)], MapType = MapType.Map | MapType.MapToTarget | MapType.Projection)]
[AdaptTwoWays("[name]SDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Map | MapType.MapToTarget)] [AdaptTwoWays("[name]SDto", IgnoreAttributes = [typeof(AdaptIgnoreAttribute)], MapType = MapType.Map | MapType.MapToTarget)]
[AdaptTo("[name]SDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Projection)] [AdaptTo("[name]SDto", IgnoreAttributes = [typeof(AdaptIgnoreAttribute)], MapType = MapType.Projection)]
[GenerateMapper] [GenerateMapper]
public partial class Order : ApiEntity public partial class Order : ApiEntity
@ -75,8 +75,8 @@ public partial class Order : ApiEntity
public OrderDelivery? OrderDelivery { get; set; } public OrderDelivery? OrderDelivery { get; set; }
public List<OrderProduct> OrderProducts { get; internal set; } = new(); public List<OrderProduct> OrderProducts { get; internal set; } = [];
public List<Payment> Payments { get; internal set; } = new(); public List<Payment> Payments { get; internal set; } = [];
} }

View File

@ -1,7 +1,7 @@
namespace Netina.Domain.Entities.Orders; namespace Netina.Domain.Entities.Orders;
[AdaptTwoWays("[name]SDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Map | MapType.MapToTarget)] [AdaptTwoWays("[name]SDto", IgnoreAttributes = [typeof(AdaptIgnoreAttribute)], MapType = MapType.Map | MapType.MapToTarget)]
[AdaptTo("[name]SDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Projection)] [AdaptTo("[name]SDto", IgnoreAttributes = [typeof(AdaptIgnoreAttribute)], MapType = MapType.Projection)]
[GenerateMapper] [GenerateMapper]
public partial class OrderProduct : ApiEntity public partial class OrderProduct : ApiEntity
{ {

View File

@ -1,8 +1,8 @@
namespace Netina.Domain.Entities.ProductCategories; namespace Netina.Domain.Entities.ProductCategories;
[AdaptTwoWays("[name]LDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Map | MapType.MapToTarget | MapType.Projection)] [AdaptTwoWays("[name]LDto", IgnoreAttributes = [typeof(AdaptIgnoreAttribute)], MapType = MapType.Map | MapType.MapToTarget | MapType.Projection)]
[AdaptTwoWays("[name]SDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Map | MapType.MapToTarget)] [AdaptTwoWays("[name]SDto", IgnoreAttributes = [typeof(AdaptIgnoreAttribute)], MapType = MapType.Map | MapType.MapToTarget)]
[AdaptTo("[name]SDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Projection)] [AdaptTo("[name]SDto", IgnoreAttributes = [typeof(AdaptIgnoreAttribute)], MapType = MapType.Projection)]
[GenerateMapper] [GenerateMapper]
public partial class ProductCategory : ApiEntity public partial class ProductCategory : ApiEntity
{ {
@ -27,7 +27,7 @@ public partial class ProductCategory : ApiEntity
public ProductCategory? Parent { get; internal set; } public ProductCategory? Parent { get; internal set; }
//public List<ProductCategory> Children { get; internal set; } = new(); //public List<ProductCategory> Children { get; internal set; } = new();
public List<ProductCategoryMetaTag> MetaTags { get; internal set; } = new(); public List<ProductCategoryMetaTag> MetaTags { get; internal set; } = [];
public List<Product> Products { get; internal set; } = new(); public List<Product> Products { get; internal set; } = [];
public List<ProductCategoryStorageFile> Files { get; internal set; } = new(); public List<ProductCategoryStorageFile> Files { get; internal set; } = [];
} }

View File

@ -2,10 +2,10 @@
namespace Netina.Domain.Entities.Products; namespace Netina.Domain.Entities.Products;
[AdaptTwoWays("[name]LDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Map | MapType.MapToTarget | MapType.Projection)] [AdaptTwoWays("[name]LDto", IgnoreAttributes = [typeof(AdaptIgnoreAttribute)], MapType = MapType.Map | MapType.MapToTarget | MapType.Projection)]
[AdaptTwoWays("[name]SDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Map | MapType.MapToTarget )] [AdaptTwoWays("[name]SDto", IgnoreAttributes = [typeof(AdaptIgnoreAttribute)], MapType = MapType.Map | MapType.MapToTarget )]
[AdaptTo("[name]SDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Projection)] [AdaptTo("[name]SDto", IgnoreAttributes = [typeof(AdaptIgnoreAttribute)], MapType = MapType.Projection)]
[AdaptTo("TorobProductResponseDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Projection)] [AdaptTo("TorobProductResponseDto", IgnoreAttributes = [typeof(AdaptIgnoreAttribute)], MapType = MapType.Projection)]
//[AdaptTo("[name]SDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Projection)] //[AdaptTo("[name]SDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Projection)]
[GenerateMapper] [GenerateMapper]
@ -81,11 +81,11 @@ public partial class Product : ApiEntity
public ApplicationUser? Author { get; internal set; } public ApplicationUser? Author { get; internal set; }
public ProductCategory? Category { get; internal set; } public ProductCategory? Category { get; internal set; }
public List<Specification> Specifications { get; internal set; } = new(); public List<Specification> Specifications { get; internal set; } = [];
public List<ProductComment> Comments { get; internal set; } = new(); public List<ProductComment> Comments { get; internal set; } = [];
public List<ProductStorageFile> Files { get; internal set; } = new(); public List<ProductStorageFile> Files { get; internal set; } = [];
public List<ProductMetaTag> MetaTags { get; internal set; } = new(); public List<ProductMetaTag> MetaTags { get; internal set; } = [];
public List<OrderProduct> OrderProducts { get; internal set; } = new(); public List<OrderProduct> OrderProducts { get; internal set; } = [];
} }

View File

@ -1,7 +1,7 @@
namespace Netina.Domain.Entities.Products; namespace Netina.Domain.Entities.Products;
[AdaptTwoWays("[name]LDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Map | MapType.MapToTarget | MapType.Projection)] [AdaptTwoWays("[name]LDto", IgnoreAttributes = [typeof(AdaptIgnoreAttribute)], MapType = MapType.Map | MapType.MapToTarget | MapType.Projection)]
[AdaptTwoWays("[name]SDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Map | MapType.MapToTarget)] [AdaptTwoWays("[name]SDto", IgnoreAttributes = [typeof(AdaptIgnoreAttribute)], MapType = MapType.Map | MapType.MapToTarget)]
[AdaptTo("[name]SDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Projection)] [AdaptTo("[name]SDto", IgnoreAttributes = [typeof(AdaptIgnoreAttribute)], MapType = MapType.Projection)]
[GenerateMapper] [GenerateMapper]
public partial class Specification : ApiEntity public partial class Specification : ApiEntity
{ {
@ -33,5 +33,5 @@ public partial class Specification : ApiEntity
public Guid? ParentId { get; internal set; } public Guid? ParentId { get; internal set; }
public Specification? Parent { get; internal set; } public Specification? Parent { get; internal set; }
public List<Specification> Children { get; internal set; } = new(); public List<Specification> Children { get; internal set; } = [];
} }

View File

@ -1,8 +1,8 @@
namespace Netina.Domain.Entities.Seo; namespace Netina.Domain.Entities.Seo;
[AdaptTwoWays("[name]LDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Map | MapType.MapToTarget | MapType.Projection)] [AdaptTwoWays("[name]LDto", IgnoreAttributes = [typeof(AdaptIgnoreAttribute)], MapType = MapType.Map | MapType.MapToTarget | MapType.Projection)]
[AdaptTwoWays("[name]SDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Map | MapType.MapToTarget)] [AdaptTwoWays("[name]SDto", IgnoreAttributes = [typeof(AdaptIgnoreAttribute)], MapType = MapType.Map | MapType.MapToTarget)]
[AdaptTo("[name]SDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Projection)] [AdaptTo("[name]SDto", IgnoreAttributes = [typeof(AdaptIgnoreAttribute)], MapType = MapType.Projection)]
[GenerateMapper] [GenerateMapper]
public partial class MetaTag : ApiEntity public partial class MetaTag : ApiEntity
{ {

View File

@ -1,7 +1,7 @@
namespace Netina.Domain.Entities.StorageFiles; namespace Netina.Domain.Entities.StorageFiles;
[AdaptTwoWays("[name]LDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Map | MapType.MapToTarget | MapType.Projection)] [AdaptTwoWays("[name]LDto", IgnoreAttributes = [typeof(AdaptIgnoreAttribute)], MapType = MapType.Map | MapType.MapToTarget | MapType.Projection)]
[AdaptTwoWays("[name]SDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Map | MapType.MapToTarget)] [AdaptTwoWays("[name]SDto", IgnoreAttributes = [typeof(AdaptIgnoreAttribute)], MapType = MapType.Map | MapType.MapToTarget)]
[AdaptTo("[name]SDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Projection)] [AdaptTo("[name]SDto", IgnoreAttributes = [typeof(AdaptIgnoreAttribute)], MapType = MapType.Projection)]
[GenerateMapper] [GenerateMapper]
public partial class StorageFile : ApiEntity public partial class StorageFile : ApiEntity
{ {

View File

@ -1,7 +1,7 @@
namespace Netina.Domain.Entities.Users; namespace Netina.Domain.Entities.Users;
[AdaptTwoWays("[name]SDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Map | MapType.MapToTarget )] [AdaptTwoWays("[name]SDto", IgnoreAttributes = [typeof(AdaptIgnoreAttribute)], MapType = MapType.Map | MapType.MapToTarget )]
[AdaptTo("[name]SDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Projection)] [AdaptTo("[name]SDto", IgnoreAttributes = [typeof(AdaptIgnoreAttribute)], MapType = MapType.Projection)]
[GenerateMapper] [GenerateMapper]
public class ApplicationUser : IdentityUser<Guid> public class ApplicationUser : IdentityUser<Guid>
@ -13,7 +13,7 @@ public class ApplicationUser : IdentityUser<Guid>
public DateTime BirthDate { get; set; } public DateTime BirthDate { get; set; }
public Gender Gender { get; set; } public Gender Gender { get; set; }
public SignUpStatus SignUpStatus { get; set; } public SignUpStatus SignUpStatus { get; set; }
public List<UserAddress> Addresses { get; set; } = new(); public List<UserAddress> Addresses { get; set; } = [];
public Manager? Manager { get; set; } public Manager? Manager { get; set; }
public Customer? Customer { get; set; } public Customer? Customer { get; set; }

View File

@ -1,7 +1,7 @@
namespace Netina.Domain.Entities.Users; namespace Netina.Domain.Entities.Users;
[AdaptTwoWays("[name]SDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Map | MapType.MapToTarget)] [AdaptTwoWays("[name]SDto", IgnoreAttributes = [typeof(AdaptIgnoreAttribute)], MapType = MapType.Map | MapType.MapToTarget)]
[AdaptTo("[name]SDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Projection)] [AdaptTo("[name]SDto", IgnoreAttributes = [typeof(AdaptIgnoreAttribute)], MapType = MapType.Projection)]
[GenerateMapper] [GenerateMapper]
public class Customer : ApiEntity public class Customer : ApiEntity
{ {

View File

@ -1,7 +1,7 @@
namespace Netina.Domain.Entities.Users; namespace Netina.Domain.Entities.Users;
[AdaptTwoWays("[name]SDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Map | MapType.MapToTarget)] [AdaptTwoWays("[name]SDto", IgnoreAttributes = [typeof(AdaptIgnoreAttribute)], MapType = MapType.Map | MapType.MapToTarget)]
[AdaptTo("[name]SDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Projection)] [AdaptTo("[name]SDto", IgnoreAttributes = [typeof(AdaptIgnoreAttribute)], MapType = MapType.Projection)]
[GenerateMapper] [GenerateMapper]
public class Manager : ApiEntity public class Manager : ApiEntity
{ {

View File

@ -1,7 +1,7 @@
namespace Netina.Domain.Entities.Users; namespace Netina.Domain.Entities.Users;
[AdaptTwoWays("[name]SDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Map | MapType.MapToTarget)] [AdaptTwoWays("[name]SDto", IgnoreAttributes = [typeof(AdaptIgnoreAttribute)], MapType = MapType.Map | MapType.MapToTarget)]
[AdaptTo("[name]SDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Projection)] [AdaptTo("[name]SDto", IgnoreAttributes = [typeof(AdaptIgnoreAttribute)], MapType = MapType.Projection)]
[GenerateMapper] [GenerateMapper]
public class Marketer : ApiEntity public class Marketer : ApiEntity
{ {

View File

@ -1,8 +1,8 @@
namespace Netina.Domain.Entities.Users; namespace Netina.Domain.Entities.Users;
[AdaptTwoWays("[name]LDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Map | MapType.MapToTarget | MapType.Projection)] [AdaptTwoWays("[name]LDto", IgnoreAttributes = [typeof(AdaptIgnoreAttribute)], MapType = MapType.Map | MapType.MapToTarget | MapType.Projection)]
[AdaptTwoWays("[name]SDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Map | MapType.MapToTarget)] [AdaptTwoWays("[name]SDto", IgnoreAttributes = [typeof(AdaptIgnoreAttribute)], MapType = MapType.Map | MapType.MapToTarget)]
[AdaptTo("[name]SDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Projection)] [AdaptTo("[name]SDto", IgnoreAttributes = [typeof(AdaptIgnoreAttribute)], MapType = MapType.Projection)]
[GenerateMapper] [GenerateMapper]
public partial class NewsletterMember : ApiEntity public partial class NewsletterMember : ApiEntity
{ {

View File

@ -1,7 +1,7 @@
namespace Netina.Domain.Entities.Users; namespace Netina.Domain.Entities.Users;
[AdaptTwoWays("[name]SDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Map | MapType.MapToTarget)] [AdaptTwoWays("[name]SDto", IgnoreAttributes = [typeof(AdaptIgnoreAttribute)], MapType = MapType.Map | MapType.MapToTarget)]
[AdaptTo("[name]SDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Projection)] [AdaptTo("[name]SDto", IgnoreAttributes = [typeof(AdaptIgnoreAttribute)], MapType = MapType.Projection)]
[GenerateMapper] [GenerateMapper]
public partial class UserAddress : ApiEntity public partial class UserAddress : ApiEntity
{ {

View File

@ -1,7 +1,7 @@
namespace Netina.Domain.Entities.Warehouses; namespace Netina.Domain.Entities.Warehouses;
[AdaptTwoWays("[name]LDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Map | MapType.MapToTarget | MapType.Projection)] [AdaptTwoWays("[name]LDto", IgnoreAttributes = [typeof(AdaptIgnoreAttribute)], MapType = MapType.Map | MapType.MapToTarget | MapType.Projection)]
[AdaptTwoWays("[name]SDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Map | MapType.MapToTarget)] [AdaptTwoWays("[name]SDto", IgnoreAttributes = [typeof(AdaptIgnoreAttribute)], MapType = MapType.Map | MapType.MapToTarget)]
[AdaptTo("[name]SDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Projection)] [AdaptTo("[name]SDto", IgnoreAttributes = [typeof(AdaptIgnoreAttribute)], MapType = MapType.Projection)]
[GenerateMapper] [GenerateMapper]
public partial class Shipping : ApiEntity public partial class Shipping : ApiEntity
{ {

View File

@ -30,247 +30,265 @@ namespace Netina.Domain.Mappers
Id = p1.CategoryId Id = p1.CategoryId
}, },
Files = funcMain1(p1.Files), Files = funcMain1(p1.Files),
MetaTags = funcMain2(p1.MetaTags),
AuthorId = p1.AuthorId, AuthorId = p1.AuthorId,
Author = new ApplicationUser() {Id = p1.AuthorId}, Author = new ApplicationUser() {Id = p1.AuthorId},
Id = p1.Id, Id = p1.Id,
CreatedAt = p1.CreatedAt CreatedAt = p1.CreatedAt
}; };
} }
public static Blog AdaptTo(this BlogLDto p3, Blog p4) public static Blog AdaptTo(this BlogLDto p4, Blog p5)
{ {
if (p3 == null) if (p4 == null)
{ {
return null; return null;
} }
Blog result = p4 ?? new Blog(); Blog result = p5 ?? new Blog();
result.Title = p3.Title; result.Title = p4.Title;
result.Content = p3.Content; result.Content = p4.Content;
result.Slug = p3.Slug; result.Slug = p4.Slug;
result.Tags = p3.Tags; result.Tags = p4.Tags;
result.ReadingTime = p3.ReadingTime; result.ReadingTime = p4.ReadingTime;
result.Summery = p3.Summery; result.Summery = p4.Summery;
result.IsSuggested = p3.IsSuggested; result.IsSuggested = p4.IsSuggested;
result.CategoryId = p3.CategoryId; result.CategoryId = p4.CategoryId;
result.Category = funcMain2(new Never(), result.Category, p3); result.Category = funcMain3(new Never(), result.Category, p4);
result.Files = funcMain3(p3.Files, result.Files); result.Files = funcMain4(p4.Files, result.Files);
result.AuthorId = p3.AuthorId; result.MetaTags = funcMain5(p4.MetaTags, result.MetaTags);
result.Author = funcMain4(new Never(), result.Author, p3); result.AuthorId = p4.AuthorId;
result.Id = p3.Id; result.Author = funcMain6(new Never(), result.Author, p4);
result.CreatedAt = p3.CreatedAt; result.Id = p4.Id;
result.CreatedAt = p4.CreatedAt;
return result; return result;
} }
public static Expression<Func<BlogLDto, Blog>> ProjectToBlog => p11 => new Blog() public static Expression<Func<BlogLDto, Blog>> ProjectToBlog => p14 => new Blog()
{ {
Title = p11.Title, Title = p14.Title,
Content = p11.Content, Content = p14.Content,
Slug = p11.Slug, Slug = p14.Slug,
Tags = p11.Tags, Tags = p14.Tags,
ReadingTime = p11.ReadingTime, ReadingTime = p14.ReadingTime,
Summery = p11.Summery, Summery = p14.Summery,
IsSuggested = p11.IsSuggested, IsSuggested = p14.IsSuggested,
CategoryId = p11.CategoryId, CategoryId = p14.CategoryId,
Category = new BlogCategory() Category = new BlogCategory()
{ {
Name = p11.CategoryName, Name = p14.CategoryName,
Id = p11.CategoryId Id = p14.CategoryId
}, },
Files = p11.Files.Select<StorageFileSDto, BlogStorageFile>(p12 => new BlogStorageFile() Files = p14.Files.Select<StorageFileSDto, BlogStorageFile>(p15 => new BlogStorageFile()
{ {
Name = p12.Name, Name = p15.Name,
FileLocation = p12.FileLocation, FileLocation = p15.FileLocation,
FileName = p12.FileName, FileName = p15.FileName,
IsHeader = p12.IsHeader, IsHeader = p15.IsHeader,
IsPrimary = p12.IsPrimary, IsPrimary = p15.IsPrimary,
FileType = p12.FileType, FileType = p15.FileType,
Id = p12.Id, Id = p15.Id,
CreatedAt = p12.CreatedAt CreatedAt = p15.CreatedAt
}).ToList<BlogStorageFile>(), }).ToList<BlogStorageFile>(),
AuthorId = p11.AuthorId, MetaTags = p14.MetaTags.Select<MetaTagSDto, BlogMetaTag>(p16 => new BlogMetaTag()
Author = new ApplicationUser() {Id = p11.AuthorId},
Id = p11.Id,
CreatedAt = p11.CreatedAt
};
public static BlogLDto AdaptToLDto(this Blog p13)
{
return p13 == null ? null : new BlogLDto()
{ {
Title = p13.Title, Type = p16.Type,
Content = p13.Content, Value = p16.Value,
Tags = p13.Tags, Id = p16.Id,
Slug = p13.Slug, CreatedAt = p16.CreatedAt
ReadingTime = p13.ReadingTime, }).ToList<BlogMetaTag>(),
Summery = p13.Summery, AuthorId = p14.AuthorId,
MainImage = p13.Files.Count > 0 && p13.Files.Any<BlogStorageFile>(funcMain5) ? p13.Files.FirstOrDefault<BlogStorageFile>(funcMain6).FileName : string.Empty, Author = new ApplicationUser() {Id = p14.AuthorId},
IsSuggested = p13.IsSuggested, Id = p14.Id,
CategoryId = p13.CategoryId, CreatedAt = p14.CreatedAt
CategoryName = p13.Category == null ? null : p13.Category.Name, };
AuthorId = p13.AuthorId, public static BlogLDto AdaptToLDto(this Blog p17)
AuthorFullName = p13.Author != null ? p13.Author.FirstName + " " + p13.Author.LastName : string.Empty, {
Files = funcMain7(p13.Files), return p17 == null ? null : new BlogLDto()
Id = p13.Id, {
CreatedAt = p13.CreatedAt Title = p17.Title,
Content = p17.Content,
Tags = p17.Tags,
Slug = p17.Slug,
ReadingTime = p17.ReadingTime,
Summery = p17.Summery,
MainImage = p17.Files.Count > 0 && p17.Files.Any<BlogStorageFile>(funcMain7) ? p17.Files.FirstOrDefault<BlogStorageFile>(funcMain8).FileName : string.Empty,
IsSuggested = p17.IsSuggested,
CategoryId = p17.CategoryId,
CategoryName = p17.Category == null ? null : p17.Category.Name,
AuthorId = p17.AuthorId,
AuthorFullName = p17.Author != null ? p17.Author.FirstName + " " + p17.Author.LastName : string.Empty,
MetaTags = funcMain9(p17.MetaTags),
Files = funcMain10(p17.Files),
Id = p17.Id,
CreatedAt = p17.CreatedAt
}; };
} }
public static BlogLDto AdaptTo(this Blog p15, BlogLDto p16) public static BlogLDto AdaptTo(this Blog p20, BlogLDto p21)
{ {
if (p15 == null) if (p20 == null)
{ {
return null; return null;
} }
BlogLDto result = p16 ?? new BlogLDto(); BlogLDto result = p21 ?? new BlogLDto();
result.Title = p15.Title; result.Title = p20.Title;
result.Content = p15.Content; result.Content = p20.Content;
result.Tags = p15.Tags; result.Tags = p20.Tags;
result.Slug = p15.Slug; result.Slug = p20.Slug;
result.ReadingTime = p15.ReadingTime; result.ReadingTime = p20.ReadingTime;
result.Summery = p15.Summery; result.Summery = p20.Summery;
result.MainImage = p15.Files.Count > 0 && p15.Files.Any<BlogStorageFile>(funcMain5) ? p15.Files.FirstOrDefault<BlogStorageFile>(funcMain6).FileName : string.Empty; result.MainImage = p20.Files.Count > 0 && p20.Files.Any<BlogStorageFile>(funcMain7) ? p20.Files.FirstOrDefault<BlogStorageFile>(funcMain8).FileName : string.Empty;
result.IsSuggested = p15.IsSuggested; result.IsSuggested = p20.IsSuggested;
result.CategoryId = p15.CategoryId; result.CategoryId = p20.CategoryId;
result.CategoryName = p15.Category == null ? null : p15.Category.Name; result.CategoryName = p20.Category == null ? null : p20.Category.Name;
result.AuthorId = p15.AuthorId; result.AuthorId = p20.AuthorId;
result.AuthorFullName = p15.Author != null ? p15.Author.FirstName + " " + p15.Author.LastName : string.Empty; result.AuthorFullName = p20.Author != null ? p20.Author.FirstName + " " + p20.Author.LastName : string.Empty;
result.Files = funcMain8(p15.Files, result.Files); result.MetaTags = funcMain11(p20.MetaTags, result.MetaTags);
result.Id = p15.Id; result.Files = funcMain12(p20.Files, result.Files);
result.CreatedAt = p15.CreatedAt; result.Id = p20.Id;
result.CreatedAt = p20.CreatedAt;
return result; return result;
} }
public static Expression<Func<Blog, BlogLDto>> ProjectToLDto => p19 => new BlogLDto() public static Expression<Func<Blog, BlogLDto>> ProjectToLDto => p26 => new BlogLDto()
{ {
Title = p19.Title, Title = p26.Title,
Content = p19.Content, Content = p26.Content,
Tags = p19.Tags, Tags = p26.Tags,
Slug = p19.Slug, Slug = p26.Slug,
ReadingTime = p19.ReadingTime, ReadingTime = p26.ReadingTime,
Summery = p19.Summery, Summery = p26.Summery,
MainImage = p19.Files.Count > 0 && p19.Files.Any<BlogStorageFile>(f => f.IsPrimary) ? p19.Files.FirstOrDefault<BlogStorageFile>(f => f.IsPrimary).FileName : string.Empty, MainImage = p26.Files.Count > 0 && p26.Files.Any<BlogStorageFile>(f => f.IsPrimary) ? p26.Files.FirstOrDefault<BlogStorageFile>(f => f.IsPrimary).FileName : string.Empty,
IsSuggested = p19.IsSuggested, IsSuggested = p26.IsSuggested,
CategoryId = p19.CategoryId, CategoryId = p26.CategoryId,
CategoryName = p19.Category.Name, CategoryName = p26.Category.Name,
AuthorId = p19.AuthorId, AuthorId = p26.AuthorId,
AuthorFullName = p19.Author != null ? p19.Author.FirstName + " " + p19.Author.LastName : string.Empty, AuthorFullName = p26.Author != null ? p26.Author.FirstName + " " + p26.Author.LastName : string.Empty,
Files = p19.Files.Select<BlogStorageFile, StorageFileSDto>(p20 => new StorageFileSDto() MetaTags = p26.MetaTags.Select<BlogMetaTag, MetaTagSDto>(p27 => new MetaTagSDto()
{ {
Name = p20.Name, Type = p27.Type,
FileLocation = p20.FileLocation, Value = p27.Value,
FileName = p20.FileName, Id = p27.Id,
IsHeader = p20.IsHeader, CreatedAt = p27.CreatedAt
IsPrimary = p20.IsPrimary, }).ToList<MetaTagSDto>(),
FileType = p20.FileType, Files = p26.Files.Select<BlogStorageFile, StorageFileSDto>(p28 => new StorageFileSDto()
Id = p20.Id {
Name = p28.Name,
FileLocation = p28.FileLocation,
FileName = p28.FileName,
IsHeader = p28.IsHeader,
IsPrimary = p28.IsPrimary,
FileType = p28.FileType,
Id = p28.Id
}).ToList<StorageFileSDto>(), }).ToList<StorageFileSDto>(),
Id = p19.Id, Id = p26.Id,
CreatedAt = p19.CreatedAt CreatedAt = p26.CreatedAt
}; };
public static Blog AdaptToBlog(this BlogSDto p21) public static Blog AdaptToBlog(this BlogSDto p29)
{ {
return p21 == null ? null : new Blog() return p29 == null ? null : new Blog()
{ {
Title = p21.Title, Title = p29.Title,
Slug = p21.Slug, Slug = p29.Slug,
Tags = p21.Tags, Tags = p29.Tags,
ReadingTime = p21.ReadingTime, ReadingTime = p29.ReadingTime,
Summery = p21.Summery, Summery = p29.Summery,
IsSuggested = p21.IsSuggested, IsSuggested = p29.IsSuggested,
CategoryId = p21.CategoryId, CategoryId = p29.CategoryId,
Category = new BlogCategory() Category = new BlogCategory()
{ {
Name = p21.CategoryName, Name = p29.CategoryName,
Id = p21.CategoryId Id = p29.CategoryId
}, },
AuthorId = p21.AuthorId, AuthorId = p29.AuthorId,
Author = new ApplicationUser() {Id = p21.AuthorId}, Author = new ApplicationUser() {Id = p29.AuthorId},
Id = p21.Id, Id = p29.Id,
CreatedAt = p21.CreatedAt, CreatedAt = p29.CreatedAt,
ModifiedAt = p21.ModifiedAt ModifiedAt = p29.ModifiedAt
}; };
} }
public static Blog AdaptTo(this BlogSDto p22, Blog p23) public static Blog AdaptTo(this BlogSDto p30, Blog p31)
{ {
if (p22 == null) if (p30 == null)
{ {
return null; return null;
} }
Blog result = p23 ?? new Blog(); Blog result = p31 ?? new Blog();
result.Title = p22.Title; result.Title = p30.Title;
result.Slug = p22.Slug; result.Slug = p30.Slug;
result.Tags = p22.Tags; result.Tags = p30.Tags;
result.ReadingTime = p22.ReadingTime; result.ReadingTime = p30.ReadingTime;
result.Summery = p22.Summery; result.Summery = p30.Summery;
result.IsSuggested = p22.IsSuggested; result.IsSuggested = p30.IsSuggested;
result.CategoryId = p22.CategoryId; result.CategoryId = p30.CategoryId;
result.Category = funcMain9(new Never(), result.Category, p22); result.Category = funcMain13(new Never(), result.Category, p30);
result.AuthorId = p22.AuthorId; result.AuthorId = p30.AuthorId;
result.Author = funcMain10(new Never(), result.Author, p22); result.Author = funcMain14(new Never(), result.Author, p30);
result.Id = p22.Id; result.Id = p30.Id;
result.CreatedAt = p22.CreatedAt; result.CreatedAt = p30.CreatedAt;
result.ModifiedAt = p22.ModifiedAt; result.ModifiedAt = p30.ModifiedAt;
return result; return result;
} }
public static BlogSDto AdaptToSDto(this Blog p28) public static BlogSDto AdaptToSDto(this Blog p36)
{ {
return p28 == null ? null : new BlogSDto() return p36 == null ? null : new BlogSDto()
{ {
Title = p28.Title, Title = p36.Title,
Slug = p28.Slug, Slug = p36.Slug,
Tags = p28.Tags, Tags = p36.Tags,
ReadingTime = p28.ReadingTime, ReadingTime = p36.ReadingTime,
Summery = p28.Summery, Summery = p36.Summery,
IsSuggested = p28.IsSuggested, IsSuggested = p36.IsSuggested,
CategoryId = p28.CategoryId, CategoryId = p36.CategoryId,
CategoryName = p28.Category == null ? null : p28.Category.Name, CategoryName = p36.Category == null ? null : p36.Category.Name,
MainImage = p28.Files.Count > 0 && p28.Files.Any<BlogStorageFile>(funcMain11) ? p28.Files.FirstOrDefault<BlogStorageFile>(funcMain12).FileName : string.Empty, MainImage = p36.Files.Count > 0 && p36.Files.Any<BlogStorageFile>(funcMain15) ? p36.Files.FirstOrDefault<BlogStorageFile>(funcMain16).FileName : string.Empty,
ModifiedAt = p28.ModifiedAt, ModifiedAt = p36.ModifiedAt,
AuthorId = p28.AuthorId, AuthorId = p36.AuthorId,
Id = p28.Id, Id = p36.Id,
CreatedAt = p28.CreatedAt CreatedAt = p36.CreatedAt
}; };
} }
public static BlogSDto AdaptTo(this Blog p29, BlogSDto p30) public static BlogSDto AdaptTo(this Blog p37, BlogSDto p38)
{ {
if (p29 == null) if (p37 == null)
{ {
return null; return null;
} }
BlogSDto result = p30 ?? new BlogSDto(); BlogSDto result = p38 ?? new BlogSDto();
result.Title = p29.Title; result.Title = p37.Title;
result.Slug = p29.Slug; result.Slug = p37.Slug;
result.Tags = p29.Tags; result.Tags = p37.Tags;
result.ReadingTime = p29.ReadingTime; result.ReadingTime = p37.ReadingTime;
result.Summery = p29.Summery; result.Summery = p37.Summery;
result.IsSuggested = p29.IsSuggested; result.IsSuggested = p37.IsSuggested;
result.CategoryId = p29.CategoryId; result.CategoryId = p37.CategoryId;
result.CategoryName = p29.Category == null ? null : p29.Category.Name; result.CategoryName = p37.Category == null ? null : p37.Category.Name;
result.MainImage = p29.Files.Count > 0 && p29.Files.Any<BlogStorageFile>(funcMain11) ? p29.Files.FirstOrDefault<BlogStorageFile>(funcMain12).FileName : string.Empty; result.MainImage = p37.Files.Count > 0 && p37.Files.Any<BlogStorageFile>(funcMain15) ? p37.Files.FirstOrDefault<BlogStorageFile>(funcMain16).FileName : string.Empty;
result.ModifiedAt = p29.ModifiedAt; result.ModifiedAt = p37.ModifiedAt;
result.AuthorId = p29.AuthorId; result.AuthorId = p37.AuthorId;
result.Id = p29.Id; result.Id = p37.Id;
result.CreatedAt = p29.CreatedAt; result.CreatedAt = p37.CreatedAt;
return result; return result;
} }
public static Expression<Func<Blog, BlogSDto>> ProjectToSDto => p31 => new BlogSDto() public static Expression<Func<Blog, BlogSDto>> ProjectToSDto => p39 => new BlogSDto()
{ {
Title = p31.Title, Title = p39.Title,
Slug = p31.Slug, Slug = p39.Slug,
Tags = p31.Tags, Tags = p39.Tags,
ReadingTime = p31.ReadingTime, ReadingTime = p39.ReadingTime,
Summery = p31.Summery, Summery = p39.Summery,
IsSuggested = p31.IsSuggested, IsSuggested = p39.IsSuggested,
CategoryId = p31.CategoryId, CategoryId = p39.CategoryId,
CategoryName = p31.Category.Name, CategoryName = p39.Category.Name,
MainImage = p31.Files.Count > 0 && p31.Files.Any<BlogStorageFile>(f => f.IsPrimary) ? p31.Files.FirstOrDefault<BlogStorageFile>(f => f.IsPrimary).FileName : string.Empty, MainImage = p39.Files.Count > 0 && p39.Files.Any<BlogStorageFile>(f => f.IsPrimary) ? p39.Files.FirstOrDefault<BlogStorageFile>(f => f.IsPrimary).FileName : string.Empty,
ModifiedAt = p31.ModifiedAt, ModifiedAt = p39.ModifiedAt,
AuthorId = p31.AuthorId, AuthorId = p39.AuthorId,
Id = p31.Id, Id = p39.Id,
CreatedAt = p31.CreatedAt CreatedAt = p39.CreatedAt
}; };
private static List<BlogStorageFile> funcMain1(List<StorageFileSDto> p2) private static List<BlogStorageFile> funcMain1(List<StorageFileSDto> p2)
@ -304,30 +322,57 @@ namespace Netina.Domain.Mappers
} }
private static BlogCategory funcMain2(Never p5, BlogCategory p6, BlogLDto p3) private static List<BlogMetaTag> funcMain2(List<MetaTagSDto> p3)
{ {
BlogCategory result = p6 ?? new BlogCategory(); if (p3 == null)
{
return null;
}
List<BlogMetaTag> result = new List<BlogMetaTag>(p3.Count);
result.Name = p3.CategoryName; int i = 0;
result.Id = p3.CategoryId; int len = p3.Count;
while (i < len)
{
MetaTagSDto item = p3[i];
result.Add(item == null ? null : new BlogMetaTag()
{
Type = item.Type,
Value = item.Value,
Id = item.Id,
CreatedAt = item.CreatedAt
});
i++;
}
return result; return result;
} }
private static List<BlogStorageFile> funcMain3(List<StorageFileSDto> p7, List<BlogStorageFile> p8) private static BlogCategory funcMain3(Never p6, BlogCategory p7, BlogLDto p4)
{ {
if (p7 == null) BlogCategory result = p7 ?? new BlogCategory();
result.Name = p4.CategoryName;
result.Id = p4.CategoryId;
return result;
}
private static List<BlogStorageFile> funcMain4(List<StorageFileSDto> p8, List<BlogStorageFile> p9)
{
if (p8 == null)
{ {
return null; return null;
} }
List<BlogStorageFile> result = new List<BlogStorageFile>(p7.Count); List<BlogStorageFile> result = new List<BlogStorageFile>(p8.Count);
int i = 0; int i = 0;
int len = p7.Count; int len = p8.Count;
while (i < len) while (i < len)
{ {
StorageFileSDto item = p7[i]; StorageFileSDto item = p8[i];
result.Add(item == null ? null : new BlogStorageFile() result.Add(item == null ? null : new BlogStorageFile()
{ {
Name = item.Name, Name = item.Name,
@ -345,39 +390,93 @@ namespace Netina.Domain.Mappers
} }
private static ApplicationUser funcMain4(Never p9, ApplicationUser p10, BlogLDto p3) private static List<BlogMetaTag> funcMain5(List<MetaTagSDto> p10, List<BlogMetaTag> p11)
{ {
ApplicationUser result = p10 ?? new ApplicationUser(); if (p10 == null)
{
return null;
}
List<BlogMetaTag> result = new List<BlogMetaTag>(p10.Count);
result.Id = p3.AuthorId; int i = 0;
int len = p10.Count;
while (i < len)
{
MetaTagSDto item = p10[i];
result.Add(item == null ? null : new BlogMetaTag()
{
Type = item.Type,
Value = item.Value,
Id = item.Id,
CreatedAt = item.CreatedAt
});
i++;
}
return result; return result;
} }
private static bool funcMain5(BlogStorageFile f) private static ApplicationUser funcMain6(Never p12, ApplicationUser p13, BlogLDto p4)
{
ApplicationUser result = p13 ?? new ApplicationUser();
result.Id = p4.AuthorId;
return result;
}
private static bool funcMain7(BlogStorageFile f)
{ {
return f.IsPrimary; return f.IsPrimary;
} }
private static bool funcMain6(BlogStorageFile f) private static bool funcMain8(BlogStorageFile f)
{ {
return f.IsPrimary; return f.IsPrimary;
} }
private static List<StorageFileSDto> funcMain7(List<BlogStorageFile> p14) private static List<MetaTagSDto> funcMain9(List<BlogMetaTag> p18)
{ {
if (p14 == null) if (p18 == null)
{ {
return null; return null;
} }
List<StorageFileSDto> result = new List<StorageFileSDto>(p14.Count); List<MetaTagSDto> result = new List<MetaTagSDto>(p18.Count);
int i = 0; int i = 0;
int len = p14.Count; int len = p18.Count;
while (i < len) while (i < len)
{ {
BlogStorageFile item = p14[i]; BlogMetaTag item = p18[i];
result.Add(item == null ? null : new MetaTagSDto()
{
Type = item.Type,
Value = item.Value,
Id = item.Id,
CreatedAt = item.CreatedAt
});
i++;
}
return result;
}
private static List<StorageFileSDto> funcMain10(List<BlogStorageFile> p19)
{
if (p19 == null)
{
return null;
}
List<StorageFileSDto> result = new List<StorageFileSDto>(p19.Count);
int i = 0;
int len = p19.Count;
while (i < len)
{
BlogStorageFile item = p19[i];
result.Add(item == null ? null : new StorageFileSDto() result.Add(item == null ? null : new StorageFileSDto()
{ {
Name = item.Name, Name = item.Name,
@ -394,20 +493,47 @@ namespace Netina.Domain.Mappers
} }
private static List<StorageFileSDto> funcMain8(List<BlogStorageFile> p17, List<StorageFileSDto> p18) private static List<MetaTagSDto> funcMain11(List<BlogMetaTag> p22, List<MetaTagSDto> p23)
{ {
if (p17 == null) if (p22 == null)
{ {
return null; return null;
} }
List<StorageFileSDto> result = new List<StorageFileSDto>(p17.Count); List<MetaTagSDto> result = new List<MetaTagSDto>(p22.Count);
int i = 0; int i = 0;
int len = p17.Count; int len = p22.Count;
while (i < len) while (i < len)
{ {
BlogStorageFile item = p17[i]; BlogMetaTag item = p22[i];
result.Add(item == null ? null : new MetaTagSDto()
{
Type = item.Type,
Value = item.Value,
Id = item.Id,
CreatedAt = item.CreatedAt
});
i++;
}
return result;
}
private static List<StorageFileSDto> funcMain12(List<BlogStorageFile> p24, List<StorageFileSDto> p25)
{
if (p24 == null)
{
return null;
}
List<StorageFileSDto> result = new List<StorageFileSDto>(p24.Count);
int i = 0;
int len = p24.Count;
while (i < len)
{
BlogStorageFile item = p24[i];
result.Add(item == null ? null : new StorageFileSDto() result.Add(item == null ? null : new StorageFileSDto()
{ {
Name = item.Name, Name = item.Name,
@ -424,31 +550,31 @@ namespace Netina.Domain.Mappers
} }
private static BlogCategory funcMain9(Never p24, BlogCategory p25, BlogSDto p22) private static BlogCategory funcMain13(Never p32, BlogCategory p33, BlogSDto p30)
{ {
BlogCategory result = p25 ?? new BlogCategory(); BlogCategory result = p33 ?? new BlogCategory();
result.Name = p22.CategoryName; result.Name = p30.CategoryName;
result.Id = p22.CategoryId; result.Id = p30.CategoryId;
return result; return result;
} }
private static ApplicationUser funcMain10(Never p26, ApplicationUser p27, BlogSDto p22) private static ApplicationUser funcMain14(Never p34, ApplicationUser p35, BlogSDto p30)
{ {
ApplicationUser result = p27 ?? new ApplicationUser(); ApplicationUser result = p35 ?? new ApplicationUser();
result.Id = p22.AuthorId; result.Id = p30.AuthorId;
return result; return result;
} }
private static bool funcMain11(BlogStorageFile f) private static bool funcMain15(BlogStorageFile f)
{ {
return f.IsPrimary; return f.IsPrimary;
} }
private static bool funcMain12(BlogStorageFile f) private static bool funcMain16(BlogStorageFile f)
{ {
return f.IsPrimary; return f.IsPrimary;
} }

View File

@ -0,0 +1,6 @@
namespace Netina.Domain.Mappers
{
public static partial class BlogMetaTagMapper
{
}
}

View File

@ -21,184 +21,202 @@ namespace Netina.Domain.Mappers
HasSpecialPage = p1.HasSpecialPage, HasSpecialPage = p1.HasSpecialPage,
PageUrl = p1.PageUrl, PageUrl = p1.PageUrl,
Files = funcMain1(p1.Files), Files = funcMain1(p1.Files),
MetaTags = funcMain2(p1.MetaTags),
Id = p1.Id, Id = p1.Id,
CreatedAt = p1.CreatedAt CreatedAt = p1.CreatedAt
}; };
} }
public static Brand AdaptTo(this BrandLDto p3, Brand p4) public static Brand AdaptTo(this BrandLDto p4, Brand p5)
{ {
if (p3 == null) if (p4 == null)
{ {
return null; return null;
} }
Brand result = p4 ?? new Brand(); Brand result = p5 ?? new Brand();
result.PersianName = p3.PersianName; result.PersianName = p4.PersianName;
result.EnglishName = p3.EnglishName; result.EnglishName = p4.EnglishName;
result.Slug = p3.Slug; result.Slug = p4.Slug;
result.Description = p3.Description; result.Description = p4.Description;
result.HasSpecialPage = p3.HasSpecialPage; result.HasSpecialPage = p4.HasSpecialPage;
result.PageUrl = p3.PageUrl; result.PageUrl = p4.PageUrl;
result.Files = funcMain2(p3.Files, result.Files); result.Files = funcMain3(p4.Files, result.Files);
result.Id = p3.Id; result.MetaTags = funcMain4(p4.MetaTags, result.MetaTags);
result.CreatedAt = p3.CreatedAt; result.Id = p4.Id;
result.CreatedAt = p4.CreatedAt;
return result; return result;
} }
public static Expression<Func<BrandLDto, Brand>> ProjectToBrand => p7 => new Brand() public static Expression<Func<BrandLDto, Brand>> ProjectToBrand => p10 => new Brand()
{ {
PersianName = p7.PersianName, PersianName = p10.PersianName,
EnglishName = p7.EnglishName, EnglishName = p10.EnglishName,
Slug = p7.Slug, Slug = p10.Slug,
Description = p7.Description, Description = p10.Description,
HasSpecialPage = p7.HasSpecialPage, HasSpecialPage = p10.HasSpecialPage,
PageUrl = p7.PageUrl, PageUrl = p10.PageUrl,
Files = p7.Files.Select<StorageFileSDto, BrandStorageFile>(p8 => new BrandStorageFile() Files = p10.Files.Select<StorageFileSDto, BrandStorageFile>(p11 => new BrandStorageFile()
{ {
Name = p8.Name, Name = p11.Name,
FileLocation = p8.FileLocation, FileLocation = p11.FileLocation,
FileName = p8.FileName, FileName = p11.FileName,
IsHeader = p8.IsHeader, IsHeader = p11.IsHeader,
IsPrimary = p8.IsPrimary, IsPrimary = p11.IsPrimary,
FileType = p8.FileType, FileType = p11.FileType,
Id = p8.Id, Id = p11.Id,
CreatedAt = p8.CreatedAt CreatedAt = p11.CreatedAt
}).ToList<BrandStorageFile>(), }).ToList<BrandStorageFile>(),
Id = p7.Id, MetaTags = p10.MetaTags.Select<MetaTagSDto, BrandMetaTag>(p12 => new BrandMetaTag()
CreatedAt = p7.CreatedAt
};
public static BrandLDto AdaptToLDto(this Brand p9)
{
return p9 == null ? null : new BrandLDto()
{ {
PersianName = p9.PersianName, Type = p12.Type,
EnglishName = p9.EnglishName, Value = p12.Value,
Description = p9.Description, Id = p12.Id,
HasSpecialPage = p9.HasSpecialPage, CreatedAt = p12.CreatedAt
Slug = p9.Slug, }).ToList<BrandMetaTag>(),
PageUrl = p9.PageUrl, Id = p10.Id,
Files = funcMain3(p9.Files), CreatedAt = p10.CreatedAt
Id = p9.Id, };
CreatedAt = p9.CreatedAt public static BrandLDto AdaptToLDto(this Brand p13)
{
return p13 == null ? null : new BrandLDto()
{
PersianName = p13.PersianName,
EnglishName = p13.EnglishName,
Description = p13.Description,
HasSpecialPage = p13.HasSpecialPage,
Slug = p13.Slug,
PageUrl = p13.PageUrl,
Files = funcMain5(p13.Files),
MetaTags = funcMain6(p13.MetaTags),
Id = p13.Id,
CreatedAt = p13.CreatedAt
}; };
} }
public static BrandLDto AdaptTo(this Brand p11, BrandLDto p12) public static BrandLDto AdaptTo(this Brand p16, BrandLDto p17)
{ {
if (p11 == null) if (p16 == null)
{ {
return null; return null;
} }
BrandLDto result = p12 ?? new BrandLDto(); BrandLDto result = p17 ?? new BrandLDto();
result.PersianName = p11.PersianName; result.PersianName = p16.PersianName;
result.EnglishName = p11.EnglishName; result.EnglishName = p16.EnglishName;
result.Description = p11.Description; result.Description = p16.Description;
result.HasSpecialPage = p11.HasSpecialPage; result.HasSpecialPage = p16.HasSpecialPage;
result.Slug = p11.Slug; result.Slug = p16.Slug;
result.PageUrl = p11.PageUrl; result.PageUrl = p16.PageUrl;
result.Files = funcMain4(p11.Files, result.Files); result.Files = funcMain7(p16.Files, result.Files);
result.Id = p11.Id; result.MetaTags = funcMain8(p16.MetaTags, result.MetaTags);
result.CreatedAt = p11.CreatedAt; result.Id = p16.Id;
result.CreatedAt = p16.CreatedAt;
return result; return result;
} }
public static Expression<Func<Brand, BrandLDto>> ProjectToLDto => p15 => new BrandLDto() public static Expression<Func<Brand, BrandLDto>> ProjectToLDto => p22 => new BrandLDto()
{ {
PersianName = p15.PersianName, PersianName = p22.PersianName,
EnglishName = p15.EnglishName, EnglishName = p22.EnglishName,
Description = p15.Description, Description = p22.Description,
HasSpecialPage = p15.HasSpecialPage, HasSpecialPage = p22.HasSpecialPage,
Slug = p15.Slug, Slug = p22.Slug,
PageUrl = p15.PageUrl, PageUrl = p22.PageUrl,
Files = p15.Files.Select<BrandStorageFile, StorageFileSDto>(p16 => new StorageFileSDto() Files = p22.Files.Select<BrandStorageFile, StorageFileSDto>(p23 => new StorageFileSDto()
{ {
Name = p16.Name, Name = p23.Name,
FileLocation = p16.FileLocation, FileLocation = p23.FileLocation,
FileName = p16.FileName, FileName = p23.FileName,
IsHeader = p16.IsHeader, IsHeader = p23.IsHeader,
IsPrimary = p16.IsPrimary, IsPrimary = p23.IsPrimary,
FileType = p16.FileType, FileType = p23.FileType,
Id = p16.Id Id = p23.Id
}).ToList<StorageFileSDto>(), }).ToList<StorageFileSDto>(),
Id = p15.Id, MetaTags = p22.MetaTags.Select<BrandMetaTag, MetaTagSDto>(p24 => new MetaTagSDto()
CreatedAt = p15.CreatedAt {
Type = p24.Type,
Value = p24.Value,
Id = p24.Id,
CreatedAt = p24.CreatedAt
}).ToList<MetaTagSDto>(),
Id = p22.Id,
CreatedAt = p22.CreatedAt
}; };
public static Brand AdaptToBrand(this BrandSDto p17) public static Brand AdaptToBrand(this BrandSDto p25)
{ {
return p17 == null ? null : new Brand() return p25 == null ? null : new Brand()
{ {
PersianName = p17.PersianName, PersianName = p25.PersianName,
EnglishName = p17.EnglishName, EnglishName = p25.EnglishName,
Slug = p17.Slug, Slug = p25.Slug,
Description = p17.Description, Description = p25.Description,
HasSpecialPage = p17.HasSpecialPage, HasSpecialPage = p25.HasSpecialPage,
PageUrl = p17.PageUrl, PageUrl = p25.PageUrl,
Id = p17.Id, Id = p25.Id,
CreatedAt = p17.CreatedAt CreatedAt = p25.CreatedAt
}; };
} }
public static Brand AdaptTo(this BrandSDto p18, Brand p19) public static Brand AdaptTo(this BrandSDto p26, Brand p27)
{ {
if (p18 == null) if (p26 == null)
{ {
return null; return null;
} }
Brand result = p19 ?? new Brand(); Brand result = p27 ?? new Brand();
result.PersianName = p18.PersianName; result.PersianName = p26.PersianName;
result.EnglishName = p18.EnglishName; result.EnglishName = p26.EnglishName;
result.Slug = p18.Slug; result.Slug = p26.Slug;
result.Description = p18.Description; result.Description = p26.Description;
result.HasSpecialPage = p18.HasSpecialPage; result.HasSpecialPage = p26.HasSpecialPage;
result.PageUrl = p18.PageUrl; result.PageUrl = p26.PageUrl;
result.Id = p18.Id; result.Id = p26.Id;
result.CreatedAt = p18.CreatedAt; result.CreatedAt = p26.CreatedAt;
return result; return result;
} }
public static BrandSDto AdaptToSDto(this Brand p20) public static BrandSDto AdaptToSDto(this Brand p28)
{ {
return p20 == null ? null : new BrandSDto() return p28 == null ? null : new BrandSDto()
{ {
PersianName = p20.PersianName, PersianName = p28.PersianName,
EnglishName = p20.EnglishName, EnglishName = p28.EnglishName,
Description = p20.Description, Description = p28.Description,
Slug = p20.Slug, Slug = p28.Slug,
HasSpecialPage = p20.HasSpecialPage, HasSpecialPage = p28.HasSpecialPage,
PageUrl = p20.PageUrl, PageUrl = p28.PageUrl,
Id = p20.Id, Id = p28.Id,
CreatedAt = p20.CreatedAt CreatedAt = p28.CreatedAt
}; };
} }
public static BrandSDto AdaptTo(this Brand p21, BrandSDto p22) public static BrandSDto AdaptTo(this Brand p29, BrandSDto p30)
{ {
if (p21 == null) if (p29 == null)
{ {
return null; return null;
} }
BrandSDto result = p22 ?? new BrandSDto(); BrandSDto result = p30 ?? new BrandSDto();
result.PersianName = p21.PersianName; result.PersianName = p29.PersianName;
result.EnglishName = p21.EnglishName; result.EnglishName = p29.EnglishName;
result.Description = p21.Description; result.Description = p29.Description;
result.Slug = p21.Slug; result.Slug = p29.Slug;
result.HasSpecialPage = p21.HasSpecialPage; result.HasSpecialPage = p29.HasSpecialPage;
result.PageUrl = p21.PageUrl; result.PageUrl = p29.PageUrl;
result.Id = p21.Id; result.Id = p29.Id;
result.CreatedAt = p21.CreatedAt; result.CreatedAt = p29.CreatedAt;
return result; return result;
} }
public static Expression<Func<Brand, BrandSDto>> ProjectToSDto => p23 => new BrandSDto() public static Expression<Func<Brand, BrandSDto>> ProjectToSDto => p31 => new BrandSDto()
{ {
PersianName = p23.PersianName, PersianName = p31.PersianName,
EnglishName = p23.EnglishName, EnglishName = p31.EnglishName,
Description = p23.Description, Description = p31.Description,
Slug = p23.Slug, Slug = p31.Slug,
HasSpecialPage = p23.HasSpecialPage, HasSpecialPage = p31.HasSpecialPage,
PageUrl = p23.PageUrl, PageUrl = p31.PageUrl,
Id = p23.Id, Id = p31.Id,
CreatedAt = p23.CreatedAt CreatedAt = p31.CreatedAt
}; };
private static List<BrandStorageFile> funcMain1(List<StorageFileSDto> p2) private static List<BrandStorageFile> funcMain1(List<StorageFileSDto> p2)
@ -232,20 +250,47 @@ namespace Netina.Domain.Mappers
} }
private static List<BrandStorageFile> funcMain2(List<StorageFileSDto> p5, List<BrandStorageFile> p6) private static List<BrandMetaTag> funcMain2(List<MetaTagSDto> p3)
{ {
if (p5 == null) if (p3 == null)
{ {
return null; return null;
} }
List<BrandStorageFile> result = new List<BrandStorageFile>(p5.Count); List<BrandMetaTag> result = new List<BrandMetaTag>(p3.Count);
int i = 0; int i = 0;
int len = p5.Count; int len = p3.Count;
while (i < len) while (i < len)
{ {
StorageFileSDto item = p5[i]; MetaTagSDto item = p3[i];
result.Add(item == null ? null : new BrandMetaTag()
{
Type = item.Type,
Value = item.Value,
Id = item.Id,
CreatedAt = item.CreatedAt
});
i++;
}
return result;
}
private static List<BrandStorageFile> funcMain3(List<StorageFileSDto> p6, List<BrandStorageFile> p7)
{
if (p6 == null)
{
return null;
}
List<BrandStorageFile> result = new List<BrandStorageFile>(p6.Count);
int i = 0;
int len = p6.Count;
while (i < len)
{
StorageFileSDto item = p6[i];
result.Add(item == null ? null : new BrandStorageFile() result.Add(item == null ? null : new BrandStorageFile()
{ {
Name = item.Name, Name = item.Name,
@ -263,20 +308,47 @@ namespace Netina.Domain.Mappers
} }
private static List<StorageFileSDto> funcMain3(List<BrandStorageFile> p10) private static List<BrandMetaTag> funcMain4(List<MetaTagSDto> p8, List<BrandMetaTag> p9)
{ {
if (p10 == null) if (p8 == null)
{ {
return null; return null;
} }
List<StorageFileSDto> result = new List<StorageFileSDto>(p10.Count); List<BrandMetaTag> result = new List<BrandMetaTag>(p8.Count);
int i = 0; int i = 0;
int len = p10.Count; int len = p8.Count;
while (i < len) while (i < len)
{ {
BrandStorageFile item = p10[i]; MetaTagSDto item = p8[i];
result.Add(item == null ? null : new BrandMetaTag()
{
Type = item.Type,
Value = item.Value,
Id = item.Id,
CreatedAt = item.CreatedAt
});
i++;
}
return result;
}
private static List<StorageFileSDto> funcMain5(List<BrandStorageFile> p14)
{
if (p14 == null)
{
return null;
}
List<StorageFileSDto> result = new List<StorageFileSDto>(p14.Count);
int i = 0;
int len = p14.Count;
while (i < len)
{
BrandStorageFile item = p14[i];
result.Add(item == null ? null : new StorageFileSDto() result.Add(item == null ? null : new StorageFileSDto()
{ {
Name = item.Name, Name = item.Name,
@ -293,20 +365,47 @@ namespace Netina.Domain.Mappers
} }
private static List<StorageFileSDto> funcMain4(List<BrandStorageFile> p13, List<StorageFileSDto> p14) private static List<MetaTagSDto> funcMain6(List<BrandMetaTag> p15)
{ {
if (p13 == null) if (p15 == null)
{ {
return null; return null;
} }
List<StorageFileSDto> result = new List<StorageFileSDto>(p13.Count); List<MetaTagSDto> result = new List<MetaTagSDto>(p15.Count);
int i = 0; int i = 0;
int len = p13.Count; int len = p15.Count;
while (i < len) while (i < len)
{ {
BrandStorageFile item = p13[i]; BrandMetaTag item = p15[i];
result.Add(item == null ? null : new MetaTagSDto()
{
Type = item.Type,
Value = item.Value,
Id = item.Id,
CreatedAt = item.CreatedAt
});
i++;
}
return result;
}
private static List<StorageFileSDto> funcMain7(List<BrandStorageFile> p18, List<StorageFileSDto> p19)
{
if (p18 == null)
{
return null;
}
List<StorageFileSDto> result = new List<StorageFileSDto>(p18.Count);
int i = 0;
int len = p18.Count;
while (i < len)
{
BrandStorageFile item = p18[i];
result.Add(item == null ? null : new StorageFileSDto() result.Add(item == null ? null : new StorageFileSDto()
{ {
Name = item.Name, Name = item.Name,
@ -322,5 +421,32 @@ namespace Netina.Domain.Mappers
return result; return result;
} }
private static List<MetaTagSDto> funcMain8(List<BrandMetaTag> p20, List<MetaTagSDto> p21)
{
if (p20 == null)
{
return null;
}
List<MetaTagSDto> result = new List<MetaTagSDto>(p20.Count);
int i = 0;
int len = p20.Count;
while (i < len)
{
BrandMetaTag item = p20[i];
result.Add(item == null ? null : new MetaTagSDto()
{
Type = item.Type,
Value = item.Value,
Id = item.Id,
CreatedAt = item.CreatedAt
});
i++;
}
return result;
}
} }
} }

View File

@ -0,0 +1,6 @@
namespace Netina.Domain.Mappers
{
public static partial class BrandMetaTagMapper
{
}
}

View File

@ -247,8 +247,8 @@ public static class ApplicationClaims
Value = ApplicationPermission.ViewSettings, Value = ApplicationPermission.ViewSettings,
}; };
public static List<ClaimDto> AllClaimDtos = new List<ClaimDto> public static List<ClaimDto> AllClaimDtos =
{ [
ViewSettings, ViewSettings,
ManageSettings, ManageSettings,
ManageScraper, ManageScraper,
@ -287,10 +287,10 @@ public static class ApplicationClaims
ManageFiles, ManageFiles,
ViewFiles, ViewFiles,
ManageFaq ManageFaq
}; ];
public static List<Claim> AllClaims = new List<Claim> public static List<Claim> AllClaims =
{ [
ViewSettings.GetClaim, ViewSettings.GetClaim,
ManageSettings.GetClaim, ManageSettings.GetClaim,
ManageScraper.GetClaim, ManageScraper.GetClaim,
@ -329,10 +329,10 @@ public static class ApplicationClaims
ManageFiles.GetClaim, ManageFiles.GetClaim,
ViewFiles.GetClaim, ViewFiles.GetClaim,
ManageFaq.GetClaim ManageFaq.GetClaim
}; ];
public static List<Claim> CustomerClaims = new List<Claim> public static List<Claim> CustomerClaims =
{ [
ViewBlogs.GetClaim, ViewBlogs.GetClaim,
ViewBrands.GetClaim, ViewBrands.GetClaim,
ViewCategories.GetClaim, ViewCategories.GetClaim,
@ -340,7 +340,7 @@ public static class ApplicationClaims
CreateOrder.GetClaim, CreateOrder.GetClaim,
ViewProducts.GetClaim, ViewProducts.GetClaim,
AddReview.GetClaim, AddReview.GetClaim,
ViewMineReviews.GetClaim, ViewMineReviews.GetClaim
}; ];
} }

View File

@ -4,6 +4,7 @@
<TargetFramework>net8.0</TargetFramework> <TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<LangVersion>latest</LangVersion>
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies> <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
</PropertyGroup> </PropertyGroup>
@ -19,7 +20,7 @@
<!--<PropertyGroup> <!--<PropertyGroup>
<TargetFramework>net5.0</TargetFramework> <TargetFramework>net5.0</TargetFramework>
<LangVersion>10</LangVersion> <LangVersion>latest</LangVersion>
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
</PropertyGroup> </PropertyGroup>

View File

@ -4,6 +4,7 @@
<TargetFramework>net8.0</TargetFramework> <TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<LangVersion>latest</LangVersion>
</PropertyGroup> </PropertyGroup>

View File

@ -5,7 +5,7 @@ public class ModelBuilderQueryFilter
public void AddQueryFilterToModelBuilder(ModelBuilder modelBuilder, Type type) public void AddQueryFilterToModelBuilder(ModelBuilder modelBuilder, Type type)
{ {
var method = GetType().GetMethod("RegisterQueryFilter").MakeGenericMethod(type); var method = GetType().GetMethod("RegisterQueryFilter").MakeGenericMethod(type);
method.Invoke(this, new object[] { modelBuilder }); method.Invoke(this, [modelBuilder]);
} }
public void RegisterQueryFilter<TQFilter>(ModelBuilder modelBuilder) where TQFilter : ApiEntity public void RegisterQueryFilter<TQFilter>(ModelBuilder modelBuilder) where TQFilter : ApiEntity
@ -105,7 +105,7 @@ public static class ModelBuilderExtensions
iface.GetGenericTypeDefinition() == typeof(IEntityTypeConfiguration<>)) iface.GetGenericTypeDefinition() == typeof(IEntityTypeConfiguration<>))
{ {
var applyConcreteMethod = applyGenericMethod.MakeGenericMethod(iface.GenericTypeArguments[0]); var applyConcreteMethod = applyGenericMethod.MakeGenericMethod(iface.GenericTypeArguments[0]);
applyConcreteMethod.Invoke(modelBuilder, new[] { Activator.CreateInstance(type) }); applyConcreteMethod.Invoke(modelBuilder, [Activator.CreateInstance(type)]);
} }
} }
@ -167,7 +167,7 @@ public static class ModelBuilderExtensions
type.GetMethods().FirstOrDefault(x => x.Name == "OnModelCreating"); type.GetMethods().FirstOrDefault(x => x.Name == "OnModelCreating");
if (onModelCreatingMethod != null) if (onModelCreatingMethod != null)
onModelCreatingMethod.Invoke(type, new object[] { builder }); onModelCreatingMethod.Invoke(type, [builder]);
else else
{ {
// On Base Model Creating // On Base Model Creating
@ -179,7 +179,7 @@ public static class ModelBuilderExtensions
if (baseOnModelCreatingMethod == null) if (baseOnModelCreatingMethod == null)
continue; continue;
baseOnModelCreatingMethod.Invoke(typeof(BaseType), new object[] { builder }); baseOnModelCreatingMethod.Invoke(typeof(BaseType), [builder]);
} }
builderQueryFilter.AddQueryFilterToModelBuilder(builder, type); builderQueryFilter.AddQueryFilterToModelBuilder(builder, type);

View File

@ -11,6 +11,10 @@ public class CreateBrandCommandHandler(IRepositoryWrapper repositoryWrapper,IMar
{ {
ent.AddFile(file.Name, file.FileLocation, file.FileName, file.IsHeader, file.IsPrimary, file.FileType); ent.AddFile(file.Name, file.FileLocation, file.FileName, file.IsHeader, file.IsPrimary, file.FileType);
} }
foreach (var (key, value) in request.MetaTags)
ent.AddMetaTag(key, value);
repositoryWrapper.SetRepository<Brand>().Add(ent); repositoryWrapper.SetRepository<Brand>().Add(ent);
await repositoryWrapper.SaveChangesAsync(cancellationToken); await repositoryWrapper.SaveChangesAsync(cancellationToken);

View File

@ -1,4 +1,5 @@
using Netina.Domain.Entities.Brands; using Netina.Domain.Entities.Brands;
using Netina.Domain.Entities.Products;
namespace Netina.Repository.Handlers.Brands; namespace Netina.Repository.Handlers.Brands;
@ -15,11 +16,15 @@ public class GetBrandsQueryHandler(IRepositoryWrapper repositoryWrapper, IMediat
{ {
//var products = await _mediator.Send(new GetProductsQuery(BrandIds: null,SpecialOffer: null, Page:0, SortBy: QuerySortBy.None,CategoryId: request.CategoryId, IsActive : null), //var products = await _mediator.Send(new GetProductsQuery(BrandIds: null,SpecialOffer: null, Page:0, SortBy: QuerySortBy.None,CategoryId: request.CategoryId, IsActive : null),
// cancellationToken); // cancellationToken);
var cats = await mediator.Send(new GetProductCategoryChildrenQuery(request.CategoryId), cancellationToken);
var brandGrouped = await repositoryWrapper.SetRepository<Product>() var brandGrouped = await repositoryWrapper.SetRepository<Product>()
.TableNoTracking .TableNoTracking
.Where(p => p.CategoryId == request.CategoryId) .Where(p => cats.Contains(p.CategoryId))
.GroupBy(p=>p.BrandId) .GroupBy(p=>p.BrandId)
.ToListAsync(cancellationToken); .ToListAsync(cancellationToken);
foreach (var grouping in brandGrouped) foreach (var grouping in brandGrouped)
{ {
if (grouping.Key != default) if (grouping.Key != default)

View File

@ -30,6 +30,22 @@ public class UpdateBrandCommandHandler(IRepositoryWrapper repositoryWrapper,IMar
newEnt.AddFile(file.Name, file.FileLocation, file.FileName, file.IsHeader, file.IsPrimary, file.FileType); newEnt.AddFile(file.Name, file.FileLocation, file.FileName, file.IsHeader, file.IsPrimary, file.FileType);
} }
//Check MetaTags
var dbMetaTags = await repositoryWrapper.SetRepository<BrandMetaTag>()
.TableNoTracking
.Where(f => f.BrandId == ent.Id)
.ToListAsync(cancellationToken);
foreach (var feature in dbMetaTags.Where(feature => request.MetaTags.Any(f => f.Key == feature.Type) == false))
{
repositoryWrapper.SetRepository<BrandMetaTag>()
.Delete(feature);
await repositoryWrapper.SaveChangesAsync(cancellationToken);
}
foreach (var (key, value) in request.MetaTags.Where(f => dbMetaTags.Any(dbf => dbf.Type == f.Key) == false))
newEnt.AddMetaTag(key, value);
repositoryWrapper.SetRepository<Brand>().Update(newEnt); repositoryWrapper.SetRepository<Brand>().Update(newEnt);
await repositoryWrapper.SaveChangesAsync(cancellationToken); await repositoryWrapper.SaveChangesAsync(cancellationToken);
await UpdateFaqAsync(newEnt, request.Faqs, cancellationToken); await UpdateFaqAsync(newEnt, request.Faqs, cancellationToken);

View File

@ -1,6 +1,10 @@
namespace Netina.Repository.Handlers.Products; namespace Netina.Repository.Handlers.Products;
public class CreateProductCommandHandler(IRepositoryWrapper repositoryWrapper,IMartenRepositoryWrapper martenRepositoryWrapper, IMediator mediator,ICurrentUserService currentUserService) public class CreateProductCommandHandler(
IRepositoryWrapper repositoryWrapper,
IMartenRepositoryWrapper martenRepositoryWrapper,
IMediator mediator,
ICurrentUserService currentUserService)
: IRequestHandler<CreateProductCommand, ProductLDto> : IRequestHandler<CreateProductCommand, ProductLDto>
{ {
public async Task<ProductLDto> Handle(CreateProductCommand request, CancellationToken cancellationToken) public async Task<ProductLDto> Handle(CreateProductCommand request, CancellationToken cancellationToken)
@ -8,6 +12,7 @@ public class CreateProductCommandHandler(IRepositoryWrapper repositoryWrapper,IM
if (currentUserService.UserId == null) if (currentUserService.UserId == null)
throw new BaseApiException(ApiResultStatusCode.UnAuthorized, "User id is wrong"); throw new BaseApiException(ApiResultStatusCode.UnAuthorized, "User id is wrong");
if (!Guid.TryParse(currentUserService.UserId, out Guid userId)) if (!Guid.TryParse(currentUserService.UserId, out Guid userId))
throw new BaseApiException(ApiResultStatusCode.UnAuthorized, "User id is wrong"); throw new BaseApiException(ApiResultStatusCode.UnAuthorized, "User id is wrong");
@ -29,7 +34,8 @@ public class CreateProductCommandHandler(IRepositoryWrapper repositoryWrapper,IM
ent.AddFile(file.Name, file.FileLocation, file.FileName, file.IsHeader, file.IsPrimary, file.FileType); ent.AddFile(file.Name, file.FileLocation, file.FileName, file.IsHeader, file.IsPrimary, file.FileType);
} }
foreach (var (key, value) in request.MetaTags)
ent.AddMetaTag(key, value);
repositoryWrapper.SetRepository<Product>().Add(ent); repositoryWrapper.SetRepository<Product>().Add(ent);
await repositoryWrapper.SaveChangesAsync(cancellationToken); await repositoryWrapper.SaveChangesAsync(cancellationToken);
@ -56,9 +62,6 @@ public class CreateProductCommandHandler(IRepositoryWrapper repositoryWrapper,IM
await UpdateFaqAsync(ent, request.Faqs, cancellationToken); await UpdateFaqAsync(ent, request.Faqs, cancellationToken);
foreach (var (key, value) in request.MetaTags)
ent.AddMetaTag(key, value);
return ent.AdaptToLDto(); return ent.AdaptToLDto();
} }

View File

@ -22,15 +22,15 @@ public class GetProductsQueryHandler(
{ {
products = request.SortBy switch products = request.SortBy switch
{ {
QuerySortBy.Cheapest => products.OrderBy(p => p.Cost), QuerySortBy.Cheapest => products.OrderByDescending(p => p.IsEnable).ThenBy(p => p.Cost),
QuerySortBy.MostExpensive => products.OrderByDescending(p => p.Cost), QuerySortBy.MostExpensive => products.OrderByDescending(p => p.IsEnable).ThenByDescending(p => p.Cost),
QuerySortBy.MostPopular => products.OrderByDescending(p => p.Rate), QuerySortBy.MostPopular => products.OrderByDescending(p => p.IsEnable).ThenByDescending(p => p.Rate),
QuerySortBy.MostViewed => products.OrderByDescending(p => p.Viewed), QuerySortBy.MostViewed => products.OrderByDescending(p => p.IsEnable).ThenByDescending(p => p.Viewed),
_ => products _ => products
}; };
} }
else else
products = products.OrderByDescending(p => p.CreatedAt); products = products.OrderByDescending(p => p.IsEnable).ThenByDescending(f=>f.CreatedAt);
if (request.ProductName != null) if (request.ProductName != null)
products = products.OrderByDescending(p => EF.Functions.TrigramsSimilarity(p.PersianName, request.ProductName)); products = products.OrderByDescending(p => EF.Functions.TrigramsSimilarity(p.PersianName, request.ProductName));

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,95 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace NetinaShop.Repository.Migrations
{
/// <inheritdoc />
public partial class AddMetaTagToBlogAndBrands : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<Guid>(
name: "BlogId",
schema: "public",
table: "MetaTags",
type: "uuid",
nullable: true);
migrationBuilder.AddColumn<Guid>(
name: "BrandId",
schema: "public",
table: "MetaTags",
type: "uuid",
nullable: true);
migrationBuilder.CreateIndex(
name: "IX_MetaTags_BlogId",
schema: "public",
table: "MetaTags",
column: "BlogId");
migrationBuilder.CreateIndex(
name: "IX_MetaTags_BrandId",
schema: "public",
table: "MetaTags",
column: "BrandId");
migrationBuilder.AddForeignKey(
name: "FK_MetaTags_Blogs_BlogId",
schema: "public",
table: "MetaTags",
column: "BlogId",
principalSchema: "public",
principalTable: "Blogs",
principalColumn: "Id",
onDelete: ReferentialAction.Restrict);
migrationBuilder.AddForeignKey(
name: "FK_MetaTags_Brands_BrandId",
schema: "public",
table: "MetaTags",
column: "BrandId",
principalSchema: "public",
principalTable: "Brands",
principalColumn: "Id",
onDelete: ReferentialAction.Restrict);
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropForeignKey(
name: "FK_MetaTags_Blogs_BlogId",
schema: "public",
table: "MetaTags");
migrationBuilder.DropForeignKey(
name: "FK_MetaTags_Brands_BrandId",
schema: "public",
table: "MetaTags");
migrationBuilder.DropIndex(
name: "IX_MetaTags_BlogId",
schema: "public",
table: "MetaTags");
migrationBuilder.DropIndex(
name: "IX_MetaTags_BrandId",
schema: "public",
table: "MetaTags");
migrationBuilder.DropColumn(
name: "BlogId",
schema: "public",
table: "MetaTags");
migrationBuilder.DropColumn(
name: "BrandId",
schema: "public",
table: "MetaTags");
}
}
}

View File

@ -1686,6 +1686,30 @@ namespace NetinaShop.Repository.Migrations
b.HasDiscriminator().HasValue("ProductDiscount"); b.HasDiscriminator().HasValue("ProductDiscount");
}); });
modelBuilder.Entity("Netina.Domain.Entities.Blogs.BlogMetaTag", b =>
{
b.HasBaseType("Netina.Domain.Entities.Seo.MetaTag");
b.Property<Guid>("BlogId")
.HasColumnType("uuid");
b.HasIndex("BlogId");
b.HasDiscriminator().HasValue("BlogMetaTag");
});
modelBuilder.Entity("Netina.Domain.Entities.Brands.BrandMetaTag", b =>
{
b.HasBaseType("Netina.Domain.Entities.Seo.MetaTag");
b.Property<Guid>("BrandId")
.HasColumnType("uuid");
b.HasIndex("BrandId");
b.HasDiscriminator().HasValue("BrandMetaTag");
});
modelBuilder.Entity("Netina.Domain.Entities.ProductCategories.ProductCategoryMetaTag", b => modelBuilder.Entity("Netina.Domain.Entities.ProductCategories.ProductCategoryMetaTag", b =>
{ {
b.HasBaseType("Netina.Domain.Entities.Seo.MetaTag"); b.HasBaseType("Netina.Domain.Entities.Seo.MetaTag");
@ -2072,6 +2096,26 @@ namespace NetinaShop.Repository.Migrations
b.Navigation("Product"); b.Navigation("Product");
}); });
modelBuilder.Entity("Netina.Domain.Entities.Blogs.BlogMetaTag", b =>
{
b.HasOne("Netina.Domain.Entities.Blogs.Blog", "Brand")
.WithMany("MetaTags")
.HasForeignKey("BlogId")
.OnDelete(DeleteBehavior.Restrict);
b.Navigation("Brand");
});
modelBuilder.Entity("Netina.Domain.Entities.Brands.BrandMetaTag", b =>
{
b.HasOne("Netina.Domain.Entities.Brands.Brand", "Brand")
.WithMany("MetaTags")
.HasForeignKey("BrandId")
.OnDelete(DeleteBehavior.Restrict);
b.Navigation("Brand");
});
modelBuilder.Entity("Netina.Domain.Entities.ProductCategories.ProductCategoryMetaTag", b => modelBuilder.Entity("Netina.Domain.Entities.ProductCategories.ProductCategoryMetaTag", b =>
{ {
b.HasOne("Netina.Domain.Entities.ProductCategories.ProductCategory", "ProductCategory") b.HasOne("Netina.Domain.Entities.ProductCategories.ProductCategory", "ProductCategory")
@ -2135,6 +2179,8 @@ namespace NetinaShop.Repository.Migrations
modelBuilder.Entity("Netina.Domain.Entities.Blogs.Blog", b => modelBuilder.Entity("Netina.Domain.Entities.Blogs.Blog", b =>
{ {
b.Navigation("Files"); b.Navigation("Files");
b.Navigation("MetaTags");
}); });
modelBuilder.Entity("Netina.Domain.Entities.Blogs.BlogCategory", b => modelBuilder.Entity("Netina.Domain.Entities.Blogs.BlogCategory", b =>
@ -2146,6 +2192,8 @@ namespace NetinaShop.Repository.Migrations
{ {
b.Navigation("Files"); b.Navigation("Files");
b.Navigation("MetaTags");
b.Navigation("Products"); b.Navigation("Products");
}); });

View File

@ -4,6 +4,7 @@
<TargetFramework>net8.0</TargetFramework> <TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<LangVersion>latest</LangVersion>
</PropertyGroup> </PropertyGroup>

View File

@ -5,6 +5,7 @@
<TargetFramework>net8.0</TargetFramework> <TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<LangVersion>latest</LangVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>

View File

@ -45,9 +45,9 @@ var posts = JsonConvert.DeserializeObject<List<WordPressPostDto>>(json);
if (posts == null) if (posts == null)
throw new Exception("Posts is null"); throw new Exception("Posts is null");
List<SeedBlogCategoryRequestDto> categories = new List<SeedBlogCategoryRequestDto>(); List<SeedBlogCategoryRequestDto> categories = [];
List<WordPressPostTagDto> tags = new List<WordPressPostTagDto>(); List<WordPressPostTagDto> tags = [];
foreach (var taxonomy in termTaxonomies) foreach (var taxonomy in termTaxonomies)
{ {
if (taxonomy.taxonomy == "category") if (taxonomy.taxonomy == "category")
@ -81,7 +81,7 @@ Console.WriteLine($"{categories.Count} BlogCategory Added Success !");
//CREATE BLOG PART //CREATE BLOG PART
List<SeedBlogRequestDto> blogs = new List<SeedBlogRequestDto>(); List<SeedBlogRequestDto> blogs = [];
var random = new Random(1532); var random = new Random(1532);
int postedCounter = 0; int postedCounter = 0;
int postCounter = 0; int postCounter = 0;
@ -195,7 +195,7 @@ foreach (var wordPressPostDto in wpPosts)
blogs.Add(blog); blogs.Add(blog);
await RestWrapper.Instance.SeedRestApi.SeedBlogsAsync(new List<SeedBlogRequestDto> { blog }, await RestWrapper.Instance.SeedRestApi.SeedBlogsAsync([blog],
"kKAYskyG8xPxKnJrHkuYxub4Ao2bnz7AOmNtwDT0RaqzaG7ZvbvaP29tCrC8wJ823RczJFXOIQT2bDOec4F38A=="); "kKAYskyG8xPxKnJrHkuYxub4Ao2bnz7AOmNtwDT0RaqzaG7ZvbvaP29tCrC8wJ823RczJFXOIQT2bDOec4F38A==");
Console.WriteLine($"{postCounter++} / {wpPosts.Count()} Blog Added Success !"); Console.WriteLine($"{postCounter++} / {wpPosts.Count()} Blog Added Success !");