using System;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace ZeroLevel.Services.PartitionStorage
{
///
/// Provides read/reindex operations in catalog partition
///
/// Key type
/// Type of one input value
/// Type of records aggregate
public interface IStorePartitionAccessor
: IStorePartitionBase
{
///
/// Rebuilds indexes for data in a partition
///
Task RebuildIndex();
///
/// Search in a partition for a specified key
///
Task> Find(TKey key);
///
/// Search in a partition for a specified keys
///
IAsyncEnumerable> Find(IEnumerable keys);
///
/// Iterating over all recorded data
///
IAsyncEnumerable> Iterate();
///
/// Iterating over all recorded data and return keys only
///
IAsyncEnumerable IterateKeys();
///
/// Iterating over all recorded data of the file with the specified key
///
IAsyncEnumerable> IterateKeyBacket(TKey key);
///
/// Deleting the specified key and associated data
///
/// Key
/// true - automatically rebuild the index of the file from which data was deleted (default = false)
Task RemoveKey(TKey key, bool autoReindex = false);
///
/// Deleting the specified keys and associated data
///
/// Keys
/// true - automatically rebuild the index of the file from which data was deleted (default = true)
Task RemoveKeys(IEnumerable keys, bool autoReindex = true);
///
/// Delete all keys with data except the specified key
///
/// Key
/// true - automatically rebuild the index of the file from which data was deleted (default = true)
Task RemoveAllExceptKey(TKey key, bool autoReindex = true);
///
/// Delete all keys with data other than the specified ones
///
/// Keys
/// true - automatically rebuild the index of the file from which data was deleted (default = true)
Task RemoveAllExceptKeys(IEnumerable keys, bool autoReindex = true);
}
}