private async Task <bool> UpdateSortOrdersAsync(UserAccount user, UserAction userAction, UpdateItemAction updateItemAction, Serialization.UserItemDataModel userItemUpdate, Func <Serialization.SortOrders, int> itemSortOrder) { foreach (var sortOrder in updateItemAction.GetSortOrders()) { // ignore the item that was undone/redone if (sortOrder.UserItemId == userItemUpdate.UserItemId) { continue; } var item = await _userItemRepository.GetItemAsync(user, sortOrder.UserItemId); if (item == null) { _logger.LogWarning($"Cannot find item that was moved [{sortOrder.UserItemId}] as part of undo/redo action: {userAction.UserActionId}"); return(false); } var newSortOrder = itemSortOrder(sortOrder); if (item.SortOrder != newSortOrder) { item.LastUpdateDateTime = DateTime.UtcNow; item.SortOrder = newSortOrder; } _logger.LogInformation($"Undo/Redo update - re-applied sort order of item {item.UserItemId}"); } return(true); }
private async Task <bool> HandleAsync(UserAccount user, UserAction userAction, UpdateItemAction updateItemAction, Serialization.UserItemDataModel userItem, bool shouldItemBeActive, Func <Serialization.SortOrders, int> itemSortOrder) { var item = await _userItemRepository.GetItemAsync(user, userItem.UserItemId, !shouldItemBeActive); if (item == null) { _logger.LogWarning($"Cannot find item that was updated: {userItem.UserItemId}"); return(false); } item.LastUpdateDateTime = DateTime.UtcNow; item.UserListId = userItem.UserListId; item.Description = userItem.Description; item.Notes = userItem.Notes; item.NextDueDate = userItem.NextDueDate; item.PostponedUntilDate = userItem.PostponedUntilDate; item.Repeat = userItem.Repeat; item.SortOrder = userItem.SortOrder; item.CompletedDateTime = userItem.CompletedDateTime; item.DeletedDateTime = userItem.DeletedDateTime; _logger.LogInformation($"Undo previous item update: {item.UserItemId}"); return(await UpdateSortOrdersAsync(user, userAction, updateItemAction, userItem, itemSortOrder)); }