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//! #[modo::main]
24//! async fn main(
25//! app: modo::app::AppBuilder,
26//! config: Config,
27//! ) -> Result<(), Box<dyn std::error::Error>> {
28//! let db = modo_db::connect(&config.database).await?;
29//! modo_db::sync_and_migrate(&db).await?;
30//! app.config(config.core).managed_service(db).run().await
31//! }
32//! ```
33
34pub mod config;
35pub mod connect;
36pub mod entity;
37pub mod extractor;
38pub mod id;
39pub mod migration;
40pub mod pagination;
41pub mod pool;
42pub mod sync;
43
44// Public API
45pub use config::DatabaseConfig;
46pub use connect::connect;
47pub use entity::EntityRegistration;
48pub use extractor::Db;
49pub use id::{generate_nanoid, generate_ulid};
50pub use migration::MigrationRegistration;
51pub use pagination::{
52 CursorParams, CursorResult, PageParams, PageResult, paginate, paginate_cursor,
53};
54pub use pool::DbPool;
55pub use sync::sync_and_migrate;
56
57// Re-export proc macros
58pub use modo_db_macros::{entity, migration};
59
60// Re-exports for macro-generated code
61pub use async_trait;
62pub use chrono;
63pub use inventory;
64pub use sea_orm;