use async_trait::async_trait;
use crate::document::DocumentId;
use crate::operation::traits::AsVerifiedOperation;
use crate::operation::{OperationId, VerifiedOperation};
use crate::storage_provider::error::OperationStorageError;
#[async_trait]
pub trait OperationStore<StorageOperation: AsVerifiedOperation> {
async fn insert_operation(
&self,
operation: &VerifiedOperation,
document_id: &DocumentId,
) -> Result<(), OperationStorageError>;
async fn get_operation_by_id(
&self,
id: &OperationId,
) -> Result<Option<StorageOperation>, OperationStorageError>;
async fn get_document_by_operation_id(
&self,
id: &OperationId,
) -> Result<Option<DocumentId>, OperationStorageError>;
async fn get_operations_by_document_id(
&self,
id: &DocumentId,
) -> Result<Vec<StorageOperation>, OperationStorageError>;
}