fix(CKEditor) , fix(DiscountDuplicateCode)

subProduct
Amir Hossein Khademi 2024-08-06 11:39:21 +03:30
parent 1137fde70b
commit 8f28afbf50
4 changed files with 80 additions and 28 deletions

View File

@ -1,4 +1,5 @@
using Netina.Domain.Enums; using Netina.Domain.Dtos.ResponseDtos;
using Netina.Domain.Enums;
namespace Netina.Api.Controllers; namespace Netina.Api.Controllers;
@ -18,6 +19,49 @@ public class FileController : ICarterModule
.WithDisplayName("UploadFileAsync") .WithDisplayName("UploadFileAsync")
.HasApiVersion(1.0); .HasApiVersion(1.0);
group.MapPost("/ckeditor", UploadCkEditorFileAsync)
.WithDisplayName("Upload CkEditor File")
.AllowAnonymous()
.DisableAntiforgery()
.HasApiVersion(1.0);
}
public async Task<IResult> UploadCkEditorFileAsync(IFormFile upload, [FromServices] IHttpContextAccessor httpContextAccessor, [FromServices] IStorageService storageService, IUploadFileService uploadFileService, CancellationToken cancellationToken)
{
try
{
if (httpContextAccessor.HttpContext?.Request?.Headers is { } dictionary && dictionary.TryGetValue("Authorization", out StringValues value))
{
if (value.ToString() != "xuwp4KzU1/YBoevpzgH0cz8+zLKQ+EOaYXeo4JtRxmVIuN7Hqxz97oQ398tNX68+")
throw new Exception("ارسال فایل از طرف شما معتبر نمی باشد");
using var stream = new MemoryStream();
await upload.CopyToAsync(stream, cancellationToken);
var uploadRequest = new FileUploadRequest
{
FileName = upload.FileName,
ContentType = upload.ContentType,
FileUploadType = FileUploadType.Image,
StringBaseFile = Convert.ToBase64String(stream.ToArray())
};
var fileUrl = await uploadFileService.UploadImageAsync(uploadRequest);
return TypedResults.Ok(new CkEditorFileUploadResponseDto { url = fileUrl.FileUrl });
}
throw new Exception("ارسال فایل از طرف شما معتبر نمی باشد");
}
catch (Exception e)
{
var errorMessage = new
{
message = e.Message
};
var errorResponse = new
{
error = errorMessage
};
return TypedResults.BadRequest(errorResponse);
}
} }
public async Task<IResult> GetFilesAsync([FromQuery]StorageFileType? fileType,[FromServices] IStorageService storageService, CancellationToken cancellationToken) public async Task<IResult> GetFilesAsync([FromQuery]StorageFileType? fileType,[FromServices] IStorageService storageService, CancellationToken cancellationToken)

View File

@ -0,0 +1,6 @@
namespace Netina.Domain.Dtos.ResponseDtos;
public class CkEditorFileUploadResponseDto
{
public string url { get; set; } = string.Empty;
}

View File

