diff --git a/packages/pagetop-seaorm/CREDITS.md b/packages/pagetop-seaorm/CREDITS.md deleted file mode 100644 index d5dc7f83..00000000 --- a/packages/pagetop-seaorm/CREDITS.md +++ /dev/null @@ -1,67 +0,0 @@ -# 🔃 Dependencies - -PageTop is developed in the [Rust programming language](https://www.rust-lang.org/) and stands on -the shoulders of true giants, using some of the most stable and renowned libraries (*crates*) from -the [Rust ecosystem](https://lib.rs), such as: - -* [Actix Web](https://actix.rs/) for web services and server management. -* [Tracing](https://github.com/tokio-rs/tracing) for the diagnostic system and structured logging. -* [Fluent templates](https://github.com/XAMPPRocky/fluent-templates) that incorporate - [Fluent](https://projectfluent.org/) for project internationalization. -* [SeaORM](https://www.sea-ql.org/SeaORM/) which employs [SQLx](https://docs.rs/sqlx/latest/sqlx/) - for database access and modeling. -* Among others, which you can review in the PageTop - [`Cargo.toml`](https://github.com/manuelcillero/pagetop/blob/main/Cargo.toml) file. - - -# ⌨️ Code - -PageTop integrates code from various renowned crates to enhance functionality: - -* [**Config (v0.11.0)**](https://github.com/mehcode/config-rs/tree/0.11.0): Includes code from - [config-rs](https://crates.io/crates/config) by [Ryan Leckey](https://crates.io/users/mehcode), - chosen for its advantages in reading configuration settings and delegating assignment to safe - types, tailored to the specific needs of each package, theme, or application. - -* [**Maud (v0.25.0)**](https://github.com/lambda-fairy/maud/tree/v0.25.0/maud): An adapted version - of the excellent [maud](https://crates.io/crates/maud) crate by - [Chris Wong](https://crates.io/users/lambda-fairy) is incorporated to leverage its functionalities without requiring a reference to `maud` in the `Cargo.toml` files. - -* **SmartDefault (v0.7.1)**: Embedded [SmartDefault](https://crates.io/crates/smart_default) by - [Jane Doe](https://crates.io/users/jane-doe) as `AutoDefault`to simplify the documentation of - Default implementations and also removes the need to explicitly list `smart_default` in the - `Cargo.toml` files. - -* **Database Operations**: PageTop employs [SQLx](https://github.com/launchbadge/sqlx) and - [SeaQuery](https://github.com/SeaQL/sea-query), complemented by a custom version of - [SeaORM Migration](https://github.com/SeaQL/sea-orm/tree/master/sea-orm-migration) (version - [0.12.8](https://github.com/SeaQL/sea-orm/tree/0.12.8/sea-orm-migration/src)). This modification - ensures migration processes are confined to specific packages, enhancing modularity and - maintainability. - - -# 🗚 FIGfonts - -PageTop uses the [figlet-rs](https://crates.io/crates/figlet-rs) package by *yuanbohan* to display a -presentation banner in the terminal with the application's name using -[FIGlet](http://www.figlet.org) characters. The fonts included in `src/app` are: - -* [slant.flf](http://www.figlet.org/fontdb_example.cgi?font=slant.flf) by *Glenn Chappell* -* [small.flf](http://www.figlet.org/fontdb_example.cgi?font=small.flf) by *Glenn Chappell* (default) -* [speed.flf](http://www.figlet.org/fontdb_example.cgi?font=speed.flf) by *Claude Martins* -* [starwars.flf](http://www.figlet.org/fontdb_example.cgi?font=starwars.flf) by *Ryan Youck* - - -# 📰 Templates - -* The default welcome homepage design is based on the - [Zinc](https://themewagon.com/themes/free-bootstrap-5-html5-business-website-template-zinc) - template created by [inovatik](https://inovatik.com/) and distributed by - [ThemeWagon](https://themewagon.com). - - -# 🎨 Icon - -"The creature" smiling is a fun creation by [Webalys](https://www.iconfinder.com/webalys). It can be -found in their [Nasty Icons](https://www.iconfinder.com/iconsets/nasty) collection available on -[ICONFINDER](https://www.iconfinder.com). diff --git a/packages/pagetop-seaorm/README.md b/packages/pagetop-seaorm/README.md index 14523297..189012e8 100644 --- a/packages/pagetop-seaorm/README.md +++ b/packages/pagetop-seaorm/README.md @@ -1,102 +1,26 @@
- +

PageTop SeaORM

-

PageTop

- -

An opinionated web framework to build modular Server-Side Rendering web solutions.

+

Integrate SeaORM as the database framework for PageTop applications.

