62 lines
1.5 KiB
Markdown
62 lines
1.5 KiB
Markdown
# sqlx-record
|
|
|
|
Entity CRUD and change tracking for SQL databases with SQLx.
|
|
|
|
A Rust library that provides derive macros for automatic CRUD operations and comprehensive audit trails for SQL entities. Track who changed what, when, and why with actor, session, and change set metadata.
|
|
|
|
## Features
|
|
|
|
- `#[derive(Entity)]` generates complete CRUD operations
|
|
- Type-safe query building with composable filters
|
|
- Change tracking with WHO, WHAT, WHEN, and WHERE metadata
|
|
- Version fields for optimistic locking
|
|
- Diff detection between model states
|
|
- CLI tool for managing audit tables
|
|
- Supports MySQL, PostgreSQL, and SQLite
|
|
|
|
## Installation
|
|
|
|
Add to your `Cargo.toml`:
|
|
|
|
```toml
|
|
[dependencies]
|
|
sqlx-record = { version = "0.1", features = ["mysql", "derive"] }
|
|
# or for PostgreSQL:
|
|
# sqlx-record = { version = "0.1", features = ["postgres", "derive"] }
|
|
# or for SQLite:
|
|
# sqlx-record = { version = "0.1", features = ["sqlite", "derive"] }
|
|
```
|
|
|
|
## Usage
|
|
|
|
```rust
|
|
use sqlx_record::prelude::*;
|
|
use sqlx::FromRow;
|
|
|
|
#[derive(Entity, FromRow)]
|
|
#[table_name = "users"]
|
|
struct User {
|
|
#[primary_key]
|
|
id: Uuid,
|
|
name: String,
|
|
email: String,
|
|
#[version]
|
|
version: u32,
|
|
}
|
|
|
|
// Insert
|
|
let id = user.insert(&pool).await?;
|
|
|
|
// Query with filters
|
|
let users = User::find(&pool, filters![("active", true)], None).await?;
|
|
|
|
// Update with diff tracking
|
|
let mut form = User::update_form().with_name("New Name".into());
|
|
let diff = form.db_diff(&id, &pool).await?;
|
|
user.update(&pool, form).await?;
|
|
```
|
|
|
|
## License
|
|
|
|
MIT
|