public async Task <IActionResult> Handle(EditUserCommand request, CancellationToken cancellationToken) { var user = await _context.Users.FindAsync(request.UserId); if (user == null) { return(new NotFoundObjectResult(new ErrorModel(ErrorMessages.NotFound, ErrorCodes.NotFound))); } // make sure no duplicate fullname if (request.Body?.FullName != null && !string.Equals(user.FullName, request.Body.FullName, StringComparison.InvariantCultureIgnoreCase)) { if (await _context.Users.AnyAsync(x => x.FullName.ToLower() == request.Body.FullName.ToLower(), cancellationToken)) { return(new ConflictObjectResult(new ErrorModel("Nama sudah digunakan oleh akun lain", ErrorCodes.DataDuplicated))); } } // make sure no duplicate username if (request.Body?.Username != null && !string.Equals(user.Username, request.Body.Username, StringComparison.InvariantCultureIgnoreCase)) { if (await _context.Users.AnyAsync(x => x.FullName.ToLower() == request.Body.Username.ToLower(), cancellationToken)) { return(new ConflictObjectResult(new ErrorModel("Username sudah digunakan oleh akun lain", ErrorCodes.DataDuplicated))); } } // calculate shipping cost if (request.Body?.Latitude != null && request.Body?.Longitude != null && _bingMaps.IsPointDifferent(user.Latitude, user.Longitude, request.Body.Latitude.Value, request.Body.Longitude.Value)) { var distance = await _bingMaps.CalculateDistance(request.Body.Latitude.Value, request.Body.Longitude.Value, _config.CompanyLatitude, _config.CompanyLongitude, cancellationToken); user.ShippingCost = _config.FlatShippingCost * (decimal)distance; } // project and save the entity var updatedEntity = _mapper.Map(request.Body, user); _context.Users.Update(updatedEntity); await _context.SaveChangesAsync(cancellationToken); _logger.LogInformation("Updated user with ID {0}", user.UserId); return(new JsonResult(_mapper.Map <UserProfileDto>(user))); }
public async Task <IActionResult> Handle(EditSupplierCommand request, CancellationToken cancellationToken) { var supplier = await _context.Suppliers.FindAsync(new object[] { request.SupplierId }, cancellationToken); if (supplier == null) { return(new NotFoundObjectResult(new ErrorModel(ErrorMessages.NotFound, ErrorCodes.NotFound))); } // make sure no duplicate name if (request.Body?.Name != null && !string.Equals(supplier.Name, request.Body.Name, StringComparison.InvariantCultureIgnoreCase)) { if (await _context.Suppliers.AnyAsync(x => x.Name.ToLower() == request.Body.Name.ToLower(), cancellationToken)) { return(new ConflictObjectResult(new ErrorModel("Nama sudah digunakan pada supplier sebelumnya.", ErrorCodes.DataDuplicated))); } } // calculate shipping cost if (request.Body?.Latitude != null && request.Body?.Longitude != null && _bingMaps.IsPointDifferent(supplier.Latitude, supplier.Longitude, request.Body.Latitude.Value, request.Body.Longitude.Value)) { var distance = await _bingMaps.CalculateDistance(request.Body.Latitude.Value, request.Body.Longitude.Value, _config.CompanyLatitude, _config.CompanyLongitude, cancellationToken); supplier.ShippingCost = _config.FlatShippingCost * (decimal)distance; } var updatedEntity = _mapper.Map(request.Body, supplier); _context.Suppliers.Update(updatedEntity); await _context.SaveChangesAsync(cancellationToken); _logger.LogInformation("Updated supplier with ID {0}", supplier.SupplierId); return(new JsonResult(supplier)); }