[![License](https://img.shields.io/badge/license-MIT%2FApache-blue.svg?style=for-the-badge)](#-license) -[![API Docs](https://img.shields.io/docsrs/pagetop?label=API%20Docs&style=for-the-badge&logo=Docs.rs)](https://docs.rs/pagetop) -[![Crates.io](https://img.shields.io/crates/v/pagetop.svg?style=for-the-badge&logo=ipfs)](https://crates.io/crates/pagetop) -[![Downloads](https://img.shields.io/crates/d/pagetop.svg?style=for-the-badge&logo=transmission)](https://crates.io/crates/pagetop) +[![API Docs](https://img.shields.io/docsrs/pagetop-seaorm?label=API%20Docs&style=for-the-badge&logo=Docs.rs)](https://docs.rs/pagetop-seaorm) +[![Crates.io](https://img.shields.io/crates/v/pagetop-seaorm.svg?style=for-the-badge&logo=ipfs)](https://crates.io/crates/pagetop-seaorm) +[![Downloads](https://img.shields.io/crates/d/pagetop-seaorm.svg?style=for-the-badge&logo=transmission)](https://crates.io/crates/pagetop-seaorm)
-## Overview +PageTop SeaORM employs [SQLx](https://crates.io/crates/sqlx) and +[SeaQuery](https://crates.io/crates/sea-query), complemented by a custom version of +[SeaORM Migration](https://github.com/SeaQL/sea-orm/tree/1.1.1/sea-orm-migration/src) (v1.1.1). The +modified SeaORM Migration ensures migrations are scoped per package, providing greater control and +reducing coupling between database components. -The PageTop core API provides a comprehensive toolkit for extending its functionalities to specific -requirements and application scenarios through actions, components, packages, and themes: +# 📦 About PageTop - * **Actions** serve as a mechanism to customize PageTop's internal behavior by intercepting its - execution flow. - * **Components** encapsulate HTML, CSS, and JavaScript into functional, configurable, and - well-defined units. - * **Packages** extend or customize existing functionality by interacting with PageTop APIs or - third-party package APIs. - * **Themes** enable developers to alter the appearance of pages and components without affecting - their functionality. - - -# ⚡️ Quick start - -```rust -use pagetop::prelude::*; - -struct HelloWorld; - -impl PackageTrait for HelloWorld { - fn configure_service(&self, scfg: &mut service::web::ServiceConfig) { - scfg.route("/", service::web::get().to(hello_world)); - } -} - -async fn hello_world(request: HttpRequest) -> ResultPage { - Page::new(request) - .with_component(Html::with(html! { h1 { "Hello World!" } })) - .render() -} - -#[pagetop::main] -async fn main() -> std::io::Result<()> { - Application::prepare(&HelloWorld).run()?.await -} -``` - -This program features a `HelloWorld` package, providing a service that serves a greeting web page -accessible via `http://localhost:8088` under default settings. - - -# 📂 Repository Structure - -This repository is organized into a workspace that includes several subprojects, each serving a -distinct role within the PageTop ecosystem: - -## Application - -* [drust](https://github.com/manuelcillero/pagetop/tree/latest/drust): - A simple Content Management System (CMS) built on PageTop, which enables the creation, editing, - and maintenance of dynamic, fast, and modular websites. It uses the following essential packages - to provide standard CMS functionalities. - -## Helpers - -* [pagetop-macros](https://github.com/manuelcillero/pagetop/tree/latest/helpers/pagetop-macros): - A collection of procedural macros that enhance the development experience within PageTop. - -* [pagetop-build](https://github.com/manuelcillero/pagetop/tree/latest/helpers/pagetop-build): - Simplifies the process of embedding resources directly into binary files for PageTop applications. - -## Packages - -* [pagetop-user](https://github.com/manuelcillero/pagetop/tree/latest/packages/pagetop-user): - Facilitates user management, including roles, permissions, and session handling, for applications - built on PageTop. - -* [pagetop-admin](https://github.com/manuelcillero/pagetop/tree/latest/packages/pagetop-admin): - Provides a unified interface for administrators to configure and manage package settings. - -* [pagetop-node](https://github.com/manuelcillero/pagetop/tree/latest/packages/pagetop-node): - Enables the creation and customization of content types, enhancing website content management. - -## Themes - -* [pagetop-bootsier](https://github.com/manuelcillero/pagetop/tree/latest/packages/pagetop-bootsier): - Utilizes the *[Bootstrap](https://getbootstrap.com/)* framework to offer versatile page layouts - and component stylings. - -* [pagetop-bulmix](https://github.com/manuelcillero/pagetop/tree/latest/packages/pagetop-bulmix): - Utilizes the *[Bulma](https://bulma.io/)* framework for sleek, responsive design elements. +[PageTop](https://docs.rs/pagetop) is an opinionated web framework to build modular *Server-Side +Rendering* web solutions. # 🚧 Warning @@ -107,8 +31,7 @@ frequent changes. Production use is not recommended until version **0.1.0**. # 📜 License -PageTop is free, open source and permissively licensed! Except where noted (below and/or in -individual files), all code in this project is dual-licensed under either: +All code in this crate is dual-licensed under either: * MIT License ([LICENSE-MIT](LICENSE-MIT) or https://opensource.org/licenses/MIT) @@ -118,10 +41,3 @@ individual files), all code in this project is dual-licensed under either: at your option. This means you can select the license you prefer! This dual-licensing approach is the de-facto standard in the Rust ecosystem. - - -# ✨ Contributions - -Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the -work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any -additional terms or conditions. diff --git a/packages/pagetop-seaorm/src/config.rs b/packages/pagetop-seaorm/src/config.rs index b0bef472..f423cb7e 100644 --- a/packages/pagetop-seaorm/src/config.rs +++ b/packages/pagetop-seaorm/src/config.rs @@ -1,4 +1,4 @@ -//! Configuration settings for SeaORM PageTop package. +//! Configuration settings for the SeaORM PageTop package. //! //! Example: //! @@ -20,8 +20,8 @@ //! //! assert_eq!(config::SETTINGS.database.db_host, "localhost"); //! ``` -//! See [`pagetop::config`](pagetop::config) to learn how **PageTop** read configuration files and -//! use settings. +//! See [`pagetop::include_config`] to learn how **PageTop** read configuration files and use +//! settings. use pagetop::prelude::*; @@ -39,32 +39,33 @@ include_config!(SETTINGS: Settings => [ ]); #[derive(Debug, Deserialize)] -/// Type for HighlightJS configuration settings, section [`[hljs]`](Hljs) (used by [`SETTINGS`]). +/// Represents configuration settings, specifically the [`[database]`](Database) section (used by +/// [`SETTINGS`]). pub struct Settings { pub database: Database, } #[derive(Debug, Deserialize)] -/// Struct for section `[database]` of [`Settings`] type. +/// Represents the `[database]` section in the [`Settings`] type. pub struct Database { - /// Tipo de base de datos: *"mysql"*, *"postgres"* ó *"sqlite"*. - /// Por defecto: *""*. + /// Type of database: *"mysql"*, *"postgres"*, or *"sqlite"*. + /// Default: *""*. pub db_type: String, - /// Nombre (para mysql/postgres) o referencia (para sqlite) de la base de datos. - /// Por defecto: *""*. + /// Name (for MySQL/Postgres) or reference (for SQLite) of the database. + /// Default: *""*. pub db_name: String, - /// Usuario de conexión a la base de datos (para mysql/postgres). - /// Por defecto: *""*. + /// Username for database connection (for MySQL/Postgres). + /// Default: *""*. pub db_user: String, - /// Contraseña para la conexión a la base de datos (para mysql/postgres). - /// Por defecto: *""*. + /// Password for database connection (for MySQL/Postgres). + /// Default: *""*. pub db_pass: String, - /// Servidor de conexión a la base de datos (para mysql/postgres). - /// Por defecto: *"localhost"*. + /// Hostname for database connection (for MySQL/Postgres). + /// Default: *"localhost"*. pub db_host: String, - /// Puerto de conexión a la base de datos, normalmente 3306 (para mysql) ó 5432 (para postgres). - /// Por defecto: *0*. + /// Port number for database connection, typically 3306 (MySQL) or 5432 (Postgres). + /// Default: *0*. pub db_port: u16, - /// Número máximo de conexiones habilitadas. - /// Por defecto: *5*. + /// Maximum number of allowed connections. + /// Default: *5*. pub max_pool_size: u32, } diff --git a/packages/pagetop-seaorm/src/db/migration/schema.rs b/packages/pagetop-seaorm/src/db/migration/schema.rs index 340b7482..b09c6b5f 100644 --- a/packages/pagetop-seaorm/src/db/migration/schema.rs +++ b/packages/pagetop-seaorm/src/db/migration/schema.rs @@ -73,6 +73,11 @@ pub fn pk_auto(name: T) -> ColumnDef { integer(name).auto_increment().primary_key().take() } +/// Create a UUID primary key +pub fn pk_uuid(name: T) -> ColumnDef { + uuid(name).primary_key().take() +} + pub fn char_len(col: T, length: u32) -> ColumnDef { ColumnDef::new(col).char_len(length).not_null().take() } @@ -538,11 +543,11 @@ pub fn uuid_uniq(col: T) -> ColumnDef { uuid(col).unique_key().take() } -pub fn custom(col: T, name: T) -> ColumnDef { +pub fn custom(col: T, name: N) -> ColumnDef { ColumnDef::new(col).custom(name).not_null().take() } -pub fn custom_null(col: T, name: T) -> ColumnDef { +pub fn custom_null(col: T, name: N) -> ColumnDef { ColumnDef::new(col).custom(name).null().take() }