Compare commits
No commits in common. "00ca32d32f4ccfd2a9967e98ed3c3aec933137ae" and "5abfe72bdb8b7e93b906353f9dd1f5a70f563fbb" have entirely different histories.
00ca32d32f
...
5abfe72bdb
|
@ -47,8 +47,8 @@
|
||||||
},
|
},
|
||||||
"JwtSettings": {
|
"JwtSettings": {
|
||||||
"SecretKey": "YAEMAMZAMAN_KHODET_NEGAHDAR_IN_KEY_BASH_nw+8E0EABj0Wg8c4mHg/bDBf5qGMhmBPb6u16DVe9/MzYva1e+/J1zImyIoQX2Lmra2kvzsIjGiwP7r3Znd_YA_JADE_NASABE_v+Ro/CDixScDv6EkpZnkBv9MFdPnSmFXNGMH9gA1BzQUoC1iSX9Aq+pMIw/cMKXI9WA==_YA_HUSEIN_SEYED_SHOHADA_BE_OMID_KHODET",
|
"SecretKey": "YAEMAMZAMAN_KHODET_NEGAHDAR_IN_KEY_BASH_nw+8E0EABj0Wg8c4mHg/bDBf5qGMhmBPb6u16DVe9/MzYva1e+/J1zImyIoQX2Lmra2kvzsIjGiwP7r3Znd_YA_JADE_NASABE_v+Ro/CDixScDv6EkpZnkBv9MFdPnSmFXNGMH9gA1BzQUoC1iSX9Aq+pMIw/cMKXI9WA==_YA_HUSEIN_SEYED_SHOHADA_BE_OMID_KHODET",
|
||||||
"Issuer": "Vesmeh",
|
"Issuer": "NetinaShop",
|
||||||
"Audience": "Vesmeh",
|
"Audience": "NetinaShop",
|
||||||
"ExpireAddDay": "15"
|
"ExpireAddDay": "15"
|
||||||
}
|
}
|
||||||
},
|
},
|
|
@ -1,78 +0,0 @@
|
||||||
{
|
|
||||||
"ConnectionStrings": {
|
|
||||||
"PostgresServer": "User ID=postgres;Password=root;Host=localhost;Port=5432;Database=iGarsonDB;",
|
|
||||||
"Postgres": "Host=pg-0,pg-1;Username=igarsonAgent;Password=xHTpBf4wC+bBeNg2pL6Ga7VEWKFJx7VPEUpqxwPFfOc2YYTVwFQuHfsiqoVeT9+6;Database=NetinaShopDB02;Load Balance Hosts=true;Target Session Attributes=primary;Application Name=iGLS",
|
|
||||||
"MartenDB": "Host=pg-0,pg-1;Username=igarsonAgent;Password=xHTpBf4wC+bBeNg2pL6Ga7VEWKFJx7VPEUpqxwPFfOc2YYTVwFQuHfsiqoVeT9+6;Database=NetinaShopMartenDB;"
|
|
||||||
},
|
|
||||||
"Logging": {
|
|
||||||
"LogLevel": {
|
|
||||||
"Default": "Information",
|
|
||||||
"Microsoft": "None",
|
|
||||||
"Microsoft.Hosting.Lifetime": "Information",
|
|
||||||
"Microsoft.AspNetCore.SignalR": "Debug",
|
|
||||||
"Microsoft.AspNetCore.Http.Connections": "Debug"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"ShopSettings": {
|
|
||||||
"TaxesFee": 9
|
|
||||||
},
|
|
||||||
"SiteSettings": {
|
|
||||||
"BaseUrl": "http://localhost:32770",
|
|
||||||
"WebSiteUrl": "https://hamyanedalat.com",
|
|
||||||
"AdminPanelBaseUrl": "https://admin.hamyanedalat.com",
|
|
||||||
"StorageBaseUrl": "https://storage.hamyanedalat.com",
|
|
||||||
"KaveNegarApiKey": "3735494B4143727A794346457461576A2B4B6668414973424E333561505A694B",
|
|
||||||
"UserSetting": {
|
|
||||||
"Username": "09214802813",
|
|
||||||
"Email": "avvampier@gmail.com",
|
|
||||||
"Password": "eF79o4P4BopCUbUK",
|
|
||||||
"Phone": "09214802813",
|
|
||||||
"RoleName": "RootAdmin",
|
|
||||||
"FirstName": "همه کاره",
|
|
||||||
"LastName": "سیستم"
|
|
||||||
},
|
|
||||||
"Manager": {
|
|
||||||
"Username": "09122171024",
|
|
||||||
"Email": "info@hamyanedalat.com",
|
|
||||||
"Password": "eF79o4P4BopCUbUK",
|
|
||||||
"Phone": "09122171024",
|
|
||||||
"RoleName": "Manager",
|
|
||||||
"FirstName": "کامران",
|
|
||||||
"LastName": "میرزایی"
|
|
||||||
},
|
|
||||||
"StorageSetting": {
|
|
||||||
"AccessKey": "de129835-b43a-4552-8ed4-865e2635ab3d",
|
|
||||||
"SecretKey": "f00197a766336e818023f90408ba3b88b4fdc86d0e7180f74f199d9f03db7575",
|
|
||||||
"BucketKey": "hamyan-content"
|
|
||||||
},
|
|
||||||
"JwtSettings": {
|
|
||||||
"SecretKey": "YAEMAMZAMAN_KHODET_NEGAHDAR_IN_KEY_BASH_nw+8E0EABj0Wg8c4mHg/bDBf5qGMhmBPb6u16DVe9/MzYva1e+/J1zImyIoQX2Lmra2kvzsIjGiwP7r3Znd_YA_JADE_NASABE_v+Ro/CDixScDv6EkpZnkBv9MFdPnSmFXNGMH9gA1BzQUoC1iSX9Aq+pMIw/cMKXI9WA==_YA_HUSEIN_SEYED_SHOHADA_BE_OMID_KHODET",
|
|
||||||
"Issuer": "HamaynEdalat",
|
|
||||||
"Audience": "HamaynEdalat",
|
|
||||||
"ExpireAddDay": "15"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"IpRateLimiting": {
|
|
||||||
"EnableEndpointRateLimiting": false,
|
|
||||||
"StackBlockedRequests": false,
|
|
||||||
"RealIpHeader": "X-Real-IP",
|
|
||||||
"ClientIdHeader": "X-ClientId",
|
|
||||||
"HttpStatusCode": 429,
|
|
||||||
"IpWhitelist": [ "127.0.0.1", "::1/10", "192.168.0.0/24" ],
|
|
||||||
"EndpointWhitelist": [ "get:/api/license", "*:/api/status" ],
|
|
||||||
"ClientWhitelist": [ "dev-id-1", "dev-id-2" ],
|
|
||||||
"GeneralRules": [
|
|
||||||
{
|
|
||||||
"Endpoint": "*",
|
|
||||||
"Period": "1m",
|
|
||||||
"Limit": 60
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"Endpoint": "*",
|
|
||||||
"Period": "15m",
|
|
||||||
"Limit": 250
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"AllowedHosts": "*"
|
|
||||||
}
|
|
|
@ -10,7 +10,8 @@ public class FileController : ICarterModule
|
||||||
public void AddRoutes(IEndpointRouteBuilder app)
|
public void AddRoutes(IEndpointRouteBuilder app)
|
||||||
{
|
{
|
||||||
var group = app.NewVersionedApi("File")
|
var group = app.NewVersionedApi("File")
|
||||||
.MapGroup("api/file");
|
.MapGroup("api/file")
|
||||||
|
.RequireAuthorization(builder => builder.AddAuthenticationSchemes("Bearer").RequireAuthenticatedUser());
|
||||||
|
|
||||||
group.MapGet("", GetFilesAsync)
|
group.MapGet("", GetFilesAsync)
|
||||||
.WithDisplayName("GetFilesAsync")
|
.WithDisplayName("GetFilesAsync")
|
||||||
|
@ -19,6 +20,7 @@ public class FileController : ICarterModule
|
||||||
|
|
||||||
group.MapPost("", UploadFileAsync)
|
group.MapPost("", UploadFileAsync)
|
||||||
.WithDisplayName("UploadFileAsync")
|
.WithDisplayName("UploadFileAsync")
|
||||||
|
.RequireAuthorization(builder => builder.AddAuthenticationSchemes("Bearer").RequireAuthenticatedUser().RequireClaim(CustomClaimType.Permission, ApplicationPermission.ManageFiles))
|
||||||
.HasApiVersion(1.0);
|
.HasApiVersion(1.0);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
using Microsoft.Extensions.Options;
|
using Netina.Core.Abstracts;
|
||||||
using Netina.Core.Abstracts;
|
|
||||||
using Netina.Domain.CommandQueries.Queries;
|
using Netina.Domain.CommandQueries.Queries;
|
||||||
using Netina.Domain.Models.Claims;
|
using Netina.Domain.Models.Claims;
|
||||||
using TypedResults = Microsoft.AspNetCore.Http.TypedResults;
|
using TypedResults = Microsoft.AspNetCore.Http.TypedResults;
|
||||||
|
@ -37,17 +36,16 @@ public class PaymentController : ICarterModule
|
||||||
=> TypedResults.Ok(await mediator.Send(new GetShippingQuery(id), cancellationToken));
|
=> TypedResults.Ok(await mediator.Send(new GetShippingQuery(id), cancellationToken));
|
||||||
|
|
||||||
// POST:Create Entity
|
// POST:Create Entity
|
||||||
public async Task<IResult> VerifyPaymentAsync([FromQuery] string Authority, [FromQuery] string Status, IPaymentService paymentService, IOptionsSnapshot<SiteSettings> optionsSnapshot, ILogger<PaymentController> logger, CancellationToken cancellationToken)
|
public async Task<IResult> VerifyPaymentAsync([FromQuery] string Authority, [FromQuery] string Status, IPaymentService paymentService, ILogger<PaymentController> logger, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
var siteUrl = optionsSnapshot.Value.WebSiteUrl;
|
|
||||||
if (Status == "OK")
|
if (Status == "OK")
|
||||||
{
|
{
|
||||||
var result = await paymentService.VerifyPaymentAsync(authority: Authority, cancellationToken);
|
var result = await paymentService.VerifyPaymentAsync(authority: Authority, cancellationToken);
|
||||||
return TypedResults.Redirect($"{siteUrl}/purchase-callback?refid={result.Item1}&paymentStatus=true&factorNumber={result.Item2}", true);
|
return TypedResults.Redirect($"https://vesmeh.com/purchase-callback?refid={result.Item1}&paymentStatus=true&factorNumber={result.Item2}", true);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return TypedResults.Redirect($"{siteUrl}/purchase-callback?refid=0&paymentStatus=false&factorNumber=0", true);
|
return TypedResults.Redirect($"https://vesmeh.com/purchase-callback?refid=0&paymentStatus=false&factorNumber=0", true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -11,25 +11,8 @@ public class SearchController : ICarterModule
|
||||||
group.MapGet("", SearchAsync)
|
group.MapGet("", SearchAsync)
|
||||||
.WithDisplayName("Search Async")
|
.WithDisplayName("Search Async")
|
||||||
.HasApiVersion(1.0);
|
.HasApiVersion(1.0);
|
||||||
|
|
||||||
group.MapGet("zarehbin", ZarehbinAsync)
|
|
||||||
.WithDisplayName("Search Async")
|
|
||||||
.HasApiVersion(1.0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task<IResult> SearchAsync([FromQuery] string name, [FromServices] ISearchService searchService, CancellationToken cancellationToken)
|
private async Task<IResult> SearchAsync([FromQuery] string name, [FromServices] ISearchService searchService, CancellationToken cancellationToken)
|
||||||
=> TypedResults.Ok(await searchService.SearchAsync(name, cancellationToken));
|
=> TypedResults.Ok(await searchService.SearchAsync(name, cancellationToken));
|
||||||
|
|
||||||
private async Task<IResult> ZarehbinAsync([FromQuery] string? product_id, [FromQuery] int? page, [FromServices] ISearchService searchService, CancellationToken cancellationToken)
|
|
||||||
{
|
|
||||||
if (product_id == null)
|
|
||||||
{
|
|
||||||
if (page == null)
|
|
||||||
return TypedResults.Ok(await searchService.ZarehbinAsync(0, cancellationToken));
|
|
||||||
else
|
|
||||||
return TypedResults.Ok(await searchService.ZarehbinAsync(page.Value, cancellationToken));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
return TypedResults.Ok(await searchService.ZarehbinAsync(Guid.Parse(product_id), cancellationToken));
|
|
||||||
}
|
|
||||||
}
|
}
|
|
@ -1,7 +1,13 @@
|
||||||
using Netina.Domain.Dtos.RequestDtos.SeedDtos;
|
using Netina.Common.Models.Api;
|
||||||
|
using Netina.Common.Models.Exception;
|
||||||
|
using Netina.Domain.CommandQueries.Commands;
|
||||||
|
using Netina.Domain.Dtos.RequestDtos.SeedDtos;
|
||||||
|
using Netina.Domain.Dtos.SmallDtos;
|
||||||
using Netina.Domain.Entities.Blogs;
|
using Netina.Domain.Entities.Blogs;
|
||||||
|
using Netina.Repository.Repositories.Base;
|
||||||
|
|
||||||
namespace Netina.Api.Controller;
|
namespace Netina.Api.Controller;
|
||||||
|
|
||||||
public class SeedController : ICarterModule
|
public class SeedController : ICarterModule
|
||||||
{
|
{
|
||||||
private readonly IWebHostEnvironment _environment;
|
private readonly IWebHostEnvironment _environment;
|
||||||
|
@ -57,7 +63,6 @@ public class SeedController : ICarterModule
|
||||||
|
|
||||||
return TypedResults.Ok();
|
return TypedResults.Ok();
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<IResult> SeedCategoriesAsync([FromBody] List<SeedCategoryRequestDto> request, [FromQuery] string key, IMediator mediator,CancellationToken cancellationToken)
|
public async Task<IResult> SeedCategoriesAsync([FromBody] List<SeedCategoryRequestDto> request, [FromQuery] string key, IMediator mediator,CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
if (key != "kKAYskyG8xPxKnJrHkuYxub4Ao2bnz7AOmNtwDT0RaqzaG7ZvbvaP29tCrC8wJ823RczJFXOIQT2bDOec4F38A==")
|
if (key != "kKAYskyG8xPxKnJrHkuYxub4Ao2bnz7AOmNtwDT0RaqzaG7ZvbvaP29tCrC8wJ823RczJFXOIQT2bDOec4F38A==")
|
||||||
|
@ -107,13 +112,6 @@ public class SeedController : ICarterModule
|
||||||
{
|
{
|
||||||
var ent = Blog.Create(seedBlogRequestDto.Title, seedBlogRequestDto.Content, seedBlogRequestDto.Tags, seedBlogRequestDto.ReadingTime,
|
var ent = Blog.Create(seedBlogRequestDto.Title, seedBlogRequestDto.Content, seedBlogRequestDto.Tags, seedBlogRequestDto.ReadingTime,
|
||||||
seedBlogRequestDto.Summery, seedBlogRequestDto.IsSuggested, seedBlogRequestDto.CategoryId);
|
seedBlogRequestDto.Summery, seedBlogRequestDto.IsSuggested, seedBlogRequestDto.CategoryId);
|
||||||
|
|
||||||
foreach (var storageFileSDto in seedBlogRequestDto.Files)
|
|
||||||
{
|
|
||||||
ent.AddFile(storageFileSDto.Name, storageFileSDto.FileLocation, storageFileSDto.FileName, true, true,
|
|
||||||
storageFileSDto.FileType);
|
|
||||||
}
|
|
||||||
|
|
||||||
repositoryWrapper.SetRepository<Blog>().Add(ent);
|
repositoryWrapper.SetRepository<Blog>().Add(ent);
|
||||||
await repositoryWrapper.SaveChangesAsync(cancellationToken);
|
await repositoryWrapper.SaveChangesAsync(cancellationToken);
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,8 +6,8 @@
|
||||||
<ImplicitUsings>enable</ImplicitUsings>
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
<InvariantGlobalization>true</InvariantGlobalization>
|
<InvariantGlobalization>true</InvariantGlobalization>
|
||||||
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
|
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
|
||||||
<AssemblyVersion>0.22.25.44</AssemblyVersion>
|
<AssemblyVersion>0.22.25.43</AssemblyVersion>
|
||||||
<FileVersion>0.22.25.44</FileVersion>
|
<FileVersion>0.22.25.43</FileVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|
|
@ -1,3 +1,12 @@
|
||||||
|
using Netina.Api.WebFramework.Configurations;
|
||||||
|
using Netina.Api.WebFramework.MiddleWares;
|
||||||
|
using Netina.Api.WebFramework.Swagger;
|
||||||
|
using Netina.Common.Models;
|
||||||
|
using Netina.Core;
|
||||||
|
using Netina.Domain;
|
||||||
|
using Netina.Domain.Models.Settings;
|
||||||
|
using Netina.Infrastructure;
|
||||||
|
using Netina.Repository;
|
||||||
using Netina.Repository.Behaviors;
|
using Netina.Repository.Behaviors;
|
||||||
|
|
||||||
var builder = WebApplication.CreateBuilder(args);
|
var builder = WebApplication.CreateBuilder(args);
|
||||||
|
@ -6,9 +15,10 @@ builder.Host.UseSerilog();
|
||||||
LoggerConfig.ConfigureSerilog();
|
LoggerConfig.ConfigureSerilog();
|
||||||
string env = builder.Environment.IsDevelopment() == true ? "Development" : "Production";
|
string env = builder.Environment.IsDevelopment() == true ? "Development" : "Production";
|
||||||
builder.Host.UseContentRoot(Directory.GetCurrentDirectory());
|
builder.Host.UseContentRoot(Directory.GetCurrentDirectory());
|
||||||
string projectName = "Vesmeh";
|
|
||||||
if (builder.Environment.IsDevelopment())
|
if (builder.Environment.IsDevelopment())
|
||||||
builder.Configuration.AddJsonFile($"AppSettings/appsettings.json").AddJsonFile($"AppSettings/appsettings.{env}{projectName}.json");
|
builder.Configuration
|
||||||
|
.AddJsonFile($"AppSettings/appsettings.json")
|
||||||
|
.AddJsonFile($"AppSettings/appsettings.{env}.json");
|
||||||
|
|
||||||
if (builder.Environment.IsProduction())
|
if (builder.Environment.IsProduction())
|
||||||
builder.Configuration.AddJsonFile($"AppSettings/Production/appsettings.{env}.json");
|
builder.Configuration.AddJsonFile($"AppSettings/Production/appsettings.{env}.json");
|
||||||
|
|
|
@ -1,10 +1,9 @@
|
||||||
using Netina.Domain.Dtos.ResponseDtos.Zarehbin;
|
using Netina.Common.Models;
|
||||||
|
using Netina.Domain.Dtos.ResponseDtos;
|
||||||
|
|
||||||
namespace Netina.Core.CoreServices.Abstracts;
|
namespace Netina.Core.CoreServices.Abstracts;
|
||||||
|
|
||||||
public interface ISearchService : IScopedDependency
|
public interface ISearchService : IScopedDependency
|
||||||
{
|
{
|
||||||
public Task<SearchResponseDto> SearchAsync(string name,CancellationToken cancellationToken = default);
|
public Task<SearchResponseDto> SearchAsync(string name,CancellationToken cancellationToken = default);
|
||||||
public Task<ZarehbinPagedResponseDto> ZarehbinAsync(int page,CancellationToken cancellationToken = default);
|
|
||||||
public Task<ZarehbinProductResponseDto> ZarehbinAsync(Guid productId,CancellationToken cancellationToken = default);
|
|
||||||
}
|
}
|
|
@ -1,5 +1,8 @@
|
||||||
using Netina.Domain.Dtos.ResponseDtos.Zarehbin;
|
using Netina.Core.CoreServices.Abstracts;
|
||||||
|
using Netina.Domain.Dtos.ResponseDtos;
|
||||||
using Netina.Domain.Entities.ProductCategories;
|
using Netina.Domain.Entities.ProductCategories;
|
||||||
|
using Netina.Domain.Entities.Products;
|
||||||
|
using Netina.Repository.Repositories.Base.Contracts;
|
||||||
|
|
||||||
namespace Netina.Core.CoreServices;
|
namespace Netina.Core.CoreServices;
|
||||||
|
|
||||||
|
@ -31,14 +34,4 @@ public class SearchService : ISearchService
|
||||||
Categories = categories.Select(c => c.Adapt<SearchedProductCategoryResponseDto>()).ToList()
|
Categories = categories.Select(c => c.Adapt<SearchedProductCategoryResponseDto>()).ToList()
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
public Task<ZarehbinPagedResponseDto> ZarehbinAsync(int page, CancellationToken cancellationToken = default)
|
|
||||||
{
|
|
||||||
throw new NotImplementedException();
|
|
||||||
}
|
|
||||||
|
|
||||||
public Task<ZarehbinProductResponseDto> ZarehbinAsync(Guid productId, CancellationToken cancellationToken = default)
|
|
||||||
{
|
|
||||||
throw new NotImplementedException();
|
|
||||||
}
|
|
||||||
}
|
}
|
|
@ -104,11 +104,11 @@ public class GetOrderInvoiceCommandHandler : IRequestHandler<GetOrderInvoiceComm
|
||||||
orderAtText.StringFormat = format;
|
orderAtText.StringFormat = format;
|
||||||
result = orderAtText.Draw(currentPage, new PointF(clientSize.Width - 100, result.Bounds.Y + 30));
|
result = orderAtText.Draw(currentPage, new PointF(clientSize.Width - 100, result.Bounds.Y + 30));
|
||||||
|
|
||||||
var nameText = new PdfTextElement($"{order.CustomerFullName}", _mediumFont);
|
var nameText = new PdfTextElement($"{order.UserFullName}", _mediumFont);
|
||||||
nameText.StringFormat = format;
|
nameText.StringFormat = format;
|
||||||
result = nameText.Draw(currentPage, new PointF(clientSize.Width - 100, result.Bounds.Bottom));
|
result = nameText.Draw(currentPage, new PointF(clientSize.Width - 100, result.Bounds.Bottom));
|
||||||
|
|
||||||
var phoneText = new PdfTextElement($"{order.CustomerPhoneNumber}", _mediumFont);
|
var phoneText = new PdfTextElement($"{order.UserPhoneNumber}", _mediumFont);
|
||||||
phoneText.StringFormat = new PdfStringFormat(PdfTextAlignment.Left);
|
phoneText.StringFormat = new PdfStringFormat(PdfTextAlignment.Left);
|
||||||
result = phoneText.Draw(currentPage, new PointF(0, result.Bounds.Y));
|
result = phoneText.Draw(currentPage, new PointF(0, result.Bounds.Y));
|
||||||
|
|
||||||
|
|
|
@ -9,13 +9,10 @@ public static class ImageConvertor
|
||||||
public static async Task<Stream> ImageResize(this FileUploadRequest fileUpload, Stream input, Stream output, int newWidth)
|
public static async Task<Stream> ImageResize(this FileUploadRequest fileUpload, Stream input, Stream output, int newWidth)
|
||||||
{
|
{
|
||||||
using var image = await Image.LoadAsync(input);
|
using var image = await Image.LoadAsync(input);
|
||||||
if (image.Width > newWidth)
|
var height_width = image.Width /image.Height;
|
||||||
{
|
var new_Height = newWidth * height_width;
|
||||||
double ratio = (double)newWidth / image.Width;
|
image.Mutate(x => x.Resize(newWidth, new_Height));
|
||||||
int new_Height = (int)Math.Round(image.Height * ratio);
|
image.Mutate(x => x.Resize(newWidth, new_Height));
|
||||||
image.Mutate(x => x.Resize(newWidth, new_Height));
|
|
||||||
image.Mutate(x => x.Resize(newWidth, new_Height));
|
|
||||||
}
|
|
||||||
await image.SaveAsJpegAsync(output);
|
await image.SaveAsJpegAsync(output);
|
||||||
return output;
|
return output;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,9 @@
|
||||||
namespace Netina.Domain.Dtos.LargDtos;
|
using Netina.Common.Models.Mapper;
|
||||||
|
using Netina.Domain.Dtos.SmallDtos;
|
||||||
|
using Netina.Domain.Entities.Orders;
|
||||||
|
using Netina.Domain.Enums;
|
||||||
|
|
||||||
|
namespace Netina.Domain.Dtos.LargDtos;
|
||||||
public class OrderLDto : BaseDto<OrderLDto,Order>
|
public class OrderLDto : BaseDto<OrderLDto,Order>
|
||||||
{
|
{
|
||||||
public string FactorCode { get; set; } = string.Empty;
|
public string FactorCode { get; set; } = string.Empty;
|
||||||
|
@ -19,8 +24,8 @@ public class OrderLDto : BaseDto<OrderLDto,Order>
|
||||||
public string DiscountCode { get; set; } = string.Empty;
|
public string DiscountCode { get; set; } = string.Empty;
|
||||||
public long TotalPriceWithoutDiscount => TotalPrice + DiscountPrice;
|
public long TotalPriceWithoutDiscount => TotalPrice + DiscountPrice;
|
||||||
|
|
||||||
public string CustomerFullName { get; set; } = string.Empty;
|
public string UserFullName { get; set; } = string.Empty;
|
||||||
public string CustomerPhoneNumber { get; set; } = string.Empty;
|
public string UserPhoneNumber { get; set; } = string.Empty;
|
||||||
|
|
||||||
public List<OrderProductSDto> OrderProducts { get; set; } = new();
|
public List<OrderProductSDto> OrderProducts { get; set; } = new();
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,6 @@ public class SeedBlogRequestDto
|
||||||
public string Summery { get; set; } = string.Empty;
|
public string Summery { get; set; } = string.Empty;
|
||||||
public bool IsSuggested { get; set; }
|
public bool IsSuggested { get; set; }
|
||||||
public Guid CategoryId { get; set; }
|
public Guid CategoryId { get; set; }
|
||||||
public List<StorageFileSDto> Files { get; set; } = new();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public class SeedBlogCategoryRequestDto
|
public class SeedBlogCategoryRequestDto
|
||||||
|
|
|
@ -1,26 +0,0 @@
|
||||||
namespace Netina.Domain.Dtos.ResponseDtos.Zarehbin;
|
|
||||||
|
|
||||||
public class ZarehbinPagedResponseDto
|
|
||||||
{
|
|
||||||
public int count { get; set; }
|
|
||||||
public int total_pages_count { get; set; }
|
|
||||||
public List<ZarehbinProductResponseDto> products { get; set; } = new();
|
|
||||||
}
|
|
||||||
|
|
||||||
public class ZarehbinProductResponseDto
|
|
||||||
{
|
|
||||||
public string title { get; set; } = string.Empty;
|
|
||||||
public string subtitle { get; set; } = string.Empty;
|
|
||||||
public string id { get; set; } = string.Empty;
|
|
||||||
public string current_price { get; set; } = string.Empty;
|
|
||||||
public string old_price { get; set; } = string.Empty;
|
|
||||||
public string availability { get; set; } = string.Empty;
|
|
||||||
public List<string> categories { get; set; } = new();
|
|
||||||
public string image_link { get; set; } = string.Empty;
|
|
||||||
public List<string> image_links { get; set; } = new();
|
|
||||||
public string page_url { get; set; } = string.Empty;
|
|
||||||
public string short_desc { get; set; } = string.Empty;
|
|
||||||
public List<Tuple<string, string>> spec { get; set; } = new();
|
|
||||||
public string registry { get; set; } = string.Empty;
|
|
||||||
public string guarantee { get; set; } = string.Empty;
|
|
||||||
}
|
|
|
@ -1,4 +1,7 @@
|
||||||
namespace Netina.Domain.Entities.Blogs;
|
using Netina.Domain.Entities.StorageFiles;
|
||||||
|
using Netina.Domain.Enums;
|
||||||
|
|
||||||
|
namespace Netina.Domain.Entities.Blogs;
|
||||||
|
|
||||||
public partial class BlogStorageFile : StorageFile
|
public partial class BlogStorageFile : StorageFile
|
||||||
{
|
{
|
||||||
|
|
|
@ -34,10 +34,10 @@ public partial class Discount
|
||||||
public bool IsExpired()
|
public bool IsExpired()
|
||||||
=> !Immortal && ExpireDate.Date < DateTime.Today.Date;
|
=> !Immortal && ExpireDate.Date < DateTime.Today.Date;
|
||||||
|
|
||||||
public void SetCorporate(Guid marketerId)
|
public void SetCorporate(Guid userId)
|
||||||
{
|
{
|
||||||
IsForSaleCooperation = true;
|
IsForSaleCooperation = true;
|
||||||
MarketerId = marketerId;
|
CorporateUserId = userId;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -82,8 +82,8 @@ public partial class Discount : ApiEntity
|
||||||
public bool IsForFirstPurchase { get; internal set; }
|
public bool IsForFirstPurchase { get; internal set; }
|
||||||
|
|
||||||
|
|
||||||
public Guid? MarketerId { get; internal set; }
|
public Guid? CorporateUserId { get; internal set; }
|
||||||
public Marketer? Marketer { get; internal set; }
|
public ApplicationUser? CorporateUser { get; internal set; }
|
||||||
|
|
||||||
public List<Order> Orders { get; internal set; } = new();
|
public List<Order> Orders { get; internal set; } = new();
|
||||||
}
|
}
|
|
@ -1,4 +1,6 @@
|
||||||
namespace Netina.Domain.Entities.Users;
|
using Netina.Common.Models.Entity;
|
||||||
|
|
||||||
|
namespace Netina.Domain.Entities.Users;
|
||||||
|
|
||||||
[AdaptTwoWays("[name]SDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Map | MapType.MapToTarget)]
|
[AdaptTwoWays("[name]SDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Map | MapType.MapToTarget)]
|
||||||
[AdaptTo("[name]SDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Projection)]
|
[AdaptTo("[name]SDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Projection)]
|
||||||
|
@ -7,10 +9,6 @@ public class Marketer : ApiEntity
|
||||||
{
|
{
|
||||||
public string FatherName { get; set; } = string.Empty;
|
public string FatherName { get; set; } = string.Empty;
|
||||||
public string Shaba { get; set; } = string.Empty;
|
public string Shaba { get; set; } = string.Empty;
|
||||||
public DateTime LastSettlement { get; set; }
|
|
||||||
|
|
||||||
public Guid UserId { get; set; }
|
public Guid UserId { get; set; }
|
||||||
public ApplicationUser? User { get; set; }
|
public ApplicationUser? User { get; set; }
|
||||||
|
|
||||||
public Discount? Discount { get; set; }
|
|
||||||
}
|
}
|
|
@ -178,8 +178,6 @@ namespace Netina.Domain.Mappers
|
||||||
OrderAt = p19.OrderAt,
|
OrderAt = p19.OrderAt,
|
||||||
PreparingMinute = p19.PreparingMinute,
|
PreparingMinute = p19.PreparingMinute,
|
||||||
DiscountCode = p19.DiscountCode,
|
DiscountCode = p19.DiscountCode,
|
||||||
CustomerFullName = p19.Customer != null && p19.Customer.User != null ? p19.Customer.User.FirstName + " " + p19.Customer.User.LastName : string.Empty,
|
|
||||||
CustomerPhoneNumber = p19.Customer != null && p19.Customer.User != null ? p19.Customer.User.PhoneNumber : string.Empty,
|
|
||||||
OrderProducts = funcMain8(p19.OrderProducts),
|
OrderProducts = funcMain8(p19.OrderProducts),
|
||||||
Payments = funcMain9(p19.Payments),
|
Payments = funcMain9(p19.Payments),
|
||||||
OrderDelivery = p19.OrderDelivery == null ? null : new OrderDeliverySDto()
|
OrderDelivery = p19.OrderDelivery == null ? null : new OrderDeliverySDto()
|
||||||
|
@ -230,8 +228,6 @@ namespace Netina.Domain.Mappers
|
||||||
result.OrderAt = p22.OrderAt;
|
result.OrderAt = p22.OrderAt;
|
||||||
result.PreparingMinute = p22.PreparingMinute;
|
result.PreparingMinute = p22.PreparingMinute;
|
||||||
result.DiscountCode = p22.DiscountCode;
|
result.DiscountCode = p22.DiscountCode;
|
||||||
result.CustomerFullName = p22.Customer != null && p22.Customer.User != null ? p22.Customer.User.FirstName + " " + p22.Customer.User.LastName : string.Empty;
|
|
||||||
result.CustomerPhoneNumber = p22.Customer != null && p22.Customer.User != null ? p22.Customer.User.PhoneNumber : string.Empty;
|
|
||||||
result.OrderProducts = funcMain10(p22.OrderProducts, result.OrderProducts);
|
result.OrderProducts = funcMain10(p22.OrderProducts, result.OrderProducts);
|
||||||
result.Payments = funcMain11(p22.Payments, result.Payments);
|
result.Payments = funcMain11(p22.Payments, result.Payments);
|
||||||
result.OrderDelivery = funcMain12(p22.OrderDelivery, result.OrderDelivery);
|
result.OrderDelivery = funcMain12(p22.OrderDelivery, result.OrderDelivery);
|
||||||
|
@ -258,8 +254,6 @@ namespace Netina.Domain.Mappers
|
||||||
OrderAt = p30.OrderAt,
|
OrderAt = p30.OrderAt,
|
||||||
PreparingMinute = p30.PreparingMinute,
|
PreparingMinute = p30.PreparingMinute,
|
||||||
DiscountCode = p30.DiscountCode,
|
DiscountCode = p30.DiscountCode,
|
||||||
CustomerFullName = p30.Customer != null && p30.Customer.User != null ? p30.Customer.User.FirstName + " " + p30.Customer.User.LastName : string.Empty,
|
|
||||||
CustomerPhoneNumber = p30.Customer != null && p30.Customer.User != null ? p30.Customer.User.PhoneNumber : string.Empty,
|
|
||||||
OrderProducts = p30.OrderProducts.Select<OrderProduct, OrderProductSDto>(p31 => new OrderProductSDto()
|
OrderProducts = p30.OrderProducts.Select<OrderProduct, OrderProductSDto>(p31 => new OrderProductSDto()
|
||||||
{
|
{
|
||||||
Count = p31.Count,
|
Count = p31.Count,
|
||||||
|
|
|
@ -1,7 +0,0 @@
|
||||||
namespace Netina.Domain.MartenEntities.Settings;
|
|
||||||
|
|
||||||
public class MarketerSetting
|
|
||||||
{
|
|
||||||
public int ProfitPercent { get; set; }
|
|
||||||
public string ContractTerms { get; set; } = string.Empty;
|
|
||||||
}
|
|
|
@ -1,4 +1,13 @@
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Netina.Common.Extensions;
|
||||||
|
using Netina.Common.Models.Api;
|
||||||
|
using Netina.Common.Models.Exception;
|
||||||
|
using Netina.Domain.CommandQueries.Commands;
|
||||||
|
using Netina.Domain.Entities.Discounts;
|
||||||
|
using Netina.Domain.Entities.Users;
|
||||||
|
using Netina.Domain.Enums;
|
||||||
|
using Netina.Repository.Abstracts;
|
||||||
|
using Netina.Repository.Repositories.Base.Contracts;
|
||||||
|
|
||||||
namespace Netina.Repository.Handlers.Discounts;
|
namespace Netina.Repository.Handlers.Discounts;
|
||||||
|
|
||||||
|
@ -24,27 +33,20 @@ public class CreateSaleCooperationDiscountHandler : IRequestHandler<CreateSaleCo
|
||||||
if (!Guid.TryParse(_currentUserService.UserId, out userId))
|
if (!Guid.TryParse(_currentUserService.UserId, out userId))
|
||||||
throw new AppException("User id is wrong");
|
throw new AppException("User id is wrong");
|
||||||
}
|
}
|
||||||
var user = await _userManager.FindByIdAsync(userId.ToString());
|
var user = await _userManager.FindByIdAsync(request.CorporateUserId.ToString());
|
||||||
if (user == null)
|
if (user == null)
|
||||||
throw new AppException("User not found", ApiResultStatusCode.NotFound);
|
throw new AppException("User not found", ApiResultStatusCode.NotFound);
|
||||||
|
|
||||||
var marketer = await _repositoryWrapper.SetRepository<Marketer>()
|
|
||||||
.TableNoTracking
|
|
||||||
.FirstOrDefaultAsync(m => m.UserId == user.Id, cancellationToken);
|
|
||||||
|
|
||||||
if (marketer == null)
|
|
||||||
throw new AppException("Marketer not found", ApiResultStatusCode.NotFound);
|
|
||||||
|
|
||||||
var foundedDiscount = await _repositoryWrapper.SetRepository<Discount>()
|
var foundedDiscount = await _repositoryWrapper.SetRepository<Discount>()
|
||||||
.TableNoTracking
|
.TableNoTracking
|
||||||
.FirstOrDefaultAsync(d => d.IsForSaleCooperation && d.MarketerId == marketer.Id, cancellationToken);
|
.FirstOrDefaultAsync(d => d.IsForSaleCooperation && d.CorporateUserId == userId, cancellationToken);
|
||||||
if (foundedDiscount == null)
|
if (foundedDiscount == null)
|
||||||
{
|
{
|
||||||
var code = StringExtensions.GetId();
|
var code = StringExtensions.GetId();
|
||||||
foundedDiscount = Discount.Create(code,$"کد مخصوص همکاری در فروش برای کاربر - {user.FirstName} {user.LastName}", 10, 0, true,
|
foundedDiscount = Discount.Create(code,$"کد مخصوص همکاری در فروش برای کاربر - {user.FirstName} {user.LastName}", 10, 0, true,
|
||||||
DiscountAmountType.Percent, DiscountType.All, 0, true, DateTime.Today, DateTime.Today.AddYears(10), 0,
|
DiscountAmountType.Percent, DiscountType.All, 0, true, DateTime.Today, DateTime.Today.AddYears(10), 0,
|
||||||
false, 0, false, true, 0, false, false,false);
|
false, 0, false, true, 0, false, false,false);
|
||||||
foundedDiscount.SetCorporate(marketer.Id);
|
foundedDiscount.SetCorporate(userId);
|
||||||
|
|
||||||
_repositoryWrapper.SetRepository<Discount>().Add(foundedDiscount);
|
_repositoryWrapper.SetRepository<Discount>().Add(foundedDiscount);
|
||||||
await _repositoryWrapper.SaveChangesAsync(cancellationToken);
|
await _repositoryWrapper.SaveChangesAsync(cancellationToken);
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -40,9 +40,9 @@ public class ApplicationContext : IdentityDbContext<ApplicationUser, Application
|
||||||
protected void RenameIdentityTables(ModelBuilder builder)
|
protected void RenameIdentityTables(ModelBuilder builder)
|
||||||
{
|
{
|
||||||
builder.HasDefaultSchema("public");
|
builder.HasDefaultSchema("public");
|
||||||
|
|
||||||
builder.Entity<ApplicationUser>().ToTable("Users");
|
builder.Entity<ApplicationUser>().ToTable("Users");
|
||||||
builder.Entity<ApplicationRole>().ToTable("Roles");
|
builder.Entity<ApplicationRole>().ToTable("Roles");
|
||||||
|
|
||||||
builder.Entity<IdentityRoleClaim<Guid>>().ToTable("RoleClaims");
|
builder.Entity<IdentityRoleClaim<Guid>>().ToTable("RoleClaims");
|
||||||
builder.Entity<IdentityUserRole<Guid>>().ToTable("UserRoles");
|
builder.Entity<IdentityUserRole<Guid>>().ToTable("UserRoles");
|
||||||
builder.Entity<IdentityUserClaim<Guid>>().ToTable("Claims");
|
builder.Entity<IdentityUserClaim<Guid>>().ToTable("Claims");
|
||||||
|
|
|
@ -1,21 +1,10 @@
|
||||||
using Netina.Common.Extensions;
|
using Netina.Common.Extensions;
|
||||||
|
using Netina.Domain.CommandQueries.Commands;
|
||||||
using Netina.Domain.Dtos.RequestDtos.SeedDtos;
|
using Netina.Domain.Dtos.RequestDtos.SeedDtos;
|
||||||
using Netina.Domain.Entities.Blogs;
|
|
||||||
using Netina.WordPressDBConverter.Models;
|
|
||||||
using Newtonsoft.Json;
|
|
||||||
using Netina.Common.Models.Api;
|
|
||||||
using Netina.Domain.Dtos.SmallDtos;
|
using Netina.Domain.Dtos.SmallDtos;
|
||||||
using Netina.Domain.Enums;
|
using Netina.WordPressDBConverter.Models;
|
||||||
using Netina.WordPressDBConverter.Services.RestServices;
|
using Netina.WordPressDBConverter.Services.RestServices;
|
||||||
using Refit;
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
|
|
||||||
var postMetaReader = new StreamReader("F:\\wp_postmeta.json");
|
|
||||||
var postMetaJson = postMetaReader.ReadToEnd();
|
|
||||||
Console.WriteLine("Terms File Read Success !");
|
|
||||||
var postMetas = JsonConvert.DeserializeObject<List<WordPressPostMetaDto>>(postMetaJson);
|
|
||||||
if (postMetas == null)
|
|
||||||
throw new Exception("Terms is null");
|
|
||||||
|
|
||||||
|
|
||||||
var termReader = new StreamReader("F:\\wp_terms.json");
|
var termReader = new StreamReader("F:\\wp_terms.json");
|
||||||
|
@ -48,10 +37,8 @@ if (posts == null)
|
||||||
throw new Exception("Posts is null");
|
throw new Exception("Posts is null");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//CREATE CATEGORY PART
|
//CREATE CATEGORY PART
|
||||||
List<SeedBlogCategoryRequestDto> categories = new List<SeedBlogCategoryRequestDto>();
|
List<SeedBlogCategoryRequestDto> categories = new List<SeedBlogCategoryRequestDto>();
|
||||||
|
|
||||||
List<WordPressPostTagDto> tags = new List<WordPressPostTagDto>();
|
List<WordPressPostTagDto> tags = new List<WordPressPostTagDto>();
|
||||||
foreach (var taxonomy in termTaxonomies)
|
foreach (var taxonomy in termTaxonomies)
|
||||||
{
|
{
|
||||||
|
@ -61,8 +48,8 @@ foreach (var taxonomy in termTaxonomies)
|
||||||
if (term != null)
|
if (term != null)
|
||||||
categories.Add(new SeedBlogCategoryRequestDto
|
categories.Add(new SeedBlogCategoryRequestDto
|
||||||
{
|
{
|
||||||
BaseCategoryId = term.term_id.ToInt(),
|
BaseCategoryId = term.term_id.ToInt(),
|
||||||
Description = taxonomy.description,
|
Description = taxonomy.description,
|
||||||
Name = term.name
|
Name = term.name
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -77,17 +64,15 @@ foreach (var taxonomy in termTaxonomies)
|
||||||
Tag = term.name
|
Tag = term.name
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
var categoriesRest = new Dictionary<int, Guid>();
|
|
||||||
categoriesRest = await RestWrapper.Instance.SeedRestApi.SeedBlogCategoriesAsync(categories, "kKAYskyG8xPxKnJrHkuYxub4Ao2bnz7AOmNtwDT0RaqzaG7ZvbvaP29tCrC8wJ823RczJFXOIQT2bDOec4F38A==");
|
var categoriesRest = await RestWrapper.Instance.SeedRestApi.SeedBlogCategoriesAsync(categories, "kKAYskyG8xPxKnJrHkuYxub4Ao2bnz7AOmNtwDT0RaqzaG7ZvbvaP29tCrC8wJ823RczJFXOIQT2bDOec4F38A==");
|
||||||
Console.WriteLine($"{categories.Count} BlogCategory Added Success !");
|
Console.WriteLine($"{categories.Count} ProductCategory Added Success !");
|
||||||
|
|
||||||
|
|
||||||
//CREATE BLOG PART
|
//CREATE BLOG PART
|
||||||
List<SeedBlogRequestDto> blogs = new List<SeedBlogRequestDto>();
|
List<SeedBlogRequestDto> blogs = new List<SeedBlogRequestDto>();
|
||||||
var random = new Random(1532);
|
var random = new Random(1532);
|
||||||
int thumbCounter = 0;
|
|
||||||
foreach (var wordPressPostDto in posts.Where(p => p.post_type == "post"))
|
foreach (var wordPressPostDto in posts.Where(p => p.post_type == "post"))
|
||||||
{
|
{
|
||||||
SeedBlogRequestDto blog;
|
SeedBlogRequestDto blog;
|
||||||
|
@ -109,35 +94,6 @@ foreach (var wordPressPostDto in posts.Where(p => p.post_type == "post"))
|
||||||
if (categoryId == default)
|
if (categoryId == default)
|
||||||
categoryId = categoriesRest.FirstOrDefault(c => c.Key == 0).Value;
|
categoryId = categoriesRest.FirstOrDefault(c => c.Key == 0).Value;
|
||||||
|
|
||||||
var files = new List<StorageFileSDto>();
|
|
||||||
|
|
||||||
var thumbnailMeta = postMetas.FirstOrDefault(pm => pm.post_id == wordPressPostDto.ID && pm.meta_key == "_thumbnail_id");
|
|
||||||
if (thumbnailMeta != null)
|
|
||||||
{
|
|
||||||
var thumbnail = posts.FirstOrDefault(p => p.ID.ToInt() == thumbnailMeta.meta_value.ToInt());
|
|
||||||
if (thumbnail != null)
|
|
||||||
{
|
|
||||||
using var httpClient = new HttpClient();
|
|
||||||
var imageBytes = await httpClient.GetByteArrayAsync(thumbnail.guid);
|
|
||||||
var uploadFile = new FileUploadRequest
|
|
||||||
{
|
|
||||||
ContentType = thumbnail.post_mime_type,
|
|
||||||
FileName = $"{StringExtensions.GetId(10)}.jpeg",
|
|
||||||
FileUploadType = FileUploadType.Image,
|
|
||||||
StringBaseFile = Convert.ToBase64String(imageBytes),
|
|
||||||
};
|
|
||||||
var fileRest = await RestWrapper.Instance.UploadRestApi.UploadAsync(uploadFile);
|
|
||||||
|
|
||||||
files.Add(new StorageFileSDto
|
|
||||||
{
|
|
||||||
FileLocation = fileRest.FileLocation,
|
|
||||||
FileName = fileRest.FileName,
|
|
||||||
Name = fileRest.FileName,
|
|
||||||
FileType = StorageFileType.Image
|
|
||||||
});
|
|
||||||
Console.WriteLine($"Thumbnail uploaded : {thumbCounter++}");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
blog = new SeedBlogRequestDto
|
blog = new SeedBlogRequestDto
|
||||||
{
|
{
|
||||||
|
@ -146,14 +102,17 @@ foreach (var wordPressPostDto in posts.Where(p => p.post_type == "post"))
|
||||||
IsSuggested = false,
|
IsSuggested = false,
|
||||||
ReadingTime = random.Next(1, 15),
|
ReadingTime = random.Next(1, 15),
|
||||||
Title = wordPressPostDto.post_title,
|
Title = wordPressPostDto.post_title,
|
||||||
Files = files
|
|
||||||
};
|
};
|
||||||
|
|
||||||
blogs.Add(blog);
|
blogs.Add(blog);
|
||||||
|
}
|
||||||
|
|
||||||
await RestWrapper.Instance.SeedRestApi.SeedBlogsAsync(new List<SeedBlogRequestDto>{blog}, "kKAYskyG8xPxKnJrHkuYxub4Ao2bnz7AOmNtwDT0RaqzaG7ZvbvaP29tCrC8wJ823RczJFXOIQT2bDOec4F38A==");
|
for (int i = 0; i < blogs.Count / 50; i++)
|
||||||
|
{
|
||||||
|
await RestWrapper.Instance.SeedRestApi.SeedBlogsAsync(blogs.Skip(i * 50).Take(50).ToList(),
|
||||||
|
"kKAYskyG8xPxKnJrHkuYxub4Ao2bnz7AOmNtwDT0RaqzaG7ZvbvaP29tCrC8wJ823RczJFXOIQT2bDOec4F38A==");
|
||||||
|
|
||||||
Console.WriteLine($"{thumbCounter++ } / {blogs.Count} Blog Added Success !");
|
Console.WriteLine($"{i * 50} / {blogs.Count} Product Added Success !");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
using Netina.Common.Models.Api;
|
using Netina.Domain.CommandQueries.Commands;
|
||||||
using Netina.Domain.CommandQueries.Commands;
|
|
||||||
using Netina.Domain.Dtos.RequestDtos.SeedDtos;
|
using Netina.Domain.Dtos.RequestDtos.SeedDtos;
|
||||||
using Refit;
|
using Refit;
|
||||||
|
|
||||||
|
@ -22,10 +21,4 @@ public interface ISeedRestApi
|
||||||
|
|
||||||
[Post("/blogs")]
|
[Post("/blogs")]
|
||||||
Task SeedBlogsAsync([Body] List<SeedBlogRequestDto> request, [Query] string key);
|
Task SeedBlogsAsync([Body] List<SeedBlogRequestDto> request, [Query] string key);
|
||||||
}
|
|
||||||
|
|
||||||
public interface IUploadRestApi
|
|
||||||
{
|
|
||||||
[Post("")]
|
|
||||||
Task<FileUploadResponse> UploadAsync([Body] FileUploadRequest uploadRequest);
|
|
||||||
}
|
}
|
|
@ -1,19 +1,11 @@
|
||||||
using Newtonsoft.Json;
|
using Refit;
|
||||||
using Refit;
|
|
||||||
|
|
||||||
namespace Netina.WordPressDBConverter.Services.RestServices;
|
namespace Netina.WordPressDBConverter.Services.RestServices;
|
||||||
|
|
||||||
public class RestWrapper
|
public class RestWrapper
|
||||||
{
|
{
|
||||||
private static RefitSettings setting = new RefitSettings(new NewtonsoftJsonContentSerializer(new JsonSerializerSettings
|
|
||||||
{
|
|
||||||
Formatting = Newtonsoft.Json.Formatting.Indented,
|
|
||||||
ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore,
|
|
||||||
|
|
||||||
}));
|
|
||||||
private static RestWrapper? _instance;
|
private static RestWrapper? _instance;
|
||||||
public static RestWrapper Instance => _instance = _instance ?? new RestWrapper();
|
public static RestWrapper Instance => _instance = _instance ?? new RestWrapper();
|
||||||
|
|
||||||
public ISeedRestApi SeedRestApi => RestService.For<ISeedRestApi>("http://localhost:32770/api/seed", setting);
|
public ISeedRestApi SeedRestApi => RestService.For<ISeedRestApi>("http://localhost:32770/api/seed");
|
||||||
public IUploadRestApi UploadRestApi => RestService.For<IUploadRestApi>("http://localhost:32770/api/file", setting);
|
|
||||||
}
|
}
|
Loading…
Reference in New Issue