Skip to main content

modo_db/
lib.rs

1//! Database integration for the modo framework.
2//!
3//! Provides SeaORM-backed connection pooling, schema synchronisation, versioned
4//! migrations, pagination helpers, and a compile-time entity/migration
5//! registration system built on [`inventory`].
6//!
7//! # Features
8//!
9//! - `sqlite` *(default)* — enables SQLite support via `sqlx-sqlite`.
10//! - `postgres` — enables PostgreSQL support via `sqlx-postgres`.
11//!
12//! # Quick start
13//!
14//! ```rust,ignore
15//! #[modo_db::entity(table = "todos")]
16//! #[entity(timestamps)]
17//! pub struct Todo {
18//!     #[entity(primary_key, auto = "ulid")]
19//!     pub id: String,
20//!     pub title: String,
21//! }
22//!
23//! // Entity in a named group (synced separately)
24//! #[modo_db::entity(table = "analytics", group = "analytics")]
25//! pub struct Event {
26//!     #[entity(primary_key, auto = "ulid")]
27//!     pub id: String,
28//!     pub name: String,
29//! }
30//!
31//! #[modo::main]
32//! async fn main(
33//!     app: modo::app::AppBuilder,
34//!     config: Config,
35//! ) -> Result<(), Box<dyn std::error::Error>> {
36//!     let db = modo_db::connect(&config.database).await?;
37//!     modo_db::sync_and_migrate(&db).await?;           // syncs all entities
38//!     // modo_db::sync_and_migrate_group(&other_db, "analytics").await?;  // syncs only "analytics" group
39//!     app.config(config.core).managed_service(db).run().await
40//! }
41//! ```
42
43pub mod config;
44pub mod connect;
45pub mod entity;
46pub mod extractor;
47pub mod id;
48pub mod migration;
49pub mod pagination;
50pub mod pool;
51pub mod sync;
52
53// Public API
54pub use config::DatabaseConfig;
55pub use connect::connect;
56pub use entity::EntityRegistration;
57pub use extractor::Db;
58pub use id::{generate_nanoid, generate_ulid};
59pub use migration::MigrationRegistration;
60pub use pagination::{
61    CursorParams, CursorResult, PageParams, PageResult, paginate, paginate_cursor,
62};
63pub use pool::DbPool;
64pub use sync::{sync_and_migrate, sync_and_migrate_group};
65
66// Re-export proc macros
67pub use modo_db_macros::{entity, migration};
68
69// Re-exports for macro-generated code
70pub use async_trait;
71pub use chrono;
72pub use inventory;
73pub use sea_orm;