public async Task <UserOrganizationApplication> Execute(GetApplication query, CancellationToken cancellationToken = new CancellationToken()) { if (query == null) { throw new ArgumentNullException("query"); } if (string.IsNullOrWhiteSpace(query.UserId)) { throw new ArgumentException("UserId is required"); } if (string.IsNullOrWhiteSpace(query.ApplicationId)) { throw new ArgumentException("ApplicationId is required"); } CloudTable userAppIndexTable = _tableProvider.GetTable(_settings.UserApplicationIndexTableName); TableQuery <UserApplicationIndexEntity> userAppQuery = new TableQuery <UserApplicationIndexEntity>() .Where(TableQuery.CombineFilters(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, query.UserId), TableOperators.And, TableQuery.GenerateFilterCondition("RowKey", QueryComparisons.Equal, query.ApplicationId))).Take(1); IEnumerable <UserApplicationIndexEntity> userApps = await userAppIndexTable.ExecuteQueryAsync(userAppQuery, cancellationToken); UserApplicationIndexEntity userApp = userApps.SingleOrDefault(); if (userApp == null) { throw new ApplicationNotFoundException(query.UserId, query.ApplicationId); } return(userApp); }
public async Task <UserOrganizationApplication> Execute(CreateApplication command, CancellationToken cancellationToken = new CancellationToken()) { GetOrganization query = new GetOrganizationQuery(command.UserId, command.OrganizationId); Organization organization = await _organizationQueryHandler.Execute(query, cancellationToken); CloudTable appTable = _tableProvider.GetTable(_settings.ApplicationTableName); var appEntity = new ApplicationEntity(command.ApplicationName, command.Timestamp); await appTable.ExecuteAsync(TableOperation.Insert(appEntity), cancellationToken); var indexEntity = new OrganizationApplicationIndexEntity(organization.Id, organization.Name, appEntity.Id, command.ApplicationName, command.Timestamp); CloudTable indexTable = _tableProvider.GetTable(_settings.OrganizationApplicationIndexTableName); await indexTable.ExecuteAsync(TableOperation.Insert(indexEntity), cancellationToken); var userIndexEntity = new UserApplicationIndexEntity(command.UserId, organization.Id, organization.Name, appEntity.Id, command.ApplicationName, command.Timestamp); CloudTable userIndexTable = _tableProvider.GetTable(_settings.UserApplicationIndexTableName); await userIndexTable.ExecuteAsync(TableOperation.Insert(userIndexEntity), cancellationToken); return(userIndexEntity); }