public void Handle(DiscussionOpened @event) { using (var bucket = Persistence.Couchbase.Cluster.OpenBucket()) { var link = bucket.GetDocument<Link>(@event.LinkId); var user = bucket.GetDocument<User>(@event.EmailOfInitiator); // Use email if participant isn't registered within the system var nameOfInitiator = (user != null) ? user.Content.Name : @event.EmailOfInitiator; var namesOfParticipants = new List<string>(); foreach (var emailOfParticipant in @event.EmailsOfParticipants) { var participant = bucket.GetDocument<User>(emailOfParticipant); var nameOfParticipant = (participant != null) ? participant.Content.Name : emailOfParticipant; namesOfParticipants.Add(nameOfParticipant); } var discussion = new Discussion(@event.Topic, nameOfInitiator, namesOfParticipants, link.Content.Url); var document = new Document<Discussion> { Id = @event.DiscussionId.ToString(), Content = discussion }; bucket.Insert(document); } }
private void Apply(DiscussionOpened discussion) { Id = new DiscussionId(discussion.DiscussionId); _topic = new Topic(discussion.Topic); _participants = discussion.EmailsOfParticipants.Select(x => new Participant(new EmailAddress(x))).ToList(); _linkId = new LinkId(discussion.LinkId); _posts = new List<Post>(); }
public void Handle(DiscussionOpened @event) { var query = new LinkByIdQuery(@event.LinkId); var queryHandler = new NotificationQueryHandler(); var link = queryHandler.Handle(query); var sendNotification = new SendLinkSharedNotification(@event.EmailOfInitiator, @event.EmailsOfParticipants, @event.Topic, @event.DiscussionId, link.Url); _bus.Send(sendNotification); }