From 404739a3fde6927dda5bbcbb148de6ee7f5c2d1e Mon Sep 17 00:00:00 2001 From: Manuel Cillero Date: Sun, 20 Sep 2026 18:33:37 +0200 Subject: [PATCH] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Importa=20PageTop=20usando?= =?UTF-8?q?=20el=20`prelude`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Cargo.lock | 1 - .../src/component/admin_frame.rs | 1 - .../pagetop-admin/src/entity/setting.rs | 5 +- extensions/pagetop-htmx/src/hx.rs | 6 +- extensions/pagetop-menu/Cargo.toml | 1 - .../src/component/menu_breadcrumb.rs | 1 - extensions/pagetop-menu/src/entity/menu.rs | 3 +- .../pagetop-menu/src/entity/menu_item.rs | 3 +- extensions/pagetop-menu/src/repo.rs | 4 +- extensions/pagetop-menu/src/tree.rs | 1 - extensions/pagetop-seaorm/src/db.rs | 4 +- .../pagetop-seaorm/src/migration/migrator.rs | 55 ++++++++++--------- .../src/migration/seaql_migrations.rs | 4 +- extensions/pagetop-user/src/account.rs | 8 +-- extensions/pagetop-user/src/auth.rs | 3 +- .../src/component/admin/role_table.rs | 13 +++-- .../src/component/admin/user_table.rs | 13 +++-- extensions/pagetop-user/src/demo.rs | 3 +- extensions/pagetop-user/src/entity/role.rs | 3 +- .../src/entity/role_permission.rs | 3 +- extensions/pagetop-user/src/entity/session.rs | 3 +- extensions/pagetop-user/src/entity/user.rs | 3 +- .../pagetop-user/src/entity/user_token.rs | 3 +- .../pagetop-user/src/handlers/account.rs | 15 +++-- .../pagetop-user/src/handlers/admin/roles.rs | 11 ++-- .../pagetop-user/src/handlers/admin/users.rs | 15 +++-- extensions/pagetop-user/src/handlers/auth.rs | 1 - extensions/pagetop-user/src/middleware.rs | 9 +-- .../pagetop-user/src/service/role_admin.rs | 3 +- .../pagetop-user/src/service/user_admin.rs | 4 +- extensions/pagetop-user/src/token.rs | 6 +- 31 files changed, 96 insertions(+), 112 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index dad698e5..6a7d89f5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1875,7 +1875,6 @@ dependencies = [ name = "pagetop-menu" version = "0.1.0" dependencies = [ - "chrono", "pagetop", "pagetop-seaorm", "serde", diff --git a/extensions/pagetop-admin/src/component/admin_frame.rs b/extensions/pagetop-admin/src/component/admin_frame.rs index 380beb47..0be5c5d8 100644 --- a/extensions/pagetop-admin/src/component/admin_frame.rs +++ b/extensions/pagetop-admin/src/component/admin_frame.rs @@ -1,4 +1,3 @@ -use pagetop::base::component::breadcrumb; use pagetop::prelude::*; use crate::LOCALES_ADMIN; diff --git a/extensions/pagetop-admin/src/entity/setting.rs b/extensions/pagetop-admin/src/entity/setting.rs index 37b0329a..95b6c4c6 100644 --- a/extensions/pagetop-admin/src/entity/setting.rs +++ b/extensions/pagetop-admin/src/entity/setting.rs @@ -1,7 +1,6 @@ +use pagetop::prelude::*; use pagetop_seaorm::db::*; -use pagetop::datetime::NaiveDateTime; - /// Entidad SeaORM para la tabla `settings`. #[derive(Clone, Debug, PartialEq, DeriveEntityModel)] #[sea_orm(table_name = "settings")] @@ -14,7 +13,7 @@ pub struct Model { pub updated_by: Option, } -#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +#[derive(Clone, Copy, Debug, DeriveRelation, EnumIter)] pub enum Relation {} impl ActiveModelBehavior for ActiveModel {} diff --git a/extensions/pagetop-htmx/src/hx.rs b/extensions/pagetop-htmx/src/hx.rs index 9db67530..824fa457 100644 --- a/extensions/pagetop-htmx/src/hx.rs +++ b/extensions/pagetop-htmx/src/hx.rs @@ -7,7 +7,7 @@ //! # Atributos estáticos en `html!` //! //! Para valores conocidos en tiempo de compilación, los atributos `hx-*` pueden escribirse -//! directamente en la macro `html!` sin necesidad de [`Props`](pagetop::html::Props): +//! directamente en la macro `html!` sin necesidad de [`Props`]: //! //! ```rust,no_run //! use pagetop::prelude::*; @@ -17,10 +17,10 @@ //! }; //! ``` //! -//! # Atributos dinámicos con [`Props`](pagetop::html::Props) +//! # Atributos dinámicos con [`Props`] //! //! Cuando los valores se construyen en tiempo de ejecución o se inyectan desde una extensión, -//! puedes usar [`Props`](pagetop::html::Props) combinado con las constantes de este módulo: +//! puedes usar [`Props`] combinado con las constantes de este módulo: //! //! ```rust,no_run //! # use pagetop::prelude::*; diff --git a/extensions/pagetop-menu/Cargo.toml b/extensions/pagetop-menu/Cargo.toml index bd8d676d..d58e29ba 100644 --- a/extensions/pagetop-menu/Cargo.toml +++ b/extensions/pagetop-menu/Cargo.toml @@ -14,6 +14,5 @@ authors.workspace = true [dependencies] pagetop.workspace = true pagetop-seaorm.workspace = true -chrono.workspace = true serde.workspace = true thiserror.workspace = true diff --git a/extensions/pagetop-menu/src/component/menu_breadcrumb.rs b/extensions/pagetop-menu/src/component/menu_breadcrumb.rs index c049883c..3b6d9d61 100644 --- a/extensions/pagetop-menu/src/component/menu_breadcrumb.rs +++ b/extensions/pagetop-menu/src/component/menu_breadcrumb.rs @@ -1,4 +1,3 @@ -use pagetop::base::component::breadcrumb; use pagetop::prelude::*; use crate::tree::{MenuKey, MenuNode, TreeOptions, build_tree, try_resolve_menu_url}; diff --git a/extensions/pagetop-menu/src/entity/menu.rs b/extensions/pagetop-menu/src/entity/menu.rs index 3206e900..eaf2220a 100644 --- a/extensions/pagetop-menu/src/entity/menu.rs +++ b/extensions/pagetop-menu/src/entity/menu.rs @@ -1,7 +1,6 @@ +use pagetop::prelude::*; use pagetop_seaorm::db::*; -use chrono::NaiveDateTime; - #[derive(Clone, Debug, DeriveEntityModel, PartialEq)] #[sea_orm(table_name = "menus")] pub struct Model { diff --git a/extensions/pagetop-menu/src/entity/menu_item.rs b/extensions/pagetop-menu/src/entity/menu_item.rs index bcdc0238..4e22ecf4 100644 --- a/extensions/pagetop-menu/src/entity/menu_item.rs +++ b/extensions/pagetop-menu/src/entity/menu_item.rs @@ -1,7 +1,6 @@ +use pagetop::prelude::*; use pagetop_seaorm::db::*; -use chrono::NaiveDateTime; - #[derive(Clone, Debug, DeriveEntityModel, PartialEq)] #[sea_orm(table_name = "menu_items")] pub struct Model { diff --git a/extensions/pagetop-menu/src/repo.rs b/extensions/pagetop-menu/src/repo.rs index 4db2cea5..578b1798 100644 --- a/extensions/pagetop-menu/src/repo.rs +++ b/extensions/pagetop-menu/src/repo.rs @@ -1,8 +1,6 @@ //! Operaciones de base de datos para menús e ítems de menú. -use chrono::Utc; - -use pagetop::locale::Locale; +use pagetop::prelude::*; use pagetop_seaorm::db::{ ActiveModelTrait, ActiveValue::NotSet, ColumnTrait, EntityTrait, QueryFilter, Set, dbconn, }; diff --git a/extensions/pagetop-menu/src/tree.rs b/extensions/pagetop-menu/src/tree.rs index 0df23a53..2d35d032 100644 --- a/extensions/pagetop-menu/src/tree.rs +++ b/extensions/pagetop-menu/src/tree.rs @@ -2,7 +2,6 @@ use std::collections::HashMap; -use pagetop::locale::{Locale, RequestLocale}; use pagetop::prelude::*; use crate::cache::FlatMenu; diff --git a/extensions/pagetop-seaorm/src/db.rs b/extensions/pagetop-seaorm/src/db.rs index 8d136672..57f6f8ee 100644 --- a/extensions/pagetop-seaorm/src/db.rs +++ b/extensions/pagetop-seaorm/src/db.rs @@ -49,7 +49,7 @@ //! pub name: String, //! } //! -//! #[derive(Clone, Copy, Debug, EnumIter, DeriveRelation)] +//! #[derive(Clone, Copy, Debug, DeriveRelation, EnumIter)] //! pub enum Relation {} //! //! // `DeriveEntityModel` genera también `ActiveModel`, `Entity`, `Column` y `PrimaryKey`. @@ -468,7 +468,7 @@ impl Paginated { /// pub email: String, /// } /// -/// #[derive(Clone, Copy, Debug, EnumIter, DeriveRelation)] +/// #[derive(Clone, Copy, Debug, DeriveRelation, EnumIter)] /// pub enum Relation {} /// /// impl ActiveModelBehavior for ActiveModel {} diff --git a/extensions/pagetop-seaorm/src/migration/migrator.rs b/extensions/pagetop-seaorm/src/migration/migrator.rs index b9167549..a0b8580f 100644 --- a/extensions/pagetop-seaorm/src/migration/migrator.rs +++ b/extensions/pagetop-seaorm/src/migration/migrator.rs @@ -4,7 +4,7 @@ use std::future::Future; use std::pin::Pin; use std::time::SystemTime; -use pagetop::trace::info; +use pagetop::prelude::*; use sea_orm::sea_query::{ self, Alias, Expr, ExprTrait, ForeignKey, IntoIden, Order, Query, SelectStatement, SimpleExpr, @@ -182,10 +182,10 @@ pub trait MigratorTrait: Send { { Self::install(db).await?; - info!("Checking migration status"); + trace::info!("Checking migration status"); for Migration { migration, status } in Self::get_migration_with_status(db).await? { - info!("Migration '{}'... {}", migration.name(), status); + trace::info!("Migration '{}'... {}", migration.name(), status); } Ok(()) @@ -284,34 +284,35 @@ where // Temporarily disable the foreign key check if db_backend == DbBackend::Sqlite { - info!("Disabling foreign key check"); + trace::info!("Disabling foreign key check"); db.execute(Statement::from_string( db_backend, "PRAGMA foreign_keys = OFF".to_owned(), )) .await?; - info!("Foreign key check disabled"); + trace::info!("Foreign key check disabled"); } // Drop all foreign keys if db_backend == DbBackend::MySql { - info!("Dropping all foreign keys"); + trace::info!("Dropping all foreign keys"); let stmt = query_mysql_foreign_keys(db); let rows = db.query_all(db_backend.build(&stmt)).await?; for row in rows.into_iter() { let constraint_name: String = row.try_get("", "CONSTRAINT_NAME")?; let table_name: String = row.try_get("", "TABLE_NAME")?; - info!( + trace::info!( "Dropping foreign key '{}' from table '{}'", - constraint_name, table_name + constraint_name, + table_name ); let mut stmt = ForeignKey::drop(); stmt.table(Alias::new(table_name.as_str())) .name(constraint_name.as_str()); db.execute(db_backend.build(&stmt)).await?; - info!("Foreign key '{}' has been dropped", constraint_name); + trace::info!("Foreign key '{}' has been dropped", constraint_name); } - info!("All foreign keys dropped"); + trace::info!("All foreign keys dropped"); } // Drop all tables @@ -319,39 +320,39 @@ where let rows = db.query_all(db_backend.build(&stmt)).await?; for row in rows.into_iter() { let table_name: String = row.try_get("", "table_name")?; - info!("Dropping table '{}'", table_name); + trace::info!("Dropping table '{}'", table_name); let mut stmt = Table::drop(); stmt.table(Alias::new(table_name.as_str())) .if_exists() .cascade(); db.execute(db_backend.build(&stmt)).await?; - info!("Table '{}' has been dropped", table_name); + trace::info!("Table '{}' has been dropped", table_name); } // Drop all types if db_backend == DbBackend::Postgres { - info!("Dropping all types"); + trace::info!("Dropping all types"); let stmt = query_pg_types(db); let rows = db.query_all(db_backend.build(&stmt)).await?; for row in rows { let type_name: String = row.try_get("", "typname")?; - info!("Dropping type '{}'", type_name); + trace::info!("Dropping type '{}'", type_name); let mut stmt = Type::drop(); stmt.name(Alias::new(&type_name)); db.execute(db_backend.build(&stmt)).await?; - info!("Type '{}' has been dropped", type_name); + trace::info!("Type '{}' has been dropped", type_name); } } // Restore the foreign key check if db_backend == DbBackend::Sqlite { - info!("Restoring foreign key check"); + trace::info!("Restoring foreign key check"); db.execute(Statement::from_string( db_backend, "PRAGMA foreign_keys = ON".to_owned(), )) .await?; - info!("Foreign key check restored"); + trace::info!("Foreign key check restored"); } // Reapply all migrations @@ -367,15 +368,15 @@ where M::install(db).await?; /* if let Some(steps) = steps { - info!("Applying {} pending migrations", steps); + trace::info!("Applying {} pending migrations", steps); } else { - info!("Applying all pending migrations"); + trace::info!("Applying all pending migrations"); } */ let migrations = M::get_pending_migrations(db).await?.into_iter(); /* if migrations.len() == 0 { - info!("No pending migrations"); + trace::info!("No pending migrations"); } */ for Migration { migration, .. } in migrations { @@ -385,9 +386,9 @@ where } *steps -= 1; } - info!("Applying migration '{}'", migration.name()); + trace::info!("Applying migration '{}'", migration.name()); migration.up(manager).await?; - info!("Migration '{}' has been applied", migration.name()); + trace::info!("Migration '{}' has been applied", migration.name()); let now = SystemTime::now() .duration_since(SystemTime::UNIX_EPOCH) .expect("SystemTime before UNIX EPOCH!"); @@ -412,14 +413,14 @@ where M::install(db).await?; if let Some(steps) = steps { - info!("Rolling back {} applied migrations", steps); + trace::info!("Rolling back {} applied migrations", steps); } else { - info!("Rolling back all applied migrations"); + trace::info!("Rolling back all applied migrations"); } let migrations = M::get_applied_migrations(db).await?.into_iter().rev(); if migrations.len() == 0 { - info!("No applied migrations"); + trace::info!("No applied migrations"); } for Migration { migration, .. } in migrations { if let Some(steps) = steps.as_mut() { @@ -428,9 +429,9 @@ where } *steps -= 1; } - info!("Rolling back migration '{}'", migration.name()); + trace::info!("Rolling back migration '{}'", migration.name()); migration.down(manager).await?; - info!("Migration '{}' has been rollbacked", migration.name()); + trace::info!("Migration '{}' has been rollbacked", migration.name()); seaql_migrations::Entity::delete_many() .filter(Expr::col(seaql_migrations::Column::Version).eq(migration.name())) .table_name(M::migration_table_name()) diff --git a/extensions/pagetop-seaorm/src/migration/seaql_migrations.rs b/extensions/pagetop-seaorm/src/migration/seaql_migrations.rs index 51da9300..57c7832c 100644 --- a/extensions/pagetop-seaorm/src/migration/seaql_migrations.rs +++ b/extensions/pagetop-seaorm/src/migration/seaql_migrations.rs @@ -1,6 +1,6 @@ use sea_orm::entity::prelude::*; -#[derive(Clone, Debug, PartialEq, Eq, DeriveEntityModel)] +#[derive(Clone, Debug, DeriveEntityModel, Eq, PartialEq)] // One should override the name of migration table via `MigratorTrait::migration_table_name` method #[sea_orm(table_name = "seaql_migrations")] pub struct Model { @@ -9,7 +9,7 @@ pub struct Model { pub applied_at: i64, } -#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +#[derive(Clone, Copy, Debug, DeriveRelation, EnumIter)] pub enum Relation {} impl ActiveModelBehavior for ActiveModel {} diff --git a/extensions/pagetop-user/src/account.rs b/extensions/pagetop-user/src/account.rs index 106c7977..54342077 100644 --- a/extensions/pagetop-user/src/account.rs +++ b/extensions/pagetop-user/src/account.rs @@ -2,7 +2,7 @@ use std::collections::HashSet; -use pagetop::auth::PermissionRef; +use pagetop::prelude::*; // **< UserStatus >********************************************************************************* @@ -56,9 +56,9 @@ impl PermissionSet { /// Datos ricos del usuario autenticado inyectados por el middleware de sesión. /// -/// Se almacena en las extensiones de la petición HTTP durante la fase de middleware y se -/// accede desde los handlers o desde handlers de [`CheckPermission`](pagetop::auth::CheckPermission) -/// mediante [`HttpRequest::extension::()`](pagetop::web::HttpRequest::extension). +/// Se almacena en las extensiones de la petición HTTP durante la fase de middleware y se accede +/// desde los handlers o desde handlers de [`CheckPermission`] mediante +/// [`HttpRequest::extension::()`](pagetop::web::HttpRequest::extension). #[derive(Clone, Debug)] pub struct Account { pub id: i32, diff --git a/extensions/pagetop-user/src/auth.rs b/extensions/pagetop-user/src/auth.rs index 91801ab9..ece3800f 100644 --- a/extensions/pagetop-user/src/auth.rs +++ b/extensions/pagetop-user/src/auth.rs @@ -1,7 +1,6 @@ //! Lógica de autenticación: login, logout, registro, semilla inicial. -use pagetop::datetime::{Duration, NaiveDateTime, Utc}; - +use pagetop::prelude::*; use pagetop_seaorm::db::{ ActiveModelTrait, ActiveValue, ColumnTrait, Condition, EntityTrait, PaginatorTrait, QueryFilter, Set, dbconn, diff --git a/extensions/pagetop-user/src/component/admin/role_table.rs b/extensions/pagetop-user/src/component/admin/role_table.rs index cc298c67..231273d8 100644 --- a/extensions/pagetop-user/src/component/admin/role_table.rs +++ b/extensions/pagetop-user/src/component/admin/role_table.rs @@ -1,8 +1,6 @@ //! Tabla de roles: cabeceras ordenables y filas con acciones. use pagetop::prelude::*; - -use pagetop::base::component::table::{Column, Row}; use pagetop_htmx::hx; use pagetop_htmx::hx_table::sort_link; @@ -93,7 +91,7 @@ impl Component for RoleTable { }; table.alter_row( - Row::new() + table::Row::new() .with_cell(role.machine_name.as_str()) .with_cell(label_cell(role, &waypoint)) .with_cell(Html::with(move |_cx| { @@ -188,7 +186,12 @@ impl RoleTable { // Construye la cabecera ordenable de una columna: el enlace ya funciona sin HTMX (navega con // una petición normal); `pagetop_htmx::hx_table::sort_link()` añade aparte los atributos `hx-*` // para que la tabla se actualice sin recargar la página cuando la extensión esté disponible. - fn sort_column(&self, cx: &Context, field: RoleSortField, label_key: &'static str) -> Column { + fn sort_column( + &self, + cx: &Context, + field: RoleSortField, + label_key: &'static str, + ) -> table::Column { let is_active = *self.sort() == field; let active = is_active.then_some(*self.dir()); let next_dir = SortDir::next_for(active); @@ -197,7 +200,7 @@ impl RoleTable { .alter_param("sort", field.as_str()) .alter_param("dir", next_dir); - Column::new(Lc::t(label_key, &LOCALES_USER)).with_sort(sort_link( + table::Column::new(Lc::t(label_key, &LOCALES_USER)).with_sort(sort_link( route, "#role-table-wrapper", active, diff --git a/extensions/pagetop-user/src/component/admin/user_table.rs b/extensions/pagetop-user/src/component/admin/user_table.rs index 56ab070d..603dcf98 100644 --- a/extensions/pagetop-user/src/component/admin/user_table.rs +++ b/extensions/pagetop-user/src/component/admin/user_table.rs @@ -1,8 +1,6 @@ //! Tabla de usuarios: cabeceras ordenables, filas y paginación embebida. use pagetop::prelude::*; - -use pagetop::base::component::table::{Column, Row}; use pagetop_htmx::hx; use pagetop_htmx::hx_table::sort_link; @@ -75,7 +73,7 @@ impl Component for UserTable { let status = user.status; table.alter_row( - Row::new() + table::Row::new() .with_cell(username_cell(user, &waypoint)) .with_cell(user.email.as_str()) .with_cell(user.display_name.as_deref().unwrap_or("-")) @@ -163,7 +161,12 @@ impl UserTable { // Construye la cabecera ordenable de una columna: el enlace ya funciona sin HTMX (navega con // una petición normal); `pagetop_htmx::hx_table::sort_link()` añade aparte los atributos `hx-*` // para que la tabla se actualice sin recargar la página cuando la extensión esté disponible. - fn sort_column(&self, cx: &Context, field: UserSortField, label_key: &'static str) -> Column { + fn sort_column( + &self, + cx: &Context, + field: UserSortField, + label_key: &'static str, + ) -> table::Column { let is_active = *self.sort() == field; let active = is_active.then_some(*self.dir()); let next_dir = SortDir::next_for(active); @@ -176,7 +179,7 @@ impl UserTable { .alter_param("sort", field.as_str()) .alter_param("dir", next_dir); - Column::new(Lc::t(label_key, &LOCALES_USER)).with_sort(sort_link( + table::Column::new(Lc::t(label_key, &LOCALES_USER)).with_sort(sort_link( route, "#user-table-wrapper", active, diff --git a/extensions/pagetop-user/src/demo.rs b/extensions/pagetop-user/src/demo.rs index d8e65d0e..dd9935e7 100644 --- a/extensions/pagetop-user/src/demo.rs +++ b/extensions/pagetop-user/src/demo.rs @@ -4,8 +4,7 @@ //! `Extension::initialize()`, después de `auth::seed_initial_data()`. Si el rol //! `demo_role_01` ya existe, la siembra se omite para no duplicar datos en reinicios. -use pagetop::datetime::Utc; - +use pagetop::prelude::*; use pagetop_seaorm::db::{ActiveValue, ColumnTrait, EntityTrait, QueryFilter, Set, dbconn}; use crate::account::UserStatus; diff --git a/extensions/pagetop-user/src/entity/role.rs b/extensions/pagetop-user/src/entity/role.rs index 6432a108..fed14e52 100644 --- a/extensions/pagetop-user/src/entity/role.rs +++ b/extensions/pagetop-user/src/entity/role.rs @@ -1,7 +1,6 @@ +use pagetop::prelude::*; use pagetop_seaorm::db::*; -use pagetop::datetime::NaiveDateTime; - #[derive(Clone, Debug, DeriveEntityModel, PartialEq)] #[sea_orm(table_name = "roles")] pub struct Model { diff --git a/extensions/pagetop-user/src/entity/role_permission.rs b/extensions/pagetop-user/src/entity/role_permission.rs index 67427dd9..6ed42368 100644 --- a/extensions/pagetop-user/src/entity/role_permission.rs +++ b/extensions/pagetop-user/src/entity/role_permission.rs @@ -1,7 +1,6 @@ +use pagetop::prelude::*; use pagetop_seaorm::db::*; -use pagetop::datetime::NaiveDateTime; - #[derive(Clone, Debug, DeriveEntityModel, PartialEq)] #[sea_orm(table_name = "role_permissions")] pub struct Model { diff --git a/extensions/pagetop-user/src/entity/session.rs b/extensions/pagetop-user/src/entity/session.rs index 32ad7f08..81614174 100644 --- a/extensions/pagetop-user/src/entity/session.rs +++ b/extensions/pagetop-user/src/entity/session.rs @@ -1,7 +1,6 @@ +use pagetop::prelude::*; use pagetop_seaorm::db::*; -use pagetop::datetime::NaiveDateTime; - #[derive(Clone, Debug, DeriveEntityModel, PartialEq)] #[sea_orm(table_name = "sessions")] pub struct Model { diff --git a/extensions/pagetop-user/src/entity/user.rs b/extensions/pagetop-user/src/entity/user.rs index 5656a490..d2023057 100644 --- a/extensions/pagetop-user/src/entity/user.rs +++ b/extensions/pagetop-user/src/entity/user.rs @@ -1,7 +1,6 @@ +use pagetop::prelude::*; use pagetop_seaorm::db::*; -use pagetop::datetime::NaiveDateTime; - #[derive(Clone, Debug, DeriveEntityModel, PartialEq)] #[sea_orm(table_name = "users")] pub struct Model { diff --git a/extensions/pagetop-user/src/entity/user_token.rs b/extensions/pagetop-user/src/entity/user_token.rs index d497d979..de25dc6a 100644 --- a/extensions/pagetop-user/src/entity/user_token.rs +++ b/extensions/pagetop-user/src/entity/user_token.rs @@ -1,7 +1,6 @@ +use pagetop::prelude::*; use pagetop_seaorm::db::*; -use pagetop::datetime::NaiveDateTime; - #[derive(Clone, Debug, DeriveEntityModel, PartialEq)] #[sea_orm(table_name = "user_tokens")] pub struct Model { diff --git a/extensions/pagetop-user/src/handlers/account.rs b/extensions/pagetop-user/src/handlers/account.rs index f38964e9..dac6f536 100644 --- a/extensions/pagetop-user/src/handlers/account.rs +++ b/extensions/pagetop-user/src/handlers/account.rs @@ -1,6 +1,5 @@ //! Handler HTTP para el perfil del propio usuario autenticado. -use pagetop::base::component::table::Row; use pagetop::prelude::*; use crate::account::UserStatus; @@ -47,32 +46,32 @@ async fn profile_details(user: &user::Model, status: UserStatus, cx: &mut Contex let mut table = Table::new() .with_prop(PropsOp::add_classes("user-admin-table")) .with_row( - Row::new() + table::Row::new() .with_cell(Lc::t("field-username-admin", &LOCALES_USER)) .with_cell(user.username.as_str()), ) .with_row( - Row::new() + table::Row::new() .with_cell(Lc::t("field-email", &LOCALES_USER)) .with_cell(user.email.as_str()), ) .with_row( - Row::new() + table::Row::new() .with_cell(Lc::t("field-display-name", &LOCALES_USER)) .with_cell(user.display_name.as_deref().unwrap_or("-")), ) .with_row( - Row::new() + table::Row::new() .with_cell(Lc::t("field-language", &LOCALES_USER)) .with_cell(user.language.as_deref().unwrap_or("-")), ) .with_row( - Row::new() + table::Row::new() .with_cell(Lc::t("field-timezone", &LOCALES_USER)) .with_cell(user.timezone.as_deref().unwrap_or("-")), ) .with_row( - Row::new() + table::Row::new() .with_cell(Lc::t("col-status", &LOCALES_USER)) .with_cell(Lc::t(status_key(status), &LOCALES_USER)), ); @@ -83,7 +82,7 @@ async fn profile_details(user: &user::Model, status: UserStatus, cx: &mut Contex .render(cx) .await; table = table.with_row( - Row::new() + table::Row::new() .with_cell("") .with_cell(Html::with(move |_| badge.clone())), ); diff --git a/extensions/pagetop-user/src/handlers/admin/roles.rs b/extensions/pagetop-user/src/handlers/admin/roles.rs index 4c63a698..290712ff 100644 --- a/extensions/pagetop-user/src/handlers/admin/roles.rs +++ b/extensions/pagetop-user/src/handlers/admin/roles.rs @@ -2,7 +2,6 @@ use serde::Deserialize; -use pagetop::base::component::table::Row; use pagetop::prelude::*; use pagetop_htmx::prelude::*; @@ -313,22 +312,22 @@ async fn role_view_details(role: &role::Model, cx: &mut Context) -> Block { let mut table = Table::new() .with_prop(PropsOp::add_classes("user-admin-table")) .with_row( - Row::new() + table::Row::new() .with_cell(Lc::t("field-machine-name", &LOCALES_USER)) .with_cell(role.machine_name.as_str()), ) .with_row( - Row::new() + table::Row::new() .with_cell(Lc::t("field-label", &LOCALES_USER)) .with_cell(role.label.as_str()), ) .with_row( - Row::new() + table::Row::new() .with_cell(Lc::t("field-description", &LOCALES_USER)) .with_cell(role.description.as_deref().unwrap_or("-")), ) .with_row( - Row::new() + table::Row::new() .with_cell(Lc::t("field-weight", &LOCALES_USER)) .with_cell(role.weight.to_string()), ); @@ -339,7 +338,7 @@ async fn role_view_details(role: &role::Model, cx: &mut Context) -> Block { .render(cx) .await; table = table.with_row( - Row::new() + table::Row::new() .with_cell("") .with_cell(Html::with(move |_| badge.clone())), ); diff --git a/extensions/pagetop-user/src/handlers/admin/users.rs b/extensions/pagetop-user/src/handlers/admin/users.rs index 40900feb..f3b833df 100644 --- a/extensions/pagetop-user/src/handlers/admin/users.rs +++ b/extensions/pagetop-user/src/handlers/admin/users.rs @@ -2,7 +2,6 @@ use serde::Deserialize; -use pagetop::base::component::table::Row; use pagetop::prelude::*; use pagetop_htmx::prelude::*; @@ -517,32 +516,32 @@ async fn user_view_details(user: &user::Model, status: UserStatus, cx: &mut Cont let mut table = Table::new() .with_prop(PropsOp::add_classes("user-admin-table")) .with_row( - Row::new() + table::Row::new() .with_cell(Lc::t("field-username-admin", &LOCALES_USER)) .with_cell(user.username.as_str()), ) .with_row( - Row::new() + table::Row::new() .with_cell(Lc::t("field-email", &LOCALES_USER)) .with_cell(user.email.as_str()), ) .with_row( - Row::new() + table::Row::new() .with_cell(Lc::t("field-display-name", &LOCALES_USER)) .with_cell(user.display_name.as_deref().unwrap_or("-")), ) .with_row( - Row::new() + table::Row::new() .with_cell(Lc::t("field-language", &LOCALES_USER)) .with_cell(user.language.as_deref().unwrap_or("-")), ) .with_row( - Row::new() + table::Row::new() .with_cell(Lc::t("field-timezone", &LOCALES_USER)) .with_cell(user.timezone.as_deref().unwrap_or("-")), ) .with_row( - Row::new() + table::Row::new() .with_cell(Lc::t("col-status", &LOCALES_USER)) .with_cell(Lc::t(status_key(status), &LOCALES_USER)), ); @@ -553,7 +552,7 @@ async fn user_view_details(user: &user::Model, status: UserStatus, cx: &mut Cont .render(cx) .await; table = table.with_row( - Row::new() + table::Row::new() .with_cell("") .with_cell(Html::with(move |_| badge.clone())), ); diff --git a/extensions/pagetop-user/src/handlers/auth.rs b/extensions/pagetop-user/src/handlers/auth.rs index 7186eab4..351880cf 100644 --- a/extensions/pagetop-user/src/handlers/auth.rs +++ b/extensions/pagetop-user/src/handlers/auth.rs @@ -2,7 +2,6 @@ use serde::Deserialize; -use pagetop::auth::CurrentUser; use pagetop::prelude::*; use crate::auth; diff --git a/extensions/pagetop-user/src/middleware.rs b/extensions/pagetop-user/src/middleware.rs index 1ebd09c8..d72dff07 100644 --- a/extensions/pagetop-user/src/middleware.rs +++ b/extensions/pagetop-user/src/middleware.rs @@ -5,9 +5,7 @@ //! si el usuario está autenticado, el [`crate::account::Account`] con sus datos ricos en las //! extensiones de la petición HTTP. -use pagetop::auth::PermissionRef; -use pagetop::web::middleware::Next; -use pagetop::web::{Request, Response}; +use pagetop::prelude::*; use crate::account::Account; use crate::session; @@ -17,7 +15,10 @@ use crate::session; /// /// - Siempre inserta [`pagetop::auth::CurrentUser`] (anónimo o autenticado). /// - Si hay sesión activa, inserta también el [`Account`] con roles y permisos. -pub(crate) async fn session_middleware(mut req: Request, next: Next) -> Response { +pub(crate) async fn session_middleware( + mut req: web::Request, + next: web::middleware::Next, +) -> Response { let (current_user, maybe_account) = session::resolve_session(req.headers()).await; req.extensions_mut().insert(current_user); diff --git a/extensions/pagetop-user/src/service/role_admin.rs b/extensions/pagetop-user/src/service/role_admin.rs index 5b96bf9a..f7bd3223 100644 --- a/extensions/pagetop-user/src/service/role_admin.rs +++ b/extensions/pagetop-user/src/service/role_admin.rs @@ -2,8 +2,7 @@ use std::collections::HashMap; -use pagetop::datetime::Utc; -use pagetop::html::SortDir; +use pagetop::prelude::*; use pagetop_seaorm::db::{ ActiveModelTrait, ActiveValue, ColumnTrait, EntityTrait, Order, Paginated, PaginatorTrait, QueryFilter, QueryOrder, QuerySelect, Set, TransactionTrait, dbconn, flatten_txn_err, paginate, diff --git a/extensions/pagetop-user/src/service/user_admin.rs b/extensions/pagetop-user/src/service/user_admin.rs index 55ca95ab..58aa35ed 100644 --- a/extensions/pagetop-user/src/service/user_admin.rs +++ b/extensions/pagetop-user/src/service/user_admin.rs @@ -2,9 +2,7 @@ use std::collections::HashMap; -use pagetop::datetime::Utc; -use pagetop::html::SortDir; -use pagetop::util; +use pagetop::prelude::*; use pagetop_seaorm::db::{ ActiveModelTrait, ActiveValue, ColumnTrait, Condition, EntityTrait, Order, Paginated, PaginatorTrait, QueryFilter, QueryOrder, Set, TransactionTrait, dbconn, flatten_txn_err, diff --git a/extensions/pagetop-user/src/token.rs b/extensions/pagetop-user/src/token.rs index 4da794a5..611bca03 100644 --- a/extensions/pagetop-user/src/token.rs +++ b/extensions/pagetop-user/src/token.rs @@ -1,9 +1,7 @@ //! Generación y verificación de tokens de un solo uso (reset de contraseña, verificación de //! email...). -use pagetop::datetime::{Duration, Utc}; -use sha2::{Digest, Sha256}; - +use pagetop::prelude::*; use pagetop_seaorm::db::{ ActiveModelTrait, ActiveValue, ColumnTrait, EntityTrait, QueryFilter, Set, dbconn, }; @@ -11,6 +9,8 @@ use pagetop_seaorm::db::{ use crate::entity::user_token; use crate::error::AuthError; +use sha2::{Digest, Sha256}; + // **< Generación de tokens >*********************************************************************** /// Genera un token URL-safe de 43 caracteres (32 bytes -> base64url sin padding).