private async Task <T> Update <T>(OrganizationAccountManagerInput input) where T : OrganizationAccountManagerOutput
        {
            _logger.LogTrace(
                GetLogMessage(
                    $@"OrganizationId: {input.OrganizationId}, AccountManagerId: {input.AccountManagerId}"));

            var entity = await Repository
                         .Queryable()
                         .FindById(input.AccountManagerId, input.OrganizationId)
                         .FirstAsync();

            entity.InjectFrom(input);
            entity.Updated = DateTimeOffset.UtcNow;

            Repository.UpdateAsync(entity, true).Wait();

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

            await Task.Run(() =>
            {
                RaiseEvent(new OrganizationAccountManagerUpdatedEvent
                {
                    OrganizationAccountManager = output
                });
            });

            return(output);
        }
        public async Task <IActionResult> UpdateAccountManager([FromRoute] Guid organizationId, [FromRoute] Guid personId,
                                                               [FromBody] OrganizationAccountManagerInput input)
        {
            var result = await _accountManagerService
                         .Update <AgencyOwnerOrganizationAccountManagerOutput>(_agencyOwner, input);

            return(Ok(result));
        }
        public async Task <T> Create <T>(OrganizationAccountManagerInput model) where T : OrganizationAccountManagerOutput
        {
            _logger.LogTrace(
                GetLogMessage($@"OrganizationId: {model.OrganizationId}, AccountManagerId: {model.AccountManagerId}"));

            var entity = await Repository.Queryable().IgnoreQueryFilters()
                         .FirstOrDefaultAsync(x => x.OrganizationId == model.OrganizationId &&
                                              x.AccountManagerId == model.AccountManagerId);

            if (entity != null)
            {
                if (entity.IsDeleted)
                {
                    entity.IsDeleted   = false;
                    entity.UpdatedById = _userInfo.UserId;
                    entity.Updated     = DateTimeOffset.UtcNow;
                    entity.InjectFrom(model);

                    await Repository.UpdateAsync(entity, true);
                }
            }
            else
            {
                entity = new OrganizationAccountManager
                {
                    OrganizationId       = model.OrganizationId,
                    AccountManagerId     = model.AccountManagerId,
                    AccountManagerStream = model.AccountManagerStream,
                    Created     = DateTimeOffset.UtcNow,
                    Updated     = DateTimeOffset.UtcNow,
                    UpdatedById = _userInfo.UserId,
                    CreatedById = _userInfo.UserId
                }.InjectFrom(model) as OrganizationAccountManager;

                await Repository.InsertAsync(entity, true);
            }

            var output = await GetById <T>(model.AccountManagerId, model.OrganizationId);

            await Task.Run(() =>
            {
                RaiseEvent(new OrganizationAccountManagerCreatedEvent
                {
                    OrganizationAccountManager = output
                });
            });

            return(output);
        }
 public Task <T> Update <T>(IOrganizationAccountManager am, OrganizationAccountManagerInput input) where T : OrganizationAccountManagerOutput
 {
     input.OrganizationId = am.OrganizationId;
     return(Update <T>(input));
 }
 public Task <T> Update <T>(IAgencyOwner ao, OrganizationAccountManagerInput input)
     where T : OrganizationAccountManagerOutput
 {
     input.OrganizationId = ao.OrganizationId;
     return(Update <T>(input));
 }
 public Task <T> Create <T>(IAgencyOwner ao, OrganizationAccountManagerInput model)
     where T : OrganizationAccountManagerOutput
 {
     model.OrganizationId = ao.OrganizationId;
     return(Create <T>(model));
 }
 public Task <T> GetById <T>(OrganizationAccountManagerInput input) where T : OrganizationAccountManagerOutput
 {
     return(GetById <T>(input.AccountManagerId, input.OrganizationId));
 }