use derive_builder::Builder; use diesel::prelude::*; use serde::{Deserialize, Serialize}; use crate::{Drip, Transaction}; #[derive( Builder, Clone, Queryable, Identifiable, Selectable, Debug, PartialEq, Serialize, Deserialize, Insertable, )] #[diesel(table_name = crate::schema::buckets)] pub struct Bucket { pub id: i32, pub balance: Option, pub balance_cache_key: Option, #[diesel(column_name = "bucket_group")] pub group: String, pub name: String, } impl Bucket { pub fn is_empty(&self, drips: &[Drip], transactions: &[Transaction]) -> bool { drips.iter().all(|drip| drip.bucket_id != self.id) && transactions .iter() .all(|t| t.bucket_id.is_none_or(|id| id != self.id)) } }