Beispiel #1
0
        private void ApproveCalendarEvent(ApproveCalendarEvent message)
        {
            var calendarEvent = this.EventsById[message.Event.EventId];
            var approvals     = this.ApprovalsByEvent[message.Event.EventId];

            if (!calendarEvent.IsPending)
            {
                var errorMessage = $"Approval of non-pending event {message.Event} is not allowed";
                this.Sender.Tell(new ApproveCalendarEvent.BadRequestResponse(errorMessage));
                return;
            }

            if (approvals.Any(a => a.ApprovedBy == message.ApproverId))
            {
                this.Sender.Tell(Abstractions.Messages.ApproveCalendarEvent.SuccessResponse.Instance);
                return;
            }

            var @event = new UserGrantedCalendarEventApproval
            {
                EventId   = message.Event.EventId,
                TimeStamp = message.Timestamp,
                UserId    = message.ApproverId
            };

            this.OnSuccessfulApprove(@event);

            var newApprovals = this.ApprovalsByEvent[message.Event.EventId];

            this.Persist(@event, ev =>
            {
                this.GetNextApproverId(message.Event, approvals)
                .PipeTo(
                    this.Self,
                    this.Sender,
                    result => new ApproveCalendarEventSuccess(
                        message.Event,
                        newApprovals.ToList(),
                        message.ApproverId,
                        message.Timestamp,
                        result),
                    err => new ApproveCalendarEventError(err));
            });
        }
Beispiel #2
0
        protected virtual void OnSuccessfulApprove(UserGrantedCalendarEventApproval message)
        {
            var approvals = this.ApprovalsByEvent[message.EventId];

            approvals.Add(new Approval(message.TimeStamp, message.UserId));
        }