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;
46mod error;
47pub mod extractor;
48mod helpers;
49pub mod hooks;
50pub mod id;
51pub mod migration;
52pub mod pagination;
53pub mod pool;
54pub mod query;
55mod record;
56pub mod sync;
57
58// Public API
59pub use config::DatabaseConfig;
60pub use connect::connect;
61pub use entity::EntityRegistration;
62#[doc(hidden)]
63pub use error::db_err_to_error;
64pub use extractor::Db;
65#[doc(hidden)]
66pub use helpers::{do_delete, do_insert, do_update};
67pub use hooks::DefaultHooks;
68pub use id::{generate_nanoid, generate_ulid};
69pub use migration::MigrationRegistration;
70pub use pagination::{
71    CursorParams, CursorResult, PageParams, PageResult, paginate, paginate_cursor,
72};
73pub use pool::DbPool;
74pub use query::{EntityDeleteMany, EntityQuery, EntityUpdateMany};
75pub use record::Record;
76pub use sync::{sync_and_migrate, sync_and_migrate_group};
77
78// Re-export proc macros
79pub use modo_db_macros::{entity, migration};
80
81// Re-exports for macro-generated code
82pub use chrono;
83pub use inventory;
84pub use sea_orm;