void Apply(EntryShared @event) { foreach (var collaboratorId in @event.CollaboratorIds) { _sharedWith.Add(collaboratorId); } }
private void OnEntryShared(IDbTransaction tx, ICommit commit, EntryShared @event) { RecordActivity(tx, new Models.Activity { UserId = @event.UserId, Type = (int)ActivityType.EntryShared, When = commit.CommitStamp, Link = commit.AggregateId().ToString() }); var author = _userService.GetUser(@event.UserId, tx); var collaborators = @event.CollaboratorIds.Select(collaboratorId => _userService.GetUser(collaboratorId, tx)); foreach (var collaborator in collaborators) { var customText = string.IsNullOrWhiteSpace(@event.Message) ? "" : $"<p>{WebUtility.HtmlEncode(@event.Message)}</p>"; var notification = new Models.EmailNotification { Id = Guid.NewGuid(), UserId = @event.UserId, To = collaborator.Email, When = commit.CommitStamp, Subject = $"{author.FirstName} {author.LastName} has shared an entry with you", HtmlBody = $"<p>{collaborator.FirstName} {collaborator.LastName},</p> <p>Just to let you know {author.FirstName} {author.LastName} has shared an entry in Folium with you.</p>{customText}", ActionLink = $"{_applicationConfiguration.Value.BaseUrl}/entries/{commit.AggregateId()}", ActionTitle = "View Entry" }; CreateEmailNotification(tx, notification); } }
private void OnEntryShared(IDbTransaction tx, ICommit commit, EntryShared @event) { foreach (var collaboratorId in @event.CollaboratorIds) { var sqlParams = new { EntryId = commit.AggregateId(), UserId = collaboratorId }; const string sql = @" INSERT INTO [dbo].[PlacementProjector.EntrySharedWith] ([EntryId] ,[UserId]) SELECT @EntryId ,@UserId WHERE NOT EXISTS(SELECT * FROM [dbo].[PlacementProjector.EntrySharedWith] WHERE EntryId = @EntryId AND UserId = @UserId); UPDATE [PlacementProjector.Entry] SET [Shared] = 1 WHERE [Id] = @EntryId;" ; tx.Connection.Execute(sql, (object)sqlParams, tx); } }