Untitled
unknown
csharp
a year ago
2.9 kB
79
Indexable
public async Task<Result<Product>> UpdateProductAsync(Guid id, CreateUpdateProductDto productDto)
{
using (var transaction = await _unitOfWork.BeginTransactionAsync())
{
try
{
var product = await _unitOfWork.Products.GetByIdAsync(id);
if (product == null)
{
return new Result<Product> { IsSuccess = false, Message = "Product not found." };
}
var slug = SlugHelper.GenerateSlug(productDto.Name);
if (await _unitOfWork.Products.IsSlugExits(slug))
{
return new Result<Product> { IsSuccess = false, Message = "Slug already exists." };
}
_mapper.Map(productDto, product);
product.Slug = slug;
var existingImages = await _unitOfWork.Images.GetImagesByProductIdAsync(product.Id);
if (existingImages.Count != 0)
{
foreach (var image in existingImages)
{
await _photoService.DeletePhotoAsync("product", image.ImageUrl);
}
}
if (productDto.Images != null && productDto.Images.Any())
{
product.Images = new List<ProductImage>();
foreach (var image in productDto.Images)
{
var uploadResult = await _photoService.AddPhotoAsync(image, "product");
if (uploadResult.Error == null)
{
product.Images.Add(new ProductImage
{
Id = Guid.NewGuid(),
ProductId = product.Id,
ImageUrl = uploadResult.SecureUrl.ToString(),
IsPrimary = product.Images.Count == 0,
ImageType = "Product"
});
}
}
}
_unitOfWork.Products.Update(product);
await _unitOfWork.CompleteAsync();
await transaction.CommitAsync();
return new Result<Product> { IsSuccess = true, Data = product };
}
catch (DbUpdateConcurrencyException ex)
{
await transaction.RollbackAsync();
return new Result<Product> { IsSuccess = false, Message = "Concurrency error: " + ex.Message };
}
catch (Exception ex)
{
await transaction.RollbackAsync();
return new Result<Product> { IsSuccess = false, Message = $"An error occurred: {ex.Message}" };
}
}
}Editor is loading...
Leave a Comment