public Task StoreCategory(Category category, CancellationToken cancellationToken) { Ensure.Any.IsNotNull(category, nameof(category)); var adapter = new CategoryAdapter(category); return(InsertOrReplaceEntity(TableName, adapter, cancellationToken)); }
public async Task <Category> GetCategory(CategoryGroup group, string name, CancellationToken cancellationToken) { var partitionKey = CategoryAdapter.BuildPartitionKey(group); var rowKey = CategoryAdapter.BuildRowKey(name); var table = GetTable(TableName); var operation = TableOperation.Retrieve <CategoryAdapter>(partitionKey, rowKey); var result = await table.ExecuteAsync(operation, null, null, cancellationToken).ConfigureAwait(false); var adapter = result.Result as CategoryAdapter; return(adapter?.Value); }
public async Task CreateCategory(CategoryGroup group, string name, CancellationToken cancellationToken) { Ensure.String.IsNotNullOrWhiteSpace(name, nameof(name)); var category = new Category { Group = group, Name = name }; var adapter = new CategoryAdapter(category); // We can't overwrite the existing one because the existing one might have been reviewed by an admin // with a public cache that is out of date such that a user editing a profile is trying to create a new category // This was InsertOrReplace then we would lose the reviewed category information var operation = TableOperation.Insert(adapter); try { await ExecuteWithCreateTable(TableName, operation, cancellationToken).ConfigureAwait(false); } catch (StorageException ex) { if (ex.RequestInformation.HttpStatusCode == 409) { // This category already exists // A user has tried to create a category that already exists // We might have hit this because the API cache was out of date // such that the category was already written to storage, but the API didn't think it was there // The outcome is that the category exists either way which is what we want return; } throw; } }