示例#1
0
        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.")));
        }