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;