use crate::notification_backend::NotificationMessage;
use serde::{Deserialize, Serialize};
use utoipa::ToSchema;
#[derive(Debug, Clone, Serialize, ToSchema)]
pub struct NotificationResponse {
pub status: String,
pub request_id: String,
pub processed_at: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ReplayLimitInfo {
pub max_allowed: usize,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BatchResult {
pub messages: Vec<NotificationMessage>,
pub has_more: bool,
pub last_sequence: Option<u64>,
pub next_sequence: Option<u64>,
pub batch_size: usize,
pub replay_limit: Option<ReplayLimitInfo>,
}
impl BatchResult {
pub fn new(messages: Vec<NotificationMessage>, requested_limit: usize) -> Self {
let batch_size = messages.len();
let has_more = batch_size == requested_limit;
let last_sequence = messages.iter().map(|msg| msg.sequence).max();
let next_sequence = last_sequence.map(|seq| seq + 1);
Self {
messages,
has_more,
last_sequence,
next_sequence,
batch_size,
replay_limit: None, }
}
pub fn empty() -> Self {
Self {
messages: Vec::new(),
has_more: false,
last_sequence: None,
next_sequence: None,
batch_size: 0,
replay_limit: None,
}
}
}