@ -1,15 +1,22 @@
namespace Netina.Repository.Handlers.Discounts; using Microsoft.EntityFrameworkCore;
public class CreateDiscountCommandHandler : IRequestHandler<CreateDiscountCommand , DiscountLDto> namespace Netina.Repository.Handlers.Discounts;
public class CreateDiscountCommandHandler(IRepositoryWrapper repositoryWrapper)
: IRequestHandler<CreateDiscountCommand, DiscountLDto>
{ {
private readonly IRepositoryWrapper _repositoryWrapper;
public CreateDiscountCommandHandler(IRepositoryWrapper repositoryWrapper)
{
_repositoryWrapper = repositoryWrapper;
}
public async Task<DiscountLDto> Handle(CreateDiscountCommand request, CancellationToken cancellationToken) public async Task<DiscountLDto> Handle(CreateDiscountCommand request, CancellationToken cancellationToken)
{ {
if (request.HasCode)
{
var foundDiscount = await repositoryWrapper.SetRepository<Discount>()
.TableNoTracking
.Where(d => d.Code == request.Code)
.FirstOrDefaultAsync(cancellationToken);
if (foundDiscount != null)
throw new BaseApiException(ApiResultStatusCode.BadRequest, "کد تخفیف مورد نظر تکراری می باشد");
}
switch (request.Type) switch (request.Type)
{ {
case DiscountType.All: case DiscountType.All:
@ -17,14 +24,14 @@ public class CreateDiscountCommandHandler : IRequestHandler<CreateDiscountComman
request.HasCode, request.AmountType, request.Type, request.Count,request.IsImmortal, request.StartDate, request.HasCode, request.AmountType, request.Type, request.Count,request.IsImmortal, request.StartDate,
request.ExpireDate, request.PriceFloor, request.HasPriceFloor, request.PriceCeiling, request.HasPriceCeiling, request.ExpireDate, request.PriceFloor, request.HasPriceFloor, request.PriceCeiling, request.HasPriceCeiling,
request.IsInfinity, request.UseCount, request.IsForInvitation,request.IsForFirstPurchase,request.IsSpecialOffer); request.IsInfinity, request.UseCount, request.IsForInvitation,request.IsForFirstPurchase,request.IsSpecialOffer);
_repositoryWrapper.SetRepository<Discount>().Add(ent); repositoryWrapper.SetRepository<Discount>().Add(ent);
break; break;
case DiscountType.Category: case DiscountType.Category:
var catDis = CategoryDiscount.Create(request.Code,request.Description, request.DiscountPercent, request.DiscountAmount, request.HasCode, var catDis = CategoryDiscount.Create(request.Code,request.Description, request.DiscountPercent, request.DiscountAmount, request.HasCode,
request.AmountType, request.Type, request.Count,request.IsImmortal, request.StartDate, request.ExpireDate, request.PriceFloor, request.AmountType, request.Type, request.Count,request.IsImmortal, request.StartDate, request.ExpireDate, request.PriceFloor,
request.HasPriceFloor, request.PriceCeiling, request.HasPriceCeiling, request.IsInfinity, request.UseCount, request.HasPriceFloor, request.PriceCeiling, request.HasPriceCeiling, request.IsInfinity, request.UseCount,
request.IsForInvitation,request.IsForFirstPurchase,request.IsSpecialOffer, request.CategoryId); request.IsForInvitation,request.IsForFirstPurchase,request.IsSpecialOffer, request.CategoryId);
_repositoryWrapper.SetRepository<CategoryDiscount>().Add(catDis); repositoryWrapper.SetRepository<CategoryDiscount>().Add(catDis);
break; break;
case DiscountType.Product: case DiscountType.Product:
@ -32,17 +39,17 @@ public class CreateDiscountCommandHandler : IRequestHandler<CreateDiscountComman
request.AmountType, request.Type, request.Count, request.IsImmortal, request.StartDate, request.ExpireDate, request.PriceFloor, request.AmountType, request.Type, request.Count, request.IsImmortal, request.StartDate, request.ExpireDate, request.PriceFloor,
request.HasPriceFloor, request.PriceCeiling, request.HasPriceCeiling, request.IsInfinity, request.UseCount, request.HasPriceFloor, request.PriceCeiling, request.HasPriceCeiling, request.IsInfinity, request.UseCount,
request.IsForInvitation,request.IsForFirstPurchase, request.IsSpecialOffer,request.ProductId); request.IsForInvitation,request.IsForFirstPurchase, request.IsSpecialOffer,request.ProductId);
_repositoryWrapper.SetRepository<ProductDiscount>().Add(productDis); repositoryWrapper.SetRepository<ProductDiscount>().Add(productDis);
break; break;
default: default:
var def = Discount.Create(request.Code,request.Description, request.DiscountPercent, request.DiscountAmount, request.HasCode, var def = Discount.Create(request.Code,request.Description, request.DiscountPercent, request.DiscountAmount, request.HasCode,
request.AmountType, request.Type, request.Count, request.IsImmortal, request.StartDate, request.ExpireDate, request.PriceFloor, request.AmountType, request.Type, request.Count, request.IsImmortal, request.StartDate, request.ExpireDate, request.PriceFloor,
request.HasPriceFloor, request.PriceCeiling, request.HasPriceCeiling, request.IsInfinity, request.UseCount, request.HasPriceFloor, request.PriceCeiling, request.HasPriceCeiling, request.IsInfinity, request.UseCount,
request.IsForInvitation, request.IsForFirstPurchase,request.IsSpecialOffer); request.IsForInvitation, request.IsForFirstPurchase,request.IsSpecialOffer);
_repositoryWrapper.SetRepository<Discount>().Add(def); repositoryWrapper.SetRepository<Discount>().Add(def);
break; break;
} }
await _repositoryWrapper.SaveChangesAsync(cancellationToken); await repositoryWrapper.SaveChangesAsync(cancellationToken);
return request.Adapt<DiscountLDto>(); return request.Adapt<DiscountLDto>();
} }
} }

View File

