public IActionResult Share(Guid listId) { ShoppingList list = lists.Get(GetUser(), listId); if (list == null) { Message("Can't find list to share"); return(RedirectToRoute(Names.ListIndex, Names.ListHash)); } ListShareVM vm = new ListShareVM { ListName = list.Name, ListID = list.ID, Friends = new List <ListShareFriendVM>(), }; foreach (User friend in lists.GetFriends(GetUser())) { vm.Friends.Add(new ListShareFriendVM { IsShared = list.Users.Any(u => u.UserId == friend.ID), UserID = friend.ID, UserName = friend.Name, }); } return(View(vm)); }
public async Task <IActionResult> Share(Guid listId, ListShareVM vm) { if (!ModelState.IsValid) { return(View(vm)); } ShoppingList list = lists.Get(GetUser(), listId); if (list == null) { Message("Can't find list to share"); return(RedirectToRoute(Names.ListIndex, Names.ListHash)); } User current = GetUser(); IEnumerable <User> friends = lists.GetFriends(current); foreach (ListShareFriendVM userVM in vm.Friends) { User u = lists.GetUser(userVM.UserID); if (u == null) { ModelState.AddModelError(nameof(userVM.UserID), "Unknown user ID"); continue; } if (!friends.Contains(u)) { ModelState.AddModelError(nameof(userVM.UserName), "Can only share lists with friends"); continue; } } if (!ModelState.IsValid) { return(View(vm)); } foreach (ListShareFriendVM userVM in vm.Friends) { User u = lists.GetUser(userVM.UserID); await lists.ShareList(list, u, userVM.IsShared); } if (list.Users.Count > 1) { Message("List {0} shared with {1}", list.Name, string.Join(", ", list.Users.Where(ul => ul.User != current).Select(ul => ul.User.Name))); } else { Message("List {0} not shared with anyone", list.Name); } return(RedirectToRoute(Names.ListDetails, new { listId = list.ID }, Names.ItemsHash)); }