private void UpdateDatabaseMarker(Marker updateModel, Data.Models.Marker markerToUpdate) { markerToUpdate.Description = updateModel.Description; markerToUpdate.Latitude = (double)updateModel.Latitude; markerToUpdate.Longitude = (double)updateModel.Longitude; markerToUpdate.ModificationDate = DateTimeOffset.UtcNow; markerToUpdate.Name = updateModel.Name; markerToUpdate.Type = (Data.Models.MarkerType)((int)updateModel.Type); markerToUpdate.StartDate = updateModel.StartDate; markerToUpdate.EndDate = updateModel.EndDate; markerToUpdate.IsPrivate = updateModel.IsPrivate; var existingImages = markerToUpdate.Images.Where(img => updateModel.Images.Any(umi => umi == img.Image)).ToList(); var imagesToRemove = markerToUpdate.Images.Where(img => existingImages.All(ei => ei.Id != img.Id)).ToList(); var imagesToCreate = updateModel.Images.Where(img => existingImages.All(ei => ei.Image != img)).ToList(); // Remove old images imagesToRemove.ForEach(img => _imageService.DeleteImage(img.Image)); _markerRepository.DeleteMarkerImages(imagesToRemove); // Create new images var imagesToAppend = imagesToCreate.Select(img => new Data.Models.MarkerImage { Image = _imageService.SaveImageAsync(img, Guid.NewGuid().ToString()).Result, CreateDate = DateTimeOffset.UtcNow }).ToList(); markerToUpdate.Images.AddRange(imagesToAppend); // Remove invitations that are not in the model var invitationsToRemove = markerToUpdate.MarkerInvitations .Where(i => updateModel.MarkerInvitations.All(mi => mi.InvitedUserUserName != i.InvitedUser.UserName)) .ToList(); _markerRepository.DeleteMarkerInvitations(invitationsToRemove); // Add invitations that are new var invatationsModelsToAdd = updateModel.MarkerInvitations .Where(i => markerToUpdate.MarkerInvitations.All(mi => mi.InvitedUser.UserName != i.InvitedUserUserName)) .ToList(); var inviataionsToAdd = CreateMarkerInvitations(markerToUpdate, invatationsModelsToAdd); _markerRepository.AddMarkerInvitations(inviataionsToAdd); }
private List <Data.Models.MarkerInvitation> CreateMarkerInvitations(Data.Models.Marker dbMarker, List <MarkerInvitation> markerInvitations) { var invitedUsers = _markerRepository.GetUsersDictionary(markerInvitations.Select(mi => mi.InvitedUserUserName).ToList()); var result = new List <Data.Models.MarkerInvitation>(); foreach (var markerInvitation in markerInvitations) { result.Add(new Data.Models.MarkerInvitation { InvitationStatus = Data.Models.InvitationStatuses.PendingAcceptance, Marker = dbMarker, MarkerId = dbMarker.Id, InvitedUser = invitedUsers[markerInvitation.InvitedUserUserName], InvitedUserId = invitedUsers[markerInvitation.InvitedUserUserName].Id }); } return(result); }