@ -2,20 +2,15 @@
namespace Netina.Repository.Handlers.Discounts; namespace Netina.Repository.Handlers.Discounts;
public class UpdateDiscountCommandHandler : IRequestHandler<UpdateDiscountCommand, bool> public class UpdateDiscountCommandHandler(IRepositoryWrapper repositoryWrapper)
: IRequestHandler<UpdateDiscountCommand, bool>
{ {
private readonly IRepositoryWrapper _repositoryWrapper;
public UpdateDiscountCommandHandler(IRepositoryWrapper repositoryWrapper)
{
_repositoryWrapper = repositoryWrapper;
}
public async Task<bool> Handle(UpdateDiscountCommand request, CancellationToken cancellationToken) public async Task<bool> Handle(UpdateDiscountCommand request, CancellationToken cancellationToken)
{ {
switch (request.Type) switch (request.Type)
{ {
case DiscountType.All: case DiscountType.All:
var ent = await _repositoryWrapper.SetRepository<Discount>().TableNoTracking.FirstOrDefaultAsync(d=>d.Id==request.Id,cancellationToken); var ent = await repositoryWrapper.SetRepository<Discount>().TableNoTracking.FirstOrDefaultAsync(d=>d.Id==request.Id,cancellationToken);
if (ent == null) if (ent == null)
throw new AppException("Discount not found", ApiResultStatusCode.NotFound); throw new AppException("Discount not found", ApiResultStatusCode.NotFound);
var newEnt = Discount.Create(request.Code,request.Description, var newEnt = Discount.Create(request.Code,request.Description,
@ -27,10 +22,10 @@ public class UpdateDiscountCommandHandler : IRequestHandler<UpdateDiscountComman
newEnt.Id = ent.Id; newEnt.Id = ent.Id;
newEnt.CreatedAt = ent.CreatedAt; newEnt.CreatedAt = ent.CreatedAt;
newEnt.CreatedBy = ent.CreatedBy; newEnt.CreatedBy = ent.CreatedBy;
_repositoryWrapper.SetRepository<Discount>().Update(newEnt); repositoryWrapper.SetRepository<Discount>().Update(newEnt);
break; break;
case DiscountType.Category: case DiscountType.Category:
var catEnt = await _repositoryWrapper.SetRepository<CategoryDiscount>().TableNoTracking.FirstOrDefaultAsync(d => d.Id == request.Id, cancellationToken); var catEnt = await repositoryWrapper.SetRepository<CategoryDiscount>().TableNoTracking.FirstOrDefaultAsync(d => d.Id == request.Id, cancellationToken);
if (catEnt == null) if (catEnt == null)
throw new AppException("Discount not found", ApiResultStatusCode.NotFound); throw new AppException("Discount not found", ApiResultStatusCode.NotFound);
@ -43,11 +38,11 @@ public class UpdateDiscountCommandHandler : IRequestHandler<UpdateDiscountComman
catDis.Id = catEnt.Id; catDis.Id = catEnt.Id;
catDis.CreatedAt = catEnt.CreatedAt; catDis.CreatedAt = catEnt.CreatedAt;
catDis.CreatedBy = catEnt.CreatedBy; catDis.CreatedBy = catEnt.CreatedBy;
_repositoryWrapper.SetRepository<CategoryDiscount>().Update(catDis); repositoryWrapper.SetRepository<CategoryDiscount>().Update(catDis);
break; break;
case DiscountType.Product: case DiscountType.Product:
var productEnt = await _repositoryWrapper.SetRepository<ProductDiscount>().TableNoTracking.FirstOrDefaultAsync(d => d.Id == request.Id, cancellationToken); var productEnt = await repositoryWrapper.SetRepository<ProductDiscount>().TableNoTracking.FirstOrDefaultAsync(d => d.Id == request.Id, cancellationToken);
if (productEnt == null) if (productEnt == null)
throw new AppException("Discount not found", ApiResultStatusCode.NotFound); throw new AppException("Discount not found", ApiResultStatusCode.NotFound);
@ -60,10 +55,10 @@ public class UpdateDiscountCommandHandler : IRequestHandler<UpdateDiscountComman
productDis.Id = productEnt.Id; productDis.Id = productEnt.Id;
productDis.CreatedAt = productEnt.CreatedAt; productDis.CreatedAt = productEnt.CreatedAt;
productDis.CreatedBy = productEnt.CreatedBy; productDis.CreatedBy = productEnt.CreatedBy;
_repositoryWrapper.SetRepository<ProductDiscount>().Update(productDis); repositoryWrapper.SetRepository<ProductDiscount>().Update(productDis);
break; break;
} }
await _repositoryWrapper.SaveChangesAsync(cancellationToken); await repositoryWrapper.SaveChangesAsync(cancellationToken);
return true; return true;
} }
} }