private async Task <T> CreateInternal <T>(MarketerInput input)
            where T : MarketerOutput
        {
            _logger.LogTrace(GetLogMessage($@"Person Id: {input.PersonId}"));

            var marketer = await Repository.Queryable().Where(x => x.Id == input.PersonId)
                           .FirstOrDefaultAsync();

            if (marketer == null)
            {
                marketer = new Marketer {
                    Id = input.PersonId
                };

                marketer.InjectFrom(input);

                await Repository.UpdateAsync(marketer, true);

                var output = await GetById <T>(input.PersonId);

                await Task.Run(() =>
                {
                    RaiseEvent(new MarketerCreatedEvent <T>
                    {
                        Marketer = output
                    });
                });

                return(output);
            }

            throw new ApplicationException("Person is already a marketer");
        }
 public Task <T> Create <T>(MarketerInput input)
     where T : MarketerOutput
 {
     return(CreateInternal <T>(input));
 }