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)); }); }
protected virtual void OnSuccessfulApprove(UserGrantedCalendarEventApproval message) { var approvals = this.ApprovalsByEvent[message.EventId]; approvals.Add(new Approval(message.TimeStamp, message.UserId)); }