Example #1
0
        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);
        }
Example #2
0
        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);
        }