1pub mod effector;
2pub mod entities;
3pub mod formatter;
4pub mod llm;
5pub mod migration;
6pub mod plugin;
7pub mod processor;
8pub mod scheduler;
9pub mod utils;
10
11use anyhow::Result;
12use sea_orm::{Database, DatabaseConnection};
13
14#[derive(Clone)]
15pub struct AppState {
16 pub db: DatabaseConnection,
17}
18
19pub use entities::{
22 allowed_channel, conversation, gateway, process_event, process_event_deliveries, rate_limit,
23};
24pub use plugin::AgentGateway;
25
26pub async fn connect(db_path: &str) -> Result<DatabaseConnection> {
29 let url = if db_path == ":memory:" || db_path == "sqlite::memory:" {
30 "sqlite::memory:".to_string()
31 } else {
32 format!("sqlite://{}?mode=rwc", db_path)
33 };
34 let db = Database::connect(&url).await?;
35 Ok(db)
36}
37
38pub async fn connect_and_migrate(db_path: &str) -> Result<DatabaseConnection> {
39 let db = connect(db_path).await?;
40 run_migrations(&db).await?;
41 Ok(db)
42}
43
44pub async fn run_migrations(db: &DatabaseConnection) -> Result<()> {
45 use migration::MigratorTrait;
46 migration::Migrator::up(db, None).await?;
47 Ok(())
48}