pub use linkrs_wire::batch::{
AddBatchItemsRequest, AddBatchItemsResponse, BatchErrorData, BatchId, BatchItem, BatchItemType,
BatchProgress, BatchResultData, BatchStatus, BatchStatusResponse, BatchType,
CreateBatchRequest, CreateBatchResponse, DeleteEdgeData, DeleteVertexData, EdgeData,
ExecuteBatchResponse, UpdateEdgeData, VertexData,
};
#[derive(Debug, Clone)]
pub struct BatchTask {
pub id: BatchId,
pub space_id: u64,
pub batch_type: BatchType,
pub batch_size: usize,
pub status: BatchStatus,
pub buffered_items: Vec<BatchItem>,
pub progress: BatchProgress,
pub result: Option<BatchResultData>,
pub created_at: chrono::DateTime<chrono::Utc>,
pub updated_at: chrono::DateTime<chrono::Utc>,
}
impl BatchTask {
pub fn new(id: BatchId, space_id: u64, batch_type: BatchType, batch_size: usize) -> Self {
let now = chrono::Utc::now();
Self {
id,
space_id,
batch_type,
batch_size,
status: BatchStatus::Created,
buffered_items: Vec::new(),
progress: BatchProgress {
total: 0,
processed: 0,
succeeded: 0,
failed: 0,
buffered: 0,
},
result: None,
created_at: now,
updated_at: now,
}
}
pub fn update_status(&mut self, status: BatchStatus) {
self.status = status;
self.updated_at = chrono::Utc::now();
}
pub fn add_items(&mut self, items: Vec<BatchItem>) -> usize {
let count = items.len();
self.buffered_items.extend(items);
self.progress.buffered = self.buffered_items.len();
self.progress.total += count;
self.updated_at = chrono::Utc::now();
count
}
pub fn take_buffered_items(&mut self) -> Vec<BatchItem> {
let items = std::mem::take(&mut self.buffered_items);
self.progress.buffered = 0;
self.updated_at = chrono::Utc::now();
items
}
pub fn update_progress(&mut self, succeeded: usize, failed: usize) {
self.progress.succeeded += succeeded;
self.progress.failed += failed;
self.progress.processed += succeeded + failed;
self.updated_at = chrono::Utc::now();
}
pub fn set_result(&mut self, result: BatchResultData) {
self.result = Some(result);
self.updated_at = chrono::Utc::now();
}
}