WIP: Añade nueva extensión para dar soporte a bases de datos #12
3 changed files with 119 additions and 21 deletions
|
|
@ -85,9 +85,10 @@ use pagetop::prelude::*;
|
||||||
|
|
||||||
include_locales!(LOCALES_ALINER);
|
include_locales!(LOCALES_ALINER);
|
||||||
|
|
||||||
/// Implementa el tema para usar en pruebas que muestran el esquema de páginas HTML.
|
/// Implementa el tema.
|
||||||
///
|
///
|
||||||
/// Define un tema mínimo útil para:
|
/// Define un tema mínimo que muestra esquemáticamente la composición de las páginas HTML; útil
|
||||||
|
/// para:
|
||||||
///
|
///
|
||||||
/// - Comprobar el funcionamiento de temas, plantillas y regiones.
|
/// - Comprobar el funcionamiento de temas, plantillas y regiones.
|
||||||
/// - Verificar integración de componentes y composiciones (*layouts*) sin estilos complejos.
|
/// - Verificar integración de componentes y composiciones (*layouts*) sin estilos complejos.
|
||||||
|
|
|
||||||
|
|
@ -16,8 +16,7 @@
|
||||||
//! Uso:
|
//! Uso:
|
||||||
//!
|
//!
|
||||||
//! ```rust
|
//! ```rust
|
||||||
//! use pagetop_seaorm::config;
|
//! # use pagetop_seaorm::config;
|
||||||
//!
|
|
||||||
//! assert_eq!(config::SETTINGS.database.db_host, "localhost");
|
//! assert_eq!(config::SETTINGS.database.db_host, "localhost");
|
||||||
//! ```
|
//! ```
|
||||||
//!
|
//!
|
||||||
|
|
@ -30,12 +29,12 @@ use serde::Deserialize;
|
||||||
|
|
||||||
include_config!(SETTINGS: Settings => [
|
include_config!(SETTINGS: Settings => [
|
||||||
// [database]
|
// [database]
|
||||||
"database.db_type" => "",
|
"database.db_type" => "",
|
||||||
"database.db_name" => "",
|
"database.db_name" => "",
|
||||||
"database.db_user" => "",
|
"database.db_user" => "",
|
||||||
"database.db_pass" => "",
|
"database.db_pass" => "",
|
||||||
"database.db_host" => "localhost",
|
"database.db_host" => "localhost",
|
||||||
"database.db_port" => 0,
|
"database.db_port" => 0,
|
||||||
"database.max_pool_size" => 5,
|
"database.max_pool_size" => 5,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
|
@ -49,24 +48,17 @@ pub struct Settings {
|
||||||
/// Sección `[database]` de la configuración. Forma parte de [`Settings`].
|
/// Sección `[database]` de la configuración. Forma parte de [`Settings`].
|
||||||
pub struct Database {
|
pub struct Database {
|
||||||
/// Tipo de base de datos: *"mysql"*, *"postgres"* ó *"sqlite"*.
|
/// Tipo de base de datos: *"mysql"*, *"postgres"* ó *"sqlite"*.
|
||||||
/// Por defecto: *""*.
|
|
||||||
pub db_type: String,
|
pub db_type: String,
|
||||||
/// Nombre (para mysql/postgres) o referencia (para sqlite) de la base de datos.
|
/// Nombre (para mysql/postgres) o referencia (para sqlite) de la base de datos.
|
||||||
/// Por defecto: *""*.
|
|
||||||
pub db_name: String,
|
pub db_name: String,
|
||||||
/// Usuario de conexión a la base de datos (para mysql/postgres).
|
/// Usuario de conexión a la base de datos (para mysql/postgres).
|
||||||
/// Por defecto: *""*.
|
|
||||||
pub db_user: String,
|
pub db_user: String,
|
||||||
/// Contraseña para la conexión a la base de datos (para mysql/postgres).
|
/// Contraseña para la conexión a la base de datos (para mysql/postgres).
|
||||||
/// Por defecto: *""*.
|
|
||||||
pub db_pass: String,
|
pub db_pass: String,
|
||||||
/// Servidor de conexión a la base de datos (para mysql/postgres).
|
/// Servidor de conexión a la base de datos (para mysql/postgres).
|
||||||
/// Por defecto: *"localhost"*.
|
|
||||||
pub db_host: String,
|
pub db_host: String,
|
||||||
/// Puerto de conexión a la base de datos, normalmente 3306 (para mysql) ó 5432 (para postgres).
|
/// Puerto de conexión a la base de datos, normalmente 3306 (para mysql) ó 5432 (para postgres).
|
||||||
/// Por defecto: *0*.
|
|
||||||
pub db_port: u16,
|
pub db_port: u16,
|
||||||
/// Número máximo de conexiones habilitadas.
|
/// Número máximo de conexiones habilitadas.
|
||||||
/// Por defecto: *5*.
|
|
||||||
pub max_pool_size: u32,
|
pub max_pool_size: u32,
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,17 +1,122 @@
|
||||||
|
/*!
|
||||||
|
<div align="center">
|
||||||
|
|
||||||
|
<h1>PageTop SeaORM</h1>
|
||||||
|
|
||||||
|
<p>Proporciona a <strong>PageTop</strong> acceso basado en <a href="https://www.sea-ql.org/SeaORM">SeaORM</a> a bases de datos relacionales.</p>
|
||||||
|
|
||||||
|
[](https://docs.rs/pagetop-seaorm)
|
||||||
|
[](https://crates.io/crates/pagetop-seaorm)
|
||||||
|
[](https://crates.io/crates/pagetop-seaorm)
|
||||||
|
[](https://git.cillero.es/manuelcillero/pagetop/src/branch/main/extensions/pagetop-seaorm#licencia)
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
## 🧭 Sobre PageTop
|
||||||
|
|
||||||
|
[PageTop](https://docs.rs/pagetop) es un entorno de desarrollo que reivindica la esencia de la web
|
||||||
|
clásica para crear soluciones web SSR (*renderizadas en el servidor*) modulares, extensibles y
|
||||||
|
configurables, basadas en HTML, CSS y JavaScript.
|
||||||
|
|
||||||
|
|
||||||
|
## ⚡️ Guía rápida
|
||||||
|
|
||||||
|
**Añade la dependencia** a tu `Cargo.toml` activando el motor de base de datos que necesites:
|
||||||
|
|
||||||
|
```toml
|
||||||
|
[dependencies]
|
||||||
|
pagetop-seaorm = { version = "...", features = ["sqlite"] }
|
||||||
|
```
|
||||||
|
|
||||||
|
Las *features* disponibles son `mysql`, `postgres` y `sqlite`.
|
||||||
|
|
||||||
|
**Configura la conexión** en el archivo de configuración de la aplicación:
|
||||||
|
|
||||||
|
```toml
|
||||||
|
[database]
|
||||||
|
db_type = "sqlite"
|
||||||
|
db_name = "my_app.db"
|
||||||
|
max_pool_size = 5
|
||||||
|
```
|
||||||
|
|
||||||
|
Para MySQL o PostgreSQL añade también `db_user`, `db_pass`, `db_host` y `db_port`.
|
||||||
|
|
||||||
|
**Declara la extensión** en tu aplicación o en la extensión que la requiera:
|
||||||
|
|
||||||
|
```rust,no_run
|
||||||
use pagetop::prelude::*;
|
use pagetop::prelude::*;
|
||||||
|
|
||||||
|
struct MyApp;
|
||||||
|
|
||||||
|
impl Extension for MyApp {
|
||||||
|
fn dependencies(&self) -> Vec<ExtensionRef> {
|
||||||
|
vec![
|
||||||
|
&pagetop_seaorm::SeaORM,
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
fn initialize(&self) {
|
||||||
|
install_migrations!(m20240101_000001_create_users_table);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[pagetop::main]
|
||||||
|
async fn main() -> std::io::Result<()> {
|
||||||
|
Application::prepare(&MyApp).run()?.await
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Escribe las migraciones** usando la API de SeaORM:
|
||||||
|
|
||||||
|
```rust,no_run
|
||||||
|
use pagetop_seaorm::prelude::*;
|
||||||
|
|
||||||
|
#[derive(DeriveMigrationName)]
|
||||||
|
pub struct Migration;
|
||||||
|
|
||||||
|
#[async_trait::async_trait]
|
||||||
|
impl MigrationTrait for Migration {
|
||||||
|
async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> {
|
||||||
|
manager
|
||||||
|
.create_table(
|
||||||
|
table_auto(Users::Table)
|
||||||
|
.col(pk_auto(Users::Id))
|
||||||
|
.col(string_uniq(Users::Email))
|
||||||
|
.to_owned(),
|
||||||
|
)
|
||||||
|
.await
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(DeriveIden)]
|
||||||
|
enum Users {
|
||||||
|
Table,
|
||||||
|
Id,
|
||||||
|
Email,
|
||||||
|
}
|
||||||
|
```
|
||||||
|
*/
|
||||||
|
|
||||||
|
#![doc(
|
||||||
|
html_favicon_url = "https://git.cillero.es/manuelcillero/pagetop/raw/branch/main/static/favicon.ico"
|
||||||
|
)]
|
||||||
|
|
||||||
|
use pagetop::prelude::*;
|
||||||
|
|
||||||
|
include_locales!(LOCALES_SEAORM);
|
||||||
|
|
||||||
pub mod config;
|
pub mod config;
|
||||||
|
|
||||||
pub mod db;
|
pub mod db;
|
||||||
|
|
||||||
/// Preludio de la extensión.
|
/// *Prelude* de la extensión.
|
||||||
pub mod prelude {
|
pub mod prelude {
|
||||||
|
pub use crate::config::*;
|
||||||
pub use crate::db::*;
|
pub use crate::db::*;
|
||||||
pub use crate::install_migrations;
|
pub use crate::install_migrations;
|
||||||
}
|
}
|
||||||
|
|
||||||
include_locales!(LOCALES_SEAORM);
|
/// Implementa la extensión.
|
||||||
|
|
||||||
/// Extensión que integra SeaORM como framework de base de datos para aplicaciones PageTop.
|
|
||||||
pub struct SeaORM;
|
pub struct SeaORM;
|
||||||
|
|
||||||
impl Extension for SeaORM {
|
impl Extension for SeaORM {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue