pub trait BotRepository: Send + Sync {
Show 15 methods
// Required methods
fn create<'life0, 'life1, 'async_trait>(
&'life0 self,
bot: &'life1 Bot,
) -> Pin<Box<dyn Future<Output = Result<(), RepositoryError>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn get_by_id<'life0, 'async_trait>(
&'life0 self,
id: Uuid,
) -> Pin<Box<dyn Future<Output = Result<Bot, RepositoryError>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn get_by_id_with_token<'life0, 'life1, 'async_trait>(
&'life0 self,
id: Uuid,
token: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Bot, RepositoryError>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn list_by_account<'life0, 'async_trait>(
&'life0 self,
account_id: Uuid,
) -> Pin<Box<dyn Future<Output = Result<Vec<Bot>, RepositoryError>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn list_by_account_paginated<'life0, 'async_trait>(
&'life0 self,
account_id: Uuid,
limit: i64,
offset: i64,
) -> Pin<Box<dyn Future<Output = Result<Vec<Bot>, RepositoryError>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn count_by_account<'life0, 'async_trait>(
&'life0 self,
account_id: Uuid,
) -> Pin<Box<dyn Future<Output = Result<i64, RepositoryError>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn update_status<'life0, 'async_trait>(
&'life0 self,
id: Uuid,
status: BotStatus,
) -> Pin<Box<dyn Future<Output = Result<(), RepositoryError>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn update_droplet<'life0, 'async_trait>(
&'life0 self,
bot_id: Uuid,
droplet_id: Option<i64>,
) -> Pin<Box<dyn Future<Output = Result<(), RepositoryError>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn update_config_version<'life0, 'async_trait>(
&'life0 self,
bot_id: Uuid,
desired: Option<Uuid>,
applied: Option<Uuid>,
) -> Pin<Box<dyn Future<Output = Result<(), RepositoryError>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn update_heartbeat<'life0, 'async_trait>(
&'life0 self,
bot_id: Uuid,
) -> Pin<Box<dyn Future<Output = Result<(), RepositoryError>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn update_registration_token<'life0, 'life1, 'async_trait>(
&'life0 self,
bot_id: Uuid,
token: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<(), RepositoryError>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn delete<'life0, 'async_trait>(
&'life0 self,
id: Uuid,
) -> Pin<Box<dyn Future<Output = Result<(), RepositoryError>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn increment_bot_counter<'life0, 'async_trait>(
&'life0 self,
account_id: Uuid,
) -> Pin<Box<dyn Future<Output = Result<(bool, i32, i32), RepositoryError>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn decrement_bot_counter<'life0, 'async_trait>(
&'life0 self,
account_id: Uuid,
) -> Pin<Box<dyn Future<Output = Result<(), RepositoryError>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn list_stale_bots<'life0, 'async_trait>(
&'life0 self,
threshold: DateTime<Utc>,
) -> Pin<Box<dyn Future<Output = Result<Vec<Bot>, RepositoryError>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
}Required Methods§
fn create<'life0, 'life1, 'async_trait>(
&'life0 self,
bot: &'life1 Bot,
) -> Pin<Box<dyn Future<Output = Result<(), RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn get_by_id<'life0, 'async_trait>(
&'life0 self,
id: Uuid,
) -> Pin<Box<dyn Future<Output = Result<Bot, RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn get_by_id_with_token<'life0, 'life1, 'async_trait>(
&'life0 self,
id: Uuid,
token: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Bot, RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn list_by_account<'life0, 'async_trait>(
&'life0 self,
account_id: Uuid,
) -> Pin<Box<dyn Future<Output = Result<Vec<Bot>, RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Sourcefn list_by_account_paginated<'life0, 'async_trait>(
&'life0 self,
account_id: Uuid,
limit: i64,
offset: i64,
) -> Pin<Box<dyn Future<Output = Result<Vec<Bot>, RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn list_by_account_paginated<'life0, 'async_trait>(
&'life0 self,
account_id: Uuid,
limit: i64,
offset: i64,
) -> Pin<Box<dyn Future<Output = Result<Vec<Bot>, RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
PERF-002: Paginated list of bots for account Use limit/offset for pagination instead of loading all bots
Sourcefn count_by_account<'life0, 'async_trait>(
&'life0 self,
account_id: Uuid,
) -> Pin<Box<dyn Future<Output = Result<i64, RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn count_by_account<'life0, 'async_trait>(
&'life0 self,
account_id: Uuid,
) -> Pin<Box<dyn Future<Output = Result<i64, RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
PERF-001: Count bots for account without fetching all rows Use SQL COUNT(*) instead of list_by_account().len()
fn update_status<'life0, 'async_trait>(
&'life0 self,
id: Uuid,
status: BotStatus,
) -> Pin<Box<dyn Future<Output = Result<(), RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn update_droplet<'life0, 'async_trait>(
&'life0 self,
bot_id: Uuid,
droplet_id: Option<i64>,
) -> Pin<Box<dyn Future<Output = Result<(), RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn update_config_version<'life0, 'async_trait>(
&'life0 self,
bot_id: Uuid,
desired: Option<Uuid>,
applied: Option<Uuid>,
) -> Pin<Box<dyn Future<Output = Result<(), RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn update_heartbeat<'life0, 'async_trait>(
&'life0 self,
bot_id: Uuid,
) -> Pin<Box<dyn Future<Output = Result<(), RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn update_registration_token<'life0, 'life1, 'async_trait>(
&'life0 self,
bot_id: Uuid,
token: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<(), RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn delete<'life0, 'async_trait>(
&'life0 self,
id: Uuid,
) -> Pin<Box<dyn Future<Output = Result<(), RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Sourcefn increment_bot_counter<'life0, 'async_trait>(
&'life0 self,
account_id: Uuid,
) -> Pin<Box<dyn Future<Output = Result<(bool, i32, i32), RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn increment_bot_counter<'life0, 'async_trait>(
&'life0 self,
account_id: Uuid,
) -> Pin<Box<dyn Future<Output = Result<(bool, i32, i32), RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Atomically increment bot counter for account, returning (success, current_count, max_count) CRIT-002: Prevents race conditions in account limit checking
Sourcefn decrement_bot_counter<'life0, 'async_trait>(
&'life0 self,
account_id: Uuid,
) -> Pin<Box<dyn Future<Output = Result<(), RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn decrement_bot_counter<'life0, 'async_trait>(
&'life0 self,
account_id: Uuid,
) -> Pin<Box<dyn Future<Output = Result<(), RepositoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Decrement bot counter when bot is destroyed