public async Task <ICommandResult <Star> > CreateAsync(Star model) { // Validate if (model == null) { throw new ArgumentNullException(nameof(model)); } // If we have an Id we should perform an update not a create if (model.Id > 0) { throw new ArgumentOutOfRangeException(nameof(model.Id)); } // ThingId should be optional if (model.ThingId < 0) { throw new ArgumentOutOfRangeException(nameof(model.ThingId)); } // We already need a userId if (model.CreatedUserId <= 0) { throw new ArgumentOutOfRangeException(nameof(model.CreatedUserId)); } if (String.IsNullOrWhiteSpace(model.Name)) { throw new ArgumentNullException(nameof(model.Name)); } // Invoke StarCreating subscriptions foreach (var handler in _broker.Pub <Star>(this, "StarCreating")) { model = await handler.Invoke(new Message <Star>(model, this)); } var result = new CommandResult <Star>(); var newStar = await _starStore.CreateAsync(model); if (newStar != null) { // Invoke StarCreated subscriptions foreach (var handler in _broker.Pub <Star>(this, "StarCreated")) { newStar = await handler.Invoke(new Message <Star>(newStar, this)); } // Return success return(result.Success(newStar)); } return(result.Failed(new CommandError("An unknown error occurred whilst attempting to create a follow."))); }