🎨 (seaorm): Mejora API y documentación

- Reescribe la documentación con ejemplos completos, guía rápida y
  tablas de referencia.
- Renombra `connection()` a `dbconn()`.
- Añade `execute()` para SQL en crudo y corrige `fetch_all`/`fetch_one`
  para aceptar `&Q` en lugar de `&mut Q`.
- Cambia `futures::executor::block_on` por `tokio::task::block_in_place`
  para compatibilidad con el *runtime* multi-hilo.
- Los fallos de migración al arrancar provocan `panic!` en lugar de log
  de error silencioso.
- Actualiza `#[pagetop::test]` para usar `flavor = "multi_thread"`,
  alineándolo con `#[pagetop::main]` y con las extensiones que usan
  SeaORM.
This commit is contained in:
Manuel Cillero 2026-06-09 19:22:34 +02:00
parent dfc1bdbc4c
commit 830602b24e
9 changed files with 602 additions and 178 deletions

View file

@ -45,6 +45,9 @@ opcional; si se omite se usa el puerto predeterminado del motor.
```rust,ignore
use pagetop::prelude::*;
use pagetop_seaorm::install_migrations;
mod migration;
struct MyApp;
@ -66,9 +69,10 @@ async fn main() -> std::io::Result<()> {
}
```
**Escribe las migraciones** usando la API de SeaORM:
**Escribe las migraciones** usando la API de [`migration`]:
```rust,no_run
// src/migration/m20240101_000001_create_users.rs
use pagetop_seaorm::migration::*;
pub struct Migration;
@ -81,6 +85,7 @@ impl MigrationTrait for Migration {
table_auto(Users::Table)
.col(pk_auto(Users::Id))
.col(string_uniq(Users::Email))
.col(string(Users::Name))
.to_owned(),
)
.await
@ -92,6 +97,52 @@ enum Users {
Table,
Id,
Email,
Name,
}
```
**Define las entidades** en un módulo `entity/` usando las macros de derivación de [`db`]:
```rust,no_run
// src/entity/user.rs
use pagetop_seaorm::db::*;
#[derive(Clone, Debug, DeriveEntityModel, PartialEq)]
#[sea_orm(table_name = "users")]
pub struct Model {
#[sea_orm(primary_key)]
pub id: i32,
pub email: String,
pub name: String,
}
#[derive(Clone, Copy, Debug, DeriveRelation, EnumIter)]
pub enum Relation {}
impl ActiveModelBehavior for ActiveModel {}
```
**Opera con la base de datos** pasando la conexión [`db::dbconn()`] a cada consulta:
```rust,ignore
use pagetop_seaorm::db::*;
// Asumiendo que existe un módulo `user` con la entidad definida arriba.
async fn example() -> Result<(), DbErr> {
// Listar todos los registros:
let users = user::Entity::find().all(dbconn()).await?;
// Buscar por clave primaria:
let found = user::Entity::find_by_id(1).one(dbconn()).await?;
// Insertar un registro:
let new_user = user::ActiveModel {
email: Set("alice@example.com".to_owned()),
name: Set("Alice".to_owned()),
..Default::default()
};
user::Entity::insert(new_user).exec(dbconn()).await?;
Ok(())
}
```
@ -125,7 +176,7 @@ extensión. Los ficheros adaptados del original son:
| `manager.rs` | Adapta *features* propias |
| `migrator.rs` | Adapta *features* propias y omite gestión de errores del CLI |
| `prelude.rs` | Absorbido en `migration.rs`, descarta exportaciones del CLI |
| `schema.rs` | Integra con ajustes, original de [loco](https://github.com/loco-rs/loco) |
| `schema.rs` | Integra con ajustes, adaptado de [loco](https://github.com/loco-rs/loco) |
| `seaql_migrations.rs` | Integración completa |