use sea_orm::JsonValue; use sea_orm::entity::prelude::*; #[derive(Clone, Copy, Debug, Default, PartialEq, Eq, EnumIter, DeriveActiveEnum)] #[sea_orm(rs_type = "i16", db_type = "SmallInteger")] pub enum OutboxStatus { #[default] #[sea_orm(num_value = 0)] Pending, #[sea_orm(num_value = 1)] Published, #[sea_orm(num_value = 2)] Discarded, } #[sea_orm::model] #[derive(Clone, Debug, PartialEq, Eq, DeriveEntityModel)] #[sea_orm(table_name = "event_outbox")] pub struct Model { #[sea_orm(primary_key, auto_increment = false)] pub id: Uuid, pub subject: String, pub kind: String, pub ordering_key: String, pub envelope: JsonValue, pub occurred_at: DateTimeUtc, // `seq` 是 DB 拥有的 identity 列,用于单列排序与判头;不映射到实体, // 默认值由 schema_extras.sql 维护。 #[sea_orm(default_value = 0)] pub status: OutboxStatus, pub published_at: Option, pub discarded_at: Option, #[sea_orm(default_expr = "Expr::current_timestamp()")] pub available_at: DateTimeUtc, pub lease_id: Option, pub leased_until: Option, #[sea_orm(default_value = 0)] pub attempts: i32, #[sea_orm(column_type = "Text")] pub last_error: Option, } impl ActiveModelBehavior for ActiveModel {}