From a62f93605f2c68b1e1c60dfc338c60ee5d0b78b7 Mon Sep 17 00:00:00 2001 From: Sanford Pun Date: Tue, 31 May 2022 17:18:58 +0800 Subject: [PATCH 01/60] Revamped outline --- tutorials-book/src/SUMMARY.md | 32 +++++++++++++++----------------- 1 file changed, 15 insertions(+), 17 deletions(-) diff --git a/tutorials-book/src/SUMMARY.md b/tutorials-book/src/SUMMARY.md index 24d5076..38a75b4 100644 --- a/tutorials-book/src/SUMMARY.md +++ b/tutorials-book/src/SUMMARY.md @@ -2,23 +2,21 @@ [Introduction](ch00-00-introduction.md) -## Chapter 1 - Simple CRUD Operations +## Chapter 1 - Building a Backend with SeaORM -- [Chapter 1 - Simple CRUD Operations](ch01-00-simple-crud-getting-started.md) - - [Create Operation](ch01-01-create-operation.md) - - [Insert Operation](ch01-02-insert-operations.md) - - [Read Operation](ch01-03-read-operation.md) - - [Update Operation](ch01-04-update-operation.md) - - [Delete Operation](ch01-05-delete-operation.md) - - [Multi-table relationships](ch01-06-relationships.md) +- [Chapter 1 - Building a Backend with SeaORM]() + - [Project Setup]() + - [Migration]() + - [Entity Generation using sea-orm-cli]() + - [Basic CRUD Operations]() + - [Relational Select]() + - [Testing with Mock Interface]() + - [Optional: Building SQL Queries with SeaQuery]() -## Chapter 2 - A Command-line TODO app +## Chapter 2 - Integration with Rocket -- [Chapter 2 - A Command-line TODO app](ch02-00-todo-app-getting-started.md) - - [Building The Web Server](ch02-01-http-server.md) - - [Creating Tables](ch02-02-tables.md) - - [Building Server Connections and Responses](ch02-03-server.md) - - [Building The TODO HTTP Client](ch02-04-00-client.md) - - [Formatting Utilities](ch02-04-01-utils.md) - - [Remote Database Operations](ch02-04-02-remote-db.md) - - [Reading User Input](ch02-04-03-stdout.md) +- [Chapter 2 - Integration with Rocket]() + +## Chapter 3 - Integration with GraphQL + +- [Chapter 3 - Integration with GraphQL]() From b37e29b169e9c8d5ab0be96becf9683159810839 Mon Sep 17 00:00:00 2001 From: Sanford Pun Date: Tue, 31 May 2022 17:11:08 +0800 Subject: [PATCH 02/60] Rewrite introduction --- tutorials-book/src/ch00-00-introduction.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/tutorials-book/src/ch00-00-introduction.md b/tutorials-book/src/ch00-00-introduction.md index 5144019..f9ff097 100644 --- a/tutorials-book/src/ch00-00-introduction.md +++ b/tutorials-book/src/ch00-00-introduction.md @@ -1,6 +1,6 @@ # Introduction -SeaORM is the most feature rich async ORM for integrating a Rust code base with relational databases aiming to be a write code once and run on any popular Relational Database with current support for MySQL, PostgreSQL, MariaDB and SQLite. The tutorials in this book are a gentle introduction to using the `sea-orm` crate and it's cli tool `sea-orm-cli`. +SeaORM is the most feature rich async ORM for integrating a Rust code base with relational databases aiming to be a write code once and run on any popular Relational Database with current support for MySQL, PostgreSQL, MariaDB and SQLite. The tutorials in this book are a gentle introduction to using the `sea-orm` crate and its cli tool `sea-orm-cli`. #### Symbols Used @@ -20,9 +20,8 @@ To show added or removed code from files, we will use comments or #### Chapters -Each tutorial is contained in it's own chapter and each chapter has subsections that walk you though the steps of each tutorial. +In the first chapter, we will learn how to build a backend application with SeaORM. It will be compatible with different database implementations. -- Chapter 1 - This chapter illustrates doing `Create`, `Read`, `Update` and `Delete` `(CRUD)`operations using a MySQL database. -- Chapter 2 - This chapter simulates a real world application combining an in-memory cache, a local application SQLite cache and a remote HTTP API with a PostgreSQL backend used for persistence of data. +In the subsequent chapters, we will explore the process of building other applications that integrate with a SeaORM-powered backend. In particular, we will be looking at how to build Rocket and GraphQL applications that interact with the backend we created in the first chapter. Let's get started. From 0030125967e6a64a04432a3d2af98d7ba0cbb260 Mon Sep 17 00:00:00 2001 From: Sanford Pun Date: Tue, 31 May 2022 18:09:20 +0800 Subject: [PATCH 03/60] Remove old tutorials --- .../ch01-00-simple-crud-getting-started.md | 81 --- .../src/ch01-01-create-operation.md | 247 -------- .../src/ch01-02-insert-operations.md | 140 ----- tutorials-book/src/ch01-03-read-operation.md | 106 ---- .../src/ch01-04-update-operation.md | 51 -- .../src/ch01-05-delete-operation.md | 46 -- tutorials-book/src/ch01-06-relationships.md | 259 -------- .../src/ch02-00-todo-app-getting-started.md | 47 -- tutorials-book/src/ch02-01-http-server.md | 174 ------ tutorials-book/src/ch02-02-tables.md | 252 -------- tutorials-book/src/ch02-03-server.md | 279 --------- tutorials-book/src/ch02-04-00-client.md | 227 ------- tutorials-book/src/ch02-04-01-utils.md | 186 ------ tutorials-book/src/ch02-04-02-remote-db.md | 178 ------ tutorials-book/src/ch02-04-03-stdout.md | 586 ------------------ 15 files changed, 2859 deletions(-) delete mode 100644 tutorials-book/src/ch01-01-create-operation.md delete mode 100644 tutorials-book/src/ch01-02-insert-operations.md delete mode 100644 tutorials-book/src/ch01-03-read-operation.md delete mode 100644 tutorials-book/src/ch01-04-update-operation.md delete mode 100644 tutorials-book/src/ch01-05-delete-operation.md delete mode 100644 tutorials-book/src/ch01-06-relationships.md delete mode 100644 tutorials-book/src/ch02-00-todo-app-getting-started.md delete mode 100644 tutorials-book/src/ch02-01-http-server.md delete mode 100644 tutorials-book/src/ch02-02-tables.md delete mode 100644 tutorials-book/src/ch02-03-server.md delete mode 100644 tutorials-book/src/ch02-04-00-client.md delete mode 100644 tutorials-book/src/ch02-04-01-utils.md delete mode 100644 tutorials-book/src/ch02-04-02-remote-db.md delete mode 100644 tutorials-book/src/ch02-04-03-stdout.md diff --git a/tutorials-book/src/ch01-00-simple-crud-getting-started.md b/tutorials-book/src/ch01-00-simple-crud-getting-started.md index 06015b4..e69de29 100644 --- a/tutorials-book/src/ch01-00-simple-crud-getting-started.md +++ b/tutorials-book/src/ch01-00-simple-crud-getting-started.md @@ -1,81 +0,0 @@ -# Chapter 1 - Simple CRUD Operations - - In this tutorial, SeaORM is used with `async-std` as the async runtime, `rustls` for database TLS connections and `sqlx-mysql` for the MySQL database backend. - -### Installation of dependencies and tools - -1. Install SeaORM-Cli that will help in reading a database schema and generating the relevant `Entity`, `Model` and `Relation` of every table in our selected database (`schema`). - - ```sh - $ cargo install sea-orm-cli - ``` - -2. Create a new Rust Cargo project - ```sh - $ cargo new SimpleCrud --name simple-crud - ``` - -3. Switch to the new cargo project - - ```sh - $ cd simple-crud - ``` - -4. Add SeaORM as a dependency in `Cargo.toml` file - - If you have `cargo edit` installed, run - - ```sh - $ cargo add sea-orm --no-default-features --features "runtime-async-std-rustls sqlx-mysql macros" - ``` - - or if you don't have `cargo edit` installed, you can install it by running - - ```sh - $ cargo install cargo-edit - ``` - -5. Add the async runtime - - ```sh - $ cargo add anyhow - - $ cargo add async-std --features attributes - ``` - - You can also add them manually in the `Cargo.toml` file - - ```toml - sea-orm = { version = "0.5", features = [ "runtime-async-std-rustls", "sqlx-mysql", "macros" ], default-features = false} - anyhow = "1" - async-std = { version = "1", features = [ "attributes" ] } - ``` - - - -6. Make sure that your database server is running, then login and create a database called `fruit_markets`. - - ```sql - CREATE DATABASE fruit_markets; - ``` - - - -7. Create a new user in the database called `webmaster` and with a password `master_char` - - ```sql - # Step1: Create a new user - CREATE USER 'webmaster'@'localhost' IDENTIFIED BY 'master_char'; - - # Step 2: Allow the user to have Read, Write access to all tables in database `fruit_markets` - GRANT ALL PRIVILEGES ON fruit_markets . * TO 'webmaster'@'localhost'; - - # Step 3: Enable the above settings - FLUSH PRIVILEGES; - - # Step 4: Logout of the database - exit - ``` - -We are all set to perform CRUD operations from the MySQL database side. - diff --git a/tutorials-book/src/ch01-01-create-operation.md b/tutorials-book/src/ch01-01-create-operation.md deleted file mode 100644 index 2286270..0000000 --- a/tutorials-book/src/ch01-01-create-operation.md +++ /dev/null @@ -1,247 +0,0 @@ -# Create Operation - -SeaORM abstracts database opertaions though the `sea_orm::Database::connect()` method which yields a `DatabaseConnection`. We will use this `DatabaseConnection` to execute database operations. Let's create the `fruits` table using the database connection. - -Our goal is to do the SQL `CREATE TABLE` operation: - -```sql -# Create a fruits table -CREATE TABLE fruits( - fruit_id INT NOT NULL AUTO_INCREMENT, - name VARCHAR(255) NOT NULL, - datetime_utc TIMESTAMP NOT NULL, - unit_price INT NOT NULL, - sku VARCHAR(255) NOT NULL, - PRIMARY KEY (fruit_id) -); -``` - -The `fruits` table is a record of all the fruits available, their id (`fruit_id`), name (`name`), the timestamp when the row was entered (`datetime_utc`) in the UTC timezone, the price per kilogram of fruit (`unit_price`) and the stock tracking alphanumeric code (`sku`) commonly known as **Stock Keeping Unit**. - ---- - - - -Add a module `fruits_table` inside the `src` folder and add `mod.rs`, `prelude.rs` and `fruit.rs` files as its children. - -**FILE:** *SimpleCRUD/src/create_fruits_table.rs* - -``` -|-- SimpleCRUD/ - |-- Cargo.toml - |-- Cargo.lock - |-- src/ - |-- main.rs -+ |-- fruits_table/ #Code to create table fruits goes here -+ |-- fruits.rs -+ |-- mod.rs -+ |-- prelude.rs -``` - - - -Then, import this module - -**FILE:** *SimpleCRUD/src/main.rs* - -```rust,no_run -+ mod fruits_table; -+ use fruits_table::prelude::Fruits; - - // Import the needed modules for table creation -+ use sea_orm::{ConnectionTrait, Database, Schema}; -// Handle errors using the `https://crates.io/crates/anyhow` crate -+ use anyhow::Result; - -// Convert this main function into async function -+ #[async_std::main] -+ async fn main() -> Result<()>{ -- fn main { -+ -+ -+ Ok(()) -+ } -``` - -The `#[async_std::main]` attribute is used to convert our main function `fn main() {}` into an async function `async fn main() {}` in order to use `await` inside main using `async-std` as the library. - - - -Inside the `fruit.rs` add: - -**FILE:** *SimpleCRUD/src/fruits_table/fruit.rs* - -```rust,noplayground -use sea_orm::entity::prelude::*; - -#[derive(Clone, Debug, PartialEq, DeriveEntityModel)] -#[sea_orm(table_name = "fruits")] -pub struct Model { - #[sea_orm(primary_key)] - pub fruit_id: i32, - #[sea_orm(unique)] - pub name: String, - pub datetime_utc: DateTime, - pub unit_price: i32, - pub sku: String, -} - -#[derive(Copy, Clone, Debug, EnumIter)] -pub enum Relation {} - -impl RelationTrait for Relation { - fn def(&self) -> RelationDef { - panic!("No RelationDef") - } -} - -impl ActiveModelBehavior for ActiveModel {} - -``` - -The `#[derive(... , DeriveEntityModel)]` proc macro is used to automatically derive the code for `Entity`, `Model` and `ActiveModel` . For this to work, the struct **MUST** be called `Model`. - -The enum `Relation` **MUST** also be created, currently, it has empty fields but if the table had a relationship with another table, this is where it would be illustrated. The `#[derive(... , EnumIter)]` is required on a `Relation` to ensure the type implements and exposes a Rust `Iterator`. - -A `Relation` **MUST** implement the `RelationTrait` trait and the method `def()` of the trait. Currently, there is no relation so the `def()` method returns a `panic!("No RelationDef")` if we try to do operations like joins with other tables. - -Lastly, we implement `ActiveModelBehavior` for the `ActiveModel`. The `ActiveModel` is autogenerated by SeaORM codegen when we derived `#[derive(... , DeriveEntityModel)]` from `Model` struct. - -The `#[sea_orm(primary_key)]` is used to set the primary key and can be called using the `..Default::default()` when instantiating a model. - -`#[sea_orm(unique)]` derive macro is used on the `name` field to ensure that two rows are not entered with the same name. This corresponds to SQL `UNIQUE` constraint. - -To set the field of a `Model` to a default of `NULL` , ensure the field is set to an `Option` , for example, to set `sku` field of `Model` to SQL default of `NULL`: - -```rust,noplayground -#[derive(Clone, Debug, PartialEq, DeriveEntityModel)] -#[sea_orm(table_name = "fruits")] -pub struct Model { - // -- shippet -- -+ pub sku: Option, -- pub sku: String, -} -``` - - - -Inside `prelude.rs` add: - -**FILE:** *SimpleCRUD/src/fruits_table/prelude.rs* - -```rust,noplayground -pub use super::fruits::{ - ActiveModel as FruitsActiveModel, Column as FruitsColumn, Entity as Fruits, - Model as FruitsModel, PrimaryKey as FruitsPrimaryKey, Relation as FruitsRelation, -}; -``` - -This code reads the `Entity` from the generated code and renames it to `Fruits` to avoid name collisions with other existing `Entities`. The same goes for the `Model`, `Relation`, `ActiveModel`, `Column`, etc.. - - - -Inside `mod.rs` , export the modules using: - -**FILE:** *SimpleCRUD/src/fruits_table/mod.rs* - -```rust,noplayground -pub mod prelude; - -pub mod fruits; -``` - - - -Add code to perform execution: - -**FILE:** *SimpleCRUD/src/main.rs* - -```rust,no_run -// Code snippet - -#[async_std::main] -async fn main() -> Result<()>{ - // Read the database environment from the `.env` file -+ let env_database_url = include_str!("../.env").trim(); - // Split the env url -+ let split_url: Vec<&str> = env_database_url.split("=").collect(); - // Get item with the format `database_backend://username:password@localhost/database` -+ let database_url = split_url[1]; -+ -+ let db = Database::connect(database_url).await?; -+ -+ let builder = db.get_database_backend(); -+ let schema = Schema::new(builder); -+ -+ let create_table_op = db.execute(builder.build(&schema.create_table_from_entity(Fruits))).await; -+ println!("`CREATE TABLE fruits` {:?}", -+ match create_table_op { -+ Ok(_) => "Operation Successful".to_owned(), -+ Err(e) => format!("Unsuccessful - Error {:?}", e), -+ } -+ ); - Ok(()) -} -``` - -This operation requires reading the database environment, so we read the `.env` file using `include_str!(".env")` and store that result as the `database_url` variable. - -The `Database::connect(database_url)` creates a `DatabaseConnection` that we will use to connect to the database abd perform operations. Using this connection, the `get_database_backend()` method retrieves the database backend in use and then build a schema using ` Schema::new(builder)` which in turn is used by the database backed value stored in the `builder` variable to build the SQL statement using the `.build()` method. - -Finally, we run the SQL query using the `.execute()` method on `DatabaseConnection` stored as the `db` variable. Running the program using `cargo run` should print: - -```sh -$ `CREATE TABLE fruits` "Operation Successful" -``` - -Running the operation again should print the error: - -```sh -$ `CREATE TABLE fruits` "Unsuccessful - Error Exec(\"error returned from database: 1050 (42S01): Table 'fruits' already exists\")" -``` - - - -### Automatically deriving the code to perform CRUD operations - -If the database we want to use already exists, we can automatically generate an `Entity`, `Model` and `ActiveModel` using `sea-orm-cli` which we installed in the `Installation` part of the `Introduction`. - - `sea-orm-cli` will load the database configuration by reading the `.env` file we created earlier in order to login to the database using the username and password in this file, then it will load the `schema` which is the database we specified, create the `Entities` from all the tables in the selected database and automatically generate the relevant code and of the process is successful, create all the code in the folder we will specify. - -In the current working directory of the project, execute: - -```sh -$ sea-orm-cli generate entity -o src/fruits_table -``` - -The structure of the current working directory after `sea-orm-cli` has done its "magical" code generation: - -```sh -|-- SimpleCRUD/ - |-- Cargo.toml - |-- Cargo.lock - |-- src/ - |-- main.rs -+ |-- fruits_table/ #Model, ActiveModel and Entity code generated by `sea-orm-cli` -+ |-- fruit.rs -+ |-- mod.rs -+ |-- prelude.rs -``` - -Next, import the `fruits_table` module for use with the project - -**File:** *./SimpleCRUD/src/main.rs* - -```rust,no_run -+ mod fruits_table; - -#[async_std::main] -async fn main() -> Result<()>{ - ... - Ok(()) -} -``` - -That's it, we have automatically loaded and created all the tables in our database as `Entities` using `sea-orm-cli`. - -Next, we perform `Insert` operations and print results to the console. diff --git a/tutorials-book/src/ch01-02-insert-operations.md b/tutorials-book/src/ch01-02-insert-operations.md deleted file mode 100644 index 77c882b..0000000 --- a/tutorials-book/src/ch01-02-insert-operations.md +++ /dev/null @@ -1,140 +0,0 @@ -# Insert Operation - -SeaORM insert and read operations are done using the `Entity` derived from the `Model` struct using the `EntityTrait`. - -Let's insert a fruit `Apple` with a unit price per Kg of $2 and an SKU of `FM2022AKB40`. - -Add `chrono` crate to get the current time from the system time - -```toml -[package] -name = "simple-crud" -version = "0.1.0" -edition = "2021" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] -anyhow = "1.0.52" -async-std = { version = "1.10.0", features = ["attributes"] } -sea-orm = { version = "0.5.0", features = [ - "runtime-async-std-rustls", - "sqlx-mysql", - "macros", -], default-features = false } -+ chrono = "0.4.19" # Add chrono here -``` - -Modify the current `sea-orm` features to add the feature `with-chrono`. This activates Date and Time features. - -```TOML -[package] -name = "simple-crud" -version = "0.1.0" -edition = "2021" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] -anyhow = "1.0.52" -async-std = { version = "1.10.0", features = ["attributes"] } -chrono = "0.4.19" -sea-orm = { version = "0.5.0", features = [ - "runtime-async-std-rustls", - "sqlx-mysql", - "macros", -+ "with-chrono", # New feature -], default-features = false } -chrono = "0.4.19" # Add chrono here -``` - - - -Next, call `Utc::now()` chrono method to get the system time and then import sea_orm::entity::`Set` to perform convertions of the Rust data types into SQL ready data type `ActiveValue` - -```rust,no_run -// -- code snippet -- -+ use sea_orm::entity::Set; - -#[async_std::main] -async fn main() -> Result<()>{ - ... - - // Get current system time -+ let now = chrono::offset::Utc::now(); - - // Convert system time to `NaiveDateTime` since SeaORM `DateTime` expects this; -+ let naive_system_time = now.naive_utc(); - -+ let fruit_01 = FruitsActiveModel { -+ name: Set("Apple".to_owned()), -+ datetime_utc: Set(naive_system_time), -+ unit_price: Set(2), -+ sku: Set("FM2022AKB40".to_owned()), -+ ..Default::default() -+ }; -+ let fruit_insert_operation = Fruits::insert(fruit_01).exec(&db).await; - -+ println!("INSERTED ONE: {:?}", fruit_insert_operation?); - - Ok(()) -} -``` - -Since an `Entity` implements `EntityTrait`, the insert method is availabe. executing `Fruits::insert(fruit_01)` will perform the operation on the database using `exec(&db).await`. Here, the `insert` operation inserts only one row into the specified database; - -Running the program using `cargo run` should print - -```sh -$ INSERTED ONE: InsertResult { last_insert_id: 1 } -``` - -Let's insert more than one row at a time using the `Fruits::insert_many()` method. - -```rust,no_run -// -- code snippet -- -+ use chrono::offset::Utc; -#[async_std::main] -async fn main() -> Result<()>{ - ... - -+ let fruit_02 = FruitsActiveModel { -+ name: Set("Banana".to_owned()), -+ datetime_utc: Set(Utc::now().naive_utc()), -+ unit_price: Set(2), -+ sku: Set("FM2022AKB41".to_owned()), -+ ..Default::default() -+ }; - -+ let fruit_03 = FruitsActiveModel { -+ name: Set("Pineapple".to_owned()), -+ datetime_utc: Set(Utc::now().naive_utc()), -+ unit_price: Set(8), -+ sku: Set("FM2022AKB42".to_owned()), -+ ..Default::default() -+ }; - -+ let fruit_04 = FruitsActiveModel { -+ name: Set("Mango".to_owned()), -+ datetime_utc: Set(Utc::now().naive_utc()), -+ unit_price: Set(6), -+ sku: Set("FM2022AKB43".to_owned()), -+ ..Default::default() -+ }; -+ let fruit_insert_operation = Fruits::insert_many(vec![fruit_02, fruit_03, fruit_04]).exec(&db).await; - -+ println!("INSERTED MANY: {:?}", fruit_insert_operation?); - - Ok(()) -} -``` - -Running the program with `cargo run` prints - -```sh -$ INSERTED MANY: InsertResult { last_insert_id: 3 } -``` - - - -Next up is reading one value or many values from a table. diff --git a/tutorials-book/src/ch01-03-read-operation.md b/tutorials-book/src/ch01-03-read-operation.md deleted file mode 100644 index ee2e025..0000000 --- a/tutorials-book/src/ch01-03-read-operation.md +++ /dev/null @@ -1,106 +0,0 @@ -# Read Operation - -SeaORM can perform read operations through the `Entity::find()` method. - -#### Find all rows using in a table - -The `.all()` method in `Entity` is used to fetch all rows in a table. - -```rust,no_run -//-- snippet -- - -#[async_std::main] -async fn main() -> Result<()> { - let env_database_url = include_str!("../.env").trim(); - let split_url: Vec<&str> = env_database_url.split("=").collect(); - let database_url = split_url[1]; - - let db = Database::connect(database_url).await?; - - ... - -+ let fruits_table_rows = Fruits::find().all(&db).await; -+ println!("{:?}", fruits_table_rows?); - - Ok(()) -} -``` - -To fetch all the rows inside a table, in this case `Fruits`, call the `.all()` method on `Fruits::find()` - -This should print all the rows in the table `fruits` to the console as an array of `Model`s. - -```sh -$ [Model { fruit_id: 1, name: "Apple", datetime_utc: 2022-01-22T10:36:39, unit_price: 2, sku: "FM2022AKB40" }, Model { fruit_id: 2, name: "Banana", datetime_utc: 2022-01-22T10:36:39, unit_price: 2, sku: "FM2022AKB41" }, Model { fruit_id: 3, name: "Pineapple", datetime_utc: 2022-01-22T10:36:39, unit_price: 8, sku: "FM2022AKB42" }, Model { fruit_id: 4, name: "Mango", datetime_utc: 2022-01-22T10:36:39, unit_price: 6, sku: "FM2022AKB43" }] -``` - - - -#### Find one row by the primary key - -Call the `.find_by_id(primary_key)` on `Fruits` entity (table). - -```rust,no_run -//-- snippet -- - -#[async_std::main] -async fn main() -> Result<()> { - let env_database_url = include_str!("../.env").trim(); - let split_url: Vec<&str> = env_database_url.split("=").collect(); - let database_url = split_url[1]; - - let db = Database::connect(database_url).await?; - - ... - -+ let fruits_by_id = Fruits::find_by_id(2).one(&db).await; -+ println!("{:?}", fruits_by_id?); - - Ok(()) -} -``` - -The `.one()` method is used to retrieve one `Model` that matches the query instead of a `Vec` like the `.all()` method. `.one()` method returns an `Option` where `Some(Model)` is returned if the `Model` exists or a `None` is returned if a `Model` doesn't exist. - -Running the program prints - -```sh -$ Some(Model { fruit_id: 2, name: "Banana", datetime_utc: 2022-01-22T10:36:39, unit_price: 2, sku: "FM2022AKB41" }) -``` - - - -#### Find and Filter a Row by Column Name - -Calling `filter()` method on `Entity::find()` returns a `Model` containing the matching row. - -```rust,no_run -//-- snippet -- - -#[async_std::main] -async fn main() -> Result<()> { - let env_database_url = include_str!("../.env").trim(); - let split_url: Vec<&str> = env_database_url.split("=").collect(); - let database_url = split_url[1]; - - let db = Database::connect(database_url).await?; - - ... - -+ let find_pineapple = Fruits::find() -+ .filter(FruitsColumn::Name.contains("pineapple")) -+ .one(&db) -+ .await; -+ println!("{:?}", find_pineapple?); - - Ok(()) -} -``` -The `FruitsColumn::Name` is a `Column` that was autoderived by SeaORM from the `Model` struct fields, which we imported and renamed using `use super::fruits::Column as FruitsColumn` in the previous section. `.contains()` method on `FruitsColumn` allows filtering of the `Model`with `Pineapple` as it's name. Note that this is case insensitive so even calling `.contains(piNeApPle)` will yield the same results. - -Running the program prints: - -```sh -$ Some(Model { fruit_id: 3, name: "Pineapple", datetime_utc: 2022-01-22T10:36:39, unit_price: 8, sku: "FM2022AKB42" }) -``` - diff --git a/tutorials-book/src/ch01-04-update-operation.md b/tutorials-book/src/ch01-04-update-operation.md deleted file mode 100644 index ad450bb..0000000 --- a/tutorials-book/src/ch01-04-update-operation.md +++ /dev/null @@ -1,51 +0,0 @@ -# Update Operation - - - -To perform an update in SeaORM, first, fetch the row to perform the operation using `Model` convert it into an `ActiveModel` by calling the `into()` methof on the `Model` , perform the operation on the field on the `ActiveModel` and then and then call the `.update()` method on the `ActiveModel`. The executed result returns the `Model` that was updated if successful. - -```rust,no_run -//-- snippet -- - -+ use sea_orm::sea_query::{Expr, Value}; // Types necessary to perform updates and conversions between types - -#[async_std::main] -async fn main() -> Result<()> { - let env_database_url = include_str!("../.env").trim(); - let split_url: Vec<&str> = env_database_url.split("=").collect(); - let database_url = split_url[1]; - - let db = Database::connect(database_url).await?; - - ... - - let find_pineapple = Fruits::find() - .filter(FruitsColumn::Name.contains("pineapple")) - .one(&db) - .await?; -- println!("{:?}", find_pineapple?); -+ println!("{:?}", find_pineapple.as_ref()); // Reference the `Model` instead of owning it - - // Update the `pineapple` column with a new unit price -+ if let Some(pineapple_model) = find_pineapple { -+ let mut pineapple_active_model: FruitsActiveModel = pineapple_model.into(); -+ pineapple_active_model.unit_price = Set(10); - -+ let updated_pineapple_model: FruitsModel = -+ pineapple_active_model.update(&db).await?; - -+ println!("UPDATED PRICE: {:?}", updated_pineapple_model); -+ } else { -+ println!("`Pineapple` column not found"); -+ } - - Ok(()) -} -``` - -Running the program returns - -```sh -$ UPDATED PRICE: Model { fruit_id: 3, name: "Pineapple", datetime_utc: 2022-01-22T13:35:27, unit_price: 10, sku: "FM2022AKB42" } -``` - diff --git a/tutorials-book/src/ch01-05-delete-operation.md b/tutorials-book/src/ch01-05-delete-operation.md deleted file mode 100644 index 5d36c36..0000000 --- a/tutorials-book/src/ch01-05-delete-operation.md +++ /dev/null @@ -1,46 +0,0 @@ -# Delete Operation - - -To perform a delete operation in SeaORM, first, fetch the row to perform the operation using `Model` convert it into an `ActiveModel` by calling the `into()` methof on the `Model` , perform the operation on the field on the `ActiveModel` and then and then call the `.delete()` method on the `ActiveModel` or use `Fruit::delete()`. The executed result returns the `Model` that was updated if successful. - -```rust,no_run -//-- snippet -- - -+ use sea_orm::sea_query::{Expr, Value}; // Types necessary to perform updates and conversions between types - -#[async_std::main] -async fn main() -> Result<()> { - let env_database_url = include_str!("../.env").trim(); - let split_url: Vec<&str> = env_database_url.split("=").collect(); - let database_url = split_url[1]; - - let db = Database::connect(database_url).await?; - - ... - - // Delete the `mango` row - -+ let find_mango = Fruits::find() -+ .filter(FruitsColumn::Name.contains("mango")) -+ .one(&db) -+ .await; - -+ if let Some(mango_model) = find_mango? { -+ println!( -+ "DELETED MANGO: {:?}", -+ mango_model.delete(&db).await? -+ ); -+ } else { -+ println!("`Mango` row not found"); -+ } - - Ok(()) -} -``` - -Running the program returns - -```sh -$ DELETED MANGO: DeleteResult { rows_affected: 1 } -``` - diff --git a/tutorials-book/src/ch01-06-relationships.md b/tutorials-book/src/ch01-06-relationships.md deleted file mode 100644 index 6a13e8b..0000000 --- a/tutorials-book/src/ch01-06-relationships.md +++ /dev/null @@ -1,259 +0,0 @@ -# Multi-table relationships - -This section shows how to use SeaORM to perform operations between the Fruits table and a new suppliers table. - -Creating relationships between tables can be verbose when doing so using code. Luckily, SeaORM makes this easy. Define a table called `suppliers` in the `fruit_markets` database by taking the following steps: - -1. Login to mysql database using username and password created in the `installation` part of this tutorial in the previous section and switch to fruit_markets database. - - ```sql - # Execute - use fruit_markets; - ``` - -2. Create a table `suppliers` that references the primary key `fruit_id` of table `fruits`. This will show the type of fruit the supplier supplies to the fruit markets. - - ```sql - CREATE TABLE suppliers( - supplier_id INT NOT NULL AUTO_INCREMENT, - supplier_name VARCHAR(255) NOT NULL, - fruit_id INT NOT NULL, - PRIMARY KEY (supplier_id), - CONSTRAINT fk_fruits - FOREIGN KEY (fruit_id) - REFERENCES fruits(fruit_id) - ON UPDATE CASCADE - ON DELETE CASCADE - ) ENGINE=INNODB; - ``` - -3. Use `sea-orm-cli` to generate the `Entity`, `Model`, `Relationship` and `ActiveModel`. - - ```sh - $ sea-orm-cli generate entity -o src/suppliers_table -t suppliers - ``` - - A new directory `suppliers_table` is created in the `src` directory containing serveral files with code generated by `sea-orm-cli`. - -4. Modify the `src/suppliers_table/prelude.rs` file to export memorable names of the `Entity, ActiveModel` etc - - ```rust,noplayground,no_run - - pub use super::suppliers::Entity as Suppliers; - - + pub use super::suppliers::{ - + ActiveModel as SuppliersActiveModel, Column as SuppliersColumn, Entity as Suppliers, - + Model as SuppliersModel, PrimaryKey as SuppliersPrimaryKey, Relation as SuppliersRelation, - + }; - - ``` - -5. The `src/suppliers_table/suppliers.rs` contains errors indicating the `super::fruits` cannot be found in `supper`. This means the module is not exported properly. Fix this by importing the module: - - ```rust,noplayground,no_run - //! SeaORM Entity. Generated by sea-orm-codegen 0.5.0 - - use sea_orm::entity::prelude::*; - - #[derive(Clone, Debug, PartialEq, DeriveEntityModel)] - #[sea_orm(table_name = "suppliers")] - pub struct Model { - #[sea_orm(primary_key)] - pub supplier_id: i32, - pub supplier_name: String, - pub fruit_id: i32, - } - - #[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] - pub enum Relation { - #[sea_orm( - - belongs_to = "super::fruits::Entity", - + belongs_to = "crate::Fruits", - from = "Column::FruitId", - - to = "super::fruits::Column::FruitId", - + to = "crate::FruitsColumn::FruitId", - on_update = "Cascade", - on_delete = "Cascade" - )] - Fruits, - } - - - impl Related for Entity { - + impl Related for Entity { - ... - } - - impl ActiveModelBehavior for ActiveModel {} - ``` - - `sea-orm-cli` automatically generates code to bind the `suppliers` table `Model` to the primary key of the `fruits` table using `belongs_to = "crate::Fruits",` `to = "crate::FruitsColumn::FruitId"` and `impl Related for Entity`. This corresponds to the SQL query part - - ```sql - CONSTRAINT fk_fruits - FOREIGN KEY (fruit_id) - REFERENCES fruits(fruit_id) - ON UPDATE CASCADE - ON DELETE CASCADE - ``` - -6. Import the module to the `src/main.rs` file - - ```rust,noplayground,no_run - mod fruits_table; - use fruits_table::prelude::*; - + mod suppliers_table; - + use suppliers_table::prelude::*; - - // -- code snippet -- - - // Convert this main function into async function - #[async_std::main] - async fn main() -> Result<()> { - // -- code snippet -- - } - ``` - - - -### Inserting Values into a Table with a Foreign Key - -Insert many suppliers in the `supplies` table - -```rust,no_run -// -- code snippet -- - -// Convert this main function into async function -#[async_std::main] -async fn main() -> Result<()> { - // -- code snippet -- - -+ let supplier_01 = SuppliersActiveModel { -+ supplier_name: Set("John Doe".to_owned()), -+ fruit_id: Set(1_i32), -+ ..Default::default() -+ }; - -+ let supplier_02 = SuppliersActiveModel { -+ supplier_name: Set("Jane Doe".to_owned()), -+ fruit_id: Set(2_i32), -+ ..Default::default() -+ }; - -+ let supplier_03 = SuppliersActiveModel { -+ supplier_name: Set("Junior Doe".to_owned()), -+ fruit_id: Set(3_i32), -+ ..Default::default() -+ }; - -+ let supplier_insert_operation = -+ Suppliers::insert_many(vec![supplier_01, supplier_02, supplier_03]) -+ .exec(&db) -+ .await; - -+ println!("INSERTED MANY: {:?}", supplier_insert_operation?); - - - Ok(()) -} -``` - - - -Executing the program returns - -```sh -$ INSERTED MANY: InsertResult { last_insert_id: 1 } -``` - -### SELECTing related tables - -SeaORM makes it easy to fetch a table and it's related table referenced by its primary key using the `Entity::find().find_with_related(Other_Entity).all(DatabaseConnection)` chain of methods. - -```rust,no_run -// --- Code Snippet --- -#[async_std::main] -async fn main() -> Result<()> { - let env_database_url = include_str!("../.env").trim(); - let split_url: Vec<&str> = env_database_url.split("=").collect(); - let database_url = split_url[1]; - - let db = Database::connect(database_url).await?; - - // -- Code snippet -- - - - let supplier_insert_operation = - Suppliers::insert_many(vec![supplier_01, supplier_02, supplier_03]) - .exec(&db) - .await; - - println!("INSERTED MANY: {:?}", supplier_insert_operation?); - -+ let who_supplies = Suppliers::find().find_with_related(Fruits).all(&db).await?; -+ dbg!(&who_supplies); - - Ok(()) - -} -``` - -The operation returns a `Vec` which contains a tuple `(Model, Vec) ` which is `Vec<(Model, Vec)>`. This means that the first `Model` , `tuple.0` is the `Model` that has relationships with the other `Model`s in the `tuple.1` index which is `Vec` . - -Running the program, prints: - -```sh -$ -[ - ( - Model { - supplier_id: 1, - supplier_name: "John Doe", - fruit_id: 1, - }, - [ - Model { - fruit_id: 1, - name: "Apple", - datetime_utc: 2022-01-26T09:16:43, - unit_price: 2, - sku: "FM2022AKB40", - }, - ], - ), - ( - Model { - supplier_id: 2, - supplier_name: "Jane Doe", - fruit_id: 2, - }, - [ - Model { - fruit_id: 2, - name: "Banana", - datetime_utc: 2022-01-26T09:16:43, - unit_price: 2, - sku: "FM2022AKB41", - }, - ], - ), - ( - Model { - supplier_id: 3, - supplier_name: "Junior Doe", - fruit_id: 3, - }, - [ - Model { - fruit_id: 3, - name: "Pineapple", - datetime_utc: 2022-01-26T09:16:43, - unit_price: 10, - sku: "FM2022AKB42", - }, - ], - ), -] -``` - ---- - -Thats SeaORM in action. A beginner friendly ORM, one codebase for MySQL, SQLite, MariaDB and PostgreSQL. What else could you ask for :) diff --git a/tutorials-book/src/ch02-00-todo-app-getting-started.md b/tutorials-book/src/ch02-00-todo-app-getting-started.md deleted file mode 100644 index 0c1900b..0000000 --- a/tutorials-book/src/ch02-00-todo-app-getting-started.md +++ /dev/null @@ -1,47 +0,0 @@ -# Chapter 2 - A Command-line TODO app - -A simple TODO app that demostrates using SeaORM, SQLite and Postgres to build a simple TODO application. This tutorial will simulate building an app with a local SQLite cache and remote storage of the contents of the cache using a HTTP server with a PostgreSQL backend. - -First, install PostgreSQL and SQLite and ensure PostgreSQL server is running. - -### Initializing the project directory - -A cargo workspace make development easier and share the building environment. The `HTTP` TODO client will be called `client` and the `HTTP server` will be called `server`. - -#### Initialize the `client` and `server` - -Create the workspace directory `todo-app` - -```sh -$ mkdir todo-app -``` - -Then switch to the workspace directory - -```sh -$ cd todo-app -``` - -Create the `client` and `server` projects - -```sh -$ cargo new client -``` - -```sh -$ cargo new server -``` - -Create a `Cargo.toml` in the root of the workspace directory to register the two projects - -`File: todo-app/Cargo.toml` - -```toml -[workspace] -members = [ - "client", - "server", -] -``` - -Next up is building the Web Server. diff --git a/tutorials-book/src/ch02-01-http-server.md b/tutorials-book/src/ch02-01-http-server.md deleted file mode 100644 index fe3e477..0000000 --- a/tutorials-book/src/ch02-01-http-server.md +++ /dev/null @@ -1,174 +0,0 @@ -# Building The Web Server - -### HTTP as the Protocol - -The client and server need a structured way to communicate with each other. HTTP will be the protocol chosen for this tutorial using simple `GET` and `POST`. - -## Install necessary dependencies - - - Switch to the `todo-app/server` directory to build the Web Server - - ```sh - $ cd server - ``` - - - Ensure you have installed Rust programming language [https://www.rust-lang.org/tools/install](https://www.rust-lang.org/tools/install) - - - Ensure you have `sea-orm-cli` installed [https://crates.io/crates/sea-orm-cli](https://crates.io/crates/sea-orm-cli) - - - `tokio` will be used as the async library used as it integrates well with `axum` which is the `HTTP framework` used - - ```sh - $ cargo add tokio --features full - ``` - - This adds `tokio` to `Cargo.toml` file - - - ```toml - [package] - name = "server" - version = "0.1.0" - edition = "2021" - - [dependencies] - + tokio = { version = "1.17.0", features = ["attributes"] } - ``` - - - Add `anyhow` crate for error handling, `axum` crate for HTTP handling, `dotenv` for fetching environment variables and `once_cell` to allow global access to the database connection `sea_orm::DatabaseConnection`. - - ```sh - $ cargo add anyhow axum dotenv once_cell - ``` - - An entry in the `Cargo.toml` file is added - - ```toml - [package] - name = "server" - version = "0.1.0" - edition = "2021" - - [dependencies] - + anyhow = "1.0.53" - + axum = "1.0.0" - + dotenv = "0.15.0" - + once_cell = "1.10.0" - tokio = { version = "1.17.0", features = ["full"] } - ``` - - - Add `serde` with the features to `derive` - - ```sh - $ cargo add serde --features derive - ``` - - This will allow deserialization of `JSON` requests from the client. `serde` is now added to `Cargo.toml` file. - - ```toml - [package] - name = "server" - version = "0.1.0" - edition = "2021" - - [dependencies] - anyhow = "1.0.53" - axum = "1.0.0" - dotenv = "0.15.0" - once_cell = "1.10.0" - + serde = { version = "1.0.136", features = ["derive"] } - tokio = { version = "1.17.0", features = ["full"] } - - ``` - - - - - Add `sea-orm` with the features to enable sql drivers for PostgreSQL backend - - ```sh - $ cargo add sea-orm --no-default-features --features "runtime-tokio-rustls sqlx-postgres macros" - ``` - - This adds sea-orm to `Cargo.toml` - - - ```toml - [package] - name = "server" - version = "0.1.0" - edition = "2021" - - [dependencies] - anyhow = "1.0.53" - axum = "1.0.0" - dotenv = "0.15.0" - once_cell = "1.10.0" - serde = { version = "1.0.136", features = ["derive"] } - tokio = { version = "1.17.0", features = ["full"] } - - + sea-orm = { version = "0.6.0", features = [ - + "runtime-tokio-rustls", - + "sqlx-postgres", - + "macros", - + ], default-features = false } - ``` - Change the main function to async function for integration with `tokio` and using `anyhow` crate to handle and propagate the errors. - - ```rust,no_run,noplayground - - fn main() { - - println!("Hello, world!"); - - } - - + #[tokio::main] - + async fn main() -> anyhow::Result<()> { - + Ok(()) - + } - ``` - -## Creating a new user and database - - - Login to Postgres database and create a new user and database - - ```sh - $ sudo -u postgres psql postgres - ``` - - - Create a new user in the PostgreSQL prompt. - - ```sh - postgres=# CREATE ROLE webmaster LOGIN PASSWORD 'master_char'; - ``` - - - Create the `fruits_market` database and assign it to the `webmaster` user - - ```sh - postgres=# CREATE DATABASE fruits_market WITH OWNER = webmaster; - ``` - -## Configuring the database environment - - - Create a `.env` file in the workspace directory - - The file structure should look - - ```sh - todo-app - |-- Cargo.toml - |-- server - |-- src - |-- Cargo.toml - + |-- .env - |-- client - ``` - - - Configure the database environment by editing the `.env` file - - File: `todo-app/server/.env` - - ```sh - + DATABASE_URL=postgres://webmaster:master_char@localhost/fruits_market - ``` - - - - Next, we will create all the required tables and their relationships diff --git a/tutorials-book/src/ch02-02-tables.md b/tutorials-book/src/ch02-02-tables.md deleted file mode 100644 index e6896fd..0000000 --- a/tutorials-book/src/ch02-02-tables.md +++ /dev/null @@ -1,252 +0,0 @@ -# Creating Tables - -First, create a database config for the `sea_orm::DatabaseConnection` to use to connect and authenticate to the PostgreSQL server. - -```rust,no_run,noplayground -+ use once_cell::sync::OnceCell; -+ use sea_orm::{DatabaseConnection, Database}; -+ use dotenv::dotenv; - -+ static DATABASE_CONNECTION: OnceCell = OnceCell::new(); - -#[tokio::main] -async fn main() -> anyhow::Result<()> { - dotenv().ok(); - - // Read the database environment from the `.env` file - let database_url = dotenv::var("DATABASE_URL")?; - let db = Database::connect(database_url).await?; - DATABASE_CONNECTION.set(db).unwrap(); - - Ok(()) -} -``` - -`dotenv::var()` is used to load the configuration `DATABASE_URL` as specified in the `.env` file. This is passed to the `Database::connect()` method in order to create a `sea_orm::DatabaseConnection` which executes queries in the database. The database connection is exported to the global scope using `once_cell` crate as a static global variable - -`static DATABASE_CONNECTION: OnceCell = OnceCell::new();` - -This is later set to the `DatabaseConnection` using ` DATABASE_CONNECTION.set(db).unwrap();`. - -Add the code to create the tables, `todos` and `fruits`. - -**FILE**:***src/main.rs*** - -```rust,no_run,noplayground - use async_std::sync::Arc; -- use sea_orm::{Database, DatabaseConnection}; -+ use sea_orm::{ -+ sea_query::{Alias, ColumnDef, ForeignKey, ForeignKeyAction, Table}, -+ ConnectionTrait, Database, DatabaseConnection, DbBackend, -+ }; - -#[async_std::main] -async fn main() -> anyhow::Result<()> { - -// --- code snippet --- - -//Define the database backend - let db_postgres = DbBackend::Postgres; - - dotenv().ok(); - - // Read the database environment from the `.env` file - let database_url = dotenv::var("DATABASE_URL")?; - let db = Database::connect(database_url).await?; - DATABASE_CONNECTION.set(db).unwrap(); - - // Create the fruits table - let fruits_table = Table::create() - .table(Alias::new("fruits")) - .if_not_exists() - .col( - ColumnDef::new(Alias::new("fruit_id")) - .integer() - .auto_increment() - .primary_key() - .not_null(), - ) - .col( - ColumnDef::new(Alias::new("fruit_name")) - .string() - .unique_key() - .not_null(), - ) - .to_owned(); - - let db = DATABASE_CONNECTION.get().unwrap(); - - // Executing the SQL query to create the `fruits_table` in PostgreSQL - let create_table_op = db.execute(db_postgres.build(&fruits_table)).await; - // Print the result in a user friendly way - println!( - "`CREATE TABLE fruits` {:?}", - match create_table_op { - Ok(_) => "Operation Successful".to_owned(), - Err(e) => format!("Unsuccessful - Error {:?}", e), - } - ); - - // Create the `todos` table - let todos_table = Table::create() - .table(Alias::new("todos")) - .if_not_exists() - .col( - ColumnDef::new(Alias::new("todo_id")) - .integer() - .auto_increment() - .primary_key() - .not_null(), - ) - .col( - ColumnDef::new(Alias::new("username")) - .string() - .unique_key() - .not_null(), - ) - .col(ColumnDef::new(Alias::new("todo_list")).string()) - .to_owned(); - - // Executing the SQL query to create the `todos` table in PostgreSQL - let create_table_op = db.execute(db_postgres.build(&todos_table)).await; - // Print the result in a user friendly way - println!( - "`CREATE TABLE todos` {:?}", - match create_table_op { - Ok(_) => "Operation Successful".to_owned(), - Err(e) => format!("Unsuccessful - Error {:?}", e), - } - ); - - Ok(()) -} -``` - -The previous tutorial gave an introduction on creating tables. `Table::create()` is the method to do this. Then the `db.execute()` method performs the database operation for table creation. - -Next, use `sea-orm-cli` to auto-generate the code for `Entity`, `Model`, `Relation` , etc... - -```sh -$ sea-orm-cli generate entity -o src/todo_list_table -t todos #The todos table - -$ sea-orm-cli generate entity -o src/fruits_list_table -t fruits #The fruits table -``` - -This generates new directories - -```sh -SeaORM-TODO-App - |-- Cargo.toml - |-- .env - |-- src -+ |-- fruits_list_table -+ |-- mod.rs -+ |-- prelude.rs -+ |-- fruits.rs -+ |-- todo_list_table -+ |-- mod.rs -+ |-- prelude.rs -+ |-- todos.rs -``` - -Modify the `src/fruits_list_table/prelude.rs` and import the types using friendly names. - -```rust,no_run,noplayground -- pub use super::fruits::Entity as Fruits; - -+ pub use super::fruits::{ -+ ActiveModel as FruitsActiveModel, Column as FruitsColumn, Entity as Fruits, -+ Model as FruitsModel, PrimaryKey as FruitsPrimaryKey, Relation as FruitsRelation, -+ }; -``` - -Do the same to the `src/todo_list_table/prelude.rs` - -```rust,no_run,noplayground -//! SeaORM Entity. Generated by sea-orm-codegen 0.5.0 -- pub use super::todos::Entity as Todos; - -+ pub use super::todos::{ -+ ActiveModel as TodosActiveModel, Column as TodosColumn, Entity as Todos, Model as TodosModel, -+ PrimaryKey as TodosPrimaryKey, Relation as TodosRelation, -+ }; -``` - -Import these modules into `src/main.rs` - -```rust,no_run,noplayground -// --- code snippet --- -+ mod fruits_list_table; -+ mod todo_list_table; - -+ pub use fruits_list_table::prelude::*; -+ pub use todo_list_table::prelude::*; - -#[async_std::main] -async fn main() -> anyhow::Result<()> { - // --- code snippet --- - - Ok(()) - } -``` - -Next, populate the `fruits` table with a list of fruits. - -Create a new file `src/insert_values.rs` and add the following code: - -```rust,no_run,noplayground -use crate::{Fruits, FruitsActiveModel}; -use sea_orm::{DatabaseConnection, EntityTrait, Set}; - -// Insert suppliers in the `suppliers` table -pub async fn insert_fruits(db: &DatabaseConnection) -> anyhow::Result<()> { - let apple = FruitsActiveModel { - fruit_name: Set("Apple".to_owned()), - ..Default::default() - }; - - let orange = FruitsActiveModel { - fruit_name: Set("Orange".to_owned()), - ..Default::default() - }; - - let mango = FruitsActiveModel { - fruit_name: Set("Mango".to_owned()), - ..Default::default() - }; - - let pineapple = FruitsActiveModel { - fruit_name: Set("Pineapple".to_owned()), - ..Default::default() - }; - - let fruit_insert_operation = Fruits::insert_many(vec![apple, orange, mango, pineapple]) - .exec(db) - .await; - - println!("INSERTED FRUITS: {:?}", fruit_insert_operation?); - - Ok(()) -} - -``` - -Here, `ActiveModel` is used to prepare the data for insertion into the database using `Entity::insert()` . - -Import this module to the `src/main.rs` file and call these functions to perform insert operations - -```rust,no_run,noplayground -// --- code snippet --- -+ mod insert_values; -+ pub use insert_values::*; - -#[async_std::main] -async fn main() -> anyhow::Result<()> { - // --- code snippet --- - -+ insert_fruits(&db).await?; - - Ok(()) -} -``` - diff --git a/tutorials-book/src/ch02-03-server.md b/tutorials-book/src/ch02-03-server.md deleted file mode 100644 index 412638e..0000000 --- a/tutorials-book/src/ch02-03-server.md +++ /dev/null @@ -1,279 +0,0 @@ -# Building Server Connections and Responses - -Create a new file in the `src` folder called `routing.rs`. - -Then register the module to the `src.main.rs` file - -```rust,no_run,noplayground -// -- code snippet -- - -mod routing; -pub use routing::*; - -#[async_std::main] -async fn main() -> anyhow::Result<()> { - // -- code snippet -- - - Ok(()) -} -``` - - - -#### The HTTP API - -The HTTP API will take the following routes : - -`/` route to indicate that the server is online. - -`/fruits` to fetch a list of all the fruits in the database. - -`/store` to insert a `username` and `todo_list` in the database. - -`/update_todo` to perform an update to the `todo_list`. - -Create these routes in the `connection.rs` file. - -`File: todo-app/src/connection.rs` - -```rust,no_run,noplayground -use crate::{Fruits, Todos, TodosActiveModel, TodosColumn, DATABASE_CONNECTION}; -use axum::{http::StatusCode, response::IntoResponse, Json}; -use sea_orm::{ActiveModelTrait, ColumnTrait, EntityTrait, QueryFilter, Set}; -use serde::Deserialize; - -#[derive(Deserialize, Debug)] -pub struct Store { - username: String, - todo_list: String, -} - -``` - -Here, the `Store` struct is used to handle all incoming JSON data in a `POST` request. It deserializes the `username` and `todo_list` from a JSON string. - -#### Responsders - -The `/` route will be handled by the function `root()` - -```rust,no_run.noplayground -pub async fn root() -> &'static str { - "Remote PostgreSQL Server Online!" -} -``` - -The `/fruits` route will be handled by the function `get_fruits()`. - -```rust,no_run,noplayground -pub async fn get_fruits() -> impl IntoResponse { - let db = DATABASE_CONNECTION.get().unwrap(); - - match Fruits::find().all(db).await { - Ok(fruit_models) => { - let fruits = fruit_models - .iter() - .map(|fruit_model| fruit_model.fruit_name.clone()) - .collect::>(); - - (StatusCode::ACCEPTED, Json(fruits)) - } - Err(error) => ( - StatusCode::INTERNAL_SERVER_ERROR, - Json(vec![error.to_string()]), - ), - } -} -``` - -This function finds all the `fruit model`s in the `fruits` table, iterates over those models if any is found and takes the `fruit_name`s field of the model collecting them into a `Vec` , parses them into a JSON string and returns it as the result together with status code `201` from the `StatusCode::ACCEPTED` enum from the `http` crate re-exported by `axum`. In case of an error from the database, the error is converted into a JSON string using `Json(vec![error.to_string()]),` and returned together with a status code of `StatusCode::INTERNAL_SERVER_ERROR` of the `http` crate. This is a HTTP error `500`. - -Next, is the `insert` and `update` operations handled by the `store_todo()` and `update_todo()` functions respectively. - -```rust,no_run,noplayground - -pub async fn store_todo(Json(payload): Json) -> impl IntoResponse { - let db = DATABASE_CONNECTION.get().unwrap(); - - let todo_user = TodosActiveModel { - username: Set(payload.username.to_owned()), - todo_list: Set(Some(payload.todo_list.to_owned())), - ..Default::default() - }; - - match Todos::insert(todo_user).exec(db).await { - Ok(_) => (StatusCode::ACCEPTED, Json("INSERTED".to_owned())), - Err(error) => (StatusCode::INTERNAL_SERVER_ERROR, Json(error.to_string())), - } -} - -pub async fn update_todo(Json(payload): Json) -> impl IntoResponse { - let db = DATABASE_CONNECTION.get().unwrap(); - - match Todos::find() - .filter(TodosColumn::Username.contains(&payload.username)) - .one(db) - .await - { - Ok(found_model) => { - if let Some(model) = found_model { - let mut todo_model: TodosActiveModel = model.into(); - todo_model.todo_list = Set(Some(payload.todo_list.to_owned())); - match todo_model.update(db).await { - Ok(_) => (StatusCode::NO_CONTENT, Json("UPDATED_TODO".to_owned())), - Err(error) => (StatusCode::INTERNAL_SERVER_ERROR, Json(error.to_string())), - } - } else { - ( - StatusCode::INTERNAL_SERVER_ERROR, - Json("MODEL_NOT_FOUND".to_owned()), - ) - } - } - - Err(error) => (StatusCode::INTERNAL_SERVER_ERROR, Json(error.to_string())), - } -} -``` - -This functions are similar and have the same structure as the `get_fruits()` function in terms of their generated results and the error handling. However, the `store_todo()` function responds with the JSON string `INSERTED` while the `update_todo()` function responds with `UPDATED_TODO` JSON string in case of a successful update or a `MODEL_NOT_FOUND` JSON string in case the `username` that is being updated does not exist. - -Now that we have established how the API will be access and perform database operations, add the code to the source file. - -`File: todo-app/src/routing.rs` - -```rust,no_run,noplayground -use crate::{Fruits, Todos, TodosActiveModel, TodosColumn, DATABASE_CONNECTION}; -use axum::{http::StatusCode, response::IntoResponse, Json}; -use sea_orm::{ActiveModelTrait, ColumnTrait, EntityTrait, QueryFilter, Set}; -use serde::Deserialize; - -#[derive(Deserialize, Debug)] -pub struct Store { - username: String, - todo_list: String, -} - -#[derive(Deserialize, Debug)] -pub struct GetUser { - username: String, -} - -pub async fn root() -> &'static str { - "Remote PostgreSQL Server Online!" -} - -pub async fn get_fruits() -> impl IntoResponse { - let db = DATABASE_CONNECTION.get().unwrap(); - - match Fruits::find().all(db).await { - Ok(fruit_models) => { - let fruits = fruit_models - .iter() - .map(|fruit_model| fruit_model.fruit_name.clone()) - .collect::>(); - - (StatusCode::ACCEPTED, Json(fruits)) - } - Err(error) => ( - StatusCode::INTERNAL_SERVER_ERROR, - Json(vec![error.to_string()]), - ), - } -} - -pub async fn store_todo(Json(payload): Json) -> impl IntoResponse { - let db = DATABASE_CONNECTION.get().unwrap(); - - let todo_user = TodosActiveModel { - username: Set(payload.username.to_owned()), - todo_list: Set(Some(payload.todo_list.to_owned())), - ..Default::default() - }; - - match Todos::insert(todo_user).exec(db).await { - Ok(_) => (StatusCode::ACCEPTED, Json("INSERTED".to_owned())), - Err(error) => (StatusCode::INTERNAL_SERVER_ERROR, Json(error.to_string())), - } -} - -pub async fn update_todo(Json(payload): Json) -> impl IntoResponse { - let db = DATABASE_CONNECTION.get().unwrap(); - - match Todos::find() - .filter(TodosColumn::Username.contains(&payload.username)) - .one(db) - .await - { - Ok(found_model) => { - if let Some(model) = found_model { - let mut todo_model: TodosActiveModel = model.into(); - todo_model.todo_list = Set(Some(payload.todo_list.to_owned())); - match todo_model.update(db).await { - Ok(_) => (StatusCode::NO_CONTENT, Json("UPDATED_TODO".to_owned())), - Err(error) => (StatusCode::INTERNAL_SERVER_ERROR, Json(error.to_string())), - } - } else { - ( - StatusCode::INTERNAL_SERVER_ERROR, - Json("MODEL_NOT_FOUND".to_owned()), - ) - } - } - - Err(error) => (StatusCode::INTERNAL_SERVER_ERROR, Json(error.to_string())), - } -} - -``` - -Lastly, add the routes to the `main.rs` file. - -`File: todo-app/src/main.rs` - -```rust,no_run,noplayground - use dotenv::dotenv; - use once_cell::sync::OnceCell; - use sea_orm::{ - sea_query::{Alias, ColumnDef, Table}, - ConnectionTrait, Database, DatabaseConnection, DbBackend, - }; -+ use std::net::SocketAddr; -+ use axum::{ -+ routing::{get, post}, -+ Router, -+ }; - -#[tokio::main] -async fn main() { -+ let app = Router::new() -+ .route("/", get(root)) -+ .route("/fruits", get(get_fruits)) -+ .route("/get_user", post(get_user)) -+ .route("/store", post(store_todo)) -+ .route("/update_todo", post(update_todo)); - -+ let addr = SocketAddr::from(([127, 0, 0, 1], 8080)); -+ println!("listening on http://{}", addr); -+ axum::Server::bind(&addr) -+ .serve(app.into_make_service()) -+ .await?; - - Ok(()) -} - -``` - - - -Run the program using `cargo run`. It print the following to the terminal - -```sh -$ Running `/media/su43/IGIED-01/Rust-Projects/SeaQL/todo-app/target/debug/server` -`CREATE TABLE fruits` "Operation Successful" -`CREATE TABLE todos` "Operation Successful" -INSERTED FRUITS: InsertResult { last_insert_id: 1 } -``` - -The server is now listening on `127.0.0.1:8080` for incoming `HTTP requests`. - -Next, we build the client. diff --git a/tutorials-book/src/ch02-04-00-client.md b/tutorials-book/src/ch02-04-00-client.md deleted file mode 100644 index be7309f..0000000 --- a/tutorials-book/src/ch02-04-00-client.md +++ /dev/null @@ -1,227 +0,0 @@ -# Building The HTTP Client - -This chapter focuses on creating the HTTP client. Switch to the `client` directory in the workspace. - -#### Configuration - -Add the necessary dependencies to create the client. - -```sh -$ cargo add tokio --features full - -$ cargo add anyhow - -$ cargo add serde --features derive - -$ cargo add serde_json - -$ cargo add minreq - -$ cargo add dotenv - -$ cargo add json -``` - -`serde_json` crate will deserialize the TODO list data structure that contains queued and completed TODOs into a JSON string for remote storage in the PostgreSQL database. The `json` crate will serialize JSON data to be sent over HTTP using the `minreq` crate. - -The todo client will also store local cache, simulating a real world setup especially for a desktop or mobile client. SQLite will be the preferred database for this tutorial due to it's popularity. A command line frontend will be used to keep the tutorial simple and easy to port to other domains like mobile device frameworks, desktop clients. - -Add `sea-orm` crate with the SQLite features enabled for the local persistent cache. The runtime features `runtime-tokio-rustls` are used since the async library for this client is `tokio` crate. - -```sh -$ cargo add sea-orm --features "runtime-tokio-rustls sqlx-sqlite macros" --no-default-features -``` - -Modify the main function in `src/main.rs` to use async-std - -```rust,no_run,noplayground -- fn main() { -- println!("Hello, world!"); -- } - -+ #[tokio::main] -+ async fn main() -> anyhow::Result<()>{ -+ Ok(()) -+ } -``` - -Next, create a `.env` file in the current directory. This will contain the database configuration. - -`File: TODO-Client/.env` - -```sh -DATABASE_URL=sqlite://my_todos.db -``` - -Here, the `sqlite` URL does not take a `username`, `password` and `IP` since SQLite does not have have a server, just the database name `my_todos.db`. - -Create an empty SQLite database using the command: - -```sh -$ sqlite3 my_todos.db "VACUUM;" -``` - -The `"VACUUM;"` part of the command will ensure the created database is not just held in memory but also persisted to the file system even though it is empty. - -#### Local SQLite Database Operations - -Top perform local database operations, create a file `src/db_ops.rs` which will contain functions to perform database operations. - -To serialize and deserialize the SQLite cache for the in-memory database, the struct `TodoList` is used: - -```rust,no_run,noplayground -// The structure for a TodoList -#[derive(Debug, Serialize, Default, Deserialize)] -pub struct TodoList { - pub queued: Vec, - pub completed: Vec, -} -``` - -This data structure holds the completed TODOs in the `completed` field and the incompleted TODOs in the `queued` field. Both of this fields hold a `Vec, - pub completed: Vec, -} - - -pub async fn create_todo_table(db: &DatabaseConnection) -> anyhow::Result<()> { - let database_backend = db.get_database_backend(); - // Create the `todos` table - let todos_table = Table::create() - .table(Alias::new("todo_list")) - .if_not_exists() - .col( - ColumnDef::new(Alias::new("todo_id")) - .integer() - .primary_key() - .not_null() - .auto_increment(), - ) - .col( - ColumnDef::new(Alias::new("todo_name")) - .string() - .unique_key() - .not_null(), - ) - .col(ColumnDef::new(Alias::new("quantity")).string().not_null()) - .col(ColumnDef::new(Alias::new("status")).boolean().not_null()) - .to_owned(); - let create_table_op = db.execute(database_backend.build(&todos_table)).await; - - // Executing the SQL query to create the `todos` table in SQLite - let create_table_op = db.execute(database_backend.build(&todos_table)).await; - // Print the result in a user friendly way - println!( - "`CREATE TABLE todo_list` {:?}", - match create_table_op { - Ok(_) => "Operation Successful".to_owned(), - Err(e) => format!("Unsuccessful - Error {:?}", e), - } - ); - - Ok(()) -} - -``` - -To use the `dotenv` crate to read the `DATABASE_URL` environment variable, add the following code to `src/main.rs`. - -`File: client/src/main.rs` - -```rust,no_run.noplayground -+ use dotenv::dotenv; -+ use sea_orm::Database; - -// -- code snippet -- -#[tokio::main] -async fn main() -> anyhow::Result<()>{ - -+ dotenv().ok(); - - // Read the database environment from the `.env` file -+ let database_url = dotenv::var("DATABASE_URL")?; -+ let db = Database::connect(database_url).await?; - Ok(()) -} -``` - -Then import the `db_ops` module into `src/main.rs` and call both functions. - -```rust,no_run,noplayground -// -- code snippet -- - -+ mod db_ops; -+ pub use db_ops::*; - -#[async_std::main] -async fn main() -> anyhow::Result<()> { - // -- code snippet -- - - // Read the database environment from the `.env` file - let database_url = dotenv::var("DATABASE_URL")?; - let db = Database::connect(database_url).await?; - -+ create_todo_table(&db).await?; - - Ok(()) -} - -``` - -Next is to auto-generate the `Model`, `ActiveModel` , `Entity`, etc... using the `sea-orm-cli` and pass in `--with-serde both` feature flag to auto-generate `serde::Serialize` and `serde::Deserialize` on the Entity. - -```sh -$ sea-orm-cli generate entity -o src/todo_list_table -t todo_list --with-serde both -``` - -This will create a new directory `todo_list_table` in the `src/` directory. - -Open the `src/todo_list_table/prelude.rs` file and import the `Entity`, `Model` and `ActiveModel` using friendly names. - -`File:src/todo_list_table/prelude.rs` - -```rust,no_run,noplayground -//! SeaORM Entity. Generated by sea-orm-codegen 0.6.0 - -- pub use super::todo_list::Entity as TodoList; - -+ pub use super::todo_list::{ -+ ActiveModel as MyTodosActiveModel, Column as MyTodosColumn, Entity as MyTodos, -+ Model as MyTodosModel, PrimaryKey as MyTodosPrimaryKey, Relation as MyTodosRelation, -+ }; - -``` - -Import the modules to the `src/main.rs` file - -```rust,no_run,noplayground - mod db_ops; -+ mod todo_list_table; - - pub use db_ops::*; -+ pub use todo_list_table::prelude::*; - -#[async_std::main] -async fn main() -> anyhow::Result<()> { - let db = database_config().await?; - create_todo_table(&db).await?; - - Ok(()) -} -``` diff --git a/tutorials-book/src/ch02-04-01-utils.md b/tutorials-book/src/ch02-04-01-utils.md deleted file mode 100644 index e47c1eb..0000000 --- a/tutorials-book/src/ch02-04-01-utils.md +++ /dev/null @@ -1,186 +0,0 @@ -# Formatting Utilities - -To create a better user experience, data will be formatted before it is displayed to the command line on `stdout`. - -#### Overview of Code Formatting - -Create a `utils.rs` file which will hold the utilities and add the following code blocks: - -`File: src/utils.rs` - -```rust,no_run,noplayground -use crate::MyTodosModel; -use tokio::sync::Mutex; -use std::collections::HashMap; - -pub(crate) const TITLE: &str = "FRUITS AVAILABLE"; -pub(crate) const NUMBER: &str = "No."; -pub(crate) const ADD_COMMAND: &str = "ADD"; -pub(crate) const DONE_COMMAND: &str = "DONE"; -pub(crate) const UNDO_COMMAND: &str = "UNDO"; -pub(crate) const EDIT_COMMAND: &str = "EDIT"; -pub(crate) const EXIT_COMMAND: &str = "EXIT"; - - -const DONE: &str = "DONE TODOS"; -const NOT_DONE: &str = "NOT DONE"; -const QUANTITY: &str = "QUANTITY"; - -pub(crate) type MemDB = Mutex>; - -pub fn clear_terminal() { - print!("\x1B[2J\x1B[1;1H"); -} - -pub fn synching() { - clear_terminal(); - println!("SYNCING TO DATABASE..."); -} -pub fn synching_to_server() { - println!("SYNCING TO SERVER..."); -} - -pub fn loading() { - clear_terminal(); - println!("LOADING FROM DATABASE..."); -} - -pub fn convert_case(word: &str) -> String { - let word = word.to_lowercase(); - let mut chars = word - .chars() - .map(|character| character.to_string()) - .collect::>(); - - chars[0] = chars[0].to_uppercase().to_string(); - - chars.into_iter().collect::() -} - -pub fn split_words(user_input: String) -> Vec { - user_input - .split(" ") - .map(|word| word.to_owned()) - .collect::>() -} - -``` - -The `TITLE` and `NUMBER` constants are used to format the headings for the `fruits` table which displays the list of fruits on the command-line interface. The constants `DONE`, `NOT_DONE` and `QUANTITY` are used as the headings of the TODO list. - -#### Interaction Commands - -To interact with the client, a user will input a command, similar to pressing a button in a GUI or any other GUI event that performs an operation based on user input. The current list of commands are: - -The `ADD_COMMAND` constant holds the `ADD` command. This command allows a user to `queue` a task in the TODO list. The format is `ADD QUANTITY_IN_KG FRUIT_NAME`. - -The `DONE_COMMAND` constant holds the `DONE` command. This command allows a user to mark a task as `completed` in the TODO list. The format is `DONE FRUIT_NAME`. - -The `UNDO_COMMAND` constant holds the `UNDO` command. This command allows a user to move a completed task back into the `queue` in the TODO list. The format is `UNDO FRUIT_NAME`. - -The `EDIT_COMMAND` constant holds the `EDIT` command. This command allows a user to `modify` a task in the TODO list by changing it's `quantity`. The format is `EDIT QUANTITY_IN_KG FRUIT_NAME`. - -The `EXIT_COMMAND` constant holds the `EXIT` command. This command allows a user to `exit` the client gracefully and sync the local database cache with the remote PostgreSQL server. The format is `EXIT `. - - - -#### Word formating - -A number of functions are presented in the code block above: - -`clear_terminal()` is used to clear the terminal using the command line specific flags `\x1B[2J\x1B[1;1H` - -`synching()` is used to show that the TODO list is being synced to the local SQLite database cache. - -`synching_to_server()` is used to show that the TODO list is being synced to the remote PostgreSQL database using the HTTP API built in the previous chapter. - -`loading()` is used to show that information about the user is being fetched from the remote PostgreSQL database. - -`convert_case()` is used to format the `fruit` name to `Title Case`, for example, a user can enter a fruit named `Apple` as `apple`, `Apple`, `aPPLe`, `ApplE`, etc... This makes the user experience much smoother. - -`split_words()` is used to split the text buffer from the user input into individual parts that correspond with the format specified in the `Commands` like `COMMAND QUANTITY_IN_KG FRUIT_NAME`. - - - -#### In-memory Database - -Instead of doing database I/O by querying SQLite database every time we need to check the existence of data, we will use an in-memory database described by `MemDB` which contains a `Mutex>` scoped to the internals of the crate. This is a `HashMap` indexed using a `String` which is the name of the todo in the `Model` and the value of the indexing key set to the `MyTodosModel`. The HashMap is protected by a `Mutex` for thread-safety. - -#### Formatting the TODO List - -To format the list of TODOs in local cache and display them to the command-line interface, add the following to the - -`File: src/utils.rs` - -```rust,no_run,noplayground -pub async fn format_todos(todo_models: &MemDB) { - println!("\n\n\n"); - if todo_models.lock().await.is_empty() { - println!("Oh My! There are no TODOs"); - } else { - let mut done = Vec::::default(); - let mut not_done = Vec::::default(); - - todo_models.lock().await.iter().for_each(|todo| { - if todo.1.status == 0 { - not_done.push(todo.1.to_owned()); - } else { - done.push(todo.1.to_owned()); - } - }); - - if not_done.is_empty() { - println!("Wohooo! All TODOs are Completed.") - } else { - println!("{QUANTITY:9}| {NOT_DONE:10}"); - println!("----------------"); - not_done.iter().for_each(|todo| { - println!("{:>8} | {:10}", todo.quantity, todo.todo_name); - }); - println!("----------------\n"); - } - - if done.is_empty() { - println!("----------------"); - println!("Bummer :( You Have Not Completed Any TODOs!"); - println!("----------------\n\n"); - } else { - println!("{QUANTITY:9}| {DONE:10}"); - println!("----------------"); - done.iter().for_each(|todo| { - println!("{:>8} | {:10}", todo.quantity, todo.todo_name); - }); - println!("----------------\n"); - } - } -} - -``` - -`format_todos()` functions takes the in-memory database and loops through it, first checking if there are no TODOs and prints `"Oh My! There are no TODOs"` . If TODOs are found, it iterates through them and sorts the `completed` todos into the `done` Vector declared by `let mut done = Vec::::default();` or the `queued` into the `not_done` declared by `let mut not_done = Vec::::default();` There are no completed TODOs but there are queued ones, it prints `"Bummer :( You Have Not Completed Any TODOs!"` and if there are no queued TODOs but completed ones, it prints `"Wohooo! All TODOs are Completed."`. - -The `MyTodosModel` is the `Model` for the `Entity` table `todo_list` in the local SQLite database cache. - -Import the `utils` module in the `src/main.rs` file - -```rust,no_run,noplayground - mod common; - mod db_ops; - mod todo_list_table; -+ mod utils; - - pub use common::*; - pub use db_ops::*; - pub use todo_list_table::prelude::*; -+ pub use utils::*; - -#[async_std::main] -async fn main() -> anyhow::Result<()> { - let db = database_config().await?; - create_todo_table(&db).await?; - - Ok(()) -} - -``` - diff --git a/tutorials-book/src/ch02-04-02-remote-db.md b/tutorials-book/src/ch02-04-02-remote-db.md deleted file mode 100644 index b1207de..0000000 --- a/tutorials-book/src/ch02-04-02-remote-db.md +++ /dev/null @@ -1,178 +0,0 @@ -# Remote Database Operations - -### Data Persistence to the local database - -First, import necessary dependencies - -`File: src/db_ops.rs` - -```rust,no_run,noplayground -+ use serde::{Serialize, Deserialize}; -+ use crate::{synching_to_server, MemDB, MyTodos, MyTodosActiveModel, MyTodosModel}; - -``` - -#### Fetching the fruits - -The `get_fruits()` function fetches the list of fruits from the remote PostgreSQL database using HTTP at the `/fruits` route. The response `response.as_str()?` is serialized using `serde_json` to reate the `fruits` list. - -`File: src/db_ops.rs` - -```rust,no_run,noplayground -pub async fn get_fruits() -> anyhow::Result> { - let response = minreq::get("http://127.0.0.1:8080/fruits").send()?; - - let fruits_list: Vec = serde_json::from_str(&response.as_str()?)?; - - Ok(fruits_list) -} -``` - -#### Storing the fruits in local cache - -The `store()` function takes a `DatabaseConnection` , `quantity` and `todo_name` as arguments and creates an `ActiveModel` as defined by `MyTodosActiveModel` which is then inserted into the SQLite cache using`MyTodos::insert()`. - -`File: src/db_ops.rs` - -```rust,no_run,noplayground -pub async fn store(db: &DatabaseConnection, quantity: &str, todo_name: &str) -> anyhow::Result<()> { - let my_todo = MyTodosActiveModel { - todo_name: Set(todo_name.to_owned()), - quantity: Set(quantity.to_owned()), - status: Set(0), - ..Default::default() - }; - - MyTodos::insert(my_todo).exec(db).await?; - - Ok(()) -} -``` - -#### Fetching the TODO Models from the local SQLite cache - -`get()` function fetches all the `TODO` models using `MyTodos::find().all()` returning all the fetched Models as `Vec` - -`File: src/db_ops.rs` - -```rust,no_run,noplayground -pub async fn get(db: &DatabaseConnection) -> Result, sea_orm::DbErr> { - MyTodos::find().all(db).await -} -``` - -#### Performing modifications on the local SQLite cache - -The `edit()` , `done()` and `undo()` functions perform modifications to the SQLite data. The `edit()` function modifies a TODO in the queue by changing it's `quantity`. The `done()` function moves an incomplete todo from the `queued` field of the `TodoList` struct into the `completed` field of the `TodoList` struct while the `undo()` function does the opposite, moving a TODO from the `completed` field to the `queued` field of the `TodoList` struct. - -`File: src/db_ops.rs` - -```rust,no_run,noplayground -pub async fn edit( - db: &DatabaseConnection, - todo_model: &MyTodosModel, - quantity: String, -) -> Result { - let mut todos_active_model: MyTodosActiveModel = todo_model.to_owned().into(); - todos_active_model.quantity = Set(quantity); - - Ok(todos_active_model.update(db).await?) -} - -pub async fn done( - db: &DatabaseConnection, - todo_model: &MyTodosModel, -) -> Result { - let mut todos_active_model: MyTodosActiveModel = todo_model.to_owned().into(); - todos_active_model.status = Set(1); - - Ok(todos_active_model.update(db).await?) -} - -pub async fn undo( - db: &DatabaseConnection, - todo_model: &MyTodosModel, -) -> Result { - let mut todos_active_model: MyTodosActiveModel = todo_model.to_owned().into(); - todos_active_model.status = Set(0); - - Ok(todos_active_model.update(db).await?) -} -``` - -#### Initializing the In-memory database with the SQLite cache - -Sometimes the `client` might not exit gracefully using the `EXIT` command, this prevents the `client` from syncing the cache with the remote database. The `load_sqlite_cache()` function loads the SQLite cache into in-memory database `MemDB`. It iterates the result of the `get()` function and uses the `todo_name` field of the `MyTodosModel` as the `key` of the `MemDB`. - -```rust,no_run,noplayground -pub(crate) async fn load_sqlite_cache( - db: &DatabaseConnection, - memdb: &mut MemDB, -) -> Result<(), sea_orm::DbErr> { - let sqlite_cache = get(&db).await?; - memdb.lock().await.clear(); - for mytodo_model in sqlite_cache { - memdb - .lock() - .await - .insert(mytodo_model.todo_name.clone(), mytodo_model); - } - - Ok(()) -} -``` - -#### Updating the remote database on graceful exit. - -The `update_remote_storage()` uses the `username` and contents of the `MemDB` to update the remote database over HTTP protocol. The `TodoList` struct is first initialized and the contents of the `MemDB` are sorted into `queued` and `completed` TODOs and then converted into JSON string. The `username` and this JSON string are also converted into JSON using the `json` crate and then sent to the remote server using `minreq` at the `/update_todo` route. If the HTTP response status code is `500` and the matching body data is `ome("MODEL_NOT_FOUND")`, then another request is made to the `/store` route where a new `username` is created and the `todo_list` added under that username. - -```rust,no_run,noplayground -pub async fn update_remote_storage(memdb: &MemDB, username: &str) -> anyhow::Result<()> { - let mut temp_list = TodoList::default(); - memdb.lock().await.values().for_each(|todo| { - if todo.status == 0 { - temp_list.queued.push(todo.to_owned()); - } else { - temp_list.completed.push(todo.to_owned()); - } - }); - - let todo_list = serde_json::to_string(&temp_list)?; - - synching_to_server(); - - let response = minreq::post("http://127.0.0.1:8080/update_todo") - .with_header("Content-Type", "application/json") - .with_body( - json::object! { - username: username, - todo_list: todo_list.clone(), - } - .dump(), - ) - .send()?; - - if response.status_code == 500 { - let body = serde_json::from_str::>(&response.as_str()?)?; - if body == Some("MODEL_NOT_FOUND".to_owned()) { - minreq::post("http://127.0.0.1:8080/store") - .with_header("Content-Type", "application/json") - .with_body( - json::object! { - username: username, - todo_list: todo_list, - } - .dump(), - ) - .send()?; - } - } - - Ok(()) -} - -``` - - - -Up next is reading from the terminal and performing database operations bases on the command. diff --git a/tutorials-book/src/ch02-04-03-stdout.md b/tutorials-book/src/ch02-04-03-stdout.md deleted file mode 100644 index f924acc..0000000 --- a/tutorials-book/src/ch02-04-03-stdout.md +++ /dev/null @@ -1,586 +0,0 @@ -# Reading User Input - -Rust standard library provides an easy way of reading from and writing to the command-line commonly known as `stdout`. First, create a file in the `src` folder called `user_input.rs`. - -`File: src/user_input.rs` - -```rust,no_run,noplayground -use crate::{ - format_todos, MemDB, ADD_COMMAND, DONE_COMMAND, EDIT_COMMAND, EXIT_COMMAND, NUMBER, TITLE, - UNDO_COMMAND, -}; -use std::io; - -pub async fn read_line( - buffer: &mut String, - fruits_list: &Vec, - memdb: &MemDB, - //todo_list: &Vec, -) -> anyhow::Result { - crate::clear_terminal(); - buffer.clear(); - println!("+--------------------------+"); - println!("+ {:^5}{:17}+", "COMMANDS", " "); - println!("+{:26}+", " "); - println!("→ {ADD_COMMAND:5}{:18}+", " "); - println!("→ {DONE_COMMAND:23}+"); - println!("→ {UNDO_COMMAND:23}+"); - println!("→ {EDIT_COMMAND:23}+"); - println!("→ {EXIT_COMMAND:23}+"); - println!("+{:26}+", " "); - println!("+--------------------------+"); - - println!("{NUMBER}| {TITLE:10}"); - println!("----------------"); - for (mut index, item) in fruits_list.iter().enumerate() { - index += 1; - println!("{index:2} | {item:10}"); - } - println!("--------------------------------------------"); - format_todos(&memdb).await; - - println!("Enter a fruit that is available.",); - let stdin = io::stdin(); // We get `Stdin` here. - stdin.read_line(buffer)?; - - Ok(buffer.to_owned()) -} - -``` - -`read_line()` is responsible for reading `stdout` for the user input and returning the user input as a String. It always clears the terminal using `utils::clear_terminal();` before the next input, clears the buffer to prevent stale commands using `buffer.clear()`, lists the list of fruits that the user can add and formats the TODOs printing the sorted TODO list and a set of commands that the user can input to interact with the client. - -#### User Input Handler - -To handle the input create a file in the `src` directory called `handler.rs` - -`File: src/handler.rs` - -```rust,no_run,noplayground -use crate::{ - convert_case, done, edit, get_fruits, load_sqlite_cache, loading, read_line, split_words, - store, synching, undo, update_remote_storage, MemDB, -}; -use std::io; -use sea_orm::DatabaseConnection; -use std::collections::HashMap; - -pub async fn input_handler(db: &DatabaseConnection) -> anyhow::Result<()> { - let mut username_buffer = String::default(); - println!("What is Your Username...",); - let stdin = io::stdin(); // We get `Stdin` here. - stdin.read_line(&mut username_buffer)?; - let username = username_buffer.trim().to_string(); - - let fruits_list: Vec = get_fruits().await?; - - let mut buffer = String::new(); - let mut text_buffer: String; - let mut memdb = MemDB::new(HashMap::default()); - loading(); - load_sqlite_cache(db, &mut memdb).await?; - - loop { - read_line(&mut buffer, fruits_list.as_ref(), &memdb).await?; - buffer = buffer.trim().to_owned(); - let words = split_words(buffer.clone()); - let command = words[0].to_lowercase().to_string(); - let mut quantity: &str = ""; - if command.as_str() == "done" || command.as_str() == "undo" { - text_buffer = convert_case(&words[1]); - } else if command.as_str() == "exit" { - update_remote_storage(&memdb, &username).await?; - println!("SYNCED SUCCESSFULLY."); - println!("Bye! :)"); - break; - } else { - quantity = &words[1]; - text_buffer = convert_case(&words[2]); - } - - if !text_buffer.is_empty() { - match fruits_list.iter().find(|&fruit| *fruit == text_buffer) { - None => { - if !text_buffer.is_empty() { - println!("The fruit `{buffer}` is not available.\n",); - } - continue; - } - Some(_) => { - if command.as_str() == "add" { - if memdb.lock().await.contains_key(&text_buffer) { - continue; - //TODO - } else { - synching(); - store(&db, quantity, &text_buffer).await?; - load_sqlite_cache(&db, &mut memdb).await?; - } - } else if command.as_str() == "edit" { - if let Some(mut todo_model) = memdb.lock().await.get_mut(&text_buffer) { - if todo_model.status != 1 { - synching(); - edit(&db, todo_model, quantity.to_owned()).await?; - todo_model.quantity = quantity.to_owned(); - } - } else { - continue; - } - } else if command.as_str() == "done" { - if let Some(todo_model) = memdb.lock().await.get_mut(&text_buffer) { - if todo_model.status == 0 { - synching(); - let updated_model = done(&db, todo_model).await?; - *todo_model = updated_model; - } - continue; - } else { - continue; - } - } else if command.as_str() == "undo" { - if let Some(todo_model) = memdb.lock().await.get_mut(&text_buffer) { - if todo_model.status == 1 { - synching(); - let updated_model = undo(&db, todo_model).await?; - *todo_model = updated_model; - } - continue; - } else { - continue; - } - } else { - dbg!("Unsupported Command"); - break; - } - } - } - } - } - - Ok(()) -} - -``` - -The code block above is nested and there are comments to help understanding it. Simply, it: - -- reads the `username` -- looks up the `username` from the remote PostgreSQL database -- Loads the local TODO list cache from the local SQLite database -- Stores the loaded local TODO list cache into `MemDB` in-memory database -- reads `stdin` for user input into a `buffer` -- splits the buffer into individual constituents and stores them in an array -- reads the first index of the array to get the command -- performs conditional operations on the command and performs the necessary database operations -- If the command it not available it exits the program -- If the fruit provided is not available, it clears the buffer and reads `stdin` again -- if the command is `EXIT` , it syncs the local SQLite cache with the remote PostgreSQL database and exits. - -Lastly, import the modules into `src/main.rs` - -`File: src/main.rs` - -```rust,no_run,noplayground - mod common; - mod db_ops; -+ mod handler; - mod todo_list_table; -+ mod user_input; - mod utils; - - pub use common::*; - pub use db_ops::*; -+ pub use handler::*; - pub use todo_list_table::prelude::*; -+ pub use user_input::*; - pub use utils::*; - -#[async_std::main] -async fn main() -> anyhow::Result<()> { - let db = database_config().await?; - create_todo_table(&db).await?; - -+ input_handler(&db).await?; - - Ok(()) -} - -``` - -#### Running the Client and Server - -Running both the `todo-server` in the `TODO-Server` directory prints - -```sh -$ ../target/debug/todo-server -`CREATE TABLE fruits` "Operation Successful" -`CREATE TABLE todos` "Operation Successful" -Listening on 127.0.0.1:8080 - -``` - -Running the `todo-client` in the current directory prints. - -```sh -$ Running `target/debug/todo_client` -`CREATE TABLE todo_list` "Operation Successful" -What is Your Username... -``` - -**Enter a username like `user001`** - -This creates a new user in the PostgreSQL database since the user currently does not exist. Querying the PostgreSQL database prints - -```sh -fruits_market=# SELECT * FROM todos; - todo_id | username | todo_list ----------+----------+----------- - 2 | user001 | -(1 row) -``` - -The client then prints a list of fruits, commands and a TODO section: - -```sh -+--------------------------+ -+ COMMANDS + -+ + -→ ADD + -→ DONE + -→ UNDO + -→ EDIT + -→ EXIT + -+ + -+--------------------------+ -No.| FRUITS AVAILABLE ----------------- - 1 | Apple - 2 | Orange - 3 | Mango - 4 | Pineapple --------------------------------------------- - - - - -Oh My! There are no TODOs -Enter a fruit that is available. - -``` - -**Adding a fruit, like `ADD 5kg Apple` prints:** - -```sh -+--------------------------+ -+ COMMANDS + -+ + -→ ADD + -→ DONE + -→ UNDO + -→ EDIT + -→ EXIT + -+ + -+--------------------------+ -No.| FRUITS AVAILABLE ----------------- - 1 | Apple - 2 | Orange - 3 | Mango - 4 | Pineapple --------------------------------------------- - - - - -QUANTITY | NOT DONE ----------------- - 5kg | Apple ----------------- - ----------------- -Bummer :( You Have Not Completed Any TODOs! ----------------- - - -Enter a fruit that is available. - -``` - -A `NOT DONE` table is added and below that the statement `Bummer :( You Have Not Completed Any TODOs!` is printed showing that we have `TODOs` that are not done yet. - -**Add another fruit like `ADD 1kg OraNGe` will print:** - -```sh -+--------------------------+ -+ COMMANDS + -+ + -→ ADD + -→ DONE + -→ UNDO + -→ EDIT + -→ EXIT + -+ + -+--------------------------+ -No.| FRUITS AVAILABLE ----------------- - 1 | Apple - 2 | Orange - 3 | Mango - 4 | Pineapple --------------------------------------------- - - - - -QUANTITY | NOT DONE ----------------- - 5kg | Apple - 1kg | Orange ----------------- - ----------------- -Bummer :( You Have Not Completed Any TODOs! ----------------- - - -Enter a fruit that is available. - -``` - -Here, even though the fruit `Orange` is typed as `OraNGe`, it is still added since we handle this in the code using `convert_case()` function. - -**Now, edit the orange from `1Kg ` to `3kg` with `EDIT 3kg Orange`**. This prints: - -```sh -+--------------------------+ -+ COMMANDS + -+ + -→ ADD + -→ DONE + -→ UNDO + -→ EDIT + -→ EXIT + -+ + -+--------------------------+ -No.| FRUITS AVAILABLE ----------------- - 1 | Apple - 2 | Orange - 3 | Mango - 4 | Pineapple --------------------------------------------- - - - - -QUANTITY | NOT DONE ----------------- - 5kg | Apple - 3kg | Orange ----------------- - ----------------- -Bummer :( You Have Not Completed Any TODOs! ----------------- - - -Enter a fruit that is available. - -``` - -**Next, mark the `Apple` TODO as `done` using `DONE apple`**. This prints: - -```sh -+--------------------------+ -+ COMMANDS + -+ + -→ ADD + -→ DONE + -→ UNDO + -→ EDIT + -→ EXIT + -+ + -+--------------------------+ -No.| FRUITS AVAILABLE ----------------- - 1 | Apple - 2 | Orange - 3 | Mango - 4 | Pineapple --------------------------------------------- - - - - -QUANTITY | NOT DONE ----------------- - 3kg | Orange ----------------- - -QUANTITY | DONE TODOS ----------------- - 5kg | Apple ----------------- - -Enter a fruit that is available. - -``` - -A `DONE TODOS` table is created with the `Apple` as a member. - -**Next, mark the `Apple` as undone with `UNDO Apple`.** This prints: - -```sh -+--------------------------+ -+ COMMANDS + -+ + -→ ADD + -→ DONE + -→ UNDO + -→ EDIT + -→ EXIT + -+ + -+--------------------------+ -No.| FRUITS AVAILABLE ----------------- - 1 | Apple - 2 | Orange - 3 | Mango - 4 | Pineapple --------------------------------------------- - - - - -QUANTITY | NOT DONE ----------------- - 5kg | Apple - 3kg | Orange ----------------- - ----------------- -Bummer :( You Have Not Completed Any TODOs! ----------------- - - -Enter a fruit that is available. - - -``` - -The `Apple` is moved back to the `NOT DONE` table and since there are no DONE TODOs, the `DONE TODO` table is replaced by `Bummer :( You Have Not Completed Any TODOs!` . - -Next, complete all TODOs by marking both the `Orange` and `Apple` as done with: - - 1. `DONE Apple` - 1. `DONE orange` - -This prints: - -```sh -+--------------------------+ -+ COMMANDS + -+ + -→ ADD + -→ DONE + -→ UNDO + -→ EDIT + -→ EXIT + -+ + -+--------------------------+ -No.| FRUITS AVAILABLE ----------------- - 1 | Apple - 2 | Orange - 3 | Mango - 4 | Pineapple --------------------------------------------- - - - - -Wohooo! All TODOs are Completed. -QUANTITY | DONE TODOS ----------------- - 5kg | Apple - 3kg | Orange ----------------- - -Enter a fruit that is available. - - - -``` - -All TODOs are moved to the `DONE TODOS` table and the `NOT DONE` table is replaced by `Wohooo! All TODOs are Completed.` since all `TODOs` are done. This proves that our logic works. - -Lastly, exit the `todo-client` gracefully with the command `EXIT`. This syncs the in-memory database to the remote PostgreSQL server and then exits the program. It prints: - -```sh -SYNCING TO SERVER... -SYNCED SUCCESSFULLY. -Bye! :) -``` - -The state of the SQLite cache is: - -```sql -sqlite> SELECT * FROM todo_list ; -1|Apple|5kg|1 -2|Orange|3kg|1 -sqlite> - -``` - -The state of the PostgreSQL server is: - -```sql -fruits_market=# SELECT * FROM todos; - todo_id | username | todo_list ----------+----------+---------------------------------------------------------------------------------------------------------------------------------------------------------- - 2 | user001 | {"queued":[],"completed":[{"todo_id":2,"todo_name":"Orange","quantity":"3kg","status":1},{"todo_id":1,"todo_name":"Apple","quantity":"5kg","status":1}]} -(1 row) - -``` - -This shows that the TODO list has been successfully synced to remote storage. Running the client again with the same username `user001` should print the `DONE TODOS` from the persisted SQLite cache: - -```sh -+--------------------------+ -+ COMMANDS + -+ + -→ ADD + -→ DONE + -→ UNDO + -→ EDIT + -→ EXIT + -+ + -+--------------------------+ -No.| FRUITS AVAILABLE ----------------- - 1 | Apple - 2 | Orange - 3 | Mango - 4 | Pineapple --------------------------------------------- - - - - -Wohooo! All TODOs are Completed. -QUANTITY | DONE TODOS ----------------- - 5kg | Apple - 3kg | Orange ----------------- - -Enter a fruit that is available. - - -``` - - - -All the source code for the program can be found at [https://github.com/SeaQL/sea-orm-tutorial/tree/master/todo-app](https://github.com/SeaQL/sea-orm-tutorial/tree/master/todo-app). - -That's it for this tutorial. :) From d7aed2d9c8c718798ad126b484eca8e3e42f4be4 Mon Sep 17 00:00:00 2001 From: Sanford Pun Date: Tue, 31 May 2022 18:10:07 +0800 Subject: [PATCH 04/60] Draft ch01-00 --- tutorials-book/src/SUMMARY.md | 2 +- .../ch01-00-build-backend-getting-started.md | 27 +++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 tutorials-book/src/ch01-00-build-backend-getting-started.md diff --git a/tutorials-book/src/SUMMARY.md b/tutorials-book/src/SUMMARY.md index 38a75b4..4bfa3ee 100644 --- a/tutorials-book/src/SUMMARY.md +++ b/tutorials-book/src/SUMMARY.md @@ -4,8 +4,8 @@ ## Chapter 1 - Building a Backend with SeaORM -- [Chapter 1 - Building a Backend with SeaORM]() - [Project Setup]() +- [Chapter 1 - Building a Backend with SeaORM](ch01-00-build-backend-getting-started.md) - [Migration]() - [Entity Generation using sea-orm-cli]() - [Basic CRUD Operations]() diff --git a/tutorials-book/src/ch01-00-build-backend-getting-started.md b/tutorials-book/src/ch01-00-build-backend-getting-started.md new file mode 100644 index 0000000..16bdc42 --- /dev/null +++ b/tutorials-book/src/ch01-00-build-backend-getting-started.md @@ -0,0 +1,27 @@ +# Chapter 1 - Building a Backend with SeaORM + +In this chapter, we will build a backend application with SeaORM. It will act as a layer of communication with the database. + +The application will simulate the interface of a database of bakeries. For simplicity, there will be only two entities, `Bakery` and `Baker`. We will explore the schema later on. + +## Choosing a Database + +Before we start building the backend, we want to make sure that the database is up and running. Setting up the database is beyond the scope of this tutorial. + +SeaORM itself is agnostic to different database implementations, including MySQL, PostgreSQL, and SQLite (in files or in memory). + +However, depending on the database of your choice, you need to pay attention to the following: + +- The appropriate [DB driver feature](https://www.sea-ql.org/SeaORM/docs/install-and-config/database-and-async-runtime#database_driver) should be enabled. +- A valid connection string should be used: + +| Database | Example Connection String | +| :----------------: | :-----------------------: | +| MySQL | `mysql://root:root@localhost:3306` | +| PostgreSQL | `postgres://root:root@localhost:5432` | +| SQLite (in files) | `sqlite:./sqlite/` | +| SQLite (in memory) | `sqlite::memory:` | + +We will showcase exactly how to how and where to use them in the next section. + +Once the database is ready, we can proceed to [set up the project](ch01-01-project-setup.md). From 1601c5a267eaddbf03c798558f1cf73a004df57e Mon Sep 17 00:00:00 2001 From: Sanford Pun Date: Thu, 2 Jun 2022 12:15:47 +0800 Subject: [PATCH 05/60] Draft ch01-01 --- tutorials-book/src/SUMMARY.md | 2 +- .../ch01-00-build-backend-getting-started.md | 4 +- tutorials-book/src/ch01-01-project-setup.md | 123 ++++++++++++++++++ 3 files changed, 126 insertions(+), 3 deletions(-) create mode 100644 tutorials-book/src/ch01-01-project-setup.md diff --git a/tutorials-book/src/SUMMARY.md b/tutorials-book/src/SUMMARY.md index 4bfa3ee..071edd1 100644 --- a/tutorials-book/src/SUMMARY.md +++ b/tutorials-book/src/SUMMARY.md @@ -4,8 +4,8 @@ ## Chapter 1 - Building a Backend with SeaORM - - [Project Setup]() - [Chapter 1 - Building a Backend with SeaORM](ch01-00-build-backend-getting-started.md) + - [Project Setup](ch01-01-project-setup.md) - [Migration]() - [Entity Generation using sea-orm-cli]() - [Basic CRUD Operations]() diff --git a/tutorials-book/src/ch01-00-build-backend-getting-started.md b/tutorials-book/src/ch01-00-build-backend-getting-started.md index 16bdc42..ec939f8 100644 --- a/tutorials-book/src/ch01-00-build-backend-getting-started.md +++ b/tutorials-book/src/ch01-00-build-backend-getting-started.md @@ -13,9 +13,9 @@ SeaORM itself is agnostic to different database implementations, including MySQL However, depending on the database of your choice, you need to pay attention to the following: - The appropriate [DB driver feature](https://www.sea-ql.org/SeaORM/docs/install-and-config/database-and-async-runtime#database_driver) should be enabled. -- A valid connection string should be used: +- A valid database URL should be used: -| Database | Example Connection String | +| Database | Example Database URL | | :----------------: | :-----------------------: | | MySQL | `mysql://root:root@localhost:3306` | | PostgreSQL | `postgres://root:root@localhost:5432` | diff --git a/tutorials-book/src/ch01-01-project-setup.md b/tutorials-book/src/ch01-01-project-setup.md new file mode 100644 index 0000000..d05d87e --- /dev/null +++ b/tutorials-book/src/ch01-01-project-setup.md @@ -0,0 +1,123 @@ +# Project Setup + +In this section, we will set up our project, including the folder structure and crate dependencies. + +We will be using a **MySQL** database throughout the tutorials, but all functionalities of SeaORM are **agnostic to the database implementation**, as mentioned before. + +## Adding `sea-orm` as a Dependency + +```sh +$ cargo init bakery-backend +``` + +```diff +# Cargo.toml + +... + +[dependencies] ++ sea-orm = { version = "0.8.0", features = [ "sqlx-mysql", "runtime-async-std-native-tls", "macros" ] } + +... + +``` + +The DB driver feature `sqlx-mysql` is used because we are using MySQL. + +The second feature, `runtime-async-std-native-tls` is an async runtime arbitrarily chosen for this project. More information can be found on the [docs](https://www.sea-ql.org/SeaORM/docs/install-and-config/database-and-async-runtime/#async_runtime). + +Finally, the `macros` feature is an optional feature that allows the use of some `Derive` macros. + +## Connecting to the Database server + +We add `futures` as a dependency so that we can make use of asynchronous programming with `async`/`await`. + +```diff +# Cargo.toml + +... + +[dependencies] ++ futures = "0.3.21" +sea-orm = { version = "0.8.0", features = [ "sqlx-mysql", "runtime-async-std-native-tls", "macros" ] } + +... + +``` + +Connect to the database server: + +```rust, no_run +use futures::executor::block_on; +use sea_orm::{Database, DbErr}; + +// Change this according to your database implementation, +// or supply it as an environment variable. +const DATABASE_URL: &str = "mysql://root:root@localhost:3306"; + +async fn run() -> Result<(), DbErr> { + let db = Database::connect(DATABASE_URL).await?; + + Ok(()) +} + +fn main() { + if let Err(err) = block_on(run()) { + panic!("{}", err); + } +} +``` + +If everything is correctly set up, the program should terminate gracefully. + +If it panicks, it could be that the database URL is wrong. + +If it hangs, it could be that the database is not up and running. + +## Creating a Database + +For MySQL and PostgreSQL, we can create a specific database instance. Let's call it `bakeries_db`. + +```rust, no_run +... + +async fn run() -> Result<(), DbErr> { + let db = Database::connect(DATABASE_URL).await?; + ++ let db_name = "bakeries_db"; ++ let db = &match db.get_database_backend() { ++ DbBackend::MySql => { ++ db.execute(Statement::from_string( ++ db.get_database_backend(), ++ format!("CREATE DATABASE IF NOT EXISTS `{}`;", db_name), ++ )) ++ .await?; ++ ++ let url = format!("{}/{}", DATABASE_URL, db_name); ++ Database::connect(&url).await? ++ } ++ DbBackend::Postgres => { ++ db.execute(Statement::from_string( ++ db.get_database_backend(), ++ format!("DROP DATABASE IF EXISTS \"{}\";", db_name), ++ )) ++ .await?; ++ db.execute(Statement::from_string( ++ db.get_database_backend(), ++ format!("CREATE DATABASE \"{}\";", db_name), ++ )) ++ .await?; ++ ++ let url = format!("{}/{}", DATABASE_URL, db_name); ++ Database::connect(&url).await? ++ } ++ DbBackend::Sqlite => db, ++ }; + + Ok(()) +} + +... +``` + +This snippet shows that SeaORM is database-agnostic. You may only handle the case for your chosen database if you are sure only one type of database will be used. From 8da194760f5545cdfd7b0b38e62f3876443efd1a Mon Sep 17 00:00:00 2001 From: Sanford Pun Date: Thu, 2 Jun 2022 13:08:29 +0800 Subject: [PATCH 06/60] Edit SQLite (in file) example URL --- tutorials-book/src/ch01-00-build-backend-getting-started.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tutorials-book/src/ch01-00-build-backend-getting-started.md b/tutorials-book/src/ch01-00-build-backend-getting-started.md index ec939f8..39643c7 100644 --- a/tutorials-book/src/ch01-00-build-backend-getting-started.md +++ b/tutorials-book/src/ch01-00-build-backend-getting-started.md @@ -19,7 +19,7 @@ However, depending on the database of your choice, you need to pay attention to | :----------------: | :-----------------------: | | MySQL | `mysql://root:root@localhost:3306` | | PostgreSQL | `postgres://root:root@localhost:5432` | -| SQLite (in files) | `sqlite:./sqlite/` | +| SQLite (in file) | `sqlite:./sqlite.db?mode=rwc` | | SQLite (in memory) | `sqlite::memory:` | We will showcase exactly how to how and where to use them in the next section. From 8f8089396f8aabd99706afeed2a77a31a13eb2cb Mon Sep 17 00:00:00 2001 From: Sanford Pun Date: Tue, 31 May 2022 19:37:55 +0800 Subject: [PATCH 07/60] Add bakery-backend source code --- bakery-backend/.gitignore | 1 + bakery-backend/Cargo.toml | 10 +++++++++ bakery-backend/src/main.rs | 46 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 57 insertions(+) create mode 100644 bakery-backend/.gitignore create mode 100644 bakery-backend/Cargo.toml create mode 100644 bakery-backend/src/main.rs diff --git a/bakery-backend/.gitignore b/bakery-backend/.gitignore new file mode 100644 index 0000000..1de5659 --- /dev/null +++ b/bakery-backend/.gitignore @@ -0,0 +1 @@ +target \ No newline at end of file diff --git a/bakery-backend/Cargo.toml b/bakery-backend/Cargo.toml new file mode 100644 index 0000000..08fff2b --- /dev/null +++ b/bakery-backend/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "bakery-backend" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +futures = "0.3.21" +sea-orm = { version = "0.8.0", features = [ "sqlx-mysql", "runtime-async-std-native-tls", "macros" ] } diff --git a/bakery-backend/src/main.rs b/bakery-backend/src/main.rs new file mode 100644 index 0000000..10f5537 --- /dev/null +++ b/bakery-backend/src/main.rs @@ -0,0 +1,46 @@ +use futures::executor::block_on; +use sea_orm::{ConnectionTrait, Database, DbBackend, DbErr, Statement}; + +const DATABASE_URL: &str = "mysql://root:root@localhost:3306"; + +async fn run() -> Result<(), DbErr> { + let db = Database::connect(DATABASE_URL).await?; + + let db_name = "bakeries_db"; + let db = &match db.get_database_backend() { + DbBackend::MySql => { + db.execute(Statement::from_string( + db.get_database_backend(), + format!("CREATE DATABASE IF NOT EXISTS `{}`;", db_name), + )) + .await?; + + let url = format!("{}/{}", DATABASE_URL, db_name); + Database::connect(&url).await? + } + DbBackend::Postgres => { + db.execute(Statement::from_string( + db.get_database_backend(), + format!("DROP DATABASE IF EXISTS \"{}\";", db_name), + )) + .await?; + db.execute(Statement::from_string( + db.get_database_backend(), + format!("CREATE DATABASE \"{}\";", db_name), + )) + .await?; + + let url = format!("{}/{}", DATABASE_URL, db_name); + Database::connect(&url).await? + } + DbBackend::Sqlite => db, + }; + + Ok(()) +} + +fn main() { + if let Err(err) = block_on(run()) { + panic!("{}", err); + } +} From f4602848d19296db147382ca75d0fbb9f8c2b09e Mon Sep 17 00:00:00 2001 From: Sanford Pun Date: Thu, 2 Jun 2022 12:50:36 +0800 Subject: [PATCH 08/60] Add `sea-orm-migration` dependency --- bakery-backend/Cargo.toml | 1 + bakery-backend/src/main.rs | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/bakery-backend/Cargo.toml b/bakery-backend/Cargo.toml index 08fff2b..1fded76 100644 --- a/bakery-backend/Cargo.toml +++ b/bakery-backend/Cargo.toml @@ -8,3 +8,4 @@ edition = "2021" [dependencies] futures = "0.3.21" sea-orm = { version = "0.8.0", features = [ "sqlx-mysql", "runtime-async-std-native-tls", "macros" ] } +sea-orm-migration = "0.8.3" diff --git a/bakery-backend/src/main.rs b/bakery-backend/src/main.rs index 10f5537..bfbb2f8 100644 --- a/bakery-backend/src/main.rs +++ b/bakery-backend/src/main.rs @@ -1,5 +1,8 @@ +mod migrator; + use futures::executor::block_on; use sea_orm::{ConnectionTrait, Database, DbBackend, DbErr, Statement}; +use sea_orm_migration::prelude::*; const DATABASE_URL: &str = "mysql://root:root@localhost:3306"; @@ -35,6 +38,7 @@ async fn run() -> Result<(), DbErr> { } DbBackend::Sqlite => db, }; + let schema_manager = SchemaManager::new(db); // To investigate the schema Ok(()) } From a1c4b7f8c460d2a44c5ed6a69521b1d939ff01fa Mon Sep 17 00:00:00 2001 From: Sanford Pun Date: Thu, 2 Jun 2022 13:18:05 +0800 Subject: [PATCH 09/60] Create migrator module --- bakery-backend/src/migrator/mod.rs | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 bakery-backend/src/migrator/mod.rs diff --git a/bakery-backend/src/migrator/mod.rs b/bakery-backend/src/migrator/mod.rs new file mode 100644 index 0000000..6bc76eb --- /dev/null +++ b/bakery-backend/src/migrator/mod.rs @@ -0,0 +1,11 @@ +use sea_orm_migration::prelude::*; + +pub struct Migrator; + +#[async_trait::async_trait] +impl MigratorTrait for Migrator { + fn migrations() -> Vec> { + vec![ + ] + } +} From 2e9abbcb84dbdc147ef611788a0485714850ab91 Mon Sep 17 00:00:00 2001 From: Sanford Pun Date: Thu, 2 Jun 2022 13:26:56 +0800 Subject: [PATCH 10/60] Create migrations --- .../m20220602_000001_create_bakery_table.rs | 46 +++++++++++++++ .../m20220602_000002_create_baker_table.rs | 56 +++++++++++++++++++ bakery-backend/src/migrator/mod.rs | 5 ++ 3 files changed, 107 insertions(+) create mode 100644 bakery-backend/src/migrator/m20220602_000001_create_bakery_table.rs create mode 100644 bakery-backend/src/migrator/m20220602_000002_create_baker_table.rs diff --git a/bakery-backend/src/migrator/m20220602_000001_create_bakery_table.rs b/bakery-backend/src/migrator/m20220602_000001_create_bakery_table.rs new file mode 100644 index 0000000..03ae011 --- /dev/null +++ b/bakery-backend/src/migrator/m20220602_000001_create_bakery_table.rs @@ -0,0 +1,46 @@ +use sea_orm_migration::prelude::*; + +pub struct Migration; + +impl MigrationName for Migration { + fn name(&self) -> &str { + "m_20220602_000001_create_bakery_table" + } +} + +#[async_trait::async_trait] +impl MigrationTrait for Migration { + async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> { + manager + .create_table( + Table::create() + .if_not_exists() + .table(Bakery::Table) + .col( + ColumnDef::new(Bakery::Id) + .integer() + .not_null() + .auto_increment() + .primary_key(), + ) + .col(ColumnDef::new(Bakery::Name).string().not_null()) + .col(ColumnDef::new(Bakery::ProfitMargin).double().not_null()) + .to_owned(), + ) + .await + } + + async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> { + manager + .drop_table(Table::drop().table(Bakery::Table).to_owned()) + .await + } +} + +#[derive(Iden)] +pub enum Bakery { + Table, + Id, + Name, + ProfitMargin, +} diff --git a/bakery-backend/src/migrator/m20220602_000002_create_baker_table.rs b/bakery-backend/src/migrator/m20220602_000002_create_baker_table.rs new file mode 100644 index 0000000..91ee311 --- /dev/null +++ b/bakery-backend/src/migrator/m20220602_000002_create_baker_table.rs @@ -0,0 +1,56 @@ +use sea_orm_migration::prelude::*; + +use super::m20220602_000001_create_bakery_table::Bakery; + +pub struct Migration; + +impl MigrationName for Migration { + fn name(&self) -> &str { + "m_20220602_000002_create_baker_table" + } +} + +#[async_trait::async_trait] +impl MigrationTrait for Migration { + async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> { + manager + .create_table( + Table::create() + .if_not_exists() + .table(Baker::Table) + .col( + ColumnDef::new(Baker::Id) + .integer() + .not_null() + .auto_increment() + .primary_key(), + ) + .col(ColumnDef::new(Baker::Name).string().not_null()) + .col(ColumnDef::new(Baker::ContactDetails).json()) + .col(ColumnDef::new(Baker::BakeryId).integer().not_null()) + .foreign_key( + ForeignKey::create() + .name("fk-baker-bakery_id") + .from(Baker::Table, Baker::BakeryId) + .to(Bakery::Table, Bakery::Id), + ) + .to_owned(), + ) + .await + } + + async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> { + manager + .drop_table(Table::drop().table(Baker::Table).to_owned()) + .await + } +} + +#[derive(Iden)] +pub enum Baker { + Table, + Id, + Name, + ContactDetails, + BakeryId, +} diff --git a/bakery-backend/src/migrator/mod.rs b/bakery-backend/src/migrator/mod.rs index 6bc76eb..9cbc98b 100644 --- a/bakery-backend/src/migrator/mod.rs +++ b/bakery-backend/src/migrator/mod.rs @@ -1,11 +1,16 @@ use sea_orm_migration::prelude::*; +mod m20220602_000001_create_bakery_table; +mod m20220602_000002_create_baker_table; + pub struct Migrator; #[async_trait::async_trait] impl MigratorTrait for Migrator { fn migrations() -> Vec> { vec![ + Box::new(m20220602_000001_create_bakery_table::Migration), + Box::new(m20220602_000002_create_baker_table::Migration), ] } } From e7bccb5245a1387bdef9bcac9c929de5df2747b6 Mon Sep 17 00:00:00 2001 From: Sanford Pun Date: Thu, 2 Jun 2022 15:10:08 +0800 Subject: [PATCH 11/60] Use Migrator to define the database schema --- bakery-backend/src/main.rs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/bakery-backend/src/main.rs b/bakery-backend/src/main.rs index bfbb2f8..0cd9962 100644 --- a/bakery-backend/src/main.rs +++ b/bakery-backend/src/main.rs @@ -1,6 +1,7 @@ mod migrator; use futures::executor::block_on; +use migrator::Migrator; use sea_orm::{ConnectionTrait, Database, DbBackend, DbErr, Statement}; use sea_orm_migration::prelude::*; @@ -40,6 +41,13 @@ async fn run() -> Result<(), DbErr> { }; let schema_manager = SchemaManager::new(db); // To investigate the schema + Migrator::install(db).await?; + assert!(schema_manager.has_table("seaql_migrations").await?); + + Migrator::refresh(db).await?; + assert!(schema_manager.has_table("bakery").await?); + assert!(schema_manager.has_table("baker").await?); + Ok(()) } From e7b8dcf0107c589964e28ed505c83d02e9a587d3 Mon Sep 17 00:00:00 2001 From: Sanford Pun Date: Thu, 2 Jun 2022 18:52:49 +0800 Subject: [PATCH 12/60] Draft ch01-02 --- tutorials-book/src/SUMMARY.md | 5 +- tutorials-book/src/assets/er_diagram.png | Bin 0 -> 15499 bytes tutorials-book/src/ch01-02-migration-cli.md | 202 ++++++++++++++++++++ 3 files changed, 205 insertions(+), 2 deletions(-) create mode 100644 tutorials-book/src/assets/er_diagram.png create mode 100644 tutorials-book/src/ch01-02-migration-cli.md diff --git a/tutorials-book/src/SUMMARY.md b/tutorials-book/src/SUMMARY.md index 071edd1..733bcd0 100644 --- a/tutorials-book/src/SUMMARY.md +++ b/tutorials-book/src/SUMMARY.md @@ -6,8 +6,9 @@ - [Chapter 1 - Building a Backend with SeaORM](ch01-00-build-backend-getting-started.md) - [Project Setup](ch01-01-project-setup.md) - - [Migration]() - - [Entity Generation using sea-orm-cli]() + - [Migration (CLI)](ch01-02-migration-cli.md) + - [Migration (API)](ch01-02-migration-api.md) + - [Optional: Generate Entity from Existing Database]() - [Basic CRUD Operations]() - [Relational Select]() - [Testing with Mock Interface]() diff --git a/tutorials-book/src/assets/er_diagram.png b/tutorials-book/src/assets/er_diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..19b658c31787dd25c1a65f2982e866de1d27fab9 GIT binary patch literal 15499 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 &str { + "m20220101_000001_create_bakery_table" // Make sure this matches with the file name + } +} + +#[async_trait::async_trait] +impl MigrationTrait for Migration { + // Define how to apply this migration: Create the Bakery table. + async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> { + manager + .create_table( + Table::create() + .table(Bakery::Table) + .col( + ColumnDef::new(Bakery::Id) + .integer() + .not_null() + .auto_increment() + .primary_key(), + ) + .col(ColumnDef::new(Bakery::Name).string().not_null()) + .col(ColumnDef::new(Bakery::ProfitMargin).double().not_null()) + .to_owned(), + ) + .await + } + + // Define how to rollback this migration: Drop the Bakery table. + async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> { + manager + .drop_table(Table::drop().table(Bakery::Table).to_owned()) + .await + } +} + +// For ease of access +#[derive(Iden)] +pub enum Bakery { + Table, + Id, + Name, + ProfitMargin, +} +``` + +```rust, no_run +// m20220101_000002_create_baker_table.rs +use sea_orm_migration::prelude::*; + +use super::m20220101_000001_create_bakery_table::Bakery; + +pub struct Migration; + +impl MigrationName for Migration { + fn name(&self) -> &str { + "m_20220101_000002_create_baker_table" // Make sure this matches with the file name + } +} + +#[async_trait::async_trait] +impl MigrationTrait for Migration { + // Define how to apply this migration: Create the Baker table. + async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> { + manager + .create_table( + Table::create() + .table(Baker::Table) + .col( + ColumnDef::new(Baker::Id) + .integer() + .not_null() + .auto_increment() + .primary_key(), + ) + .col(ColumnDef::new(Baker::Name).string().not_null()) + .col(ColumnDef::new(Baker::ContactDetails).json()) + .col(ColumnDef::new(Baker::BakeryId).integer().not_null()) + .foreign_key( + ForeignKey::create() + .name("fk-baker-bakery_id") + .from(Baker::Table, Baker::BakeryId) + .to(Bakery::Table, Bakery::Id), + ) + .to_owned(), + ) + .await + } + + // Define how to rollback this migration: Drop the Baker table. + async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> { + manager + .drop_table(Table::drop().table(Baker::Table).to_owned()) + .await + } +} + +// For ease of access +#[derive(Iden)] +pub enum Baker { + Table, + Id, + Name, + ContactDetails, + BakeryId, +} +``` + +```rust, no_run +// migration/src/lib.rs +pub use sea_orm_migration::prelude::*; + +// Add each migration file as a module +mod m20220101_000001_create_bakery_table; +mod m20220101_000002_create_baker_table; + +pub struct Migrator; + +#[async_trait::async_trait] +impl MigratorTrait for Migrator { + fn migrations() -> Vec> { + vec![ + // Define the order of migrations. + Box::new(m20220101_000001_create_bakery_table::Migration), + Box::new(m20220101_000002_create_baker_table::Migration), + ] + } +} +``` + +**Important**: Make sure the following features are enabled in the `migration` crate. The database driver feature must match the database being used. + +```diff +# migration/Cargo.toml + +... + +[dependencies.sea-orm-migration] +version = "^0.8.0" +features = [ ++ "sqlx-mysql", ++ "runtime-async-std-native-tls", +] +``` + +Apply all the migrations through `sea-orm-cli`: + +```sh +# Change the value of DATABASE_URL according to your database implementation, +# or supply it in '.env'. +# Make sure the database name is also supplied. +$ DATABASE_URL="mysql://root:root@localhost:3306/bakeries_db" sea-orm-cli migrate refresh +``` From 6d62e734161168cf66b429de44dff8d6e5802f5a Mon Sep 17 00:00:00 2001 From: Sanford Pun Date: Tue, 7 Jun 2022 15:56:45 +0800 Subject: [PATCH 13/60] Draft ch01-03 --- tutorials-book/src/SUMMARY.md | 2 +- tutorials-book/src/ch01-01-project-setup.md | 5 + tutorials-book/src/ch01-02-migration-cli.md | 21 +- tutorials-book/src/ch01-03-migration-api.md | 225 ++++++++++++++++++++ 4 files changed, 246 insertions(+), 7 deletions(-) create mode 100644 tutorials-book/src/ch01-03-migration-api.md diff --git a/tutorials-book/src/SUMMARY.md b/tutorials-book/src/SUMMARY.md index 733bcd0..90e3f8b 100644 --- a/tutorials-book/src/SUMMARY.md +++ b/tutorials-book/src/SUMMARY.md @@ -7,7 +7,7 @@ - [Chapter 1 - Building a Backend with SeaORM](ch01-00-build-backend-getting-started.md) - [Project Setup](ch01-01-project-setup.md) - [Migration (CLI)](ch01-02-migration-cli.md) - - [Migration (API)](ch01-02-migration-api.md) + - [Migration (API)](ch01-03-migration-api.md) - [Optional: Generate Entity from Existing Database]() - [Basic CRUD Operations]() - [Relational Select]() diff --git a/tutorials-book/src/ch01-01-project-setup.md b/tutorials-book/src/ch01-01-project-setup.md index d05d87e..83cde04 100644 --- a/tutorials-book/src/ch01-01-project-setup.md +++ b/tutorials-book/src/ch01-01-project-setup.md @@ -48,6 +48,8 @@ sea-orm = { version = "0.8.0", features = [ "sqlx-mysql", "runtime-async-std-nat Connect to the database server: ```rust, no_run +// main.rs + use futures::executor::block_on; use sea_orm::{Database, DbErr}; @@ -79,6 +81,9 @@ If it hangs, it could be that the database is not up and running. For MySQL and PostgreSQL, we can create a specific database instance. Let's call it `bakeries_db`. ```rust, no_run +... +// main.rs + ... async fn run() -> Result<(), DbErr> { diff --git a/tutorials-book/src/ch01-02-migration-cli.md b/tutorials-book/src/ch01-02-migration-cli.md index d13bdab..6af10c3 100644 --- a/tutorials-book/src/ch01-02-migration-cli.md +++ b/tutorials-book/src/ch01-02-migration-cli.md @@ -4,7 +4,7 @@ In this section, we define the following simple schema with migrations. ![ER diagram of two entities, Bakery and Baker. Baker has a foreign key referencing Bakery.](./assets/er_diagram.png) -## Using `sea-orm-cli` +## Initialize using `sea-orm-cli` For beginners, it is recommended to use `sea-orm-cli` to define and run the migrations. @@ -33,8 +33,14 @@ bakery-backend │ │ main.rs ``` +## Define the migrations + Update the migration files to define the `Bakery` and `Baker` tables: +The filename must follow the format `m_<6-digit-index>_.rs`. + +For more information about defining migrations, read the documentation of [`SchemaManager`](https://docs.rs/sea-orm-migration/0.8.3/sea_orm_migration/manager/struct.SchemaManager.html). + ```diff - m20220101_000001_create_table.rs + m20220101_000001_create_bakery_table.rs @@ -43,6 +49,7 @@ Update the migration files to define the `Bakery` and `Baker` tables: ```rust, no_run // m20220101_000001_create_bakery_table.rs + use sea_orm_migration::prelude::*; pub struct Migration; @@ -83,7 +90,6 @@ impl MigrationTrait for Migration { } } -// For ease of access #[derive(Iden)] pub enum Bakery { Table, @@ -95,6 +101,7 @@ pub enum Bakery { ```rust, no_run // m20220101_000002_create_baker_table.rs + use sea_orm_migration::prelude::*; use super::m20220101_000001_create_bakery_table::Bakery; @@ -157,6 +164,7 @@ pub enum Baker { ```rust, no_run // migration/src/lib.rs + pub use sea_orm_migration::prelude::*; // Add each migration file as a module @@ -192,11 +200,12 @@ features = [ ] ``` -Apply all the migrations through `sea-orm-cli`: +## Perform the migrations + +Perform all the migrations through `sea-orm-cli`: ```sh -# Change the value of DATABASE_URL according to your database implementation, -# or supply it in '.env'. -# Make sure the database name is also supplied. +# Change the value of DATABASE_URL according to your database implementation. +# Make sure the database name is also supplied for MySQL or PostgreSQL. $ DATABASE_URL="mysql://root:root@localhost:3306/bakeries_db" sea-orm-cli migrate refresh ``` diff --git a/tutorials-book/src/ch01-03-migration-api.md b/tutorials-book/src/ch01-03-migration-api.md new file mode 100644 index 0000000..7a0462c --- /dev/null +++ b/tutorials-book/src/ch01-03-migration-api.md @@ -0,0 +1,225 @@ +# Migration (API) + +If you prefer to set up and run the migrations programmatically, we provide the `Migrator` API for that. + +This section covers how to perform migrations without the need to install and use the CLI tool. + +## Preparation + +Add the cargo dependency `sea-orm-migration`: + +```diff + +... + +[dependencies] +futures = "0.3.21" +sea-orm = { version = "0.8.0", features = [ "sqlx-mysql", "runtime-async-std-native-tls", "macros" ] } ++ sea-orm-migration = "0.8.3" + +... + +``` + +Create a module named `migrator`: + +```rust, no_run +// src/main.rs + ++ mod migrator; + +use futures::executor::block_on; +use sea_orm::{ConnectionTrait, Database, DbBackend, DbErr, Statement}; + +... +``` + +```rust, no_run +// src/migrator/mod.rs (create new file) + +use sea_orm_migration::prelude::*; + +pub struct Migrator; + +#[async_trait::async_trait] +impl MigratorTrait for Migrator { + fn migrations() -> Vec> { + vec![] + } +} +``` + +## Define the migrations + +Define a `Migration` in a file and include it in `migrator/mod.rs`: + +The filename must follow the format `m_<6-digit-index>_.rs`. + +For more information about defining migrations, read the documentation of [`SchemaManager`](https://docs.rs/sea-orm-migration/0.8.3/sea_orm_migration/manager/struct.SchemaManager.html). + +```rust, no_run +// src/migrator/m20220602_000001_create_bakery_table.rs (create new file) + +use sea_orm_migration::prelude::*; + +pub struct Migration; + +impl MigrationName for Migration { + fn name(&self) -> &str { + "m_20220602_000001_create_bakery_table" + } +} + +#[async_trait::async_trait] +impl MigrationTrait for Migration { + // Define how to apply this migration: Create the Bakery table. + async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> { + manager + .create_table( + Table::create() + .table(Bakery::Table) + .col( + ColumnDef::new(Bakery::Id) + .integer() + .not_null() + .auto_increment() + .primary_key(), + ) + .col(ColumnDef::new(Bakery::Name).string().not_null()) + .col(ColumnDef::new(Bakery::ProfitMargin).double().not_null()) + .to_owned(), + ) + .await + } + + // Define how to rollback this migration: Drop the Bakery table. + async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> { + manager + .drop_table(Table::drop().table(Bakery::Table).to_owned()) + .await + } +} + +#[derive(Iden)] +pub enum Bakery { + Table, + Id, + Name, + ProfitMargin, +} +``` + +```rust, no_run +// src/migrator/m20220602_000002_create_baker_table.rs (create new file) + +use sea_orm_migration::prelude::*; + +use super::m20220602_000001_create_bakery_table::Bakery; + +pub struct Migration; + +impl MigrationName for Migration { + fn name(&self) -> &str { + "m_20220602_000002_create_baker_table" + } +} + +#[async_trait::async_trait] +impl MigrationTrait for Migration { + // Define how to apply this migration: Create the Baker table. + async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> { + manager + .create_table( + Table::create() + .table(Baker::Table) + .col( + ColumnDef::new(Baker::Id) + .integer() + .not_null() + .auto_increment() + .primary_key(), + ) + .col(ColumnDef::new(Baker::Name).string().not_null()) + .col(ColumnDef::new(Baker::ContactDetails).json()) + .col(ColumnDef::new(Baker::BakeryId).integer().not_null()) + .foreign_key( + ForeignKey::create() + .name("fk-baker-bakery_id") + .from(Baker::Table, Baker::BakeryId) + .to(Bakery::Table, Bakery::Id), + ) + .to_owned(), + ) + .await + } + + // Define how to rollback this migration: Drop the Baker table. + async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> { + manager + .drop_table(Table::drop().table(Baker::Table).to_owned()) + .await + } +} + +#[derive(Iden)] +pub enum Baker { + Table, + Id, + Name, + ContactDetails, + BakeryId, +} +``` + +```rust, no_run +// src/migrator/mod.rs + +use sea_orm_migration::prelude::*; + ++ mod m20220602_000001_create_bakery_table; ++ mod m20220602_000002_create_baker_table; + +pub struct Migrator; + +#[async_trait::async_trait] +impl MigratorTrait for Migrator { + fn migrations() -> Vec> { + vec![ ++ Box::new(m20220602_000001_create_bakery_table::Migration), ++ Box::new(m20220602_000002_create_baker_table::Migration), + ] + } +} +``` + +## Perform the migrations + +Use the [`MigratorTrait API`](https://docs.rs/sea-orm-migration/0.8.3/sea_orm_migration/migrator/trait.MigratorTrait.html) to perform the migrations. Verify the correctness of the database schema with [`SchemaManager`](https://docs.rs/sea-orm-migration/0.8.3/sea_orm_migration/manager/struct.SchemaManager.html). + +```rust, no_run +// src/main.rs + +... + ++ use sea_orm_migration::prelude::*; + +... + +async fn run() -> Result<(), DbErr> { + + ... + ++ let schema_manager = SchemaManager::new(db); // To investigate the schema + ++ Migrator::install(db).await?; ++ assert!(schema_manager.has_table("seaql_migrations").await?); + ++ Migrator::refresh(db).await?; ++ assert!(schema_manager.has_table("bakery").await?); ++ assert!(schema_manager.has_table("baker").await?); + + Ok(()) +} + +... +``` From 15919089fcd501293d79fd5dbd07b90d70a3dfa9 Mon Sep 17 00:00:00 2001 From: Sanford Pun Date: Tue, 7 Jun 2022 16:13:26 +0800 Subject: [PATCH 14/60] Draft ch01-04 --- bakery-backend/src/entities/baker.rs | 33 ++++++++++++++++++ bakery-backend/src/entities/bakery.rs | 26 ++++++++++++++ bakery-backend/src/entities/mod.rs | 7 ++++ bakery-backend/src/entities/prelude.rs | 5 +++ .../src/entities/seaql_migrations.rs | 22 ++++++++++++ bakery-backend/src/main.rs | 6 ++-- tutorials-book/src/SUMMARY.md | 4 +-- tutorials-book/src/ch01-02-migration-cli.md | 2 ++ .../src/ch01-04-entity-generation.md | 34 +++++++++++++++++++ 9 files changed, 134 insertions(+), 5 deletions(-) create mode 100644 bakery-backend/src/entities/baker.rs create mode 100644 bakery-backend/src/entities/bakery.rs create mode 100644 bakery-backend/src/entities/mod.rs create mode 100644 bakery-backend/src/entities/prelude.rs create mode 100644 bakery-backend/src/entities/seaql_migrations.rs create mode 100644 tutorials-book/src/ch01-04-entity-generation.md diff --git a/bakery-backend/src/entities/baker.rs b/bakery-backend/src/entities/baker.rs new file mode 100644 index 0000000..a57a551 --- /dev/null +++ b/bakery-backend/src/entities/baker.rs @@ -0,0 +1,33 @@ +//! SeaORM Entity. Generated by sea-orm-codegen 0.8.0 + +use sea_orm::entity::prelude::*; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel)] +#[sea_orm(table_name = "baker")] +pub struct Model { + #[sea_orm(primary_key)] + pub id: i32, + pub name: String, + pub contact_details: Option, + pub bakery_id: i32, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm( + belongs_to = "super::bakery::Entity", + from = "Column::BakeryId", + to = "super::bakery::Column::Id", + on_update = "NoAction", + on_delete = "NoAction" + )] + Bakery, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::Bakery.def() + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/bakery-backend/src/entities/bakery.rs b/bakery-backend/src/entities/bakery.rs new file mode 100644 index 0000000..c9ff157 --- /dev/null +++ b/bakery-backend/src/entities/bakery.rs @@ -0,0 +1,26 @@ +//! SeaORM Entity. Generated by sea-orm-codegen 0.8.0 + +use sea_orm::entity::prelude::*; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel)] +#[sea_orm(table_name = "bakery")] +pub struct Model { + #[sea_orm(primary_key)] + pub id: i32, + pub name: String, + pub profit_margin: f64, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm(has_many = "super::baker::Entity")] + Baker, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::Baker.def() + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/bakery-backend/src/entities/mod.rs b/bakery-backend/src/entities/mod.rs new file mode 100644 index 0000000..2462768 --- /dev/null +++ b/bakery-backend/src/entities/mod.rs @@ -0,0 +1,7 @@ +//! SeaORM Entity. Generated by sea-orm-codegen 0.8.0 + +pub mod prelude; + +pub mod baker; +pub mod bakery; +pub mod seaql_migrations; diff --git a/bakery-backend/src/entities/prelude.rs b/bakery-backend/src/entities/prelude.rs new file mode 100644 index 0000000..7fba2d7 --- /dev/null +++ b/bakery-backend/src/entities/prelude.rs @@ -0,0 +1,5 @@ +//! SeaORM Entity. Generated by sea-orm-codegen 0.8.0 + +pub use super::baker::Entity as Baker; +pub use super::bakery::Entity as Bakery; +pub use super::seaql_migrations::Entity as SeaqlMigrations; diff --git a/bakery-backend/src/entities/seaql_migrations.rs b/bakery-backend/src/entities/seaql_migrations.rs new file mode 100644 index 0000000..c32c701 --- /dev/null +++ b/bakery-backend/src/entities/seaql_migrations.rs @@ -0,0 +1,22 @@ +//! SeaORM Entity. Generated by sea-orm-codegen 0.8.0 + +use sea_orm::entity::prelude::*; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel)] +#[sea_orm(table_name = "seaql_migrations")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub version: String, + pub applied_at: i64, +} + +#[derive(Copy, Clone, Debug, EnumIter)] +pub enum Relation {} + +impl RelationTrait for Relation { + fn def(&self) -> RelationDef { + panic!("No RelationDef") + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/bakery-backend/src/main.rs b/bakery-backend/src/main.rs index 0cd9962..e51b7c5 100644 --- a/bakery-backend/src/main.rs +++ b/bakery-backend/src/main.rs @@ -1,3 +1,4 @@ +mod entities; mod migrator; use futures::executor::block_on; @@ -5,6 +6,8 @@ use migrator::Migrator; use sea_orm::{ConnectionTrait, Database, DbBackend, DbErr, Statement}; use sea_orm_migration::prelude::*; +use entities::prelude::*; // Bring the entities `Baker` and `Bakery` into scope + const DATABASE_URL: &str = "mysql://root:root@localhost:3306"; async fn run() -> Result<(), DbErr> { @@ -41,9 +44,6 @@ async fn run() -> Result<(), DbErr> { }; let schema_manager = SchemaManager::new(db); // To investigate the schema - Migrator::install(db).await?; - assert!(schema_manager.has_table("seaql_migrations").await?); - Migrator::refresh(db).await?; assert!(schema_manager.has_table("bakery").await?); assert!(schema_manager.has_table("baker").await?); diff --git a/tutorials-book/src/SUMMARY.md b/tutorials-book/src/SUMMARY.md index 90e3f8b..fd53907 100644 --- a/tutorials-book/src/SUMMARY.md +++ b/tutorials-book/src/SUMMARY.md @@ -8,8 +8,8 @@ - [Project Setup](ch01-01-project-setup.md) - [Migration (CLI)](ch01-02-migration-cli.md) - [Migration (API)](ch01-03-migration-api.md) - - [Optional: Generate Entity from Existing Database]() - - [Basic CRUD Operations]() + - [Generate Entity from Database](ch01-04-entity-generation.md) + - [Basic CRUD Operations](ch01-05-basic-crud-operations.md) - [Relational Select]() - [Testing with Mock Interface]() - [Optional: Building SQL Queries with SeaQuery]() diff --git a/tutorials-book/src/ch01-02-migration-cli.md b/tutorials-book/src/ch01-02-migration-cli.md index 6af10c3..01f927c 100644 --- a/tutorials-book/src/ch01-02-migration-cli.md +++ b/tutorials-book/src/ch01-02-migration-cli.md @@ -1,5 +1,7 @@ # Migration (CLI) +*This and the next sections concern those who are getting a taste of SeaORM by creating a new, toy database schema. If you already have an existing database schema, feel free to skip over to [Section 1.4](ch01-04-entity-generation.md).* + In this section, we define the following simple schema with migrations. ![ER diagram of two entities, Bakery and Baker. Baker has a foreign key referencing Bakery.](./assets/er_diagram.png) diff --git a/tutorials-book/src/ch01-04-entity-generation.md b/tutorials-book/src/ch01-04-entity-generation.md new file mode 100644 index 0000000..c3030c1 --- /dev/null +++ b/tutorials-book/src/ch01-04-entity-generation.md @@ -0,0 +1,34 @@ +# Generate Entity from Database + +Now that we have a database with a defined schema, we can generate the entities with `sea-orm-cli`. + +`sea-orm-cli` is able to discover the schema given the database URL and generated the appropriate entity files. + +```sh +$ cargo install sea-orm-cli +``` + +```sh +# Generate entity files of database `bakeries_db` to `src/entities` +$ sea-orm-cli generate entity \ + -u mysql://root:root@localhost:3306/bakeries_db \ + -o src/entities +``` + +The generated entity files: + +``` +bakery-backend +│ ... +│ +└─── src +│ │ +│ └─── entities +│ │ baker.rs +│ │ bakery.rs +│ │ mod.rs +│ │ prelude.rs +│ │ seaql_migrations.rs +``` + +Put the focus on `baker.rs` and `bakery.rs`, they are the entities representing the tables `Baker` and `Bakery`, respectively. From 074fc35305ea04dda9e8e13cf8182d2d0e048530 Mon Sep 17 00:00:00 2001 From: Sanford Pun Date: Tue, 7 Jun 2022 19:04:24 +0800 Subject: [PATCH 15/60] Insert and update --- bakery-backend/src/main.rs | 29 ++++++- .../src/ch01-05-basic-crud-operations.md | 75 +++++++++++++++++++ 2 files changed, 101 insertions(+), 3 deletions(-) create mode 100644 tutorials-book/src/ch01-05-basic-crud-operations.md diff --git a/bakery-backend/src/main.rs b/bakery-backend/src/main.rs index e51b7c5..1be7224 100644 --- a/bakery-backend/src/main.rs +++ b/bakery-backend/src/main.rs @@ -1,13 +1,12 @@ mod entities; mod migrator; +use entities::{prelude::*, *}; use futures::executor::block_on; use migrator::Migrator; -use sea_orm::{ConnectionTrait, Database, DbBackend, DbErr, Statement}; +use sea_orm::*; use sea_orm_migration::prelude::*; -use entities::prelude::*; // Bring the entities `Baker` and `Bakery` into scope - const DATABASE_URL: &str = "mysql://root:root@localhost:3306"; async fn run() -> Result<(), DbErr> { @@ -48,6 +47,30 @@ async fn run() -> Result<(), DbErr> { assert!(schema_manager.has_table("bakery").await?); assert!(schema_manager.has_table("baker").await?); + // Insert and Update + { + let happy_bakery = bakery::ActiveModel { + name: ActiveValue::Set("Happy Bakery".to_owned()), + profit_margin: ActiveValue::Set(0.0), + ..Default::default() + }; + let res = Bakery::insert(happy_bakery).exec(db).await?; + + let sad_bakery = bakery::ActiveModel { + id: ActiveValue::Set(res.last_insert_id), + name: ActiveValue::Set("Sad Bakery".to_owned()), + profit_margin: ActiveValue::NotSet, + }; + sad_bakery.update(db).await?; + + let john = baker::ActiveModel { + name: ActiveValue::Set("John".to_owned()), + bakery_id: ActiveValue::Set(res.last_insert_id), + ..Default::default() + }; + Baker::insert(john).exec(db).await?; + } + Ok(()) } diff --git a/tutorials-book/src/ch01-05-basic-crud-operations.md b/tutorials-book/src/ch01-05-basic-crud-operations.md new file mode 100644 index 0000000..5c22e5d --- /dev/null +++ b/tutorials-book/src/ch01-05-basic-crud-operations.md @@ -0,0 +1,75 @@ +# Basic CRUD Operations + +In this section, we showcase how to perform basic operations with the schema we've defined. + +## `use` the Entities + +The entities are the Rust representation of the tables in the database. SeaORM enables us to make use of those entities to perform operations on the database programmatically. + +```rust, no_run +// src/main.rs + ++ mod entities; + +... + ++ use entities::*; + ++ use entities::{prelude::*, *}; + +... +``` + +## Insert and Update + +Insert and update operations can be performed using `ActiveModel` of the entities. + +Let's insert a new bakery called *Happy Bakery* into our `Bakery` table. + +```rust, no_run +// src/main.rs + +... + +use sea_orm::*; + +... + +async fn run() -> Result<(), DbErr> { + + ... + + let happy_bakery = bakery::ActiveModel { + name: ActiveValue::Set("Happy Bakery".to_owned()), + profit_margin: ActiveValue::Set(0.0), + ..Default::default() + }; + let res = Bakery::insert(happy_bakery).exec(db).await?; +} +``` + +Suppose, later on, the owner of *Happy Bakery* adopts a brand new perspective of life, and renames it to *Sad Bakery*. + +We can perform the update as follows: + +```rust, no_run +let sad_bakery = bakery::ActiveModel { + id: ActiveValue::Set(res.last_insert_id), + name: ActiveValue::Set("Sad Bakery".to_owned()), + profit_margin: ActiveValue::NotSet, +}; +sad_bakery.update(db).await?; +``` + +Let's welcome John, the first employee of *Sad Bakery*! + +```rust, no_run +let john = baker::ActiveModel { + name: ActiveValue::Set("John".to_owned()), + bakery_id: ActiveValue::Set(res.last_insert_id), // a foreign key + ..Default::default() +}; +Baker::insert(john).exec(db).await?; +``` + + From 463d921bee93c2142d292df887ddad9ee382397a Mon Sep 17 00:00:00 2001 From: Sanford Pun Date: Thu, 9 Jun 2022 15:26:17 +0800 Subject: [PATCH 16/60] Find (single entity) --- bakery-backend/src/main.rs | 17 +++++++++++++++++ .../src/ch01-05-basic-crud-operations.md | 19 +++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/bakery-backend/src/main.rs b/bakery-backend/src/main.rs index 1be7224..b48722e 100644 --- a/bakery-backend/src/main.rs +++ b/bakery-backend/src/main.rs @@ -71,6 +71,23 @@ async fn run() -> Result<(), DbErr> { Baker::insert(john).exec(db).await?; } + // Read + { + let bakeries: Vec = Bakery::find().all(db).await?; + assert_eq!(bakeries.len(), 1); + + // Finding by id is built-in + let sad_bakery: Option = Bakery::find_by_id(1).one(db).await?; + assert_eq!(sad_bakery.unwrap().name, "Sad Bakery"); + + // Finding by arbitrary column with `filter()` + let sad_bakery: Option = Bakery::find() + .filter(bakery::Column::Name.eq("Sad Bakery")) + .one(db) + .await?; + assert_eq!(sad_bakery.unwrap().id, 1); + } + Ok(()) } diff --git a/tutorials-book/src/ch01-05-basic-crud-operations.md b/tutorials-book/src/ch01-05-basic-crud-operations.md index 5c22e5d..6d843c8 100644 --- a/tutorials-book/src/ch01-05-basic-crud-operations.md +++ b/tutorials-book/src/ch01-05-basic-crud-operations.md @@ -72,4 +72,23 @@ let john = baker::ActiveModel { Baker::insert(john).exec(db).await?; ``` +## Find (single entity) +We can find all or some of the bakeries in the database as follows: + +```rust, no_run +// Finding all is built-in +let bakeries: Vec = Bakery::find().all(db).await?; +assert_eq!(bakeries.len(), 1); + +// Finding by id is built-in +let sad_bakery: Option = Bakery::find_by_id(1).one(db).await?; +assert_eq!(sad_bakery.unwrap().name, "Sad Bakery"); + +// Finding by arbitrary column with `filter()` +let sad_bakery: Option = Bakery::find() + .filter(bakery::Column::Name.eq("Sad Bakery")) + .one(db) + .await?; +assert_eq!(sad_bakery.unwrap().id, 1); +``` From ec2cc8c44969e87deff23446327e71933fd6b6a1 Mon Sep 17 00:00:00 2001 From: Sanford Pun Date: Thu, 9 Jun 2022 15:42:11 +0800 Subject: [PATCH 17/60] Delete --- bakery-backend/src/main.rs | 18 +++++++++++++++ .../src/ch01-05-basic-crud-operations.md | 23 +++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/bakery-backend/src/main.rs b/bakery-backend/src/main.rs index b48722e..b7ee69f 100644 --- a/bakery-backend/src/main.rs +++ b/bakery-backend/src/main.rs @@ -88,6 +88,24 @@ async fn run() -> Result<(), DbErr> { assert_eq!(sad_bakery.unwrap().id, 1); } + // Delete + { + let john = baker::ActiveModel { + id: ActiveValue::Set(1), // The primary must be set + ..Default::default() + }; + john.delete(db).await?; + + let sad_bakery = bakery::ActiveModel { + id: ActiveValue::Set(1), // The primary must be set + ..Default::default() + }; + sad_bakery.delete(db).await?; + + let bakeries: Vec = Bakery::find().all(db).await?; + assert!(bakeries.is_empty()); + } + Ok(()) } diff --git a/tutorials-book/src/ch01-05-basic-crud-operations.md b/tutorials-book/src/ch01-05-basic-crud-operations.md index 6d843c8..4b02d44 100644 --- a/tutorials-book/src/ch01-05-basic-crud-operations.md +++ b/tutorials-book/src/ch01-05-basic-crud-operations.md @@ -92,3 +92,26 @@ let sad_bakery: Option = Bakery::find() .await?; assert_eq!(sad_bakery.unwrap().id, 1); ``` + +## Delete + +Sadly, *Sad Bakery* is unable to survive in the rapidly changing economy; it has been forced to liquidate! + +We have no choice but to remove its entry in our database: + +```rust, no_run +let john = baker::ActiveModel { + id: ActiveValue::Set(1), // The primary must be set + ..Default::default() +}; +john.delete(db).await?; + +let sad_bakery = bakery::ActiveModel { + id: ActiveValue::Set(1), // The primary must be set + ..Default::default() +}; +sad_bakery.delete(db).await?; + +let bakeries: Vec = Bakery::find().all(db).await?; +assert!(bakeries.is_empty()); +``` From dddb2c85d617219ffe93c03bf1ccfae9d7567e05 Mon Sep 17 00:00:00 2001 From: Sanford Pun Date: Thu, 9 Jun 2022 16:41:09 +0800 Subject: [PATCH 18/60] Draft ch01-06 --- bakery-backend/src/main.rs | 31 +++++++++++++ tutorials-book/src/SUMMARY.md | 2 +- .../src/ch01-05-basic-crud-operations.md | 2 + .../src/ch01-06-relational-select.md | 45 +++++++++++++++++++ 4 files changed, 79 insertions(+), 1 deletion(-) create mode 100644 tutorials-book/src/ch01-06-relational-select.md diff --git a/bakery-backend/src/main.rs b/bakery-backend/src/main.rs index b7ee69f..bcf69cb 100644 --- a/bakery-backend/src/main.rs +++ b/bakery-backend/src/main.rs @@ -106,6 +106,37 @@ async fn run() -> Result<(), DbErr> { assert!(bakeries.is_empty()); } + // Relational Select + { + let la_boulangerie = bakery::ActiveModel { + name: ActiveValue::Set("La Boulangerie".to_owned()), + profit_margin: ActiveValue::Set(0.0), + ..Default::default() + }; + let bakery_res = Bakery::insert(la_boulangerie).exec(db).await?; + + for baker_name in ["Jolie", "Charles", "Madeleine", "Frederic"] { + let baker = baker::ActiveModel { + name: ActiveValue::Set(baker_name.to_owned()), + bakery_id: ActiveValue::Set(bakery_res.last_insert_id), + ..Default::default() + }; + Baker::insert(baker).exec(db).await?; + } + + // First find *La Boulangerie* as a Model + let la_boulangerie: bakery::Model = Bakery::find_by_id(bakery_res.last_insert_id) + .one(db) + .await? + .unwrap(); + + let bakers: Vec = la_boulangerie.find_related(Baker).all(db).await?; + let mut baker_names: Vec = bakers.into_iter().map(|b| b.name).collect(); + baker_names.sort_unstable(); + + assert_eq!(baker_names, ["Charles", "Frederic", "Jolie", "Madeleine"]); + } + Ok(()) } diff --git a/tutorials-book/src/SUMMARY.md b/tutorials-book/src/SUMMARY.md index fd53907..90815e1 100644 --- a/tutorials-book/src/SUMMARY.md +++ b/tutorials-book/src/SUMMARY.md @@ -10,7 +10,7 @@ - [Migration (API)](ch01-03-migration-api.md) - [Generate Entity from Database](ch01-04-entity-generation.md) - [Basic CRUD Operations](ch01-05-basic-crud-operations.md) - - [Relational Select]() + - [Relational Select](ch01-06-relational-select.md) - [Testing with Mock Interface]() - [Optional: Building SQL Queries with SeaQuery]() diff --git a/tutorials-book/src/ch01-05-basic-crud-operations.md b/tutorials-book/src/ch01-05-basic-crud-operations.md index 4b02d44..76a65ee 100644 --- a/tutorials-book/src/ch01-05-basic-crud-operations.md +++ b/tutorials-book/src/ch01-05-basic-crud-operations.md @@ -93,6 +93,8 @@ let sad_bakery: Option = Bakery::find() assert_eq!(sad_bakery.unwrap().id, 1); ``` +For relational select on multiple entities, visit the next [section](ch01-06-relational-select.md). + ## Delete Sadly, *Sad Bakery* is unable to survive in the rapidly changing economy; it has been forced to liquidate! diff --git a/tutorials-book/src/ch01-06-relational-select.md b/tutorials-book/src/ch01-06-relational-select.md new file mode 100644 index 0000000..441a9ba --- /dev/null +++ b/tutorials-book/src/ch01-06-relational-select.md @@ -0,0 +1,45 @@ +# Relational Select + +In the previous section, we explored how to [perform select on a single entity](ch01-05-basic-crud-operations.md#find-single-entity). + +However, relational databases are known for connecting entities with relations, such that we can perform queries **across different entities**. + +For example, given a bakery, we can find all the bakers working there. + +Suppose the following code were run before, inserting the bakery and the bakers it employed into the database. + +```rust, no_run +let la_boulangerie = bakery::ActiveModel { + name: ActiveValue::Set("La Boulangerie".to_owned()), + profit_margin: ActiveValue::Set(0.0), + ..Default::default() +}; +let bakery_res = Bakery::insert(la_boulangerie).exec(db).await?; + +for baker_name in ["Jolie", "Charles", "Madeleine", "Frederic"] { + let baker = baker::ActiveModel { + name: ActiveValue::Set(baker_name.to_owned()), + bakery_id: ActiveValue::Set(bakery_res.last_insert_id), + ..Default::default() + }; + Baker::insert(baker).exec(db).await?; +} +``` + +There are 4 bakers working at the bakery *La Boulangerie*, and we can find them later on as follows: + +```rust, no_run +// First find *La Boulangerie* as a Model +let la_boulangerie: bakery::Model = Bakery::find_by_id(bakery_res.last_insert_id) + .one(db) + .await? + .unwrap(); + +let bakers: Vec = la_boulangerie.find_related(Baker).all(db).await?; +let mut baker_names: Vec = bakers.into_iter().map(|b| b.name).collect(); +baker_names.sort_unstable(); + +assert_eq!(baker_names, ["Charles", "Frederic", "Jolie", "Madeleine"]); +``` + +For more advanced usage, visit the [documentation](https://www.sea-ql.org/SeaORM/docs/basic-crud/select/#find-related-models). From 4aa363d3e704cbdd31418da0ec4c8c313249a125 Mon Sep 17 00:00:00 2001 From: Sanford Pun Date: Thu, 9 Jun 2022 18:52:10 +0800 Subject: [PATCH 19/60] Draft ch01-07 --- bakery-backend/Cargo.toml | 2 +- bakery-backend/src/main.rs | 124 ++++++++++++++++ tutorials-book/src/SUMMARY.md | 2 +- tutorials-book/src/ch01-07-mock-testing.md | 163 +++++++++++++++++++++ 4 files changed, 289 insertions(+), 2 deletions(-) create mode 100644 tutorials-book/src/ch01-07-mock-testing.md diff --git a/bakery-backend/Cargo.toml b/bakery-backend/Cargo.toml index 1fded76..993e89e 100644 --- a/bakery-backend/Cargo.toml +++ b/bakery-backend/Cargo.toml @@ -7,5 +7,5 @@ edition = "2021" [dependencies] futures = "0.3.21" -sea-orm = { version = "0.8.0", features = [ "sqlx-mysql", "runtime-async-std-native-tls", "macros" ] } +sea-orm = { version = "0.8.0", features = [ "sqlx-mysql", "runtime-async-std-native-tls", "macros", "mock" ] } sea-orm-migration = "0.8.3" diff --git a/bakery-backend/src/main.rs b/bakery-backend/src/main.rs index bcf69cb..7157745 100644 --- a/bakery-backend/src/main.rs +++ b/bakery-backend/src/main.rs @@ -137,6 +137,130 @@ async fn run() -> Result<(), DbErr> { assert_eq!(baker_names, ["Charles", "Frederic", "Jolie", "Madeleine"]); } + // Mock Testing + { + let db = &MockDatabase::new(DatabaseBackend::MySql) + .append_query_results(vec![ + // First query result + vec![bakery::Model { + id: 1, + name: "Happy Bakery".to_owned(), + profit_margin: 0.0, + }], + // Second query result + vec![ + bakery::Model { + id: 1, + name: "Happy Bakery".to_owned(), + profit_margin: 0.0, + }, + bakery::Model { + id: 2, + name: "Sad Bakery".to_owned(), + profit_margin: 100.0, + }, + bakery::Model { + id: 3, + name: "La Boulangerie".to_owned(), + profit_margin: 17.89, + }, + ], + ]) + .append_query_results(vec![ + // Third query result + vec![ + baker::Model { + id: 1, + name: "Jolie".to_owned(), + contact_details: None, + bakery_id: 3, + }, + baker::Model { + id: 2, + name: "Charles".to_owned(), + contact_details: None, + bakery_id: 3, + }, + baker::Model { + id: 3, + name: "Madeleine".to_owned(), + contact_details: None, + bakery_id: 3, + }, + baker::Model { + id: 4, + name: "Frederic".to_owned(), + contact_details: None, + bakery_id: 3, + }, + ], + ]) + .into_connection(); + + let happy_bakery: Option = Bakery::find().one(db).await?; + assert_eq!( + happy_bakery.unwrap(), + bakery::Model { + id: 1, + name: "Happy Bakery".to_owned(), + profit_margin: 0.0, + } + ); + + let all_bakeries: Vec = Bakery::find().all(db).await?; + assert_eq!( + all_bakeries, + vec![ + bakery::Model { + id: 1, + name: "Happy Bakery".to_owned(), + profit_margin: 0.0, + }, + bakery::Model { + id: 2, + name: "Sad Bakery".to_owned(), + profit_margin: 100.0, + }, + bakery::Model { + id: 3, + name: "La Boulangerie".to_owned(), + profit_margin: 17.89, + }, + ] + ); + + let la_boulangerie_bakers: Vec = Baker::find().all(db).await?; + assert_eq!( + la_boulangerie_bakers, + vec![ + baker::Model { + id: 1, + name: "Jolie".to_owned(), + contact_details: None, + bakery_id: 3, + }, + baker::Model { + id: 2, + name: "Charles".to_owned(), + contact_details: None, + bakery_id: 3, + }, + baker::Model { + id: 3, + name: "Madeleine".to_owned(), + contact_details: None, + bakery_id: 3, + }, + baker::Model { + id: 4, + name: "Frederic".to_owned(), + contact_details: None, + bakery_id: 3, + }, + ] + ); + } + Ok(()) } diff --git a/tutorials-book/src/SUMMARY.md b/tutorials-book/src/SUMMARY.md index 90815e1..d97425d 100644 --- a/tutorials-book/src/SUMMARY.md +++ b/tutorials-book/src/SUMMARY.md @@ -11,7 +11,7 @@ - [Generate Entity from Database](ch01-04-entity-generation.md) - [Basic CRUD Operations](ch01-05-basic-crud-operations.md) - [Relational Select](ch01-06-relational-select.md) - - [Testing with Mock Interface]() + - [Testing with Mock Interface](ch01-07-mock-testing.md) - [Optional: Building SQL Queries with SeaQuery]() ## Chapter 2 - Integration with Rocket diff --git a/tutorials-book/src/ch01-07-mock-testing.md b/tutorials-book/src/ch01-07-mock-testing.md new file mode 100644 index 0000000..7531996 --- /dev/null +++ b/tutorials-book/src/ch01-07-mock-testing.md @@ -0,0 +1,163 @@ +# Testing with Mock Interface + +In some cases, we want to verify the application logic without using a real database. As such, SeaORM provides a `MockDatabase` interface to be used in development. + +For example, we don't want to set up and use a real database for unit testing because the database layer should be independent of the application logic layer. Using a mock interface provides stable and correct behavior in the database layer, hence any errors that emerge can only be due to bugs in the application logic layer. + +Also, a real database may not be preferred when we want to maximize the portability of the development environment. Using a mock interface effective takes away the need for setting up and maintaining a real database, therefore application logic developers can do their work virtually anywhere. + +## Add the `mock` Cargo feature + +```diff +// Cargo.toml + +... + +- sea-orm = { version = "0.8.0", features = [ ... ] } ++ sea-orm = { version = "0.8.0", features = [ ... , "mock" ] } + +... +``` + +## Define the expected query results + +First, we define what we want our mock database to return. + +Note that the function `append_query_results()` takes a vector of vectors, where each vector nested inside represent the result of a single query. + +```rust, no_run +let db: &DatabaseConnection = &MockDatabase::new(DatabaseBackend::MySql) + .append_query_results(vec![ + // First query result + vec![bakery::Model { + id: 1, + name: "Happy Bakery".to_owned(), + profit_margin: 0.0, + }], + // Second query result + vec![ + bakery::Model { + id: 1, + name: "Happy Bakery".to_owned(), + profit_margin: 0.0, + }, + bakery::Model { + id: 2, + name: "Sad Bakery".to_owned(), + profit_margin: 100.0, + }, + bakery::Model { + id: 3, + name: "La Boulangerie".to_owned(), + profit_margin: 17.89, + }, + ], + ]) + .append_query_results(vec![ + // Third query result + vec![ + baker::Model { + id: 1, + name: "Jolie".to_owned(), + contact_details: None, + bakery_id: 3, + }, + baker::Model { + id: 2, + name: "Charles".to_owned(), + contact_details: None, + bakery_id: 3, + }, + baker::Model { + id: 3, + name: "Madeleine".to_owned(), + contact_details: None, + bakery_id: 3, + }, + baker::Model { + id: 4, + name: "Frederic".to_owned(), + contact_details: None, + bakery_id: 3, + }, + ] + ]) + .into_connection(); +``` + +*Note: if a query result contains multiple models (like the second and third ones above) and `Entity::find().one(db)` is called, only the first one will be returned. The rest of the models in the query will be discarded.* + +## Use the returned query results + +Then the query results can be mocked and passed to other parts of the application logic. + +```rust, no_run +let happy_bakery: Option = Bakery::find().one(db).await?; +assert_eq!( + happy_bakery.unwrap(), + bakery::Model { + id: 1, + name: "Happy Bakery".to_owned(), + profit_margin: 0.0, + } +); + +let all_bakeries: Vec = Bakery::find().all(db).await?; +assert_eq!( + all_bakeries, + vec![ + bakery::Model { + id: 1, + name: "Happy Bakery".to_owned(), + profit_margin: 0.0, + }, + bakery::Model { + id: 2, + name: "Sad Bakery".to_owned(), + profit_margin: 100.0, + }, + bakery::Model { + id: 3, + name: "La Boulangerie".to_owned(), + profit_margin: 17.89, + }, + ] +); + +let la_boulangerie_bakers: Vec = Baker::find().all(db).await?; +assert_eq!( + la_boulangerie_bakers, + vec![ + baker::Model { + id: 1, + name: "Jolie".to_owned(), + contact_details: None, + bakery_id: 3, + }, + baker::Model { + id: 2, + name: "Charles".to_owned(), + contact_details: None, + bakery_id: 3, + }, + baker::Model { + id: 3, + name: "Madeleine".to_owned(), + contact_details: None, + bakery_id: 3, + }, + baker::Model { + id: 4, + name: "Frederic".to_owned(), + contact_details: None, + bakery_id: 3, + }, + ] +); +``` + +## Mock execution results + +To mock the results of CRUD operations, we can use `append_exec_results()`. + +As it is highly similar to the above, it won't be covered in detail in this tutorial. For more information, refer to the [documentation](https://www.sea-ql.org/SeaORM/docs/write-test/mock/#mocking-execution-result). From 206679a65cd4d68a729b8e69ea032fee06ca0b73 Mon Sep 17 00:00:00 2001 From: Sanford Pun Date: Thu, 9 Jun 2022 18:54:50 +0800 Subject: [PATCH 20/60] Remove PostgreSQL prompt symbol guide --- tutorials-book/src/ch00-00-introduction.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/tutorials-book/src/ch00-00-introduction.md b/tutorials-book/src/ch00-00-introduction.md index f9ff097..aa88c14 100644 --- a/tutorials-book/src/ch00-00-introduction.md +++ b/tutorials-book/src/ch00-00-introduction.md @@ -16,8 +16,6 @@ To show added or removed code from files, we will use comments or `$ ` shows an operation is done on the console/shell -`postgres=#` shows a PostgreSQL prompt. - #### Chapters In the first chapter, we will learn how to build a backend application with SeaORM. It will be compatible with different database implementations. From 322fc918a1e0a8216ec34b8939c042cba3c63e91 Mon Sep 17 00:00:00 2001 From: Sanford Pun Date: Thu, 9 Jun 2022 18:57:29 +0800 Subject: [PATCH 21/60] Add reminder of executing sea-orm-cli at the project root --- tutorials-book/src/ch01-02-migration-cli.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tutorials-book/src/ch01-02-migration-cli.md b/tutorials-book/src/ch01-02-migration-cli.md index 01f927c..1e32c52 100644 --- a/tutorials-book/src/ch01-02-migration-cli.md +++ b/tutorials-book/src/ch01-02-migration-cli.md @@ -206,6 +206,8 @@ features = [ Perform all the migrations through `sea-orm-cli`: +*Make sure you are running this command at the project root.* + ```sh # Change the value of DATABASE_URL according to your database implementation. # Make sure the database name is also supplied for MySQL or PostgreSQL. From 16bb659655f32eed0132401d25ffa2b0b92c2747 Mon Sep 17 00:00:00 2001 From: Sanford Pun Date: Thu, 9 Jun 2022 19:08:21 +0800 Subject: [PATCH 22/60] Specify file path of Cargo.toml --- tutorials-book/src/ch01-03-migration-api.md | 1 + 1 file changed, 1 insertion(+) diff --git a/tutorials-book/src/ch01-03-migration-api.md b/tutorials-book/src/ch01-03-migration-api.md index 7a0462c..765e1d1 100644 --- a/tutorials-book/src/ch01-03-migration-api.md +++ b/tutorials-book/src/ch01-03-migration-api.md @@ -9,6 +9,7 @@ This section covers how to perform migrations without the need to install and us Add the cargo dependency `sea-orm-migration`: ```diff +// Cargo.toml ... From 00c194afc3a1b58d958cc825fc071ef244aee73c Mon Sep 17 00:00:00 2001 From: Sanford Pun Date: Sun, 12 Jun 2022 22:05:57 +0800 Subject: [PATCH 23/60] intro: "the most" -> "a" --- tutorials-book/src/ch00-00-introduction.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tutorials-book/src/ch00-00-introduction.md b/tutorials-book/src/ch00-00-introduction.md index aa88c14..1db5a3e 100644 --- a/tutorials-book/src/ch00-00-introduction.md +++ b/tutorials-book/src/ch00-00-introduction.md @@ -1,6 +1,6 @@ # Introduction -SeaORM is the most feature rich async ORM for integrating a Rust code base with relational databases aiming to be a write code once and run on any popular Relational Database with current support for MySQL, PostgreSQL, MariaDB and SQLite. The tutorials in this book are a gentle introduction to using the `sea-orm` crate and its cli tool `sea-orm-cli`. +SeaORM is a feature rich async ORM for integrating a Rust code base with relational databases aiming to be a write code once and run on any popular Relational Database with current support for MySQL, PostgreSQL, MariaDB and SQLite. The tutorials in this book are a gentle introduction to using the `sea-orm` crate and its cli tool `sea-orm-cli`. #### Symbols Used From c8227cbd1949115d5815d4cba4d57201b5e3ff36 Mon Sep 17 00:00:00 2001 From: Sanford Pun Date: Tue, 14 Jun 2022 14:24:52 +0800 Subject: [PATCH 24/60] Remove legacy example source files --- simple-crud/.env | 1 - simple-crud/.gitignore | 4 - simple-crud/Cargo.toml | 20 --- simple-crud/src/fruits_table/fruits.rs | 24 --- simple-crud/src/fruits_table/mod.rs | 3 - simple-crud/src/fruits_table/prelude.rs | 4 - simple-crud/src/main.rs | 148 ---------------- simple-crud/src/suppliers_table/mod.rs | 5 - simple-crud/src/suppliers_table/prelude.rs | 6 - simple-crud/src/suppliers_table/suppliers.rs | 33 ---- todo-app/.gitignore | 4 - todo-app/Cargo.toml | 5 - todo-app/client/.env | 1 - todo-app/client/.gitignore | 3 - todo-app/client/Cargo.toml | 16 -- todo-app/client/src/db_ops.rs | 166 ------------------ todo-app/client/src/handler.rs | 102 ----------- todo-app/client/src/main.rs | 29 --- todo-app/client/src/todo_list_table/mod.rs | 5 - .../client/src/todo_list_table/prelude.rs | 6 - .../client/src/todo_list_table/todo_list.rs | 25 --- todo-app/client/src/user_input.rs | 40 ----- todo-app/client/src/utils.rs | 95 ---------- todo-app/server/.env | 1 - todo-app/server/.gitignore | 1 - todo-app/server/Cargo.toml | 15 -- .../server/src/fruits_list_table/fruits.rs | 23 --- todo-app/server/src/fruits_list_table/mod.rs | 5 - .../server/src/fruits_list_table/prelude.rs | 6 - todo-app/server/src/insert_values.rs | 33 ---- todo-app/server/src/main.rs | 115 ------------ todo-app/server/src/routing.rs | 76 -------- todo-app/server/src/todo_list_table/mod.rs | 5 - .../server/src/todo_list_table/prelude.rs | 6 - todo-app/server/src/todo_list_table/todos.rs | 24 --- 35 files changed, 1055 deletions(-) delete mode 100644 simple-crud/.env delete mode 100644 simple-crud/.gitignore delete mode 100644 simple-crud/Cargo.toml delete mode 100644 simple-crud/src/fruits_table/fruits.rs delete mode 100644 simple-crud/src/fruits_table/mod.rs delete mode 100644 simple-crud/src/fruits_table/prelude.rs delete mode 100644 simple-crud/src/main.rs delete mode 100644 simple-crud/src/suppliers_table/mod.rs delete mode 100644 simple-crud/src/suppliers_table/prelude.rs delete mode 100644 simple-crud/src/suppliers_table/suppliers.rs delete mode 100644 todo-app/.gitignore delete mode 100644 todo-app/Cargo.toml delete mode 100644 todo-app/client/.env delete mode 100644 todo-app/client/.gitignore delete mode 100644 todo-app/client/Cargo.toml delete mode 100644 todo-app/client/src/db_ops.rs delete mode 100644 todo-app/client/src/handler.rs delete mode 100644 todo-app/client/src/main.rs delete mode 100644 todo-app/client/src/todo_list_table/mod.rs delete mode 100644 todo-app/client/src/todo_list_table/prelude.rs delete mode 100644 todo-app/client/src/todo_list_table/todo_list.rs delete mode 100644 todo-app/client/src/user_input.rs delete mode 100644 todo-app/client/src/utils.rs delete mode 100644 todo-app/server/.env delete mode 100644 todo-app/server/.gitignore delete mode 100644 todo-app/server/Cargo.toml delete mode 100644 todo-app/server/src/fruits_list_table/fruits.rs delete mode 100644 todo-app/server/src/fruits_list_table/mod.rs delete mode 100644 todo-app/server/src/fruits_list_table/prelude.rs delete mode 100644 todo-app/server/src/insert_values.rs delete mode 100644 todo-app/server/src/main.rs delete mode 100644 todo-app/server/src/routing.rs delete mode 100644 todo-app/server/src/todo_list_table/mod.rs delete mode 100644 todo-app/server/src/todo_list_table/prelude.rs delete mode 100644 todo-app/server/src/todo_list_table/todos.rs diff --git a/simple-crud/.env b/simple-crud/.env deleted file mode 100644 index 8666bfa..0000000 --- a/simple-crud/.env +++ /dev/null @@ -1 +0,0 @@ -DATABASE_URL=mysql://webmaster:master_char@localhost/fruit_markets diff --git a/simple-crud/.gitignore b/simple-crud/.gitignore deleted file mode 100644 index 680fe3a..0000000 --- a/simple-crud/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -/target -Cargo.lock -.vscode -postgresql_config.env diff --git a/simple-crud/Cargo.toml b/simple-crud/Cargo.toml deleted file mode 100644 index f5789ff..0000000 --- a/simple-crud/Cargo.toml +++ /dev/null @@ -1,20 +0,0 @@ -[workspace] -# Open a separate workspace for each tutorial - -[package] -name = "simple-crud" -version = "0.1.0" -edition = "2021" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] -anyhow = "1.0.52" -async-std = { version = "1.10.0", features = ["attributes"] } -chrono = "0.4.19" -sea-orm = { version = "0.5.0", features = [ - "runtime-async-std-rustls", - "sqlx-mysql", - "macros", - "with-chrono", -], default-features = false } diff --git a/simple-crud/src/fruits_table/fruits.rs b/simple-crud/src/fruits_table/fruits.rs deleted file mode 100644 index 412c98a..0000000 --- a/simple-crud/src/fruits_table/fruits.rs +++ /dev/null @@ -1,24 +0,0 @@ -use sea_orm::entity::prelude::*; - -#[derive(Clone, Debug, PartialEq, DeriveEntityModel)] -#[sea_orm(table_name = "fruits")] -pub struct Model { - #[sea_orm(primary_key)] - pub fruit_id: i32, - #[sea_orm(unique)] - pub name: String, - pub datetime_utc: DateTime, - pub unit_price: i32, - pub sku: String, -} - -#[derive(Copy, Clone, Debug, EnumIter)] -pub enum Relation {} - -impl RelationTrait for Relation { - fn def(&self) -> RelationDef { - panic!("No RelationDef") - } -} - -impl ActiveModelBehavior for ActiveModel {} diff --git a/simple-crud/src/fruits_table/mod.rs b/simple-crud/src/fruits_table/mod.rs deleted file mode 100644 index 8fb7ea3..0000000 --- a/simple-crud/src/fruits_table/mod.rs +++ /dev/null @@ -1,3 +0,0 @@ -pub mod prelude; - -pub mod fruits; diff --git a/simple-crud/src/fruits_table/prelude.rs b/simple-crud/src/fruits_table/prelude.rs deleted file mode 100644 index 869d33d..0000000 --- a/simple-crud/src/fruits_table/prelude.rs +++ /dev/null @@ -1,4 +0,0 @@ -pub use super::fruits::{ - ActiveModel as FruitsActiveModel, Column as FruitsColumn, Entity as Fruits, - Model as FruitsModel, PrimaryKey as FruitsPrimaryKey, Relation as FruitsRelation, -}; diff --git a/simple-crud/src/main.rs b/simple-crud/src/main.rs deleted file mode 100644 index 8191305..0000000 --- a/simple-crud/src/main.rs +++ /dev/null @@ -1,148 +0,0 @@ -mod fruits_table; -use fruits_table::prelude::*; -mod suppliers_table; -use suppliers_table::prelude::*; - -// Import the needed modules for table creation -use sea_orm::{entity::Set, prelude::*, ConnectionTrait, Database, Schema}; -// Handle errors using the `https://crates.io/crates/anyhow` crate -use anyhow::Result; -use chrono::Utc; - -// Convert this main function into async function -#[async_std::main] -async fn main() -> Result<()> { - let env_database_url = include_str!("../.env").trim(); - let split_url: Vec<&str> = env_database_url.split("=").collect(); - let database_url = split_url[1]; - - let db = Database::connect(database_url).await?; - - let builder = db.get_database_backend(); - let schema = Schema::new(builder); - - let create_table_op = db - .execute(builder.build(&schema.create_table_from_entity(Fruits))) - .await; - println!( - "`CREATE TABLE fruits` {:?}", - match create_table_op { - Ok(_) => "Operation Successful".to_owned(), - Err(e) => format!("Unsuccessful - Error {:?}", e), - } - ); - - // Get current system time - let now = chrono::offset::Utc::now(); - - // Convert system time to `NaiveDateTime` since SeaORM `DateTime` expects this; - let naive_system_time = now.naive_utc(); - - let fruit_01 = FruitsActiveModel { - name: Set("Apple".to_owned()), - datetime_utc: Set(naive_system_time), - unit_price: Set(2), - sku: Set("FM2022AKB40".to_owned()), - ..Default::default() - }; - let fruit_insert_operation = Fruits::insert(fruit_01).exec(&db).await; - - println!("INSERTED ONE: {:?}", fruit_insert_operation?); - - let fruit_02 = FruitsActiveModel { - name: Set("Banana".to_owned()), - datetime_utc: Set(Utc::now().naive_utc()), - unit_price: Set(2), - sku: Set("FM2022AKB41".to_owned()), - ..Default::default() - }; - - let fruit_03 = FruitsActiveModel { - name: Set("Pineapple".to_owned()), - datetime_utc: Set(Utc::now().naive_utc()), - unit_price: Set(8), - sku: Set("FM2022AKB42".to_owned()), - ..Default::default() - }; - - let fruit_04 = FruitsActiveModel { - name: Set("Mango".to_owned()), - datetime_utc: Set(Utc::now().naive_utc()), - unit_price: Set(6), - sku: Set("FM2022AKB43".to_owned()), - ..Default::default() - }; - let fruit_insert_operation = Fruits::insert_many(vec![fruit_02, fruit_03, fruit_04]) - .exec(&db) - .await; - - println!("INSERTED ONE: {:?}", fruit_insert_operation?); - - let fruits_table_rows = Fruits::find().all(&db).await; - println!("{:?}", fruits_table_rows?); - - let fruits_by_id = Fruits::find_by_id(2).one(&db).await; - println!("{:?}", fruits_by_id?); - - let find_pineapple = Fruits::find() - .filter(FruitsColumn::Name.contains("pineapple")) - .one(&db) - .await?; - println!("{:?}", find_pineapple.as_ref()); - - // Update the `pineapple` column with a new unit price - if let Some(pineapple_model) = find_pineapple { - let mut pineapple_active_model: FruitsActiveModel = pineapple_model.into(); - pineapple_active_model.unit_price = Set(10); - - let updated_pineapple_model: FruitsModel = pineapple_active_model.update(&db).await?; - - println!("UPDATED PRICE: {:?}", updated_pineapple_model.clone()); - } else { - println!("`Pineapple` column not found"); - } - - // Delete the `mango` column - - let find_mango = Fruits::find() - .filter(FruitsColumn::Name.contains("mango")) - .one(&db) - .await; - - if let Some(mango_model) = find_mango? { - println!("DELETED MANGO: {:?}", mango_model.delete(&db).await?); - } else { - println!("`Mango` column not found"); - } - - let supplier_01 = SuppliersActiveModel { - supplier_name: Set("John Doe".to_owned()), - fruit_id: Set(1_i32), - ..Default::default() - }; - - let supplier_02 = SuppliersActiveModel { - supplier_name: Set("Jane Doe".to_owned()), - fruit_id: Set(2_i32), - ..Default::default() - }; - - let supplier_03 = SuppliersActiveModel { - supplier_name: Set("Junior Doe".to_owned()), - fruit_id: Set(3_i32), - ..Default::default() - }; - - let supplier_insert_operation = - Suppliers::insert_many(vec![supplier_01, supplier_02, supplier_03]) - .exec(&db) - .await; - - println!("INSERTED MANY: {:?}", supplier_insert_operation?); - - let who_supplies = Suppliers::find().find_with_related(Fruits).all(&db).await?; - - dbg!(&who_supplies); - - Ok(()) -} diff --git a/simple-crud/src/suppliers_table/mod.rs b/simple-crud/src/suppliers_table/mod.rs deleted file mode 100644 index 6b27d64..0000000 --- a/simple-crud/src/suppliers_table/mod.rs +++ /dev/null @@ -1,5 +0,0 @@ -//! SeaORM Entity. Generated by sea-orm-codegen 0.5.0 - -pub mod prelude; - -pub mod suppliers; diff --git a/simple-crud/src/suppliers_table/prelude.rs b/simple-crud/src/suppliers_table/prelude.rs deleted file mode 100644 index 393cae7..0000000 --- a/simple-crud/src/suppliers_table/prelude.rs +++ /dev/null @@ -1,6 +0,0 @@ -//! SeaORM Entity. Generated by sea-orm-codegen 0.5.0 - -pub use super::suppliers::{ - ActiveModel as SuppliersActiveModel, Column as SuppliersColumn, Entity as Suppliers, - Model as SuppliersModel, PrimaryKey as SuppliersPrimaryKey, Relation as SuppliersRelation, -}; diff --git a/simple-crud/src/suppliers_table/suppliers.rs b/simple-crud/src/suppliers_table/suppliers.rs deleted file mode 100644 index c1d8873..0000000 --- a/simple-crud/src/suppliers_table/suppliers.rs +++ /dev/null @@ -1,33 +0,0 @@ -//! SeaORM Entity. Generated by sea-orm-codegen 0.5.0 - -use sea_orm::entity::prelude::*; - -#[derive(Clone, Debug, PartialEq, DeriveEntityModel)] -#[sea_orm(table_name = "suppliers")] -pub struct Model { - #[sea_orm(primary_key)] - pub supplier_id: i32, - #[sea_orm(unique)] - pub supplier_name: String, - pub fruit_id: i32, -} - -#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] -pub enum Relation { - #[sea_orm( - belongs_to = "crate::Fruits", - from = "Column::FruitId", - to = "crate::FruitsColumn::FruitId", - on_update = "Cascade", - on_delete = "Cascade" - )] - Fruits, -} - -impl Related for Entity { - fn to() -> RelationDef { - Relation::Fruits.def() - } -} - -impl ActiveModelBehavior for ActiveModel {} diff --git a/todo-app/.gitignore b/todo-app/.gitignore deleted file mode 100644 index f5f449c..0000000 --- a/todo-app/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -/target -Cargo.lock -.vscode -.env diff --git a/todo-app/Cargo.toml b/todo-app/Cargo.toml deleted file mode 100644 index 8284b27..0000000 --- a/todo-app/Cargo.toml +++ /dev/null @@ -1,5 +0,0 @@ -[workspace] -members = [ - "server", - "client", -] diff --git a/todo-app/client/.env b/todo-app/client/.env deleted file mode 100644 index e9c6ab8..0000000 --- a/todo-app/client/.env +++ /dev/null @@ -1 +0,0 @@ -DATABASE_URL=sqlite://my_todos.db \ No newline at end of file diff --git a/todo-app/client/.gitignore b/todo-app/client/.gitignore deleted file mode 100644 index 3549fae..0000000 --- a/todo-app/client/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -/target -Cargo.lock -.env \ No newline at end of file diff --git a/todo-app/client/Cargo.toml b/todo-app/client/Cargo.toml deleted file mode 100644 index 1175ff5..0000000 --- a/todo-app/client/Cargo.toml +++ /dev/null @@ -1,16 +0,0 @@ -[package] -name = "client" -version = "0.1.0" -edition = "2021" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] -anyhow = "1.0.55" -dotenv = "0.15.0" -json = "0.12.4" -minreq = "2.6.0" -sea-orm = { version = "0.6.0", features = ["runtime-tokio-rustls", "sqlx-sqlite", "macros"], default-features = false } -serde = { version = "1.0.136", features = ["derive"] } -serde_json = "1.0.79" -tokio = { version = "1.17.0", features = ["full"] } diff --git a/todo-app/client/src/db_ops.rs b/todo-app/client/src/db_ops.rs deleted file mode 100644 index a9c95c4..0000000 --- a/todo-app/client/src/db_ops.rs +++ /dev/null @@ -1,166 +0,0 @@ -use crate::{synching_to_server, MemDB, MyTodos, MyTodosActiveModel, MyTodosModel}; -use sea_orm::{ - sea_query::{Alias, ColumnDef, Table}, - ActiveModelTrait, ConnectionTrait, DatabaseConnection, EntityTrait, Set, -}; -use serde::{Deserialize, Serialize}; - -// The structure for a TodoList -#[derive(Debug, Serialize, Default, Deserialize)] -pub struct TodoList { - pub queued: Vec, - pub completed: Vec, -} - -pub async fn create_todo_table(db: &DatabaseConnection) -> anyhow::Result<()> { - let database_backend = db.get_database_backend(); - // Create the `todos` table - let todos_table = Table::create() - .table(Alias::new("todo_list")) - .if_not_exists() - .col( - ColumnDef::new(Alias::new("todo_id")) - .integer() - .primary_key() - .not_null() - .auto_increment(), - ) - .col( - ColumnDef::new(Alias::new("todo_name")) - .string() - .unique_key() - .not_null(), - ) - .col(ColumnDef::new(Alias::new("quantity")).string().not_null()) - .col(ColumnDef::new(Alias::new("status")).boolean().not_null()) - .to_owned(); - - // Executing the SQL query to create the `todos` table in SQLite - let create_table_op = db.execute(database_backend.build(&todos_table)).await; - // Print the result in a user friendly way - println!( - "`CREATE TABLE todo_list` {:?}", - match create_table_op { - Ok(_) => "Operation Successful".to_owned(), - Err(e) => format!("Unsuccessful - Error {:?}", e), - } - ); - - Ok(()) -} - -pub async fn get_fruits() -> anyhow::Result> { - let response = minreq::get("http://127.0.0.1:8080/fruits").send()?; - - let fruits_list: Vec = serde_json::from_str(&response.as_str()?)?; - - Ok(fruits_list) -} - -pub async fn store(db: &DatabaseConnection, quantity: &str, todo_name: &str) -> anyhow::Result<()> { - let my_todo = MyTodosActiveModel { - todo_name: Set(todo_name.to_owned()), - quantity: Set(quantity.to_owned()), - status: Set(0), - ..Default::default() - }; - - MyTodos::insert(my_todo).exec(db).await?; - - Ok(()) -} - -pub async fn get(db: &DatabaseConnection) -> Result, sea_orm::DbErr> { - MyTodos::find().all(db).await -} - -pub async fn edit( - db: &DatabaseConnection, - todo_model: &MyTodosModel, - quantity: String, -) -> Result { - let mut todos_active_model: MyTodosActiveModel = todo_model.to_owned().into(); - todos_active_model.quantity = Set(quantity); - - Ok(todos_active_model.update(db).await?) -} - -pub async fn done( - db: &DatabaseConnection, - todo_model: &MyTodosModel, -) -> Result { - let mut todos_active_model: MyTodosActiveModel = todo_model.to_owned().into(); - todos_active_model.status = Set(1); - - Ok(todos_active_model.update(db).await?) -} - -pub async fn undo( - db: &DatabaseConnection, - todo_model: &MyTodosModel, -) -> Result { - let mut todos_active_model: MyTodosActiveModel = todo_model.to_owned().into(); - todos_active_model.status = Set(0); - - Ok(todos_active_model.update(db).await?) -} - -pub(crate) async fn load_sqlite_cache( - db: &DatabaseConnection, - memdb: &mut MemDB, -) -> Result<(), sea_orm::DbErr> { - let sqlite_cache = get(&db).await?; - memdb.lock().await.clear(); - for mytodo_model in sqlite_cache { - memdb - .lock() - .await - .insert(mytodo_model.todo_name.clone(), mytodo_model); - } - - Ok(()) -} - -pub async fn update_remote_storage(memdb: &MemDB, username: &str) -> anyhow::Result<()> { - let mut temp_list = TodoList::default(); - memdb.lock().await.values().for_each(|todo| { - if todo.status == 0 { - temp_list.queued.push(todo.to_owned()); - } else { - temp_list.completed.push(todo.to_owned()); - } - }); - - let todo_list = serde_json::to_string(&temp_list)?; - - synching_to_server(); - - let response = minreq::post("http://127.0.0.1:8080/update_todo") - .with_header("Content-Type", "application/json") - .with_body( - json::object! { - username: username, - todo_list: todo_list.clone(), - } - .dump(), - ) - .send()?; - - if response.status_code == 500 { - let body = serde_json::from_str::>(&response.as_str()?)?; - if body == Some("MODEL_NOT_FOUND".to_owned()) { - minreq::post("http://127.0.0.1:8080/store") - .with_header("Content-Type", "application/json") - .with_body( - json::object! { - username: username, - todo_list: todo_list, - } - .dump(), - ) - .send()?; - } - } - - Ok(()) -} diff --git a/todo-app/client/src/handler.rs b/todo-app/client/src/handler.rs deleted file mode 100644 index d839604..0000000 --- a/todo-app/client/src/handler.rs +++ /dev/null @@ -1,102 +0,0 @@ -use crate::{ - convert_case, done, edit, get_fruits, load_sqlite_cache, loading, read_line, split_words, - store, synching, undo, update_remote_storage, MemDB, -}; -use sea_orm::DatabaseConnection; -use std::collections::HashMap; -use std::io; - -pub async fn input_handler(db: &DatabaseConnection) -> anyhow::Result<()> { - let mut username_buffer = String::default(); - println!("What is Your Username...",); - let stdin = io::stdin(); // We get `Stdin` here. - stdin.read_line(&mut username_buffer)?; - let username = username_buffer.trim().to_string(); - - let fruits_list: Vec = get_fruits().await?; - - let mut buffer = String::new(); - let mut text_buffer: String; - let mut memdb = MemDB::new(HashMap::default()); - loading(); - load_sqlite_cache(db, &mut memdb).await?; - - loop { - read_line(&mut buffer, fruits_list.as_ref(), &memdb).await?; - buffer = buffer.trim().to_owned(); - let words = split_words(buffer.clone()); - let command = words[0].to_lowercase().to_string(); - let mut quantity: &str = ""; - if command.as_str() == "done" || command.as_str() == "undo" { - text_buffer = convert_case(&words[1]); - } else if command.as_str() == "exit" { - update_remote_storage(&memdb, &username).await?; - println!("SYNCED SUCCESSFULLY."); - println!("Bye! :)"); - break; - } else { - quantity = &words[1]; - text_buffer = convert_case(&words[2]); - } - - if !text_buffer.is_empty() { - match fruits_list.iter().find(|&fruit| *fruit == text_buffer) { - None => { - if !text_buffer.is_empty() { - println!("The fruit `{buffer}` is not available.\n",); - } - continue; - } - Some(_) => { - if command.as_str() == "add" { - if memdb.lock().await.contains_key(&text_buffer) { - continue; - //TODO - } else { - synching(); - store(&db, quantity, &text_buffer).await?; - load_sqlite_cache(&db, &mut memdb).await?; - } - } else if command.as_str() == "edit" { - if let Some(mut todo_model) = memdb.lock().await.get_mut(&text_buffer) { - if todo_model.status != 1 { - synching(); - edit(&db, todo_model, quantity.to_owned()).await?; - todo_model.quantity = quantity.to_owned(); - } - } else { - continue; - } - } else if command.as_str() == "done" { - if let Some(todo_model) = memdb.lock().await.get_mut(&text_buffer) { - if todo_model.status == 0 { - synching(); - let updated_model = done(&db, todo_model).await?; - *todo_model = updated_model; - } - continue; - } else { - continue; - } - } else if command.as_str() == "undo" { - if let Some(todo_model) = memdb.lock().await.get_mut(&text_buffer) { - if todo_model.status == 1 { - synching(); - let updated_model = undo(&db, todo_model).await?; - *todo_model = updated_model; - } - continue; - } else { - continue; - } - } else { - dbg!("Unsupported Command"); - break; - } - } - } - } - } - - Ok(()) -} diff --git a/todo-app/client/src/main.rs b/todo-app/client/src/main.rs deleted file mode 100644 index 144e109..0000000 --- a/todo-app/client/src/main.rs +++ /dev/null @@ -1,29 +0,0 @@ -mod db_ops; -mod handler; -mod todo_list_table; -mod user_input; -mod utils; - -pub use db_ops::*; -pub use handler::*; -pub use todo_list_table::prelude::*; -pub use user_input::*; -pub use utils::*; - -use dotenv::dotenv; -use sea_orm::Database; - -#[tokio::main] -async fn main() -> anyhow::Result<()> { - dotenv().ok(); - - // Read the database environment from the `.env` file - let database_url = dotenv::var("DATABASE_URL")?; - let db = Database::connect(database_url).await?; - - create_todo_table(&db).await?; - - input_handler(&db).await?; - - Ok(()) -} diff --git a/todo-app/client/src/todo_list_table/mod.rs b/todo-app/client/src/todo_list_table/mod.rs deleted file mode 100644 index 4f09c4a..0000000 --- a/todo-app/client/src/todo_list_table/mod.rs +++ /dev/null @@ -1,5 +0,0 @@ -//! SeaORM Entity. Generated by sea-orm-codegen 0.6.0 - -pub mod prelude; - -pub mod todo_list; diff --git a/todo-app/client/src/todo_list_table/prelude.rs b/todo-app/client/src/todo_list_table/prelude.rs deleted file mode 100644 index 398fa2f..0000000 --- a/todo-app/client/src/todo_list_table/prelude.rs +++ /dev/null @@ -1,6 +0,0 @@ -//! SeaORM Entity. Generated by sea-orm-codegen 0.6.0 - -pub use super::todo_list::{ - ActiveModel as MyTodosActiveModel, Column as MyTodosColumn, Entity as MyTodos, - Model as MyTodosModel, PrimaryKey as MyTodosPrimaryKey, Relation as MyTodosRelation, -}; diff --git a/todo-app/client/src/todo_list_table/todo_list.rs b/todo-app/client/src/todo_list_table/todo_list.rs deleted file mode 100644 index b39f79e..0000000 --- a/todo-app/client/src/todo_list_table/todo_list.rs +++ /dev/null @@ -1,25 +0,0 @@ -//! SeaORM Entity. Generated by sea-orm-codegen 0.6.0 - -use sea_orm::entity::prelude::*; -use serde::{Deserialize, Serialize}; - -#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Serialize, Deserialize)] -#[sea_orm(table_name = "todo_list")] -pub struct Model { - #[sea_orm(primary_key)] - pub todo_id: i32, - pub todo_name: String, - pub quantity: String, - pub status: i32, -} - -#[derive(Copy, Clone, Debug, EnumIter)] -pub enum Relation {} - -impl RelationTrait for Relation { - fn def(&self) -> RelationDef { - panic!("No RelationDef") - } -} - -impl ActiveModelBehavior for ActiveModel {} diff --git a/todo-app/client/src/user_input.rs b/todo-app/client/src/user_input.rs deleted file mode 100644 index 1d419ff..0000000 --- a/todo-app/client/src/user_input.rs +++ /dev/null @@ -1,40 +0,0 @@ -use crate::{ - format_todos, MemDB, ADD_COMMAND, DONE_COMMAND, EDIT_COMMAND, EXIT_COMMAND, NUMBER, TITLE, - UNDO_COMMAND, -}; -use std::io; - -pub async fn read_line( - buffer: &mut String, - fruits_list: &Vec, - memdb: &MemDB, - //todo_list: &Vec, -) -> anyhow::Result { - crate::clear_terminal(); - buffer.clear(); - println!("+--------------------------+"); - println!("+ {:^5}{:17}+", "COMMANDS", " "); - println!("+{:26}+", " "); - println!("→ {ADD_COMMAND:5}{:18}+", " "); - println!("→ {DONE_COMMAND:23}+"); - println!("→ {UNDO_COMMAND:23}+"); - println!("→ {EDIT_COMMAND:23}+"); - println!("→ {EXIT_COMMAND:23}+"); - println!("+{:26}+", " "); - println!("+--------------------------+"); - - println!("{NUMBER}| {TITLE:10}"); - println!("----------------"); - for (mut index, item) in fruits_list.iter().enumerate() { - index += 1; - println!("{index:2} | {item:10}"); - } - println!("--------------------------------------------"); - format_todos(&memdb).await; - - println!("Enter a fruit that is available.",); - let stdin = io::stdin(); // We get `Stdin` here. - stdin.read_line(buffer)?; - - Ok(buffer.to_owned()) -} diff --git a/todo-app/client/src/utils.rs b/todo-app/client/src/utils.rs deleted file mode 100644 index 8427e3c..0000000 --- a/todo-app/client/src/utils.rs +++ /dev/null @@ -1,95 +0,0 @@ -use crate::MyTodosModel; -use std::collections::HashMap; -use tokio::sync::Mutex; - -pub(crate) const TITLE: &str = "FRUITS AVAILABLE"; -pub(crate) const NUMBER: &str = "No."; -pub(crate) const ADD_COMMAND: &str = "ADD"; -pub(crate) const DONE_COMMAND: &str = "DONE"; -pub(crate) const UNDO_COMMAND: &str = "UNDO"; -pub(crate) const EDIT_COMMAND: &str = "EDIT"; -pub(crate) const EXIT_COMMAND: &str = "EXIT"; - -const DONE: &str = "DONE TODOS"; -const NOT_DONE: &str = "NOT DONE"; -const QUANTITY: &str = "QUANTITY"; - -pub(crate) type MemDB = Mutex>; - -pub fn clear_terminal() { - print!("\x1B[2J\x1B[1;1H"); -} - -pub fn synching() { - clear_terminal(); - println!("SYNCING TO DATABASE..."); -} -pub fn synching_to_server() { - println!("SYNCING TO SERVER..."); -} - -pub fn loading() { - clear_terminal(); - println!("LOADING FROM DATABASE..."); -} - -pub fn convert_case(word: &str) -> String { - let word = word.to_lowercase(); - let mut chars = word - .chars() - .map(|character| character.to_string()) - .collect::>(); - - chars[0] = chars[0].to_uppercase().to_string(); - - chars.into_iter().collect::() -} - -pub fn split_words(user_input: String) -> Vec { - user_input - .split(" ") - .map(|word| word.to_owned()) - .collect::>() -} - -pub async fn format_todos(todo_models: &MemDB) { - println!("\n\n\n"); - if todo_models.lock().await.is_empty() { - println!("Oh My! There are no TODOs"); - } else { - let mut done = Vec::::default(); - let mut not_done = Vec::::default(); - - todo_models.lock().await.iter().for_each(|todo| { - if todo.1.status == 0 { - not_done.push(todo.1.to_owned()); - } else { - done.push(todo.1.to_owned()); - } - }); - - if not_done.is_empty() { - println!("Wohooo! All TODOs are Completed.") - } else { - println!("{QUANTITY:9}| {NOT_DONE:10}"); - println!("----------------"); - not_done.iter().for_each(|todo| { - println!("{:>8} | {:10}", todo.quantity, todo.todo_name); - }); - println!("----------------\n"); - } - - if done.is_empty() { - println!("----------------"); - println!("Bummer :( You Have Not Completed Any TODOs!"); - println!("----------------\n\n"); - } else { - println!("{QUANTITY:9}| {DONE:10}"); - println!("----------------"); - done.iter().for_each(|todo| { - println!("{:>8} | {:10}", todo.quantity, todo.todo_name); - }); - println!("----------------\n"); - } - } -} diff --git a/todo-app/server/.env b/todo-app/server/.env deleted file mode 100644 index 128bd88..0000000 --- a/todo-app/server/.env +++ /dev/null @@ -1 +0,0 @@ -DATABASE_URL=postgres://webmaster:master_char@localhost/fruits_market \ No newline at end of file diff --git a/todo-app/server/.gitignore b/todo-app/server/.gitignore deleted file mode 100644 index ea8c4bf..0000000 --- a/todo-app/server/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/target diff --git a/todo-app/server/Cargo.toml b/todo-app/server/Cargo.toml deleted file mode 100644 index 0902202..0000000 --- a/todo-app/server/Cargo.toml +++ /dev/null @@ -1,15 +0,0 @@ -[package] -name = "server" -version = "0.1.0" -edition = "2021" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] -anyhow = "1.0.55" -axum = "0.4.8" -dotenv = "0.15.0" -once_cell = "1.10.0" -sea-orm = { version = "0.6.0", features = ["runtime-tokio-rustls", "sqlx-postgres", "macros"], default-features = false } -serde = { version = "1.0.136", features = ["derive"] } -tokio = { version = "1.17.0", features = ["full"] } diff --git a/todo-app/server/src/fruits_list_table/fruits.rs b/todo-app/server/src/fruits_list_table/fruits.rs deleted file mode 100644 index 3776883..0000000 --- a/todo-app/server/src/fruits_list_table/fruits.rs +++ /dev/null @@ -1,23 +0,0 @@ -//! SeaORM Entity. Generated by sea-orm-codegen 0.6.0 - -use sea_orm::entity::prelude::*; - -#[derive(Clone, Debug, PartialEq, DeriveEntityModel)] -#[sea_orm(table_name = "fruits")] -pub struct Model { - #[sea_orm(primary_key)] - pub fruit_id: i32, - #[sea_orm(unique)] - pub fruit_name: String, -} - -#[derive(Copy, Clone, Debug, EnumIter)] -pub enum Relation {} - -impl RelationTrait for Relation { - fn def(&self) -> RelationDef { - panic!("No RelationDef") - } -} - -impl ActiveModelBehavior for ActiveModel {} diff --git a/todo-app/server/src/fruits_list_table/mod.rs b/todo-app/server/src/fruits_list_table/mod.rs deleted file mode 100644 index dc15169..0000000 --- a/todo-app/server/src/fruits_list_table/mod.rs +++ /dev/null @@ -1,5 +0,0 @@ -//! SeaORM Entity. Generated by sea-orm-codegen 0.6.0 - -pub mod prelude; - -pub mod fruits; diff --git a/todo-app/server/src/fruits_list_table/prelude.rs b/todo-app/server/src/fruits_list_table/prelude.rs deleted file mode 100644 index 69e8e7e..0000000 --- a/todo-app/server/src/fruits_list_table/prelude.rs +++ /dev/null @@ -1,6 +0,0 @@ -//! SeaORM Entity. Generated by sea-orm-codegen 0.6.0 - -pub use super::fruits::{ - ActiveModel as FruitsActiveModel, Column as FruitsColumn, Entity as Fruits, - Model as FruitsModel, PrimaryKey as FruitsPrimaryKey, Relation as FruitsRelation, -}; diff --git a/todo-app/server/src/insert_values.rs b/todo-app/server/src/insert_values.rs deleted file mode 100644 index e65f430..0000000 --- a/todo-app/server/src/insert_values.rs +++ /dev/null @@ -1,33 +0,0 @@ -use crate::{Fruits, FruitsActiveModel}; -use sea_orm::{DatabaseConnection, EntityTrait, Set}; - -// Insert suppliers in the `suppliers` table -pub async fn insert_fruits(db: &DatabaseConnection) -> anyhow::Result<()> { - let apple = FruitsActiveModel { - fruit_name: Set("Apple".to_owned()), - ..Default::default() - }; - - let orange = FruitsActiveModel { - fruit_name: Set("Orange".to_owned()), - ..Default::default() - }; - - let mango = FruitsActiveModel { - fruit_name: Set("Mango".to_owned()), - ..Default::default() - }; - - let pineapple = FruitsActiveModel { - fruit_name: Set("Pineapple".to_owned()), - ..Default::default() - }; - - let fruit_insert_operation = Fruits::insert_many(vec![apple, orange, mango, pineapple]) - .exec(db) - .await; - - println!("INSERTED FRUITS: {:?}", fruit_insert_operation?); - - Ok(()) -} diff --git a/todo-app/server/src/main.rs b/todo-app/server/src/main.rs deleted file mode 100644 index 29a0c55..0000000 --- a/todo-app/server/src/main.rs +++ /dev/null @@ -1,115 +0,0 @@ -use axum::{ - routing::{get, post}, - Router, -}; -use dotenv::dotenv; -use once_cell::sync::OnceCell; -use sea_orm::{ - sea_query::{Alias, ColumnDef, Table}, - ConnectionTrait, Database, DatabaseConnection, DbBackend, -}; -use std::net::SocketAddr; - -mod fruits_list_table; -mod insert_values; -mod routing; -mod todo_list_table; - -pub use fruits_list_table::prelude::*; -pub use insert_values::*; -pub use routing::*; -pub use todo_list_table::prelude::*; - -static DATABASE_CONNECTION: OnceCell = OnceCell::new(); - -#[tokio::main] -async fn main() -> anyhow::Result<()> { - //Define the database backend - let db_postgres = DbBackend::Postgres; - - dotenv().ok(); - - // Read the database environment from the `.env` file - let database_url = dotenv::var("DATABASE_URL")?; - let db = Database::connect(database_url).await?; - DATABASE_CONNECTION.set(db).unwrap(); - - // Create the fruits table - let fruits_table = Table::create() - .table(Alias::new("fruits")) - .if_not_exists() - .col( - ColumnDef::new(Alias::new("fruit_id")) - .integer() - .auto_increment() - .primary_key() - .not_null(), - ) - .col( - ColumnDef::new(Alias::new("fruit_name")) - .string() - .unique_key() - .not_null(), - ) - .to_owned(); - - let db = DATABASE_CONNECTION.get().unwrap(); - - // Executing the SQL query to create the `fruits_table` in PostgreSQL - let create_table_op = db.execute(db_postgres.build(&fruits_table)).await; - // Print the result in a user friendly way - println!( - "`CREATE TABLE fruits` {:?}", - match create_table_op { - Ok(_) => "Operation Successful".to_owned(), - Err(e) => format!("Unsuccessful - Error {:?}", e), - } - ); - - // Create the `todos` table - let todos_table = Table::create() - .table(Alias::new("todos")) - .if_not_exists() - .col( - ColumnDef::new(Alias::new("todo_id")) - .integer() - .auto_increment() - .primary_key() - .not_null(), - ) - .col( - ColumnDef::new(Alias::new("username")) - .string() - .unique_key() - .not_null(), - ) - .col(ColumnDef::new(Alias::new("todo_list")).string()) - .to_owned(); - - // Executing the SQL query to create the `todos` table in PostgreSQL - let create_table_op = db.execute(db_postgres.build(&todos_table)).await; - // Print the result in a user friendly way - println!( - "`CREATE TABLE todos` {:?}", - match create_table_op { - Ok(_) => "Operation Successful".to_owned(), - Err(e) => format!("Unsuccessful - Error {:?}", e), - } - ); - - insert_fruits(&db).await?; - - let app = Router::new() - .route("/", get(root)) - .route("/fruits", get(get_fruits)) - .route("/store", post(store_todo)) - .route("/update_todo", post(update_todo)); - - let addr = SocketAddr::from(([127, 0, 0, 1], 8080)); - println!("listening on http://{}", addr); - axum::Server::bind(&addr) - .serve(app.into_make_service()) - .await?; - - Ok(()) -} diff --git a/todo-app/server/src/routing.rs b/todo-app/server/src/routing.rs deleted file mode 100644 index b1e2f57..0000000 --- a/todo-app/server/src/routing.rs +++ /dev/null @@ -1,76 +0,0 @@ -use crate::{Fruits, Todos, TodosActiveModel, TodosColumn, DATABASE_CONNECTION}; -use axum::{http::StatusCode, response::IntoResponse, Json}; -use sea_orm::{ActiveModelTrait, ColumnTrait, EntityTrait, QueryFilter, Set}; -use serde::Deserialize; - -#[derive(Deserialize, Debug)] -pub struct Store { - username: String, - todo_list: String, -} - -pub async fn root() -> &'static str { - "Remote PostgreSQL Server Online!" -} - -pub async fn get_fruits() -> impl IntoResponse { - let db = DATABASE_CONNECTION.get().unwrap(); - - match Fruits::find().all(db).await { - Ok(fruit_models) => { - let fruits = fruit_models - .iter() - .map(|fruit_model| fruit_model.fruit_name.clone()) - .collect::>(); - - (StatusCode::ACCEPTED, Json(fruits)) - } - Err(error) => ( - StatusCode::INTERNAL_SERVER_ERROR, - Json(vec![error.to_string()]), - ), - } -} - -pub async fn store_todo(Json(payload): Json) -> impl IntoResponse { - let db = DATABASE_CONNECTION.get().unwrap(); - - let todo_user = TodosActiveModel { - username: Set(payload.username.to_owned()), - todo_list: Set(Some(payload.todo_list.to_owned())), - ..Default::default() - }; - - match Todos::insert(todo_user).exec(db).await { - Ok(_) => (StatusCode::ACCEPTED, Json("INSERTED".to_owned())), - Err(error) => (StatusCode::INTERNAL_SERVER_ERROR, Json(error.to_string())), - } -} - -pub async fn update_todo(Json(payload): Json) -> impl IntoResponse { - let db = DATABASE_CONNECTION.get().unwrap(); - - match Todos::find() - .filter(TodosColumn::Username.contains(&payload.username)) - .one(db) - .await - { - Ok(found_model) => { - if let Some(model) = found_model { - let mut todo_model: TodosActiveModel = model.into(); - todo_model.todo_list = Set(Some(payload.todo_list.to_owned())); - match todo_model.update(db).await { - Ok(_) => (StatusCode::NO_CONTENT, Json("UPDATED_TODO".to_owned())), - Err(error) => (StatusCode::INTERNAL_SERVER_ERROR, Json(error.to_string())), - } - } else { - ( - StatusCode::INTERNAL_SERVER_ERROR, - Json("MODEL_NOT_FOUND".to_owned()), - ) - } - } - - Err(error) => (StatusCode::INTERNAL_SERVER_ERROR, Json(error.to_string())), - } -} diff --git a/todo-app/server/src/todo_list_table/mod.rs b/todo-app/server/src/todo_list_table/mod.rs deleted file mode 100644 index 77b9eed..0000000 --- a/todo-app/server/src/todo_list_table/mod.rs +++ /dev/null @@ -1,5 +0,0 @@ -//! SeaORM Entity. Generated by sea-orm-codegen 0.6.0 - -pub mod prelude; - -pub mod todos; diff --git a/todo-app/server/src/todo_list_table/prelude.rs b/todo-app/server/src/todo_list_table/prelude.rs deleted file mode 100644 index 5bf2688..0000000 --- a/todo-app/server/src/todo_list_table/prelude.rs +++ /dev/null @@ -1,6 +0,0 @@ -//! SeaORM Entity. Generated by sea-orm-codegen 0.6.0 - -pub use super::todos::{ - ActiveModel as TodosActiveModel, Column as TodosColumn, Entity as Todos, Model as TodosModel, - PrimaryKey as TodosPrimaryKey, Relation as TodosRelation, -}; diff --git a/todo-app/server/src/todo_list_table/todos.rs b/todo-app/server/src/todo_list_table/todos.rs deleted file mode 100644 index 699185d..0000000 --- a/todo-app/server/src/todo_list_table/todos.rs +++ /dev/null @@ -1,24 +0,0 @@ -//! SeaORM Entity. Generated by sea-orm-codegen 0.6.0 - -use sea_orm::entity::prelude::*; - -#[derive(Clone, Debug, PartialEq, DeriveEntityModel)] -#[sea_orm(table_name = "todos")] -pub struct Model { - #[sea_orm(primary_key)] - pub todo_id: i32, - #[sea_orm(unique)] - pub username: String, - pub todo_list: Option, -} - -#[derive(Copy, Clone, Debug, EnumIter)] -pub enum Relation {} - -impl RelationTrait for Relation { - fn def(&self) -> RelationDef { - panic!("No RelationDef") - } -} - -impl ActiveModelBehavior for ActiveModel {} From 2617f6e46730dc50691992d8b2b4844dc4d9093c Mon Sep 17 00:00:00 2001 From: Sanford Pun Date: Tue, 14 Jun 2022 16:01:51 +0800 Subject: [PATCH 25/60] Draft ch01-08 --- tutorials-book/src/SUMMARY.md | 2 +- .../src/ch01-08-sql-with-sea-query.md | 92 +++++++++++++++++++ 2 files changed, 93 insertions(+), 1 deletion(-) create mode 100644 tutorials-book/src/ch01-08-sql-with-sea-query.md diff --git a/tutorials-book/src/SUMMARY.md b/tutorials-book/src/SUMMARY.md index d97425d..1ec2e94 100644 --- a/tutorials-book/src/SUMMARY.md +++ b/tutorials-book/src/SUMMARY.md @@ -12,7 +12,7 @@ - [Basic CRUD Operations](ch01-05-basic-crud-operations.md) - [Relational Select](ch01-06-relational-select.md) - [Testing with Mock Interface](ch01-07-mock-testing.md) - - [Optional: Building SQL Queries with SeaQuery]() + - [Optional: Building SQL Queries with SeaQuery](ch01-08-sql-with-sea-query.md) ## Chapter 2 - Integration with Rocket diff --git a/tutorials-book/src/ch01-08-sql-with-sea-query.md b/tutorials-book/src/ch01-08-sql-with-sea-query.md new file mode 100644 index 0000000..d4497fb --- /dev/null +++ b/tutorials-book/src/ch01-08-sql-with-sea-query.md @@ -0,0 +1,92 @@ +# Optional: Building SQL Queries with SeaQuery + +If you prefer the flexibility of SQL, you can use [SeaQuery](https://crates.io/crates/sea-query) to build SQL-like statements for any queries or operations. + +SeaQuery is built-in for SeaORM, so no extra setup is required. + +## Insert statements + +Raw SQL: + +```sql +INSERT INTO `bakery` (`name`, `profit_margin`) VALUES ('SQL Bakery', -100) +``` + +SeaQuery: + +```rust, no_run +let columns: Vec = ["name", "profit_margin"] + .into_iter() + .map(Alias::new) + .collect(); + +let mut stmt = Query::insert(); +stmt.into_table(bakery::Entity).columns(columns); + +// Invoke `values_panic()` for each row +stmt.values_panic(["SQL Bakery".into(), (-100.0).into()]); + +let builder = db.get_database_backend(); +db.execute(builder.build(&stmt)).await?; +``` + +## Select statements + +Raw SQL: + +```sql +SELECT `baker`.`name` FROM `baker` JOIN `bakery` ON `baker`.`bakery_id` = `bakery`.`id` ORDER BY `baker`.`name` ASC +``` + +SeaQuery: + +If you are only interested in some of the columns, define a struct to hold the query result. It has to derive from the trait `FromQueryResult`. + +If all columns are of interest, then the generated `Model` structs (e.g. `baker::Model`) can be used. + +The fields of the struct must match the column names of the query result. + +```rust, no_run +#[derive(FromQueryResult)] +struct BakerNameResult { + name: String, +} + +... + +let column = (baker::Entity, Alias::new("name")); + +let mut stmt = Query::select(); +stmt.column(column.clone()) // Use `expr_as` instead of `column` if renaming is necessary + .from(baker::Entity) + .join( + JoinType::Join, + bakery::Entity, + Expr::tbl(baker::Entity, Alias::new("bakery_id")) + .equals(bakery::Entity, Alias::new("id")), + ) + .order_by(column, Order::Asc); + +let builder = db.get_database_backend(); +let baker = BakerNameResult::find_by_statement(builder.build(&stmt)) + .all(db) + .await?; + +let baker_names = baker.into_iter().map(|b| b.name).collect::>(); + +assert_eq!( + baker_names, + vec!["Charles", "Frederic", "Jolie", "Madeleine"] +); +``` + +## Testing and Debugging + +It's often useful to check the raw SQL of the SeaQuery-generated statements. + +Use `stmt.to_string(query_builder)` to do that. + +```rust, no_run +// Check the raw SQL of `stmt` in MySQL syntax +println!({}, stmt.to_string(MysqlQueryBuilder)); +``` From c01ad2e34e9c71a55d8adc98d5514e63faf58bde Mon Sep 17 00:00:00 2001 From: Sanford Pun Date: Tue, 14 Jun 2022 16:04:28 +0800 Subject: [PATCH 26/60] Add SeaQuery usage source code --- bakery-backend/src/main.rs | 49 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/bakery-backend/src/main.rs b/bakery-backend/src/main.rs index 7157745..1b0a882 100644 --- a/bakery-backend/src/main.rs +++ b/bakery-backend/src/main.rs @@ -9,6 +9,11 @@ use sea_orm_migration::prelude::*; const DATABASE_URL: &str = "mysql://root:root@localhost:3306"; +#[derive(FromQueryResult)] +struct BakerNameResult { + name: String, +} + async fn run() -> Result<(), DbErr> { let db = Database::connect(DATABASE_URL).await?; @@ -261,6 +266,50 @@ async fn run() -> Result<(), DbErr> { ); } + // SeaQuery insert + { + let columns: Vec = ["name", "profit_margin"] + .into_iter() + .map(Alias::new) + .collect(); + + let mut stmt = Query::insert(); + stmt.into_table(bakery::Entity).columns(columns); + + stmt.values_panic(["SQL Bakery".into(), (-100.0).into()]); + + let builder = db.get_database_backend(); + db.execute(builder.build(&stmt)).await?; + } + + // SeaQuery select + { + let column = (baker::Entity, Alias::new("name")); + + let mut stmt = Query::select(); + stmt.column(column.clone()) + .from(baker::Entity) + .join( + JoinType::Join, + bakery::Entity, + Expr::tbl(baker::Entity, Alias::new("bakery_id")) + .equals(bakery::Entity, Alias::new("id")), + ) + .order_by(column, Order::Asc); + + let builder = db.get_database_backend(); + let baker = BakerNameResult::find_by_statement(builder.build(&stmt)) + .all(db) + .await?; + + let baker_names = baker.into_iter().map(|b| b.name).collect::>(); + + assert_eq!( + baker_names, + vec!["Charles", "Frederic", "Jolie", "Madeleine"] + ); + } + Ok(()) } From 679fc6f1cc18425641406d4b574cbd318a95a236 Mon Sep 17 00:00:00 2001 From: Sanford Pun Date: Thu, 16 Jun 2022 17:05:15 +0800 Subject: [PATCH 27/60] Add Rocket integration example source code --- Cargo.toml | 2 + rocket-example/.gitignore | 1 + rocket-example/Cargo.toml | 15 +++ rocket-example/src/entities/baker.rs | 33 ++++++ rocket-example/src/entities/bakery.rs | 26 +++++ rocket-example/src/entities/mod.rs | 7 ++ rocket-example/src/entities/prelude.rs | 5 + .../src/entities/seaql_migrations.rs | 22 ++++ rocket-example/src/main.rs | 104 ++++++++++++++++++ .../m20220602_000001_create_bakery_table.rs | 46 ++++++++ .../m20220602_000002_create_baker_table.rs | 56 ++++++++++ rocket-example/src/migrator/mod.rs | 16 +++ rocket-example/src/setup.rs | 39 +++++++ 13 files changed, 372 insertions(+) create mode 100644 Cargo.toml create mode 100644 rocket-example/.gitignore create mode 100644 rocket-example/Cargo.toml create mode 100644 rocket-example/src/entities/baker.rs create mode 100644 rocket-example/src/entities/bakery.rs create mode 100644 rocket-example/src/entities/mod.rs create mode 100644 rocket-example/src/entities/prelude.rs create mode 100644 rocket-example/src/entities/seaql_migrations.rs create mode 100644 rocket-example/src/main.rs create mode 100644 rocket-example/src/migrator/m20220602_000001_create_bakery_table.rs create mode 100644 rocket-example/src/migrator/m20220602_000002_create_baker_table.rs create mode 100644 rocket-example/src/migrator/mod.rs create mode 100644 rocket-example/src/setup.rs diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..dc12608 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,2 @@ +[workspace] +members = ["bakery-backend", "rocket-example"] diff --git a/rocket-example/.gitignore b/rocket-example/.gitignore new file mode 100644 index 0000000..1de5659 --- /dev/null +++ b/rocket-example/.gitignore @@ -0,0 +1 @@ +target \ No newline at end of file diff --git a/rocket-example/Cargo.toml b/rocket-example/Cargo.toml new file mode 100644 index 0000000..1661e70 --- /dev/null +++ b/rocket-example/Cargo.toml @@ -0,0 +1,15 @@ +[package] +name = "rocket-example" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +rocket = { version = "^0.5.0-rc.2", features = ["json"] } +sea-orm = { version = "0.8.0", features = [ + "sqlx-mysql", + "runtime-async-std-native-tls", + "macros", +] } +sea-orm-migration = "0.8.3" diff --git a/rocket-example/src/entities/baker.rs b/rocket-example/src/entities/baker.rs new file mode 100644 index 0000000..a57a551 --- /dev/null +++ b/rocket-example/src/entities/baker.rs @@ -0,0 +1,33 @@ +//! SeaORM Entity. Generated by sea-orm-codegen 0.8.0 + +use sea_orm::entity::prelude::*; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel)] +#[sea_orm(table_name = "baker")] +pub struct Model { + #[sea_orm(primary_key)] + pub id: i32, + pub name: String, + pub contact_details: Option, + pub bakery_id: i32, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm( + belongs_to = "super::bakery::Entity", + from = "Column::BakeryId", + to = "super::bakery::Column::Id", + on_update = "NoAction", + on_delete = "NoAction" + )] + Bakery, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::Bakery.def() + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/rocket-example/src/entities/bakery.rs b/rocket-example/src/entities/bakery.rs new file mode 100644 index 0000000..c9ff157 --- /dev/null +++ b/rocket-example/src/entities/bakery.rs @@ -0,0 +1,26 @@ +//! SeaORM Entity. Generated by sea-orm-codegen 0.8.0 + +use sea_orm::entity::prelude::*; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel)] +#[sea_orm(table_name = "bakery")] +pub struct Model { + #[sea_orm(primary_key)] + pub id: i32, + pub name: String, + pub profit_margin: f64, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm(has_many = "super::baker::Entity")] + Baker, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::Baker.def() + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/rocket-example/src/entities/mod.rs b/rocket-example/src/entities/mod.rs new file mode 100644 index 0000000..2462768 --- /dev/null +++ b/rocket-example/src/entities/mod.rs @@ -0,0 +1,7 @@ +//! SeaORM Entity. Generated by sea-orm-codegen 0.8.0 + +pub mod prelude; + +pub mod baker; +pub mod bakery; +pub mod seaql_migrations; diff --git a/rocket-example/src/entities/prelude.rs b/rocket-example/src/entities/prelude.rs new file mode 100644 index 0000000..7fba2d7 --- /dev/null +++ b/rocket-example/src/entities/prelude.rs @@ -0,0 +1,5 @@ +//! SeaORM Entity. Generated by sea-orm-codegen 0.8.0 + +pub use super::baker::Entity as Baker; +pub use super::bakery::Entity as Bakery; +pub use super::seaql_migrations::Entity as SeaqlMigrations; diff --git a/rocket-example/src/entities/seaql_migrations.rs b/rocket-example/src/entities/seaql_migrations.rs new file mode 100644 index 0000000..c32c701 --- /dev/null +++ b/rocket-example/src/entities/seaql_migrations.rs @@ -0,0 +1,22 @@ +//! SeaORM Entity. Generated by sea-orm-codegen 0.8.0 + +use sea_orm::entity::prelude::*; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel)] +#[sea_orm(table_name = "seaql_migrations")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub version: String, + pub applied_at: i64, +} + +#[derive(Copy, Clone, Debug, EnumIter)] +pub enum Relation {} + +impl RelationTrait for Relation { + fn def(&self) -> RelationDef { + panic!("No RelationDef") + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/rocket-example/src/main.rs b/rocket-example/src/main.rs new file mode 100644 index 0000000..a09cf5e --- /dev/null +++ b/rocket-example/src/main.rs @@ -0,0 +1,104 @@ +mod entities; +mod migrator; +mod setup; + +use entities::{prelude::*, *}; +use rocket::{serde::json::Json, *}; +use sea_orm::*; +use setup::set_up_db; + +#[get("/")] +async fn index() -> &'static str { + "Hello, bakeries!" +} + +#[get("/bakeries")] +async fn bakeries(db: &State) -> Result>, ErrorResponder> { + let db = db as &DatabaseConnection; + + let bakery_names = Bakery::find() + .all(db) + .await + .map_err(Into::into)? + .into_iter() + .map(|b| b.name) + .collect::>(); + + Ok(Json(bakery_names)) +} + +#[get("/bakeries/")] +async fn bakery_by_id(db: &State, id: i32) -> Result { + let db = db as &DatabaseConnection; + + let bakery = Bakery::find_by_id(id).one(db).await.map_err(Into::into)?; + + Ok(if let Some(bakery) = bakery { + bakery.name + } else { + return Err(format!("No bakery with id {id} is found.").into()); + }) +} + +#[post("/bakeries/?")] +async fn new_bakery( + db: &State, + name: &str, + profit_margin: Option, +) -> Result<(), ErrorResponder> { + let db = db as &DatabaseConnection; + + let new_bakery = bakery::ActiveModel { + name: ActiveValue::Set(name.to_owned()), + profit_margin: ActiveValue::Set(profit_margin.unwrap_or_default()), + ..Default::default() + }; + + Bakery::insert(new_bakery) + .exec(db) + .await + .map_err(Into::into)?; + + Ok(()) +} + +#[launch] +async fn rocket() -> _ { + let db = match set_up_db().await { + Ok(db) => db, + Err(err) => panic!("{}", err), + }; + + rocket::build() + .manage(db) + .mount("/", routes![index, bakeries, bakery_by_id, new_bakery]) +} + +#[derive(Responder)] +#[response(status = 500, content_type = "json")] +struct ErrorResponder { + message: String, +} + +#[allow(clippy::from_over_into)] +impl Into for DbErr { + fn into(self) -> ErrorResponder { + ErrorResponder { + message: self.to_string(), + } + } +} + +#[allow(clippy::from_over_into)] +impl Into for String { + fn into(self) -> ErrorResponder { + ErrorResponder { message: self } + } +} + +#[allow(clippy::from_over_into)] +impl Into for &str { + fn into(self) -> ErrorResponder { + self.to_owned().into() + } +} diff --git a/rocket-example/src/migrator/m20220602_000001_create_bakery_table.rs b/rocket-example/src/migrator/m20220602_000001_create_bakery_table.rs new file mode 100644 index 0000000..03ae011 --- /dev/null +++ b/rocket-example/src/migrator/m20220602_000001_create_bakery_table.rs @@ -0,0 +1,46 @@ +use sea_orm_migration::prelude::*; + +pub struct Migration; + +impl MigrationName for Migration { + fn name(&self) -> &str { + "m_20220602_000001_create_bakery_table" + } +} + +#[async_trait::async_trait] +impl MigrationTrait for Migration { + async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> { + manager + .create_table( + Table::create() + .if_not_exists() + .table(Bakery::Table) + .col( + ColumnDef::new(Bakery::Id) + .integer() + .not_null() + .auto_increment() + .primary_key(), + ) + .col(ColumnDef::new(Bakery::Name).string().not_null()) + .col(ColumnDef::new(Bakery::ProfitMargin).double().not_null()) + .to_owned(), + ) + .await + } + + async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> { + manager + .drop_table(Table::drop().table(Bakery::Table).to_owned()) + .await + } +} + +#[derive(Iden)] +pub enum Bakery { + Table, + Id, + Name, + ProfitMargin, +} diff --git a/rocket-example/src/migrator/m20220602_000002_create_baker_table.rs b/rocket-example/src/migrator/m20220602_000002_create_baker_table.rs new file mode 100644 index 0000000..91ee311 --- /dev/null +++ b/rocket-example/src/migrator/m20220602_000002_create_baker_table.rs @@ -0,0 +1,56 @@ +use sea_orm_migration::prelude::*; + +use super::m20220602_000001_create_bakery_table::Bakery; + +pub struct Migration; + +impl MigrationName for Migration { + fn name(&self) -> &str { + "m_20220602_000002_create_baker_table" + } +} + +#[async_trait::async_trait] +impl MigrationTrait for Migration { + async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> { + manager + .create_table( + Table::create() + .if_not_exists() + .table(Baker::Table) + .col( + ColumnDef::new(Baker::Id) + .integer() + .not_null() + .auto_increment() + .primary_key(), + ) + .col(ColumnDef::new(Baker::Name).string().not_null()) + .col(ColumnDef::new(Baker::ContactDetails).json()) + .col(ColumnDef::new(Baker::BakeryId).integer().not_null()) + .foreign_key( + ForeignKey::create() + .name("fk-baker-bakery_id") + .from(Baker::Table, Baker::BakeryId) + .to(Bakery::Table, Bakery::Id), + ) + .to_owned(), + ) + .await + } + + async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> { + manager + .drop_table(Table::drop().table(Baker::Table).to_owned()) + .await + } +} + +#[derive(Iden)] +pub enum Baker { + Table, + Id, + Name, + ContactDetails, + BakeryId, +} diff --git a/rocket-example/src/migrator/mod.rs b/rocket-example/src/migrator/mod.rs new file mode 100644 index 0000000..9cbc98b --- /dev/null +++ b/rocket-example/src/migrator/mod.rs @@ -0,0 +1,16 @@ +use sea_orm_migration::prelude::*; + +mod m20220602_000001_create_bakery_table; +mod m20220602_000002_create_baker_table; + +pub struct Migrator; + +#[async_trait::async_trait] +impl MigratorTrait for Migrator { + fn migrations() -> Vec> { + vec![ + Box::new(m20220602_000001_create_bakery_table::Migration), + Box::new(m20220602_000002_create_baker_table::Migration), + ] + } +} diff --git a/rocket-example/src/setup.rs b/rocket-example/src/setup.rs new file mode 100644 index 0000000..f5dfea2 --- /dev/null +++ b/rocket-example/src/setup.rs @@ -0,0 +1,39 @@ +use sea_orm::*; + +const DATABASE_URL: &str = "mysql://root:root@localhost:3306"; + +pub(super) async fn set_up_db() -> Result { + let db = Database::connect(DATABASE_URL).await?; + + let db_name = "bakeries_db"; + let db = match db.get_database_backend() { + DbBackend::MySql => { + db.execute(Statement::from_string( + db.get_database_backend(), + format!("CREATE DATABASE IF NOT EXISTS `{}`;", db_name), + )) + .await?; + + let url = format!("{}/{}", DATABASE_URL, db_name); + Database::connect(&url).await? + } + DbBackend::Postgres => { + db.execute(Statement::from_string( + db.get_database_backend(), + format!("DROP DATABASE IF EXISTS \"{}\";", db_name), + )) + .await?; + db.execute(Statement::from_string( + db.get_database_backend(), + format!("CREATE DATABASE \"{}\";", db_name), + )) + .await?; + + let url = format!("{}/{}", DATABASE_URL, db_name); + Database::connect(&url).await? + } + DbBackend::Sqlite => db, + }; + + Ok(db) +} From dc4a156932ae3032b754daae97cbec69f2c5d5e2 Mon Sep 17 00:00:00 2001 From: Sanford Pun Date: Thu, 16 Jun 2022 17:05:36 +0800 Subject: [PATCH 28/60] Update SUMMARY --- tutorials-book/src/SUMMARY.md | 6 +++++- tutorials-book/src/ch02-00-integration-with-rocket.md | 3 +++ 2 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 tutorials-book/src/ch02-00-integration-with-rocket.md diff --git a/tutorials-book/src/SUMMARY.md b/tutorials-book/src/SUMMARY.md index 1ec2e94..4f2f951 100644 --- a/tutorials-book/src/SUMMARY.md +++ b/tutorials-book/src/SUMMARY.md @@ -16,7 +16,11 @@ ## Chapter 2 - Integration with Rocket -- [Chapter 2 - Integration with Rocket]() +- [Chapter 2 - Integration with Rocket](ch02-00-integration-with-rocket.md) + - [Project Setup](#) + - [Fetch from Database](#) + - [Error Handling](#) + - [Web API Integration](#) ## Chapter 3 - Integration with GraphQL diff --git a/tutorials-book/src/ch02-00-integration-with-rocket.md b/tutorials-book/src/ch02-00-integration-with-rocket.md new file mode 100644 index 0000000..29e3033 --- /dev/null +++ b/tutorials-book/src/ch02-00-integration-with-rocket.md @@ -0,0 +1,3 @@ +# Chapter 2 - Integration with Rocket + + From 28a805e561bc8d10a4dc757206eae4b0721b5898 Mon Sep 17 00:00:00 2001 From: Sanford Pun Date: Thu, 16 Jun 2022 17:07:55 +0800 Subject: [PATCH 29/60] Section rename: "Fetch from Database" -> "Connect to Database" --- tutorials-book/src/SUMMARY.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tutorials-book/src/SUMMARY.md b/tutorials-book/src/SUMMARY.md index 4f2f951..2a61bf5 100644 --- a/tutorials-book/src/SUMMARY.md +++ b/tutorials-book/src/SUMMARY.md @@ -18,7 +18,7 @@ - [Chapter 2 - Integration with Rocket](ch02-00-integration-with-rocket.md) - [Project Setup](#) - - [Fetch from Database](#) + - [Connect to Database](#) - [Error Handling](#) - [Web API Integration](#) From ab45421aa99dc85afed66ee5152f19a79d9f1009 Mon Sep 17 00:00:00 2001 From: Sanford Pun Date: Thu, 16 Jun 2022 17:23:50 +0800 Subject: [PATCH 30/60] Draft ch02-00 --- tutorials-book/src/ch02-00-integration-with-rocket.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tutorials-book/src/ch02-00-integration-with-rocket.md b/tutorials-book/src/ch02-00-integration-with-rocket.md index 29e3033..fd22084 100644 --- a/tutorials-book/src/ch02-00-integration-with-rocket.md +++ b/tutorials-book/src/ch02-00-integration-with-rocket.md @@ -1,3 +1,9 @@ # Chapter 2 - Integration with Rocket +In Chapter 1, we've explored how to interact with a database in Rust. +In real applications, however, we'd probably want to expose those operations in a Web API for generic usage. + +To achieve that, we leverage web frameworks like [Rocket](https://rocket.rs/). + +You'll soon discover how simple and painless it is to use SeaORM in a Rocket application! From c70b256c46a1360983f6490ff58cbb94e566d7cd Mon Sep 17 00:00:00 2001 From: Sanford Pun Date: Thu, 16 Jun 2022 17:25:26 +0800 Subject: [PATCH 31/60] Remove # in SUMMARY.md --- tutorials-book/src/SUMMARY.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tutorials-book/src/SUMMARY.md b/tutorials-book/src/SUMMARY.md index 2a61bf5..aff187c 100644 --- a/tutorials-book/src/SUMMARY.md +++ b/tutorials-book/src/SUMMARY.md @@ -17,10 +17,10 @@ ## Chapter 2 - Integration with Rocket - [Chapter 2 - Integration with Rocket](ch02-00-integration-with-rocket.md) - - [Project Setup](#) - - [Connect to Database](#) - - [Error Handling](#) - - [Web API Integration](#) + - [Project Setup](ch02-01-project-setup.md) + - [Connect to Database]() + - [Error Handling]() + - [Web API Integration]() ## Chapter 3 - Integration with GraphQL From 672529686375c0faa92597c6e2e4c59f92f340f2 Mon Sep 17 00:00:00 2001 From: Sanford Pun Date: Thu, 16 Jun 2022 17:44:37 +0800 Subject: [PATCH 32/60] Add `/reset` endpoint in Rocket integration example source code --- rocket-example/src/main.rs | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/rocket-example/src/main.rs b/rocket-example/src/main.rs index a09cf5e..6f54ebb 100644 --- a/rocket-example/src/main.rs +++ b/rocket-example/src/main.rs @@ -3,8 +3,10 @@ mod migrator; mod setup; use entities::{prelude::*, *}; +use migrator::Migrator; use rocket::{serde::json::Json, *}; use sea_orm::*; +use sea_orm_migration::MigratorTrait; use setup::set_up_db; #[get("/")] @@ -62,6 +64,13 @@ async fn new_bakery( Ok(()) } +#[post("/reset")] +async fn reset(db: &State) -> Result<(), ErrorResponder> { + Migrator::refresh(db).await.map_err(Into::into)?; + + Ok(()) +} + #[launch] async fn rocket() -> _ { let db = match set_up_db().await { @@ -69,9 +78,10 @@ async fn rocket() -> _ { Err(err) => panic!("{}", err), }; - rocket::build() - .manage(db) - .mount("/", routes![index, bakeries, bakery_by_id, new_bakery]) + rocket::build().manage(db).mount( + "/", + routes![index, bakeries, bakery_by_id, new_bakery, reset], + ) } #[derive(Responder)] From a923a0c183cd503b18c93fa27f11fd31b722f779 Mon Sep 17 00:00:00 2001 From: Sanford Pun Date: Thu, 16 Jun 2022 17:59:35 +0800 Subject: [PATCH 33/60] Draft ch02-01 --- tutorials-book/src/ch02-01-project-setup.md | 51 +++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 tutorials-book/src/ch02-01-project-setup.md diff --git a/tutorials-book/src/ch02-01-project-setup.md b/tutorials-book/src/ch02-01-project-setup.md new file mode 100644 index 0000000..9c66128 --- /dev/null +++ b/tutorials-book/src/ch02-01-project-setup.md @@ -0,0 +1,51 @@ +# Create a Rocket project + +Create a new binary crate: + +```sh +$ cargo new rocket-example --bin +$ cd rocket-example +``` + +Add [`rocket`](https://crates.io/crates/rocket) as a dependency: + +```diff +# Cargo.toml + +... + +[dependencies] ++ rocket = { version = "^0.5.0-rc.2", features = ["json"] } + +... + +``` + +*Pay attention to the version that you're using. `rocket` and/or its dependencies may not compile on the stable build of the Rust compiler if an early version of `rocket` is used.* + +The following should compile and run: + +```rust, no_run +// src/main.rs + +use rocket::*; + +#[get("/")] +async fn index() -> &'static str { + "Hello, bakeries!" +} + +#[launch] // The "main" function of the program +fn rocket() -> _ { + rocket::build().mount("/", routes![index, bakeries]) +} + +``` + +To verify it works: + +``` +GET localhost:8000/ + +"Hello, bakeries!" +``` From eefbbcda3e131a94e5846e47bb89b786d1506b17 Mon Sep 17 00:00:00 2001 From: Sanford Pun Date: Thu, 23 Jun 2022 14:22:56 +0800 Subject: [PATCH 34/60] Add templates to provide a minimal frontend --- rocket-example/Cargo.toml | 5 + rocket-example/Rocket.toml | 2 + rocket-example/src/main.rs | 71 ++- rocket-example/static/css/normalize.css | 427 +++++++++++++++++++ rocket-example/static/css/skeleton.css | 421 ++++++++++++++++++ rocket-example/static/css/style.css | 73 ++++ rocket-example/static/images/favicon.png | Bin 0 -> 1155 bytes rocket-example/templates/bakeries.html.tera | 22 + rocket-example/templates/bakery.html.tera | 15 + rocket-example/templates/base.html.tera | 26 ++ rocket-example/templates/error/404.html.tera | 11 + rocket-example/templates/index.html.tera | 16 + rocket-example/templates/new.html.tera | 38 ++ rocket-example/templates/success.html.tera | 20 + 14 files changed, 1130 insertions(+), 17 deletions(-) create mode 100644 rocket-example/Rocket.toml create mode 100644 rocket-example/static/css/normalize.css create mode 100644 rocket-example/static/css/skeleton.css create mode 100644 rocket-example/static/css/style.css create mode 100644 rocket-example/static/images/favicon.png create mode 100644 rocket-example/templates/bakeries.html.tera create mode 100644 rocket-example/templates/bakery.html.tera create mode 100644 rocket-example/templates/base.html.tera create mode 100644 rocket-example/templates/error/404.html.tera create mode 100644 rocket-example/templates/index.html.tera create mode 100644 rocket-example/templates/new.html.tera create mode 100644 rocket-example/templates/success.html.tera diff --git a/rocket-example/Cargo.toml b/rocket-example/Cargo.toml index 1661e70..f3da933 100644 --- a/rocket-example/Cargo.toml +++ b/rocket-example/Cargo.toml @@ -13,3 +13,8 @@ sea-orm = { version = "0.8.0", features = [ "macros", ] } sea-orm-migration = "0.8.3" +serde_json = "1.0.81" + +[dependencies.rocket_dyn_templates] +version = "0.1.0-rc.2" +features = ["tera"] diff --git a/rocket-example/Rocket.toml b/rocket-example/Rocket.toml new file mode 100644 index 0000000..bdaeca5 --- /dev/null +++ b/rocket-example/Rocket.toml @@ -0,0 +1,2 @@ +[default] +template_dir = "templates/" diff --git a/rocket-example/src/main.rs b/rocket-example/src/main.rs index 6f54ebb..9ab1023 100644 --- a/rocket-example/src/main.rs +++ b/rocket-example/src/main.rs @@ -4,55 +4,74 @@ mod setup; use entities::{prelude::*, *}; use migrator::Migrator; -use rocket::{serde::json::Json, *}; +use rocket::{ + fs::{relative, FileServer}, + *, +}; +use rocket_dyn_templates::Template; use sea_orm::*; use sea_orm_migration::MigratorTrait; +use serde_json::json; use setup::set_up_db; #[get("/")] -async fn index() -> &'static str { - "Hello, bakeries!" +fn index() -> Template { + Template::render("index", json!({})) } #[get("/bakeries")] -async fn bakeries(db: &State) -> Result>, ErrorResponder> { +async fn bakeries(db: &State) -> Result { let db = db as &DatabaseConnection; - let bakery_names = Bakery::find() + let bakeries = Bakery::find() .all(db) .await .map_err(Into::into)? .into_iter() - .map(|b| b.name) - .collect::>(); + .map(|b| json!({ "name": b.name, "id": b.id })) + .collect::>(); - Ok(Json(bakery_names)) + Ok(Template::render( + "bakeries", + json!({ "bakeries": bakeries, "num_bakeries": bakeries.len() }), + )) } #[get("/bakeries/")] -async fn bakery_by_id(db: &State, id: i32) -> Result { +async fn bakery_by_id(db: &State, id: i32) -> Result { let db = db as &DatabaseConnection; let bakery = Bakery::find_by_id(id).one(db).await.map_err(Into::into)?; Ok(if let Some(bakery) = bakery { - bakery.name + Template::render( + "bakery", + json!({ "id": bakery.id, "name": bakery.name, "profit_margin": bakery.profit_margin }), + ) } else { return Err(format!("No bakery with id {id} is found.").into()); }) } -#[post("/bakeries/?")] +#[get("/new")] +fn new() -> Template { + Template::render("new", json!({})) +} + +// Use `GET` to support query parameters to simplify things +#[get("/bakeries?&")] async fn new_bakery( db: &State, name: &str, profit_margin: Option, -) -> Result<(), ErrorResponder> { +) -> Result { let db = db as &DatabaseConnection; + let profit_margin = profit_margin.unwrap_or_default(); + let new_bakery = bakery::ActiveModel { name: ActiveValue::Set(name.to_owned()), - profit_margin: ActiveValue::Set(profit_margin.unwrap_or_default()), + profit_margin: ActiveValue::Set(profit_margin), ..Default::default() }; @@ -61,7 +80,10 @@ async fn new_bakery( .await .map_err(Into::into)?; - Ok(()) + Ok(Template::render( + "success", + json!({ "name": name, "profit_margin": profit_margin}), + )) } #[post("/reset")] @@ -78,9 +100,24 @@ async fn rocket() -> _ { Err(err) => panic!("{}", err), }; - rocket::build().manage(db).mount( - "/", - routes![index, bakeries, bakery_by_id, new_bakery, reset], + rocket::build() + .manage(db) + .mount("/", FileServer::from(relative!("/static"))) + .mount( + "/", + routes![index, bakeries, bakery_by_id, new, new_bakery, reset], + ) + .register("/", catchers![not_found]) + .attach(Template::fairing()) +} + +#[catch(404)] +pub fn not_found(req: &Request<'_>) -> Template { + Template::render( + "error/404", + json! ({ + "uri": req.uri() + }), ) } diff --git a/rocket-example/static/css/normalize.css b/rocket-example/static/css/normalize.css new file mode 100644 index 0000000..458eea1 --- /dev/null +++ b/rocket-example/static/css/normalize.css @@ -0,0 +1,427 @@ +/*! normalize.css v3.0.2 | MIT License | git.io/normalize */ + +/** + * 1. Set default font family to sans-serif. + * 2. Prevent iOS text size adjust after orientation change, without disabling + * user zoom. + */ + +html { + font-family: sans-serif; /* 1 */ + -ms-text-size-adjust: 100%; /* 2 */ + -webkit-text-size-adjust: 100%; /* 2 */ +} + +/** + * Remove default margin. + */ + +body { + margin: 0; +} + +/* HTML5 display definitions + ========================================================================== */ + +/** + * Correct `block` display not defined for any HTML5 element in IE 8/9. + * Correct `block` display not defined for `details` or `summary` in IE 10/11 + * and Firefox. + * Correct `block` display not defined for `main` in IE 11. + */ + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +menu, +nav, +section, +summary { + display: block; +} + +/** + * 1. Correct `inline-block` display not defined in IE 8/9. + * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. + */ + +audio, +canvas, +progress, +video { + display: inline-block; /* 1 */ + vertical-align: baseline; /* 2 */ +} + +/** + * Prevent modern browsers from displaying `audio` without controls. + * Remove excess height in iOS 5 devices. + */ + +audio:not([controls]) { + display: none; + height: 0; +} + +/** + * Address `[hidden]` styling not present in IE 8/9/10. + * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22. + */ + +[hidden], +template { + display: none; +} + +/* Links + ========================================================================== */ + +/** + * Remove the gray background color from active links in IE 10. + */ + +a { + background-color: transparent; +} + +/** + * Improve readability when focused and also mouse hovered in all browsers. + */ + +a:active, +a:hover { + outline: 0; +} + +/* Text-level semantics + ========================================================================== */ + +/** + * Address styling not present in IE 8/9/10/11, Safari, and Chrome. + */ + +abbr[title] { + border-bottom: 1px dotted; +} + +/** + * Address style set to `bolder` in Firefox 4+, Safari, and Chrome. + */ + +b, +strong { + font-weight: bold; +} + +/** + * Address styling not present in Safari and Chrome. + */ + +dfn { + font-style: italic; +} + +/** + * Address variable `h1` font-size and margin within `section` and `article` + * contexts in Firefox 4+, Safari, and Chrome. + */ + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +/** + * Address styling not present in IE 8/9. + */ + +mark { + background: #ff0; + color: #000; +} + +/** + * Address inconsistent and variable font size in all browsers. + */ + +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` affecting `line-height` in all browsers. + */ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +/* Embedded content + ========================================================================== */ + +/** + * Remove border when inside `a` element in IE 8/9/10. + */ + +img { + border: 0; +} + +/** + * Correct overflow not hidden in IE 9/10/11. + */ + +svg:not(:root) { + overflow: hidden; +} + +/* Grouping content + ========================================================================== */ + +/** + * Address margin not present in IE 8/9 and Safari. + */ + +figure { + margin: 1em 40px; +} + +/** + * Address differences between Firefox and other browsers. + */ + +hr { + -moz-box-sizing: content-box; + box-sizing: content-box; + height: 0; +} + +/** + * Contain overflow in all browsers. + */ + +pre { + overflow: auto; +} + +/** + * Address odd `em`-unit font size rendering in all browsers. + */ + +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} + +/* Forms + ========================================================================== */ + +/** + * Known limitation: by default, Chrome and Safari on OS X allow very limited + * styling of `select`, unless a `border` property is set. + */ + +/** + * 1. Correct color not being inherited. + * Known issue: affects color of disabled elements. + * 2. Correct font properties not being inherited. + * 3. Address margins set differently in Firefox 4+, Safari, and Chrome. + */ + +button, +input, +optgroup, +select, +textarea { + color: inherit; /* 1 */ + font: inherit; /* 2 */ + margin: 0; /* 3 */ +} + +/** + * Address `overflow` set to `hidden` in IE 8/9/10/11. + */ + +button { + overflow: visible; +} + +/** + * Address inconsistent `text-transform` inheritance for `button` and `select`. + * All other form control elements do not inherit `text-transform` values. + * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera. + * Correct `select` style inheritance in Firefox. + */ + +button, +select { + text-transform: none; +} + +/** + * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` + * and `video` controls. + * 2. Correct inability to style clickable `input` types in iOS. + * 3. Improve usability and consistency of cursor style between image-type + * `input` and others. + */ + +button, +html input[type="button"], /* 1 */ +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; /* 2 */ + cursor: pointer; /* 3 */ +} + +/** + * Re-set default cursor for disabled elements. + */ + +button[disabled], +html input[disabled] { + cursor: default; +} + +/** + * Remove inner padding and border in Firefox 4+. + */ + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/** + * Address Firefox 4+ setting `line-height` on `input` using `!important` in + * the UA stylesheet. + */ + +input { + line-height: normal; +} + +/** + * It's recommended that you don't attempt to style these elements. + * Firefox's implementation doesn't respect box-sizing, padding, or width. + * + * 1. Address box sizing set to `content-box` in IE 8/9/10. + * 2. Remove excess padding in IE 8/9/10. + */ + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * Fix the cursor style for Chrome's increment/decrement buttons. For certain + * `font-size` values of the `input`, it causes the cursor style of the + * decrement button to change from `default` to `text`. + */ + +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +/** + * 1. Address `appearance` set to `searchfield` in Safari and Chrome. + * 2. Address `box-sizing` set to `border-box` in Safari and Chrome + * (include `-moz` to future-proof). + */ + +input[type="search"] { + -webkit-appearance: textfield; /* 1 */ + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; /* 2 */ + box-sizing: content-box; +} + +/** + * Remove inner padding and search cancel button in Safari and Chrome on OS X. + * Safari (but not Chrome) clips the cancel button when the search input has + * padding (and `textfield` appearance). + */ + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * Define consistent border, margin, and padding. + */ + +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} + +/** + * 1. Correct `color` not being inherited in IE 8/9/10/11. + * 2. Remove padding so people aren't caught out if they zero out fieldsets. + */ + +legend { + border: 0; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * Remove default vertical scrollbar in IE 8/9/10/11. + */ + +textarea { + overflow: auto; +} + +/** + * Don't inherit the `font-weight` (applied by a rule above). + * NOTE: the default cannot safely be changed in Chrome and Safari on OS X. + */ + +optgroup { + font-weight: bold; +} + +/* Tables + ========================================================================== */ + +/** + * Remove most spacing between table cells. + */ + +table { + border-collapse: collapse; + border-spacing: 0; +} + +td, +th { + padding: 0; +} diff --git a/rocket-example/static/css/skeleton.css b/rocket-example/static/css/skeleton.css new file mode 100644 index 0000000..cdc432a --- /dev/null +++ b/rocket-example/static/css/skeleton.css @@ -0,0 +1,421 @@ +/* +* Skeleton V2.0.4 +* Copyright 2014, Dave Gamache +* www.getskeleton.com +* Free to use under the MIT license. +* https://opensource.org/licenses/mit-license.php +* 12/29/2014 +*/ + + +/* Table of contents +–––––––––––––––––––––––––––––––––––––––––––––––––– +- Grid +- Base Styles +- Typography +- Links +- Buttons +- Forms +- Lists +- Code +- Tables +- Spacing +- Utilities +- Clearing +- Media Queries +*/ + + +/* Grid +–––––––––––––––––––––––––––––––––––––––––––––––––– */ +.container { + position: relative; + width: 100%; + max-width: 960px; + margin: 0 auto; + padding: 0 20px; + box-sizing: border-box; } +.column, +.columns { + width: 100%; + float: left; + box-sizing: border-box; } + +/* For devices larger than 400px */ +@media (min-width: 400px) { + .container { + width: 85%; + padding: 0; } +} + +/* For devices larger than 550px */ +@media (min-width: 550px) { + .container { + width: 80%; } + .column, + .columns { + margin-left: 4%; } + .column:first-child, + .columns:first-child { + margin-left: 0; } + + .one.column, + .one.columns { width: 4.66666666667%; } + .two.columns { width: 13.3333333333%; } + .three.columns { width: 22%; } + .four.columns { width: 30.6666666667%; } + .five.columns { width: 39.3333333333%; } + .six.columns { width: 48%; } + .seven.columns { width: 56.6666666667%; } + .eight.columns { width: 65.3333333333%; } + .nine.columns { width: 74.0%; } + .ten.columns { width: 82.6666666667%; } + .eleven.columns { width: 91.3333333333%; } + .twelve.columns { width: 100%; margin-left: 0; } + + .one-third.column { width: 30.6666666667%; } + .two-thirds.column { width: 65.3333333333%; } + + .one-half.column { width: 48%; } + + /* Offsets */ + .offset-by-one.column, + .offset-by-one.columns { margin-left: 8.66666666667%; } + .offset-by-two.column, + .offset-by-two.columns { margin-left: 17.3333333333%; } + .offset-by-three.column, + .offset-by-three.columns { margin-left: 26%; } + .offset-by-four.column, + .offset-by-four.columns { margin-left: 34.6666666667%; } + .offset-by-five.column, + .offset-by-five.columns { margin-left: 43.3333333333%; } + .offset-by-six.column, + .offset-by-six.columns { margin-left: 52%; } + .offset-by-seven.column, + .offset-by-seven.columns { margin-left: 60.6666666667%; } + .offset-by-eight.column, + .offset-by-eight.columns { margin-left: 69.3333333333%; } + .offset-by-nine.column, + .offset-by-nine.columns { margin-left: 78.0%; } + .offset-by-ten.column, + .offset-by-ten.columns { margin-left: 86.6666666667%; } + .offset-by-eleven.column, + .offset-by-eleven.columns { margin-left: 95.3333333333%; } + + .offset-by-one-third.column, + .offset-by-one-third.columns { margin-left: 34.6666666667%; } + .offset-by-two-thirds.column, + .offset-by-two-thirds.columns { margin-left: 69.3333333333%; } + + .offset-by-one-half.column, + .offset-by-one-half.columns { margin-left: 52%; } + +} + + +/* Base Styles +–––––––––––––––––––––––––––––––––––––––––––––––––– */ +/* NOTE +html is set to 62.5% so that all the REM measurements throughout Skeleton +are based on 10px sizing. So basically 1.5rem = 15px :) */ +html { + font-size: 62.5%; } +body { + font-size: 1.5em; /* currently ems cause chrome bug misinterpreting rems on body element */ + line-height: 1.6; + font-weight: 400; + font-family: "Raleway", "HelveticaNeue", "Helvetica Neue", Helvetica, Arial, sans-serif; + color: #222; } + + +/* Typography +–––––––––––––––––––––––––––––––––––––––––––––––––– */ +h1, h2, h3, h4, h5, h6 { + margin-top: 0; + margin-bottom: 2rem; + font-weight: 300; } +h1 { font-size: 4.0rem; line-height: 1.2; letter-spacing: -.1rem;} +h2 { font-size: 3.6rem; line-height: 1.25; letter-spacing: -.1rem; } +h3 { font-size: 3.0rem; line-height: 1.3; letter-spacing: -.1rem; } +h4 { font-size: 2.4rem; line-height: 1.35; letter-spacing: -.08rem; } +h5 { font-size: 1.8rem; line-height: 1.5; letter-spacing: -.05rem; } +h6 { font-size: 1.5rem; line-height: 1.6; letter-spacing: 0; } + +/* Larger than phablet */ +@media (min-width: 550px) { + h1 { font-size: 5.0rem; } + h2 { font-size: 4.2rem; } + h3 { font-size: 3.6rem; } + h4 { font-size: 3.0rem; } + h5 { font-size: 2.4rem; } + h6 { font-size: 1.5rem; } +} + +p { + margin-top: 0; } + + +/* Links +–––––––––––––––––––––––––––––––––––––––––––––––––– */ +a { + color: #1EAEDB; } +a:hover { + color: #0FA0CE; } + + +/* Buttons +–––––––––––––––––––––––––––––––––––––––––––––––––– */ +.button, +button, +input[type="submit"], +input[type="reset"], +input[type="button"] { + display: inline-block; + height: 38px; + padding: 0 30px; + color: #555; + text-align: center; + font-size: 11px; + font-weight: 600; + line-height: 38px; + letter-spacing: .1rem; + text-transform: uppercase; + text-decoration: none; + white-space: nowrap; + background-color: transparent; + border-radius: 4px; + border: 1px solid #bbb; + cursor: pointer; + box-sizing: border-box; } +.button:hover, +button:hover, +input[type="submit"]:hover, +input[type="reset"]:hover, +input[type="button"]:hover, +.button:focus, +button:focus, +input[type="submit"]:focus, +input[type="reset"]:focus, +input[type="button"]:focus { + color: #333; + border-color: #888; + outline: 0; } +.button.button-primary, +button.button-primary, +button.primary, +input[type="submit"].button-primary, +input[type="reset"].button-primary, +input[type="button"].button-primary { + color: #FFF; + background-color: #33C3F0; + border-color: #33C3F0; } +.button.button-primary:hover, +button.button-primary:hover, +button.primary:hover, +input[type="submit"].button-primary:hover, +input[type="reset"].button-primary:hover, +input[type="button"].button-primary:hover, +.button.button-primary:focus, +button.button-primary:focus, +button.primary:focus, +input[type="submit"].button-primary:focus, +input[type="reset"].button-primary:focus, +input[type="button"].button-primary:focus { + color: #FFF; + background-color: #1EAEDB; + border-color: #1EAEDB; } + + +/* Forms +–––––––––––––––––––––––––––––––––––––––––––––––––– */ +input[type="email"], +input[type="number"], +input[type="search"], +input[type="text"], +input[type="tel"], +input[type="url"], +input[type="password"], +textarea, +select { + height: 38px; + padding: 6px 10px; /* The 6px vertically centers text on FF, ignored by Webkit */ + background-color: #fff; + border: 1px solid #D1D1D1; + border-radius: 4px; + box-shadow: none; + box-sizing: border-box; } +/* Removes awkward default styles on some inputs for iOS */ +input[type="email"], +input[type="number"], +input[type="search"], +input[type="text"], +input[type="tel"], +input[type="url"], +input[type="password"], +textarea { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; } +textarea { + min-height: 65px; + padding-top: 6px; + padding-bottom: 6px; } +input[type="email"]:focus, +input[type="number"]:focus, +input[type="search"]:focus, +input[type="text"]:focus, +input[type="tel"]:focus, +input[type="url"]:focus, +input[type="password"]:focus, +textarea:focus, +select:focus { + border: 1px solid #33C3F0; + outline: 0; } +label, +legend { + display: block; + margin-bottom: .5rem; + font-weight: 600; } +fieldset { + padding: 0; + border-width: 0; } +input[type="checkbox"], +input[type="radio"] { + display: inline; } +label > .label-body { + display: inline-block; + margin-left: .5rem; + font-weight: normal; } + + +/* Lists +–––––––––––––––––––––––––––––––––––––––––––––––––– */ +ul { + list-style: circle inside; } +ol { + list-style: decimal inside; } +ol, ul { + padding-left: 0; + margin-top: 0; } +ul ul, +ul ol, +ol ol, +ol ul { + margin: 1.5rem 0 1.5rem 3rem; + font-size: 90%; } +li { + margin-bottom: 1rem; } + + +/* Code +–––––––––––––––––––––––––––––––––––––––––––––––––– */ +code { + padding: .2rem .5rem; + margin: 0 .2rem; + font-size: 90%; + white-space: nowrap; + background: #F1F1F1; + border: 1px solid #E1E1E1; + border-radius: 4px; } +pre > code { + display: block; + padding: 1rem 1.5rem; + white-space: pre; } + + +/* Tables +–––––––––––––––––––––––––––––––––––––––––––––––––– */ +th, +td { + padding: 12px 15px; + text-align: left; + border-bottom: 1px solid #E1E1E1; } +th:first-child, +td:first-child { + padding-left: 0; } +th:last-child, +td:last-child { + padding-right: 0; } + + +/* Spacing +–––––––––––––––––––––––––––––––––––––––––––––––––– */ +button, +.button { + margin-bottom: 1rem; } +input, +textarea, +select, +fieldset { + margin-bottom: 1.5rem; } +pre, +blockquote, +dl, +figure, +table, +p, +ul, +ol, +form { + margin-bottom: 2.5rem; } + + +/* Utilities +–––––––––––––––––––––––––––––––––––––––––––––––––– */ +.u-full-width { + width: 100%; + box-sizing: border-box; } +.u-max-full-width { + max-width: 100%; + box-sizing: border-box; } +.u-pull-right { + float: right; } +.u-pull-left { + float: left; } + + +/* Misc +–––––––––––––––––––––––––––––––––––––––––––––––––– */ +hr { + margin-top: 3rem; + margin-bottom: 3.5rem; + border-width: 0; + border-top: 1px solid #E1E1E1; } + + +/* Clearing +–––––––––––––––––––––––––––––––––––––––––––––––––– */ + +/* Self Clearing Goodness */ +.container:after, +.row:after, +.u-cf { + content: ""; + display: table; + clear: both; } + + +/* Media Queries +–––––––––––––––––––––––––––––––––––––––––––––––––– */ +/* +Note: The best way to structure the use of media queries is to create the queries +near the relevant code. For example, if you wanted to change the styles for buttons +on small devices, paste the mobile query code up in the buttons section and style it +there. +*/ + + +/* Larger than mobile */ +@media (min-width: 400px) {} + +/* Larger than phablet (also point when grid becomes active) */ +@media (min-width: 550px) {} + +/* Larger than tablet */ +@media (min-width: 750px) {} + +/* Larger than desktop */ +@media (min-width: 1000px) {} + +/* Larger than Desktop HD */ +@media (min-width: 1200px) {} diff --git a/rocket-example/static/css/style.css b/rocket-example/static/css/style.css new file mode 100644 index 0000000..ac2720d --- /dev/null +++ b/rocket-example/static/css/style.css @@ -0,0 +1,73 @@ +.field-error { + border: 1px solid #ff0000 !important; +} + +.field-error-flash { + color: #ff0000; + display: block; + margin: -10px 0 10px 0; +} + +.field-success { + border: 1px solid #5ab953 !important; +} + +.field-success-flash { + color: #5ab953; + display: block; + margin: -10px 0 10px 0; +} + +span.completed { + text-decoration: line-through; +} + +form.inline { + display: inline; +} + +form.link, +button.link { + display: inline; + color: #1eaedb; + border: none; + outline: none; + background: none; + cursor: pointer; + padding: 0; + margin: 0 0 0 0; + height: inherit; + text-decoration: underline; + font-size: inherit; + text-transform: none; + font-weight: normal; + line-height: inherit; + letter-spacing: inherit; +} + +form.link:hover, +button.link:hover { + color: #0fa0ce; +} + +button.small { + height: 20px; + padding: 0 10px; + font-size: 10px; + line-height: 20px; + margin: 0 2.5px; +} + +.post:hover { + background-color: #bce2ee; +} + +.post td { + padding: 5px; + width: 150px; +} + +#delete-button { + color: red; + border-color: red; +} diff --git a/rocket-example/static/images/favicon.png b/rocket-example/static/images/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..02b7390443ae2877c186898f52da23f062adbdcc GIT binary patch literal 1155 zcmV-}1bq96P)(=Qx>xolP{L(>2x~5PFgqllLG?-XURWh zvn7|E20`C&yWRV!SI1Uhr?1K%v2UB0m}sFhe_PG5av(Pl2<+kH9bD;aRz}QZjK*Wi zzU=Ss53_$_q-W@WteT*|u)Sk6X{KXzp9O21Er;<5zg9bJJVN(-=Zy8l4qegdI#S(evShjLl#Pk=r9jtgPegJHb!|>nu2DZUh(FA*z*X!Ly#;=Z< zcY*h@wRV}ZUw{XTs%x<*&yAr6*O7QQIqlYkGx)Ptvae%$?Bex{(}9JyQ+)L}e`z0B>Y7?qR+gjq`2_(| z*YR1|dc+Lo=!ck$dL#l;$vC2h!$%RW3u(Hst`lh9wh`s^nV%ujFKnUV($0F52BLCWB8{a&>BRO_*@>CN}62 z(UjU)Dh1DMef+rt@phC|?U_NQ(5sA6dU2zmz~B@z{?iJlE7 z#AcOX=vSv4Lj8d7>Y@B!eoVBgSnmWY)={>fquK*F zBSk|8RK;;Ao#{j?9gxf#WYg+-BV)QTNo=ijU>!sLJNa>)EQ2-Nf((u4A6fZ5e+Gh* Ve)_7M0d)WX002ovPDHLkV1i9aF}45z literal 0 HcmV?d00001 diff --git a/rocket-example/templates/bakeries.html.tera b/rocket-example/templates/bakeries.html.tera new file mode 100644 index 0000000..af3929e --- /dev/null +++ b/rocket-example/templates/bakeries.html.tera @@ -0,0 +1,22 @@ +{% extends "base" %} {% block content %} +

All Bakeries

+ +
+ +
+ {% if num_bakeries == 0 %} No bakeries {% else %} + + {% endif %} +
+ +{% endblock content %} diff --git a/rocket-example/templates/bakery.html.tera b/rocket-example/templates/bakery.html.tera new file mode 100644 index 0000000..c113ee0 --- /dev/null +++ b/rocket-example/templates/bakery.html.tera @@ -0,0 +1,15 @@ +{% extends "base" %} {% block content %} +

{{ name }}

+ + + +
+

id: {{ id }}

+

profit margin: {{ profit_margin }}

+
+ +{% endblock content %} diff --git a/rocket-example/templates/base.html.tera b/rocket-example/templates/base.html.tera new file mode 100644 index 0000000..4e45823 --- /dev/null +++ b/rocket-example/templates/base.html.tera @@ -0,0 +1,26 @@ + + + + + Rocket SeaORM Example + + + + + + + + + + + +
+

+ {% block content %}{% endblock content %} +
+ + diff --git a/rocket-example/templates/error/404.html.tera b/rocket-example/templates/error/404.html.tera new file mode 100644 index 0000000..afda653 --- /dev/null +++ b/rocket-example/templates/error/404.html.tera @@ -0,0 +1,11 @@ + + + + + 404 - tera + + +

404: Hey! There's nothing here.

+ The page at {{ uri }} does not exist! + + diff --git a/rocket-example/templates/index.html.tera b/rocket-example/templates/index.html.tera new file mode 100644 index 0000000..d3a1d72 --- /dev/null +++ b/rocket-example/templates/index.html.tera @@ -0,0 +1,16 @@ +{% extends "base" %} {% block content %} +

Hello, BakeriesDB!

+ + + + + +{% endblock content %} diff --git a/rocket-example/templates/new.html.tera b/rocket-example/templates/new.html.tera new file mode 100644 index 0000000..a5d1af2 --- /dev/null +++ b/rocket-example/templates/new.html.tera @@ -0,0 +1,38 @@ +{% extends "base" %} {% block content %} +
+

New Bakery

+
+
+ + +
+
+
+ + + +
+
+
+ +
+
+
+
+{% endblock content %} diff --git a/rocket-example/templates/success.html.tera b/rocket-example/templates/success.html.tera new file mode 100644 index 0000000..234a0ca --- /dev/null +++ b/rocket-example/templates/success.html.tera @@ -0,0 +1,20 @@ +{% extends "base" %} {% block content %} +

{{ name }} is successfully registered!

+ +
+ Profit margin: {{ profit_margin }} +
+ + + + + +{% endblock content %} From cad999456f88c15f4691eca51f8ca6aad117cfc5 Mon Sep 17 00:00:00 2001 From: Sanford Pun Date: Thu, 23 Jun 2022 14:43:04 +0800 Subject: [PATCH 35/60] Remove non-existent handler in ch02-01 --- tutorials-book/src/ch02-01-project-setup.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tutorials-book/src/ch02-01-project-setup.md b/tutorials-book/src/ch02-01-project-setup.md index 9c66128..6dbc3f4 100644 --- a/tutorials-book/src/ch02-01-project-setup.md +++ b/tutorials-book/src/ch02-01-project-setup.md @@ -37,7 +37,7 @@ async fn index() -> &'static str { #[launch] // The "main" function of the program fn rocket() -> _ { - rocket::build().mount("/", routes![index, bakeries]) + rocket::build().mount("/", routes![index]) } ``` From 17f48da4dc1556c23217cb655e4454fde2da47bb Mon Sep 17 00:00:00 2001 From: Sanford Pun Date: Thu, 23 Jun 2022 15:07:28 +0800 Subject: [PATCH 36/60] Draft ch02-02 --- tutorials-book/src/SUMMARY.md | 2 +- tutorials-book/src/ch02-01-project-setup.md | 4 + .../src/ch02-02-connect-to-database.md | 106 ++++++++++++++++++ 3 files changed, 111 insertions(+), 1 deletion(-) create mode 100644 tutorials-book/src/ch02-02-connect-to-database.md diff --git a/tutorials-book/src/SUMMARY.md b/tutorials-book/src/SUMMARY.md index aff187c..9a00a2e 100644 --- a/tutorials-book/src/SUMMARY.md +++ b/tutorials-book/src/SUMMARY.md @@ -18,7 +18,7 @@ - [Chapter 2 - Integration with Rocket](ch02-00-integration-with-rocket.md) - [Project Setup](ch02-01-project-setup.md) - - [Connect to Database]() + - [Connect to Database](ch02-02-connect-to-database.md) - [Error Handling]() - [Web API Integration]() diff --git a/tutorials-book/src/ch02-01-project-setup.md b/tutorials-book/src/ch02-01-project-setup.md index 6dbc3f4..cb9e71a 100644 --- a/tutorials-book/src/ch02-01-project-setup.md +++ b/tutorials-book/src/ch02-01-project-setup.md @@ -44,6 +44,10 @@ fn rocket() -> _ { To verify it works: +```sh +$ cargo run +``` + ``` GET localhost:8000/ diff --git a/tutorials-book/src/ch02-02-connect-to-database.md b/tutorials-book/src/ch02-02-connect-to-database.md new file mode 100644 index 0000000..7759bbd --- /dev/null +++ b/tutorials-book/src/ch02-02-connect-to-database.md @@ -0,0 +1,106 @@ +# Connect to Database + +First, we define a function to help us create a database and/or connect to it. + +It is basically the same as in [Section 1.1](ch01-01-project-setup.html#creating-a-database). + +```rust, no_run +// src/setup.rs + +use sea_orm::*; + +// Replace with your database URL +const DATABASE_URL: &str = "mysql://root:root@localhost:3306"; + +pub(super) async fn set_up_db() -> Result { + let db = Database::connect(DATABASE_URL).await?; + + // Replace with your desired database name + let db_name = "bakeries_db"; + let db = match db.get_database_backend() { + DbBackend::MySql => { + db.execute(Statement::from_string( + db.get_database_backend(), + format!("CREATE DATABASE IF NOT EXISTS `{}`;", db_name), + )) + .await?; + + let url = format!("{}/{}", DATABASE_URL, db_name); + Database::connect(&url).await? + } + DbBackend::Postgres => { + db.execute(Statement::from_string( + db.get_database_backend(), + format!("DROP DATABASE IF EXISTS \"{}\";", db_name), + )) + .await?; + db.execute(Statement::from_string( + db.get_database_backend(), + format!("CREATE DATABASE \"{}\";", db_name), + )) + .await?; + + let url = format!("{}/{}", DATABASE_URL, db_name); + Database::connect(&url).await? + } + DbBackend::Sqlite => db, + }; + + Ok(db) +} +``` + +We instruct Rocket to manage the database connection as a [state](https://rocket.rs/v0.5-rc/guide/state/#state). + +```rust, no_run +// src/main.rs + +#[launch] +fn rocket() -> _ { ++ let db = match set_up_db().await { ++ Ok(db) => db, ++ Err(err) => panic!("{}", err), ++ }; + + rocket::build() ++ .manage(db) + .mount("/", routes![index, bakeries]) +} +``` + +The database connection can then be accessed and used as in [previous sections](ch01-05-basic-crud-operations.md). + +```rust, no_run +// src/main.rs + +use rocket::serde::json::Json; + +... + +#[get("/bakeries")] +async fn bakeries(db: &State) -> Json> { + let db = db as &DatabaseConnection; + + let bakery_names = Bakery::find() + .all(db) + .await + .unwrap() + .into_iter() + .map(|b| b.name) + .collect::>(); + + Json(bakery_names) +} +``` + +To verify it works: + +```sh +$ cargo run +``` + +``` +GET localhost:8000/bakeries + +["Bakery Names", "In The", "Database", "If Any"] +``` From f566bb49779e71ce3fad1b08ebfb05d20cd0e079 Mon Sep 17 00:00:00 2001 From: Sanford Pun Date: Thu, 23 Jun 2022 15:09:15 +0800 Subject: [PATCH 37/60] Add section for simple frontend using templates in plan --- tutorials-book/src/SUMMARY.md | 1 + 1 file changed, 1 insertion(+) diff --git a/tutorials-book/src/SUMMARY.md b/tutorials-book/src/SUMMARY.md index 9a00a2e..fff6e34 100644 --- a/tutorials-book/src/SUMMARY.md +++ b/tutorials-book/src/SUMMARY.md @@ -21,6 +21,7 @@ - [Connect to Database](ch02-02-connect-to-database.md) - [Error Handling]() - [Web API Integration]() + - [Optional: Simple Frontend Using Templates]() ## Chapter 3 - Integration with GraphQL From 7d5317f4730dba11154d3c72527ca82ad43256d2 Mon Sep 17 00:00:00 2001 From: Sanford Pun Date: Thu, 23 Jun 2022 15:23:19 +0800 Subject: [PATCH 38/60] Draft ch02-03 --- tutorials-book/src/SUMMARY.md | 2 +- tutorials-book/src/ch02-03-error-handling.md | 64 ++++++++++++++++++++ 2 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 tutorials-book/src/ch02-03-error-handling.md diff --git a/tutorials-book/src/SUMMARY.md b/tutorials-book/src/SUMMARY.md index fff6e34..1561d42 100644 --- a/tutorials-book/src/SUMMARY.md +++ b/tutorials-book/src/SUMMARY.md @@ -19,7 +19,7 @@ - [Chapter 2 - Integration with Rocket](ch02-00-integration-with-rocket.md) - [Project Setup](ch02-01-project-setup.md) - [Connect to Database](ch02-02-connect-to-database.md) - - [Error Handling]() + - [Error Handling](ch02-03-error-handling.md) - [Web API Integration]() - [Optional: Simple Frontend Using Templates]() diff --git a/tutorials-book/src/ch02-03-error-handling.md b/tutorials-book/src/ch02-03-error-handling.md new file mode 100644 index 0000000..b43a603 --- /dev/null +++ b/tutorials-book/src/ch02-03-error-handling.md @@ -0,0 +1,64 @@ +# Error Handling + +First, define a [custom responder](https://rocket.rs/v0.5-rc/guide/responses/#custom-responders): + +```rust, no_run +// src/main.rs + +#[derive(Responder)] +#[response(status = 500, content_type = "json")] +struct ErrorResponder { + message: String, +} + +// The following impl's are for easy conversion of error types. + +#[allow(clippy::from_over_into)] +impl Into for DbErr { + fn into(self) -> ErrorResponder { + ErrorResponder { + message: self.to_string(), + } + } +} + +#[allow(clippy::from_over_into)] +impl Into for String { + fn into(self) -> ErrorResponder { + ErrorResponder { message: self } + } +} + +#[allow(clippy::from_over_into)] +impl Into for &str { + fn into(self) -> ErrorResponder { + self.to_owned().into() + } +} +``` + +To catch and handle the errors: + +```rust, no_run +// src/main.rs + +#[get("/bakeries")] +async fn bakeries(db: &State) +- -> Json> ++ -> Result>, ErrorResponder> +{ + let db = db as &DatabaseConnection; + + let bakery_names = Bakery::find() + .all(db) + .await +- .unwrap() ++ .map_err(Into::into)? + .into_iter() + .map(|b| b.name) + .collect::>(); + +- Json(bakery_names) ++ Ok(Json(bakery_names)) +} +``` From f42fd8c96d818723871397ad583ffbc0d3e80067 Mon Sep 17 00:00:00 2001 From: Sanford Pun Date: Thu, 23 Jun 2022 15:29:37 +0800 Subject: [PATCH 39/60] Add mounting new endpoint handler in ch02-02 --- tutorials-book/src/ch02-02-connect-to-database.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/tutorials-book/src/ch02-02-connect-to-database.md b/tutorials-book/src/ch02-02-connect-to-database.md index 7759bbd..f64e8b2 100644 --- a/tutorials-book/src/ch02-02-connect-to-database.md +++ b/tutorials-book/src/ch02-02-connect-to-database.md @@ -91,6 +91,21 @@ async fn bakeries(db: &State) -> Json> { Json(bakery_names) } + +... + +#[launch] +fn rocket() -> _ { + rocket::build() + .mount( + "/", + // Don't forget to mount the new endpoint handlers + routes![ + index, ++ bakeries + ] + ) +} ``` To verify it works: From 3cc3c257ba31500272858499aa6462e05acb1a2d Mon Sep 17 00:00:00 2001 From: Sanford Pun Date: Thu, 23 Jun 2022 15:38:49 +0800 Subject: [PATCH 40/60] Draft ch02-04 --- tutorials-book/src/SUMMARY.md | 2 +- .../src/ch02-04-web-api-integration.md | 54 +++++++++++++++++++ 2 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 tutorials-book/src/ch02-04-web-api-integration.md diff --git a/tutorials-book/src/SUMMARY.md b/tutorials-book/src/SUMMARY.md index 1561d42..b18ebb9 100644 --- a/tutorials-book/src/SUMMARY.md +++ b/tutorials-book/src/SUMMARY.md @@ -20,7 +20,7 @@ - [Project Setup](ch02-01-project-setup.md) - [Connect to Database](ch02-02-connect-to-database.md) - [Error Handling](ch02-03-error-handling.md) - - [Web API Integration]() + - [Web API Integration](ch02-04-web-api-integration.md) - [Optional: Simple Frontend Using Templates]() ## Chapter 3 - Integration with GraphQL diff --git a/tutorials-book/src/ch02-04-web-api-integration.md b/tutorials-book/src/ch02-04-web-api-integration.md new file mode 100644 index 0000000..0567b94 --- /dev/null +++ b/tutorials-book/src/ch02-04-web-api-integration.md @@ -0,0 +1,54 @@ +# Web API Integration + +We can wrap more of the backend's functionalities into our Rocket application. + +Check [Rocket's official documentation](https://rocket.rs/v0.5-rc/guide/) for how to use their interfaces. + +Below are some examples: *(Don't forget to mount all new handlers in `rocket()`!)* + +## Fetch one Bakery by id + +```rust, no_run +#[get("/bakeries/")] +async fn bakery_by_id(db: &State, id: i32) -> Result { + let db = db as &DatabaseConnection; + + let bakery = Bakery::find_by_id(id).one(db).await.map_err(Into::into)?; + + Ok(if let Some(bakery) = bakery { + bakery.name + } else { + return Err(format!("No bakery with id {id} is found.").into()); + }) +} +``` + +## Add a new Bakery + +Query parameters are used for input here for simplicity. Alternatively, use [Body Data](https://rocket.rs/v0.5-rc/guide/requests/#body-data). + +```rust, no_run +use entities::*; + +#[post("/bakeries?&")] +async fn new_bakery( + db: &State, + name: &str, + profit_margin: Option, +) -> Result<(), ErrorResponder> { + let db = db as &DatabaseConnection; + + let new_bakery = bakery::ActiveModel { + name: ActiveValue::Set(name.to_owned()), + profit_margin: ActiveValue::Set(profit_margin.unwrap_or_default()), + ..Default::default() + }; + + Bakery::insert(new_bakery) + .exec(db) + .await + .map_err(Into::into)?; + + Ok(()) +} +``` From 3bf9e443e024494e89c2489c6222fc01c95aac04 Mon Sep 17 00:00:00 2001 From: Sanford Pun Date: Thu, 23 Jun 2022 15:50:07 +0800 Subject: [PATCH 41/60] Draft ch02-05 --- tutorials-book/src/SUMMARY.md | 2 +- .../src/ch02-05-simple-frontend-using-templates.md | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 tutorials-book/src/ch02-05-simple-frontend-using-templates.md diff --git a/tutorials-book/src/SUMMARY.md b/tutorials-book/src/SUMMARY.md index b18ebb9..e186878 100644 --- a/tutorials-book/src/SUMMARY.md +++ b/tutorials-book/src/SUMMARY.md @@ -21,7 +21,7 @@ - [Connect to Database](ch02-02-connect-to-database.md) - [Error Handling](ch02-03-error-handling.md) - [Web API Integration](ch02-04-web-api-integration.md) - - [Optional: Simple Frontend Using Templates]() + - [Optional: Simple Frontend Using Templates](ch02-05-simple-frontend-using-templates.md) ## Chapter 3 - Integration with GraphQL diff --git a/tutorials-book/src/ch02-05-simple-frontend-using-templates.md b/tutorials-book/src/ch02-05-simple-frontend-using-templates.md new file mode 100644 index 0000000..806e364 --- /dev/null +++ b/tutorials-book/src/ch02-05-simple-frontend-using-templates.md @@ -0,0 +1,7 @@ +# Optional: Simple Frontend Using Templates + +To make your application a little more accessible, Rocket provides the [`Templates`](https://rocket.rs/v0.5-rc/guide/responses/#templates) interface for frontend support. + +Follow their [guide](https://rocket.rs/v0.5-rc/guide/responses/#templates) for a more comprehensive documentation. + +Some examples can be found in the [SeaORM official Rocket example](https://github.com/SeaQL/sea-orm/tree/master/examples/rocket_example) and `rocket-example` in the [repo](https://github.com/SeaQL/sea-orm-tutorial/tree/master/rocket-example) of this tutorial. From 7735811e3951dca71cc5e665ec8fa6946e54292b Mon Sep 17 00:00:00 2001 From: Sanford Pun Date: Mon, 27 Jun 2022 16:54:27 +0800 Subject: [PATCH 42/60] Merge Billy's changes --- bakery-backend/src/entities/mod.rs | 1 - bakery-backend/src/entities/prelude.rs | 1 - .../src/entities/seaql_migrations.rs | 22 ------------------- rocket-example/src/entities/mod.rs | 1 - rocket-example/src/entities/prelude.rs | 1 - .../src/entities/seaql_migrations.rs | 22 ------------------- tutorials-book/src/ch00-00-introduction.md | 4 ++-- .../ch01-00-build-backend-getting-started.md | 2 +- tutorials-book/src/ch01-02-migration-cli.md | 3 +++ tutorials-book/src/ch01-03-migration-api.md | 3 --- .../src/ch01-04-entity-generation.md | 1 - .../src/ch01-05-basic-crud-operations.md | 4 ++-- .../src/ch01-08-sql-with-sea-query.md | 4 ++++ 13 files changed, 12 insertions(+), 57 deletions(-) delete mode 100644 bakery-backend/src/entities/seaql_migrations.rs delete mode 100644 rocket-example/src/entities/seaql_migrations.rs diff --git a/bakery-backend/src/entities/mod.rs b/bakery-backend/src/entities/mod.rs index 2462768..b5f83b2 100644 --- a/bakery-backend/src/entities/mod.rs +++ b/bakery-backend/src/entities/mod.rs @@ -4,4 +4,3 @@ pub mod prelude; pub mod baker; pub mod bakery; -pub mod seaql_migrations; diff --git a/bakery-backend/src/entities/prelude.rs b/bakery-backend/src/entities/prelude.rs index 7fba2d7..8bc9c6e 100644 --- a/bakery-backend/src/entities/prelude.rs +++ b/bakery-backend/src/entities/prelude.rs @@ -2,4 +2,3 @@ pub use super::baker::Entity as Baker; pub use super::bakery::Entity as Bakery; -pub use super::seaql_migrations::Entity as SeaqlMigrations; diff --git a/bakery-backend/src/entities/seaql_migrations.rs b/bakery-backend/src/entities/seaql_migrations.rs deleted file mode 100644 index c32c701..0000000 --- a/bakery-backend/src/entities/seaql_migrations.rs +++ /dev/null @@ -1,22 +0,0 @@ -//! SeaORM Entity. Generated by sea-orm-codegen 0.8.0 - -use sea_orm::entity::prelude::*; - -#[derive(Clone, Debug, PartialEq, DeriveEntityModel)] -#[sea_orm(table_name = "seaql_migrations")] -pub struct Model { - #[sea_orm(primary_key, auto_increment = false)] - pub version: String, - pub applied_at: i64, -} - -#[derive(Copy, Clone, Debug, EnumIter)] -pub enum Relation {} - -impl RelationTrait for Relation { - fn def(&self) -> RelationDef { - panic!("No RelationDef") - } -} - -impl ActiveModelBehavior for ActiveModel {} diff --git a/rocket-example/src/entities/mod.rs b/rocket-example/src/entities/mod.rs index 2462768..b5f83b2 100644 --- a/rocket-example/src/entities/mod.rs +++ b/rocket-example/src/entities/mod.rs @@ -4,4 +4,3 @@ pub mod prelude; pub mod baker; pub mod bakery; -pub mod seaql_migrations; diff --git a/rocket-example/src/entities/prelude.rs b/rocket-example/src/entities/prelude.rs index 7fba2d7..8bc9c6e 100644 --- a/rocket-example/src/entities/prelude.rs +++ b/rocket-example/src/entities/prelude.rs @@ -2,4 +2,3 @@ pub use super::baker::Entity as Baker; pub use super::bakery::Entity as Bakery; -pub use super::seaql_migrations::Entity as SeaqlMigrations; diff --git a/rocket-example/src/entities/seaql_migrations.rs b/rocket-example/src/entities/seaql_migrations.rs deleted file mode 100644 index c32c701..0000000 --- a/rocket-example/src/entities/seaql_migrations.rs +++ /dev/null @@ -1,22 +0,0 @@ -//! SeaORM Entity. Generated by sea-orm-codegen 0.8.0 - -use sea_orm::entity::prelude::*; - -#[derive(Clone, Debug, PartialEq, DeriveEntityModel)] -#[sea_orm(table_name = "seaql_migrations")] -pub struct Model { - #[sea_orm(primary_key, auto_increment = false)] - pub version: String, - pub applied_at: i64, -} - -#[derive(Copy, Clone, Debug, EnumIter)] -pub enum Relation {} - -impl RelationTrait for Relation { - fn def(&self) -> RelationDef { - panic!("No RelationDef") - } -} - -impl ActiveModelBehavior for ActiveModel {} diff --git a/tutorials-book/src/ch00-00-introduction.md b/tutorials-book/src/ch00-00-introduction.md index 1db5a3e..7c0b6da 100644 --- a/tutorials-book/src/ch00-00-introduction.md +++ b/tutorials-book/src/ch00-00-introduction.md @@ -12,9 +12,9 @@ To show added or removed code from files, we will use comments or `-` to show removed code -`...` is used to show only part of the existing code instead of rewriting already existing code in the examples. +`...` is used to show only part of the existing code instead of rewriting already existing code in the examples -`$ ` shows an operation is done on the console/shell +`$` shows an operation is done on the console/shell #### Chapters diff --git a/tutorials-book/src/ch01-00-build-backend-getting-started.md b/tutorials-book/src/ch01-00-build-backend-getting-started.md index 39643c7..bb6eaaa 100644 --- a/tutorials-book/src/ch01-00-build-backend-getting-started.md +++ b/tutorials-book/src/ch01-00-build-backend-getting-started.md @@ -22,6 +22,6 @@ However, depending on the database of your choice, you need to pay attention to | SQLite (in file) | `sqlite:./sqlite.db?mode=rwc` | | SQLite (in memory) | `sqlite::memory:` | -We will showcase exactly how to how and where to use them in the next section. +We will showcase exactly how to and where to use them in the next section. Once the database is ready, we can proceed to [set up the project](ch01-01-project-setup.md). diff --git a/tutorials-book/src/ch01-02-migration-cli.md b/tutorials-book/src/ch01-02-migration-cli.md index 1e32c52..086778e 100644 --- a/tutorials-book/src/ch01-02-migration-cli.md +++ b/tutorials-book/src/ch01-02-migration-cli.md @@ -11,7 +11,10 @@ In this section, we define the following simple schema with migrations. For beginners, it is recommended to use `sea-orm-cli` to define and run the migrations. ```sh +# Install `sea-orm-cli` $ cargo install sea-orm-cli + +# List all available migration commands that are supported by `sea-orm-cli` $ sea-orm-cli migrate -h ``` diff --git a/tutorials-book/src/ch01-03-migration-api.md b/tutorials-book/src/ch01-03-migration-api.md index 765e1d1..c82f219 100644 --- a/tutorials-book/src/ch01-03-migration-api.md +++ b/tutorials-book/src/ch01-03-migration-api.md @@ -212,9 +212,6 @@ async fn run() -> Result<(), DbErr> { + let schema_manager = SchemaManager::new(db); // To investigate the schema -+ Migrator::install(db).await?; -+ assert!(schema_manager.has_table("seaql_migrations").await?); - + Migrator::refresh(db).await?; + assert!(schema_manager.has_table("bakery").await?); + assert!(schema_manager.has_table("baker").await?); diff --git a/tutorials-book/src/ch01-04-entity-generation.md b/tutorials-book/src/ch01-04-entity-generation.md index c3030c1..dac5540 100644 --- a/tutorials-book/src/ch01-04-entity-generation.md +++ b/tutorials-book/src/ch01-04-entity-generation.md @@ -28,7 +28,6 @@ bakery-backend │ │ bakery.rs │ │ mod.rs │ │ prelude.rs -│ │ seaql_migrations.rs ``` Put the focus on `baker.rs` and `bakery.rs`, they are the entities representing the tables `Baker` and `Bakery`, respectively. diff --git a/tutorials-book/src/ch01-05-basic-crud-operations.md b/tutorials-book/src/ch01-05-basic-crud-operations.md index 76a65ee..a355840 100644 --- a/tutorials-book/src/ch01-05-basic-crud-operations.md +++ b/tutorials-book/src/ch01-05-basic-crud-operations.md @@ -103,13 +103,13 @@ We have no choice but to remove its entry in our database: ```rust, no_run let john = baker::ActiveModel { - id: ActiveValue::Set(1), // The primary must be set + id: ActiveValue::Set(1), // The primary key must be set ..Default::default() }; john.delete(db).await?; let sad_bakery = bakery::ActiveModel { - id: ActiveValue::Set(1), // The primary must be set + id: ActiveValue::Set(1), // The primary key must be set ..Default::default() }; sad_bakery.delete(db).await?; diff --git a/tutorials-book/src/ch01-08-sql-with-sea-query.md b/tutorials-book/src/ch01-08-sql-with-sea-query.md index d4497fb..7ddf2cc 100644 --- a/tutorials-book/src/ch01-08-sql-with-sea-query.md +++ b/tutorials-book/src/ch01-08-sql-with-sea-query.md @@ -15,6 +15,8 @@ INSERT INTO `bakery` (`name`, `profit_margin`) VALUES ('SQL Bakery', -100) SeaQuery: ```rust, no_run +use sea_query::{Alias, Query}; + let columns: Vec = ["name", "profit_margin"] .into_iter() .map(Alias::new) @@ -47,6 +49,8 @@ If all columns are of interest, then the generated `Model` structs (e.g. `baker: The fields of the struct must match the column names of the query result. ```rust, no_run +use sea_query::{Alias, Expr, JoinType, Order, Query}; + #[derive(FromQueryResult)] struct BakerNameResult { name: String, From 1e3a658cb01b318310c1aa816cf4f6b2c2223b56 Mon Sep 17 00:00:00 2001 From: Nicolas Carranza Date: Tue, 7 Jun 2022 02:01:28 -0500 Subject: [PATCH 43/60] Update ch01-00-simple-crud-getting-started.md (#10) Missing features "attributes" for async-std. Thank you! --- .../ch01-00-simple-crud-getting-started.md | 81 +++++++++++++++++++ 1 file changed, 81 insertions(+) diff --git a/tutorials-book/src/ch01-00-simple-crud-getting-started.md b/tutorials-book/src/ch01-00-simple-crud-getting-started.md index e69de29..06015b4 100644 --- a/tutorials-book/src/ch01-00-simple-crud-getting-started.md +++ b/tutorials-book/src/ch01-00-simple-crud-getting-started.md @@ -0,0 +1,81 @@ +# Chapter 1 - Simple CRUD Operations + + In this tutorial, SeaORM is used with `async-std` as the async runtime, `rustls` for database TLS connections and `sqlx-mysql` for the MySQL database backend. + +### Installation of dependencies and tools + +1. Install SeaORM-Cli that will help in reading a database schema and generating the relevant `Entity`, `Model` and `Relation` of every table in our selected database (`schema`). + + ```sh + $ cargo install sea-orm-cli + ``` + +2. Create a new Rust Cargo project + ```sh + $ cargo new SimpleCrud --name simple-crud + ``` + +3. Switch to the new cargo project + + ```sh + $ cd simple-crud + ``` + +4. Add SeaORM as a dependency in `Cargo.toml` file + + If you have `cargo edit` installed, run + + ```sh + $ cargo add sea-orm --no-default-features --features "runtime-async-std-rustls sqlx-mysql macros" + ``` + + or if you don't have `cargo edit` installed, you can install it by running + + ```sh + $ cargo install cargo-edit + ``` + +5. Add the async runtime + + ```sh + $ cargo add anyhow + + $ cargo add async-std --features attributes + ``` + + You can also add them manually in the `Cargo.toml` file + + ```toml + sea-orm = { version = "0.5", features = [ "runtime-async-std-rustls", "sqlx-mysql", "macros" ], default-features = false} + anyhow = "1" + async-std = { version = "1", features = [ "attributes" ] } + ``` + + + +6. Make sure that your database server is running, then login and create a database called `fruit_markets`. + + ```sql + CREATE DATABASE fruit_markets; + ``` + + + +7. Create a new user in the database called `webmaster` and with a password `master_char` + + ```sql + # Step1: Create a new user + CREATE USER 'webmaster'@'localhost' IDENTIFIED BY 'master_char'; + + # Step 2: Allow the user to have Read, Write access to all tables in database `fruit_markets` + GRANT ALL PRIVILEGES ON fruit_markets . * TO 'webmaster'@'localhost'; + + # Step 3: Enable the above settings + FLUSH PRIVILEGES; + + # Step 4: Logout of the database + exit + ``` + +We are all set to perform CRUD operations from the MySQL database side. + From dce616068bfda0c758cf0457b04221f637a70393 Mon Sep 17 00:00:00 2001 From: Sanford Pun Date: Mon, 27 Jun 2022 17:06:48 +0800 Subject: [PATCH 44/60] Remove old tutorial section ch01-00-simple-crud-getting-started.md --- .../ch01-00-simple-crud-getting-started.md | 81 ------------------- 1 file changed, 81 deletions(-) delete mode 100644 tutorials-book/src/ch01-00-simple-crud-getting-started.md diff --git a/tutorials-book/src/ch01-00-simple-crud-getting-started.md b/tutorials-book/src/ch01-00-simple-crud-getting-started.md deleted file mode 100644 index 06015b4..0000000 --- a/tutorials-book/src/ch01-00-simple-crud-getting-started.md +++ /dev/null @@ -1,81 +0,0 @@ -# Chapter 1 - Simple CRUD Operations - - In this tutorial, SeaORM is used with `async-std` as the async runtime, `rustls` for database TLS connections and `sqlx-mysql` for the MySQL database backend. - -### Installation of dependencies and tools - -1. Install SeaORM-Cli that will help in reading a database schema and generating the relevant `Entity`, `Model` and `Relation` of every table in our selected database (`schema`). - - ```sh - $ cargo install sea-orm-cli - ``` - -2. Create a new Rust Cargo project - ```sh - $ cargo new SimpleCrud --name simple-crud - ``` - -3. Switch to the new cargo project - - ```sh - $ cd simple-crud - ``` - -4. Add SeaORM as a dependency in `Cargo.toml` file - - If you have `cargo edit` installed, run - - ```sh - $ cargo add sea-orm --no-default-features --features "runtime-async-std-rustls sqlx-mysql macros" - ``` - - or if you don't have `cargo edit` installed, you can install it by running - - ```sh - $ cargo install cargo-edit - ``` - -5. Add the async runtime - - ```sh - $ cargo add anyhow - - $ cargo add async-std --features attributes - ``` - - You can also add them manually in the `Cargo.toml` file - - ```toml - sea-orm = { version = "0.5", features = [ "runtime-async-std-rustls", "sqlx-mysql", "macros" ], default-features = false} - anyhow = "1" - async-std = { version = "1", features = [ "attributes" ] } - ``` - - - -6. Make sure that your database server is running, then login and create a database called `fruit_markets`. - - ```sql - CREATE DATABASE fruit_markets; - ``` - - - -7. Create a new user in the database called `webmaster` and with a password `master_char` - - ```sql - # Step1: Create a new user - CREATE USER 'webmaster'@'localhost' IDENTIFIED BY 'master_char'; - - # Step 2: Allow the user to have Read, Write access to all tables in database `fruit_markets` - GRANT ALL PRIVILEGES ON fruit_markets . * TO 'webmaster'@'localhost'; - - # Step 3: Enable the above settings - FLUSH PRIVILEGES; - - # Step 4: Logout of the database - exit - ``` - -We are all set to perform CRUD operations from the MySQL database side. - From 26b5389e952e05c9ad7a355b5ad1a6d645fd6f95 Mon Sep 17 00:00:00 2001 From: Sanford Pun Date: Mon, 27 Jun 2022 17:24:33 +0800 Subject: [PATCH 45/60] Update GitHub workflows for building the examples --- .github/workflows/main.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 62382ad..3ae2a1a 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -17,10 +17,10 @@ jobs: toolchain: stable # Try to build all examples - - name: Build simple-crud example - run: cargo build --manifest-path simple-crud/Cargo.toml - - name: Build todo-app example - run: cargo build --manifest-path todo-app/Cargo.toml + - name: Build bakery-backend example + run: cargo build --manifest-path bakery-backend/Cargo.toml + - name: Build rocket-example + run: cargo build --manifest-path rocket-example/Cargo.toml # Try to build mdbooks - name: Install mdbook From e2315ad8e4d7383122d2b87f19f1ba624af5dc00 Mon Sep 17 00:00:00 2001 From: Sanford Pun Date: Mon, 27 Jun 2022 17:36:47 +0800 Subject: [PATCH 46/60] Update README.md --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 3f13443..e3d87aa 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,13 @@ # SeaORM Tutorials -This repository contains step-by-step tutorials on how to use SeaORM to do CRUD operations from simple ones to very complex online applications in Rust Language. +This repository contains step-by-step tutorials on how to use SeaORM to do CRUD operations on databases in the Rust Language. -The tutorial is based on a software system for managing fruits in a fruit market. +The tutorial is based on a software system for managing a simple database to store information of bakeries. -The tutorials are +The tutorials contain the following chapters: -1. [**Simple CRUD operations**](https://www.sea-ql.org/sea-orm-tutorial/ch01-00-simple-crud-getting-started.html) - This tutorials explains how to use SeaORM to do basic tasks like create a table in a database, insert a row into the table, update a column, delete operations and logging the results to the console. The database used is MySQL -2. [**TODO Application**](https://www.sea-ql.org/sea-orm-tutorial/ch02-00-todo-app-getting-started.html) - This tutorial shows how to use SeaORM, SQLite and PostgreSQL to create a realtime sync TODO application where a user can buy fruits from the mango market. +1. [**Bakery Backend**](https://www.sea-ql.org/sea-orm-tutorial/ch01-00-build-backend-getting-started.html) - This chapter covers the basics of using SeaORM to interact with the database (a MySQL database is used for illustration). On top of this backend you can build any interface you need. +2. [**Rocket Integration**](https://www.sea-ql.org/sea-orm-tutorial/ch02-00-integration-with-rocket.html) - This chapter explains how to integrate the SeaORM backend into the Rocket framework to create a web application that provides a web API or even a simple frontend. [![Discord](https://img.shields.io/discord/873880840487206962?label=Discord)](https://discord.com/invite/uCPdDXzbdv) @@ -15,7 +15,7 @@ For additional help on **SeaORM** specific questions, join the support Discord c ## Running the tutorials -To run the tutorial code, switch to the directory of the turorial and run cargo +To run the tutorial code, switch to the directory of the tutorial and run cargo ```sh # Switch to tutorial directory From 5abd62b734cb9d0ee9f76e51f3babf1108546b13 Mon Sep 17 00:00:00 2001 From: Sanford Pun Date: Mon, 27 Jun 2022 17:38:50 +0800 Subject: [PATCH 47/60] Prepare for early release (postponing the release of chapter 3) --- tutorials-book/src/SUMMARY.md | 2 +- tutorials-book/src/ch03-00-integration-with-graphql.md | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 tutorials-book/src/ch03-00-integration-with-graphql.md diff --git a/tutorials-book/src/SUMMARY.md b/tutorials-book/src/SUMMARY.md index e186878..3c80ca3 100644 --- a/tutorials-book/src/SUMMARY.md +++ b/tutorials-book/src/SUMMARY.md @@ -25,4 +25,4 @@ ## Chapter 3 - Integration with GraphQL -- [Chapter 3 - Integration with GraphQL]() +- [Chapter 3 - Integration with GraphQL](ch03-00-integration-with-graphql.md) diff --git a/tutorials-book/src/ch03-00-integration-with-graphql.md b/tutorials-book/src/ch03-00-integration-with-graphql.md new file mode 100644 index 0000000..d3b3e29 --- /dev/null +++ b/tutorials-book/src/ch03-00-integration-with-graphql.md @@ -0,0 +1,3 @@ +# Chapter 3 - Integration with GraphQL + +*Coming Soon!* From 0d51094fa0b19cf0f4c2053d62738f61d96bbaf6 Mon Sep 17 00:00:00 2001 From: Sanford Pun Date: Tue, 5 Jul 2022 14:45:48 +0800 Subject: [PATCH 48/60] Update SUMMARY.md for GraphQL sections --- tutorials-book/src/SUMMARY.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tutorials-book/src/SUMMARY.md b/tutorials-book/src/SUMMARY.md index 3c80ca3..b219847 100644 --- a/tutorials-book/src/SUMMARY.md +++ b/tutorials-book/src/SUMMARY.md @@ -26,3 +26,6 @@ ## Chapter 3 - Integration with GraphQL - [Chapter 3 - Integration with GraphQL](ch03-00-integration-with-graphql.md) + - [Project Setup]() + - [Query]() + - [Mutation]() From 6c44aac1c7927f68b6d7f3c37460489dbd5ca1a8 Mon Sep 17 00:00:00 2001 From: Sanford Pun Date: Tue, 5 Jul 2022 15:38:42 +0800 Subject: [PATCH 49/60] Draft ch03-00 --- .../src/ch03-00-integration-with-graphql.md | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/tutorials-book/src/ch03-00-integration-with-graphql.md b/tutorials-book/src/ch03-00-integration-with-graphql.md index d3b3e29..71e1eb3 100644 --- a/tutorials-book/src/ch03-00-integration-with-graphql.md +++ b/tutorials-book/src/ch03-00-integration-with-graphql.md @@ -1,3 +1,15 @@ # Chapter 3 - Integration with GraphQL -*Coming Soon!* +We've created a web application with Rocket in Chapter 2, but you may notice that the RESTful API of the application lacks flexibility. + +For example, a `GET` request to the endpoint `/bakeries`, if successful, always gives us an array of names of the bakeries in the database. This is a toy implementation to demonstrate how things *could* work, but in reality we also need to provide ways for getting other attributes (e.g. *profit_margin*). + +If we simply returns everything in a response every time, it may result in the generation and transmission of unnecessary data. If we insist on keeping things small, we'll have to design and model different use cases and create many endpoints to cater for them. + +To combat this, [GraphQL](https://graphql.org/), an alternative solution to RESTful API's, provides the flexibility we *(may)* need. + +With GraphQL, the user describes the desired data in the **request body**. Then the server **prepares exactly that** and sends it back in the response. As a result, only one endpoint is needed and no extra work is done. + +As the experience is greatly enhanced on the client side, the burden of implementing ways to retrieve data flexibly is heavier on the server side. This problem is severe in the world of JavaScript, as quite a lot of boilerplate code is required to implement a GraphQL server there. However, thanks to Rust's powerful type system and macro support, many of GraphQL's features can actually be implemented rather painlessly. + +In this chapter, we'll build a Rocket application with GraphQL support powered by [`async_graphql`](https://crates.io/crates/async-graphql). Of course, `SeaORM` will serve as the bridge between the GraphQL resolvers and the database. From 93b1007a7d79e9dcdee8ca32217ab3b070a08b99 Mon Sep 17 00:00:00 2001 From: Sanford Pun Date: Tue, 5 Jul 2022 16:12:20 +0800 Subject: [PATCH 50/60] Draft ch03-01 --- tutorials-book/src/SUMMARY.md | 2 +- tutorials-book/src/ch03-01-project-setup.md | 140 ++++++++++++++++++++ 2 files changed, 141 insertions(+), 1 deletion(-) create mode 100644 tutorials-book/src/ch03-01-project-setup.md diff --git a/tutorials-book/src/SUMMARY.md b/tutorials-book/src/SUMMARY.md index b219847..701a64a 100644 --- a/tutorials-book/src/SUMMARY.md +++ b/tutorials-book/src/SUMMARY.md @@ -26,6 +26,6 @@ ## Chapter 3 - Integration with GraphQL - [Chapter 3 - Integration with GraphQL](ch03-00-integration-with-graphql.md) - - [Project Setup]() + - [Project Setup](ch03-01-project-setup.md) - [Query]() - [Mutation]() diff --git a/tutorials-book/src/ch03-01-project-setup.md b/tutorials-book/src/ch03-01-project-setup.md new file mode 100644 index 0000000..e0db7ec --- /dev/null +++ b/tutorials-book/src/ch03-01-project-setup.md @@ -0,0 +1,140 @@ +# Project Setup + +## Create a Rocket application + +The initial setup of this chapter is vastly similar to that of the previous chapter. + +Refer to [Section 2.1](ch02-01-project-setup.md) and [Section 2.2](ch02-02-connect-to-database.md) to create a Rocket application and configure the database connection. + +## Set up `async_graphql` support + +Add the crates as dependencies: + +```diff +// Cargo.toml + +... + +[dependencies] ++ async-graphql = "4.0.4" ++ async-graphql-rocket = "4.0.4" + +... +``` + +Make sure the entities are generated ([Section 1.4](ch01-04-entity-generation.md)), and extend them to support basic GraphQL queries by attributes: + +```rust, no_run +// src/entities/baker.rs + ++ use async_graphql::SimpleObject; +use sea_orm::entity::prelude::*; + +- #[derive(Clone, Debug, PartialEq, DeriveEntityModel)] ++ #[derive(Clone, Debug, PartialEq, DeriveEntityModel, SimpleObject)] +#[sea_orm(table_name = "baker")] +pub struct Model { + +... +``` + +```rust, no_run +// src/entities/bakery.rs + ++ use async_graphql::SimpleObject; +use sea_orm::entity::prelude::*; + +- #[derive(Clone, Debug, PartialEq, DeriveEntityModel)] ++ #[derive(Clone, Debug, PartialEq, DeriveEntityModel, SimpleObject)] +#[sea_orm(table_name = "bakery")] +pub struct Model { + +... +``` + +Create a struct to serve as the root of queries. The root level query requests will be defined here: + +```rust, no_run +// src/schema.rs + +use async_graphql::Object; + +pub(crate) struct QueryRoot; + +#[Object] +impl QueryRoot { + async fn hello(&self) -> String { + "Hello GraphQL".to_owned() + } +} +``` + +Build the `Schema` and attach it to Rocket as a state, and create an endpoint to serve GraphQL requests: + +```rust, no_run +// src/main.rs + +mod entities; +mod migrator; ++ mod schema; +mod setup; + ++ use async_graphql::{EmptyMutation, EmptySubscription, Schema}; ++ use async_graphql_rocket::*; +use rocket::*; ++ use schema::*; +use sea_orm::*; +use setup::set_up_db; + ++ type SchemaType = Schema; + +... + ++ #[rocket::post("/graphql", data = "", format = "application/json")] ++ async fn graphql_request(schema: &State, request: GraphQLRequest) -> GraphQLResponse { ++ request.execute(schema).await ++ } + +... + +#[launch] +async fn rocket() -> _ { + let db = match set_up_db().await { + Ok(db) => db, + Err(err) => panic!("{}", err), + }; + + // Build the Schema ++ let schema = Schema::build(QueryRoot, EmptyMutation, EmptySubscription) ++ .data(db) // Add the database connection to the GraphQL global context ++ .finish(); + + rocket::build() +- .manage(db) // db is now managed by schema ++ .manage(schema) // schema is managed by rocket +- .mount("/", routes![index]) ++ .mount("/", routes![index, graphql_request]) + .register("/", catchers![not_found]) +} +... +``` + +To verify it works: + +```sh +$ cargo run +``` + +``` +GraphQL Request: +{ + hello +} + +Response: +{ + "data": { + "hello": "Hello GraphQL" + } +} +``` From ece00504c654ed064240a2e63217706b140bec61 Mon Sep 17 00:00:00 2001 From: Sanford Pun Date: Tue, 5 Jul 2022 16:31:07 +0800 Subject: [PATCH 51/60] Amend ch03-00 --- tutorials-book/src/ch03-00-integration-with-graphql.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tutorials-book/src/ch03-00-integration-with-graphql.md b/tutorials-book/src/ch03-00-integration-with-graphql.md index 71e1eb3..8cff377 100644 --- a/tutorials-book/src/ch03-00-integration-with-graphql.md +++ b/tutorials-book/src/ch03-00-integration-with-graphql.md @@ -4,11 +4,11 @@ We've created a web application with Rocket in Chapter 2, but you may notice tha For example, a `GET` request to the endpoint `/bakeries`, if successful, always gives us an array of names of the bakeries in the database. This is a toy implementation to demonstrate how things *could* work, but in reality we also need to provide ways for getting other attributes (e.g. *profit_margin*). -If we simply returns everything in a response every time, it may result in the generation and transmission of unnecessary data. If we insist on keeping things small, we'll have to design and model different use cases and create many endpoints to cater for them. +If we simply return everything in a response every time, the user ends up receiving extra data they didn't need. If we want to keep things small, we'll have to design and model different use cases and create many endpoints to cater for them. To combat this, [GraphQL](https://graphql.org/), an alternative solution to RESTful API's, provides the flexibility we *(may)* need. -With GraphQL, the user describes the desired data in the **request body**. Then the server **prepares exactly that** and sends it back in the response. As a result, only one endpoint is needed and no extra work is done. +With GraphQL, the user describes the desired data in the **request body**. Then the server **prepares exactly that** and sends it back in the response. As a result, only one endpoint is needed and no extra data is transmitted. As the experience is greatly enhanced on the client side, the burden of implementing ways to retrieve data flexibly is heavier on the server side. This problem is severe in the world of JavaScript, as quite a lot of boilerplate code is required to implement a GraphQL server there. However, thanks to Rust's powerful type system and macro support, many of GraphQL's features can actually be implemented rather painlessly. From f9ef21e2e44d790765c98b3e470eb202da9d7fe8 Mon Sep 17 00:00:00 2001 From: Sanford Pun Date: Tue, 5 Jul 2022 16:55:56 +0800 Subject: [PATCH 52/60] Draft ch03-02 --- tutorials-book/src/SUMMARY.md | 2 +- tutorials-book/src/ch03-02-query.md | 149 ++++++++++++++++++++++++++++ 2 files changed, 150 insertions(+), 1 deletion(-) create mode 100644 tutorials-book/src/ch03-02-query.md diff --git a/tutorials-book/src/SUMMARY.md b/tutorials-book/src/SUMMARY.md index 701a64a..bb8c34e 100644 --- a/tutorials-book/src/SUMMARY.md +++ b/tutorials-book/src/SUMMARY.md @@ -27,5 +27,5 @@ - [Chapter 3 - Integration with GraphQL](ch03-00-integration-with-graphql.md) - [Project Setup](ch03-01-project-setup.md) - - [Query]() + - [Query](ch03-02-query.md) - [Mutation]() diff --git a/tutorials-book/src/ch03-02-query.md b/tutorials-book/src/ch03-02-query.md new file mode 100644 index 0000000..6d65b6f --- /dev/null +++ b/tutorials-book/src/ch03-02-query.md @@ -0,0 +1,149 @@ +# Query with GraphQL + +To support queries, we extend the `QueryRoot` struct: + +## Basic Queries + +```rust, no_run +// src/schema.rs + +- use async_graphql::Object; ++ use async_graphql::{Context, Object}; ++ use sea_orm::*; + ++ use crate::entities::{prelude::*, *}; + +pub(crate) struct QueryRoot; + +#[Object] +impl QueryRoot { + ... + + // For finding all bakeries ++ async fn bakeries(&self, ctx: &Context<'_>) -> Result, DbErr> { ++ let db = ctx.data::().unwrap(); ++ Bakery::find().all(db).await ++ } + + // For finding one bakery by id ++ async fn bakery(&self, ctx: &Context<'_>, id: i32) -> Result, DbErr> { ++ let db = ctx.data::().unwrap(); ++ ++ Bakery::find_by_id(id).one(db).await ++ } +} +``` + +Example queries: + +``` +GraphQL Request: +{ + bakeries { + name + } +} + +Response: +{ + "data": { + "bakeries": [ + { + "name": "ABC Bakery" + }, + { + "name": "La Boulangerie" + }, + { + "name": "Sad Bakery" + } + ] + } +} +``` + +``` +GraphQL Request: +{ + bakery(id: 1) { + name + } +} + +Response: +{ + "data": { + "bakery": { + "name": "ABC Bakery" + } + } +} +``` + +*If `name` is replaced by other fields of `bakery::Model`, the requests will automatically be supported. This is because `bakery::Model` derives from `async_graphql::SimpleObject` in the previous section.* + +## Relational Query + +One of the most appealing features of GraphQL is its convenient support for relational queries. + +Recall that a Bakery may hire many Bakers. We can give `bakery::Model` ComplexObject support to allow for this relational query. + +```rust, no_run +// src/entities/bakery.rs + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, SimpleObject)] ++ #[graphql(complex, name = "Bakery")] +#[sea_orm(table_name = "bakery")] +pub struct Model { + +... +``` + +```rust, no_run +// src/schema.rs + +- use async_graphql::{Context, Object}; ++ use async_graphql::{ComplexObject, Context, Object}; + +... + ++ #[ComplexObject] ++ impl bakery::Model { ++ async fn bakers(&self, ctx: &Context<'_>) -> Result, DbErr> { ++ let db = ctx.data::().unwrap(); ++ ++ self.find_related(Baker).all(db).await ++ } ++ } +``` + +Example query: + +``` +GraphQL Request: +{ + bakery(id: 1) { + name, + bakers { + name + } + } +} + +Response: +{ + "data": { + "bakery": { + "name": "ABC Bakery", + "bakers": [ + { + "name": "Sanford" + }, + { + "name": "Billy" + } + ] + } + } +} +``` From 089dbaf744dfdebc57e314db0201b1b72185aa74 Mon Sep 17 00:00:00 2001 From: Sanford Pun Date: Tue, 5 Jul 2022 17:15:37 +0800 Subject: [PATCH 53/60] Draft ch03-03 --- tutorials-book/src/SUMMARY.md | 2 +- tutorials-book/src/ch03-03-mutation.md | 162 +++++++++++++++++++++++++ 2 files changed, 163 insertions(+), 1 deletion(-) create mode 100644 tutorials-book/src/ch03-03-mutation.md diff --git a/tutorials-book/src/SUMMARY.md b/tutorials-book/src/SUMMARY.md index bb8c34e..b43f4c5 100644 --- a/tutorials-book/src/SUMMARY.md +++ b/tutorials-book/src/SUMMARY.md @@ -28,4 +28,4 @@ - [Chapter 3 - Integration with GraphQL](ch03-00-integration-with-graphql.md) - [Project Setup](ch03-01-project-setup.md) - [Query](ch03-02-query.md) - - [Mutation]() + - [Mutation](ch03-03-mutation.md) diff --git a/tutorials-book/src/ch03-03-mutation.md b/tutorials-book/src/ch03-03-mutation.md new file mode 100644 index 0000000..2f79d98 --- /dev/null +++ b/tutorials-book/src/ch03-03-mutation.md @@ -0,0 +1,162 @@ +# Mutation + +## Preparation + +To support mutations with GraphQL, we need to create a struct to serve as the root, as for queries. + +```rust, no_run +// src/schema.rs + +... + +pub(crate) struct QueryRoot; ++ pub(crate) struct MutationRoot; + +... +``` + +```rust, no_run +// src/main.rs + +... + +- use async_graphql::{EmptyMutation, EmptySubscription, Schema}; ++ use async_graphql::{EmptySubscription, Schema}; + +... + +- type SchemaType = Schema; ++ type SchemaType = Schema; + +... + +#[launch] +async fn rocket() -> _ { + let db = match set_up_db().await { + Ok(db) => db, + Err(err) => panic!("{}", err), + }; + +- let schema = Schema::build(QueryRoot, EmptyMutation, EmptySubscription) ++ let schema = Schema::build(QueryRoot, MutationRoot, EmptySubscription) + .data(db) // Add the database connection to the GraphQL global context + .finish(); + +... +``` + +## Define resolvers + +Define the mutation resolvers just like the ones for queries: + +```rust, no_run +// src/schema.rs + +... + +#[Object] +impl MutationRoot { + // For inserting a bakery + async fn add_bakery(&self, ctx: &Context<'_>, name: String) -> Result { + let db = ctx.data::().unwrap(); + + let res = Bakery::insert(bakery::ActiveModel { + name: ActiveValue::Set(name), + profit_margin: ActiveValue::Set(0.0), + ..Default::default() + }) + .exec(db) + .await?; + + Bakery::find_by_id(res.last_insert_id) + .one(db) + .await + .map(|b| b.unwrap()) + } + + // For inserting a baker + async fn add_baker( + &self, + ctx: &Context<'_>, + name: String, + bakery_id: i32, + ) -> Result { + let db = ctx.data::().unwrap(); + + let res = Baker::insert(baker::ActiveModel { + name: ActiveValue::Set(name), + bakery_id: ActiveValue::Set(bakery_id), + ..Default::default() + }) + .exec(db) + .await?; + + Baker::find_by_id(res.last_insert_id) + .one(db) + .await + .map(|b| b.unwrap()) + } +} +``` + +Examples: + +``` +GraphQL Request: +mutation { + addBakery(name: "Excellent Bakery") { + id, + name, + profitMargin + } +} + +Response: +{ + "data": { + "addBakery": { + "id": 4, + "name": "Excellent Bakery", + "profitMargin": 0 + } + } +} +``` + +``` +GraphQL Request: +mutation { + addBaker(name: "Chris", bakeryId: 1) { + id, + name, + bakery { + bakers { + name + } + } + } +} + +Response: +{ + "data": { + "addBaker": { + "id": 3, + "name": "Chris", + "bakery": { + "bakers": [ + { + "name": "Sanford" + }, + { + "name": "Billy" + }, + { + "name": "Chris" + } + ] + } + } + } +} +``` From fd79185c449362e6c6983ad44906180d7c4ace97 Mon Sep 17 00:00:00 2001 From: Sanford Pun Date: Tue, 5 Jul 2022 17:16:03 +0800 Subject: [PATCH 54/60] Add GraphQL integration example source code --- Cargo.toml | 2 +- graphql-example/.gitignore | 1 + graphql-example/Cargo.toml | 18 ++++ graphql-example/src/entities/baker.rs | 35 +++++++ graphql-example/src/entities/bakery.rs | 28 ++++++ graphql-example/src/entities/mod.rs | 6 ++ graphql-example/src/entities/prelude.rs | 4 + graphql-example/src/main.rs | 74 ++++++++++++++ .../m20220602_000001_create_bakery_table.rs | 46 +++++++++ .../m20220602_000002_create_baker_table.rs | 56 +++++++++++ graphql-example/src/migrator/mod.rs | 16 +++ graphql-example/src/schema.rs | 98 +++++++++++++++++++ graphql-example/src/setup.rs | 39 ++++++++ 13 files changed, 422 insertions(+), 1 deletion(-) create mode 100644 graphql-example/.gitignore create mode 100644 graphql-example/Cargo.toml create mode 100644 graphql-example/src/entities/baker.rs create mode 100644 graphql-example/src/entities/bakery.rs create mode 100644 graphql-example/src/entities/mod.rs create mode 100644 graphql-example/src/entities/prelude.rs create mode 100644 graphql-example/src/main.rs create mode 100644 graphql-example/src/migrator/m20220602_000001_create_bakery_table.rs create mode 100644 graphql-example/src/migrator/m20220602_000002_create_baker_table.rs create mode 100644 graphql-example/src/migrator/mod.rs create mode 100644 graphql-example/src/schema.rs create mode 100644 graphql-example/src/setup.rs diff --git a/Cargo.toml b/Cargo.toml index dc12608..4f807a2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,2 +1,2 @@ [workspace] -members = ["bakery-backend", "rocket-example"] +members = ["bakery-backend", "graphql-example", "rocket-example"] diff --git a/graphql-example/.gitignore b/graphql-example/.gitignore new file mode 100644 index 0000000..1de5659 --- /dev/null +++ b/graphql-example/.gitignore @@ -0,0 +1 @@ +target \ No newline at end of file diff --git a/graphql-example/Cargo.toml b/graphql-example/Cargo.toml new file mode 100644 index 0000000..8e27182 --- /dev/null +++ b/graphql-example/Cargo.toml @@ -0,0 +1,18 @@ +[package] +name = "graphql-example" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +async-graphql = "4.0.4" +async-graphql-rocket = "4.0.4" +rocket = { version = "^0.5.0-rc.2", features = ["json"] } +sea-orm = { version = "0.8.0", features = [ + "sqlx-mysql", + "runtime-async-std-native-tls", + "macros", +] } +sea-orm-migration = "0.8.3" +serde_json = "1.0.81" diff --git a/graphql-example/src/entities/baker.rs b/graphql-example/src/entities/baker.rs new file mode 100644 index 0000000..7371188 --- /dev/null +++ b/graphql-example/src/entities/baker.rs @@ -0,0 +1,35 @@ +//! SeaORM Entity. Generated by sea-orm-codegen 0.8.0 + +use async_graphql::SimpleObject; +use sea_orm::entity::prelude::*; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, SimpleObject)] +#[graphql(complex, name = "Baker")] +#[sea_orm(table_name = "baker")] +pub struct Model { + #[sea_orm(primary_key)] + pub id: i32, + pub name: String, + pub contact_details: Option, + pub bakery_id: i32, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm( + belongs_to = "super::bakery::Entity", + from = "Column::BakeryId", + to = "super::bakery::Column::Id", + on_update = "NoAction", + on_delete = "NoAction" + )] + Bakery, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::Bakery.def() + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/graphql-example/src/entities/bakery.rs b/graphql-example/src/entities/bakery.rs new file mode 100644 index 0000000..4ea7af2 --- /dev/null +++ b/graphql-example/src/entities/bakery.rs @@ -0,0 +1,28 @@ +//! SeaORM Entity. Generated by sea-orm-codegen 0.8.0 + +use async_graphql::SimpleObject; +use sea_orm::entity::prelude::*; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, SimpleObject)] +#[graphql(complex, name = "Bakery")] +#[sea_orm(table_name = "bakery")] +pub struct Model { + #[sea_orm(primary_key)] + pub id: i32, + pub name: String, + pub profit_margin: f64, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm(has_many = "super::baker::Entity")] + Baker, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::Baker.def() + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/graphql-example/src/entities/mod.rs b/graphql-example/src/entities/mod.rs new file mode 100644 index 0000000..b5f83b2 --- /dev/null +++ b/graphql-example/src/entities/mod.rs @@ -0,0 +1,6 @@ +//! SeaORM Entity. Generated by sea-orm-codegen 0.8.0 + +pub mod prelude; + +pub mod baker; +pub mod bakery; diff --git a/graphql-example/src/entities/prelude.rs b/graphql-example/src/entities/prelude.rs new file mode 100644 index 0000000..8bc9c6e --- /dev/null +++ b/graphql-example/src/entities/prelude.rs @@ -0,0 +1,4 @@ +//! SeaORM Entity. Generated by sea-orm-codegen 0.8.0 + +pub use super::baker::Entity as Baker; +pub use super::bakery::Entity as Bakery; diff --git a/graphql-example/src/main.rs b/graphql-example/src/main.rs new file mode 100644 index 0000000..d873de2 --- /dev/null +++ b/graphql-example/src/main.rs @@ -0,0 +1,74 @@ +mod entities; +mod migrator; +mod schema; +mod setup; + +use async_graphql::{EmptySubscription, Schema}; +use async_graphql_rocket::*; +use rocket::*; +use schema::*; +use sea_orm::DbErr; +use setup::set_up_db; + +type SchemaType = Schema; + +#[get("/")] +fn index() -> String { + "Hello, bakeries!".to_owned() +} + +#[rocket::post("/graphql", data = "", format = "application/json")] +async fn graphql_request(schema: &State, request: GraphQLRequest) -> GraphQLResponse { + request.execute(schema).await +} + +#[launch] +async fn rocket() -> _ { + let db = match set_up_db().await { + Ok(db) => db, + Err(err) => panic!("{}", err), + }; + + let schema = Schema::build(QueryRoot, MutationRoot, EmptySubscription) + .data(db) + .finish(); + + rocket::build() + .manage(schema) + .mount("/", routes![index, graphql_request]) + .register("/", catchers![not_found]) +} + +#[catch(404)] +pub fn not_found(req: &Request<'_>) -> String { + format!("{} not found.", req.uri()) +} + +#[derive(Responder)] +#[response(status = 500, content_type = "json")] +struct ErrorResponder { + message: String, +} + +#[allow(clippy::from_over_into)] +impl Into for DbErr { + fn into(self) -> ErrorResponder { + ErrorResponder { + message: self.to_string(), + } + } +} + +#[allow(clippy::from_over_into)] +impl Into for String { + fn into(self) -> ErrorResponder { + ErrorResponder { message: self } + } +} + +#[allow(clippy::from_over_into)] +impl Into for &str { + fn into(self) -> ErrorResponder { + self.to_owned().into() + } +} diff --git a/graphql-example/src/migrator/m20220602_000001_create_bakery_table.rs b/graphql-example/src/migrator/m20220602_000001_create_bakery_table.rs new file mode 100644 index 0000000..03ae011 --- /dev/null +++ b/graphql-example/src/migrator/m20220602_000001_create_bakery_table.rs @@ -0,0 +1,46 @@ +use sea_orm_migration::prelude::*; + +pub struct Migration; + +impl MigrationName for Migration { + fn name(&self) -> &str { + "m_20220602_000001_create_bakery_table" + } +} + +#[async_trait::async_trait] +impl MigrationTrait for Migration { + async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> { + manager + .create_table( + Table::create() + .if_not_exists() + .table(Bakery::Table) + .col( + ColumnDef::new(Bakery::Id) + .integer() + .not_null() + .auto_increment() + .primary_key(), + ) + .col(ColumnDef::new(Bakery::Name).string().not_null()) + .col(ColumnDef::new(Bakery::ProfitMargin).double().not_null()) + .to_owned(), + ) + .await + } + + async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> { + manager + .drop_table(Table::drop().table(Bakery::Table).to_owned()) + .await + } +} + +#[derive(Iden)] +pub enum Bakery { + Table, + Id, + Name, + ProfitMargin, +} diff --git a/graphql-example/src/migrator/m20220602_000002_create_baker_table.rs b/graphql-example/src/migrator/m20220602_000002_create_baker_table.rs new file mode 100644 index 0000000..91ee311 --- /dev/null +++ b/graphql-example/src/migrator/m20220602_000002_create_baker_table.rs @@ -0,0 +1,56 @@ +use sea_orm_migration::prelude::*; + +use super::m20220602_000001_create_bakery_table::Bakery; + +pub struct Migration; + +impl MigrationName for Migration { + fn name(&self) -> &str { + "m_20220602_000002_create_baker_table" + } +} + +#[async_trait::async_trait] +impl MigrationTrait for Migration { + async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> { + manager + .create_table( + Table::create() + .if_not_exists() + .table(Baker::Table) + .col( + ColumnDef::new(Baker::Id) + .integer() + .not_null() + .auto_increment() + .primary_key(), + ) + .col(ColumnDef::new(Baker::Name).string().not_null()) + .col(ColumnDef::new(Baker::ContactDetails).json()) + .col(ColumnDef::new(Baker::BakeryId).integer().not_null()) + .foreign_key( + ForeignKey::create() + .name("fk-baker-bakery_id") + .from(Baker::Table, Baker::BakeryId) + .to(Bakery::Table, Bakery::Id), + ) + .to_owned(), + ) + .await + } + + async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> { + manager + .drop_table(Table::drop().table(Baker::Table).to_owned()) + .await + } +} + +#[derive(Iden)] +pub enum Baker { + Table, + Id, + Name, + ContactDetails, + BakeryId, +} diff --git a/graphql-example/src/migrator/mod.rs b/graphql-example/src/migrator/mod.rs new file mode 100644 index 0000000..9cbc98b --- /dev/null +++ b/graphql-example/src/migrator/mod.rs @@ -0,0 +1,16 @@ +use sea_orm_migration::prelude::*; + +mod m20220602_000001_create_bakery_table; +mod m20220602_000002_create_baker_table; + +pub struct Migrator; + +#[async_trait::async_trait] +impl MigratorTrait for Migrator { + fn migrations() -> Vec> { + vec![ + Box::new(m20220602_000001_create_bakery_table::Migration), + Box::new(m20220602_000002_create_baker_table::Migration), + ] + } +} diff --git a/graphql-example/src/schema.rs b/graphql-example/src/schema.rs new file mode 100644 index 0000000..946da8b --- /dev/null +++ b/graphql-example/src/schema.rs @@ -0,0 +1,98 @@ +use async_graphql::{ComplexObject, Context, Object}; +use sea_orm::*; + +use crate::entities::{prelude::*, *}; + +pub(crate) struct QueryRoot; +pub(crate) struct MutationRoot; + +#[Object] +impl QueryRoot { + async fn hello(&self) -> String { + "Hello GraphQL".to_owned() + } + + async fn bakeries(&self, ctx: &Context<'_>) -> Result, DbErr> { + let db = ctx.data::().unwrap(); + + Bakery::find().all(db).await + } + + async fn bakery(&self, ctx: &Context<'_>, id: i32) -> Result, DbErr> { + let db = ctx.data::().unwrap(); + + Bakery::find_by_id(id).one(db).await + } + + async fn bakers(&self, ctx: &Context<'_>) -> Result, DbErr> { + let db = ctx.data::().unwrap(); + + Baker::find().all(db).await + } + + async fn baker(&self, ctx: &Context<'_>, id: i32) -> Result, DbErr> { + let db = ctx.data::().unwrap(); + + Baker::find_by_id(id).one(db).await + } +} + +#[ComplexObject] +impl bakery::Model { + async fn bakers(&self, ctx: &Context<'_>) -> Result, DbErr> { + let db = ctx.data::().unwrap(); + + self.find_related(Baker).all(db).await + } +} + +#[ComplexObject] +impl baker::Model { + async fn bakery(&self, ctx: &Context<'_>) -> Result { + let db = ctx.data::().unwrap(); + + self.find_related(Bakery).one(db).await.map(|b| b.unwrap()) + } +} + +#[Object] +impl MutationRoot { + async fn add_bakery(&self, ctx: &Context<'_>, name: String) -> Result { + let db = ctx.data::().unwrap(); + + let res = Bakery::insert(bakery::ActiveModel { + name: ActiveValue::Set(name), + profit_margin: ActiveValue::Set(0.0), + ..Default::default() + }) + .exec(db) + .await?; + + Bakery::find_by_id(res.last_insert_id) + .one(db) + .await + .map(|b| b.unwrap()) + } + + async fn add_baker( + &self, + ctx: &Context<'_>, + name: String, + bakery_id: i32, + ) -> Result { + let db = ctx.data::().unwrap(); + + let res = Baker::insert(baker::ActiveModel { + name: ActiveValue::Set(name), + bakery_id: ActiveValue::Set(bakery_id), + ..Default::default() + }) + .exec(db) + .await?; + + Baker::find_by_id(res.last_insert_id) + .one(db) + .await + .map(|b| b.unwrap()) + } +} diff --git a/graphql-example/src/setup.rs b/graphql-example/src/setup.rs new file mode 100644 index 0000000..f5dfea2 --- /dev/null +++ b/graphql-example/src/setup.rs @@ -0,0 +1,39 @@ +use sea_orm::*; + +const DATABASE_URL: &str = "mysql://root:root@localhost:3306"; + +pub(super) async fn set_up_db() -> Result { + let db = Database::connect(DATABASE_URL).await?; + + let db_name = "bakeries_db"; + let db = match db.get_database_backend() { + DbBackend::MySql => { + db.execute(Statement::from_string( + db.get_database_backend(), + format!("CREATE DATABASE IF NOT EXISTS `{}`;", db_name), + )) + .await?; + + let url = format!("{}/{}", DATABASE_URL, db_name); + Database::connect(&url).await? + } + DbBackend::Postgres => { + db.execute(Statement::from_string( + db.get_database_backend(), + format!("DROP DATABASE IF EXISTS \"{}\";", db_name), + )) + .await?; + db.execute(Statement::from_string( + db.get_database_backend(), + format!("CREATE DATABASE \"{}\";", db_name), + )) + .await?; + + let url = format!("{}/{}", DATABASE_URL, db_name); + Database::connect(&url).await? + } + DbBackend::Sqlite => db, + }; + + Ok(db) +} From da563305ea45fbdc8f915c9f4828e866d290700f Mon Sep 17 00:00:00 2001 From: Sanford Pun Date: Tue, 5 Jul 2022 17:25:09 +0800 Subject: [PATCH 55/60] Update GitHub workflows for building the graphql example --- .github/workflows/main.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 3ae2a1a..f986dc0 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -21,6 +21,8 @@ jobs: run: cargo build --manifest-path bakery-backend/Cargo.toml - name: Build rocket-example run: cargo build --manifest-path rocket-example/Cargo.toml + - name: Build graphql-example + run: cargo build --manifest-path graphql-example/Cargo.toml # Try to build mdbooks - name: Install mdbook From 1f267f22dd8928e460ebc6e889f0747dde502e38 Mon Sep 17 00:00:00 2001 From: Billy Chan Date: Thu, 7 Jul 2022 12:16:18 +0800 Subject: [PATCH 56/60] Add endpoint for GraphQL playground --- graphql-example/src/main.rs | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/graphql-example/src/main.rs b/graphql-example/src/main.rs index d873de2..94b8cc3 100644 --- a/graphql-example/src/main.rs +++ b/graphql-example/src/main.rs @@ -3,9 +3,12 @@ mod migrator; mod schema; mod setup; -use async_graphql::{EmptySubscription, Schema}; +use async_graphql::{ + http::{playground_source, GraphQLPlaygroundConfig}, + EmptySubscription, Schema, +}; use async_graphql_rocket::*; -use rocket::*; +use rocket::{response::content, *}; use schema::*; use sea_orm::DbErr; use setup::set_up_db; @@ -17,6 +20,11 @@ fn index() -> String { "Hello, bakeries!".to_owned() } +#[rocket::get("/graphql")] +fn graphql_playground() -> content::RawHtml { + content::RawHtml(playground_source(GraphQLPlaygroundConfig::new("/graphql"))) +} + #[rocket::post("/graphql", data = "", format = "application/json")] async fn graphql_request(schema: &State, request: GraphQLRequest) -> GraphQLResponse { request.execute(schema).await @@ -35,7 +43,7 @@ async fn rocket() -> _ { rocket::build() .manage(schema) - .mount("/", routes![index, graphql_request]) + .mount("/", routes![index, graphql_playground, graphql_request]) .register("/", catchers![not_found]) } From 221b8db88434a19bc8a6e4675bce1de82deae95d Mon Sep 17 00:00:00 2001 From: Sanford Pun Date: Thu, 7 Jul 2022 15:34:54 +0800 Subject: [PATCH 57/60] Include the link to the full source code of the example at the start of each chapter --- tutorials-book/src/ch01-00-build-backend-getting-started.md | 2 ++ tutorials-book/src/ch02-00-integration-with-rocket.md | 2 ++ tutorials-book/src/ch03-00-integration-with-graphql.md | 2 ++ 3 files changed, 6 insertions(+) diff --git a/tutorials-book/src/ch01-00-build-backend-getting-started.md b/tutorials-book/src/ch01-00-build-backend-getting-started.md index bb6eaaa..63010b2 100644 --- a/tutorials-book/src/ch01-00-build-backend-getting-started.md +++ b/tutorials-book/src/ch01-00-build-backend-getting-started.md @@ -1,5 +1,7 @@ # Chapter 1 - Building a Backend with SeaORM +*Full source code available on [GitHub](https://github.com/SeaQL/sea-orm-tutorial/tree/master/bakery-backend).* + In this chapter, we will build a backend application with SeaORM. It will act as a layer of communication with the database. The application will simulate the interface of a database of bakeries. For simplicity, there will be only two entities, `Bakery` and `Baker`. We will explore the schema later on. diff --git a/tutorials-book/src/ch02-00-integration-with-rocket.md b/tutorials-book/src/ch02-00-integration-with-rocket.md index fd22084..ef3262b 100644 --- a/tutorials-book/src/ch02-00-integration-with-rocket.md +++ b/tutorials-book/src/ch02-00-integration-with-rocket.md @@ -1,5 +1,7 @@ # Chapter 2 - Integration with Rocket +*Full source code available on [GitHub](https://github.com/SeaQL/sea-orm-tutorial/tree/master/rocket-example).* + In Chapter 1, we've explored how to interact with a database in Rust. In real applications, however, we'd probably want to expose those operations in a Web API for generic usage. diff --git a/tutorials-book/src/ch03-00-integration-with-graphql.md b/tutorials-book/src/ch03-00-integration-with-graphql.md index 8cff377..1430a26 100644 --- a/tutorials-book/src/ch03-00-integration-with-graphql.md +++ b/tutorials-book/src/ch03-00-integration-with-graphql.md @@ -1,5 +1,7 @@ # Chapter 3 - Integration with GraphQL +*Full source code available on [GitHub](https://github.com/SeaQL/sea-orm-tutorial/tree/master/graphql-example).* + We've created a web application with Rocket in Chapter 2, but you may notice that the RESTful API of the application lacks flexibility. For example, a `GET` request to the endpoint `/bakeries`, if successful, always gives us an array of names of the bakeries in the database. This is a toy implementation to demonstrate how things *could* work, but in reality we also need to provide ways for getting other attributes (e.g. *profit_margin*). From 0cad1f8fcf8b97e84d2c228ceb7a8645f58e9c92 Mon Sep 17 00:00:00 2001 From: Sanford Pun Date: Thu, 7 Jul 2022 15:40:24 +0800 Subject: [PATCH 58/60] Add GraphQL Integration example to README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index e3d87aa..5116ff8 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,7 @@ The tutorials contain the following chapters: 1. [**Bakery Backend**](https://www.sea-ql.org/sea-orm-tutorial/ch01-00-build-backend-getting-started.html) - This chapter covers the basics of using SeaORM to interact with the database (a MySQL database is used for illustration). On top of this backend you can build any interface you need. 2. [**Rocket Integration**](https://www.sea-ql.org/sea-orm-tutorial/ch02-00-integration-with-rocket.html) - This chapter explains how to integrate the SeaORM backend into the Rocket framework to create a web application that provides a web API or even a simple frontend. +3. [**GraphQL Integration**](https://www.sea-ql.org/sea-orm-tutorial/ch03-00-integration-with-graphql.html) - This chapter extends the RESTful API of the web application in Chapter 2 to a GraphQL API with only one endpoint but enhanced flexibility of query. [![Discord](https://img.shields.io/discord/873880840487206962?label=Discord)](https://discord.com/invite/uCPdDXzbdv) From 8eb283ed13dadf0bcb06797f732c53463cca1725 Mon Sep 17 00:00:00 2001 From: Sanford Pun Date: Thu, 7 Jul 2022 16:33:05 +0800 Subject: [PATCH 59/60] Draft ch03-05 --- tutorials-book/src/SUMMARY.md | 2 + .../graphql_playground_autocomplete.png | Bin 0 -> 21720 bytes .../src/assets/graphql_playground_docs.png | Bin 0 -> 305911 bytes .../src/assets/graphql_playground_hello.png | Bin 0 -> 166365 bytes .../src/assets/graphql_playground_schema.png | Bin 0 -> 278896 bytes tutorials-book/src/ch03-01-project-setup.md | 2 + tutorials-book/src/ch03-04-subscription.md | 1 + .../src/ch03-05-graphql-playground.md | 66 ++++++++++++++++++ 8 files changed, 71 insertions(+) create mode 100644 tutorials-book/src/assets/graphql_playground_autocomplete.png create mode 100644 tutorials-book/src/assets/graphql_playground_docs.png create mode 100644 tutorials-book/src/assets/graphql_playground_hello.png create mode 100644 tutorials-book/src/assets/graphql_playground_schema.png create mode 100644 tutorials-book/src/ch03-04-subscription.md create mode 100644 tutorials-book/src/ch03-05-graphql-playground.md diff --git a/tutorials-book/src/SUMMARY.md b/tutorials-book/src/SUMMARY.md index b43f4c5..9e051b0 100644 --- a/tutorials-book/src/SUMMARY.md +++ b/tutorials-book/src/SUMMARY.md @@ -29,3 +29,5 @@ - [Project Setup](ch03-01-project-setup.md) - [Query](ch03-02-query.md) - [Mutation](ch03-03-mutation.md) + - [Subscription](ch03-04-subscription.md) + - [Optional: GraphQL Playground](ch03-05-graphql-playground.md) diff --git a/tutorials-book/src/assets/graphql_playground_autocomplete.png b/tutorials-book/src/assets/graphql_playground_autocomplete.png new file mode 100644 index 0000000000000000000000000000000000000000..b688d244d4cfa5052591c96cc1742e3e7f2a27ef GIT binary patch literal 21720 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 z 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 evea z#Dm2l#5B(s<=M_3{v?W2!}~6zyM3yN-;Tb)+kQ(ZSLd8pNG%kRc0YMA^Lw}h&2f|N zQa6vdoi+4l9Cm7iaJwjTbixPBUbFz2YaJNfvv>F73q{5!%$6b;)27#BeK2h#f-Q~v_t=olK+F*Si znH}k^yH2Pn(%*-kJq!wo<4@kw$QJT)Vwm)NRuQ4KIi1(?5nT=0MKK_rLQ3!n>p_JXMQ!N zKyFDTu*|(R?K6T7fBpPeJoEx3-TBvb;fhZurP+ubVzugS5b3uDnGU-N|HQ^ zBC?C%m#pEJ`F(B3%OZjd7RHlbRBQ2zq~2ZkO}wkMejCUih*;j{%j&Jv;nPpi$Y!8&*U82_ULELOBOm)4 zP=M|Vq#iY3h>v&(t!)oKl=l>GPEsK85-%Yml$IUTd&_MBn-vp=^er|=kq=1g2>LaJ z&mk0GCJz|zplQquQW=Q!mrTG?cY<;wXnxf@V3{rPU6@l0^9a&@U@4-g@ip1ZE6@s4 zXWiq^44*H0eCuET<@+I_Sn;}F2O)9+r&LUC%wI{JIbl!6p#ay<&hP>4WOK&q1QkW2 z7*_-G4+9V>FV(>9%hw;?S@&h9cbwzwWH5Ovy3BO7p>;wR09&8>R2i9~2#>(tzK`Sy z%xR_F=`pu6&P=lxDW}JuJCL<7`_8+NEIF!5ja~DRC(X_9#;{q3%ol|^Ha4@(p$R#D z7u(*Oft!ZcM%=xQo>?8LG@L z>u--KHnuU{PqzZ8*T3Jh1S6=X0lp8GEymNzQ-$24z_r{&>K}6FssXWF)A14ZuJ%k+ z(>Ru?<8@ilL2bJ-0k5}kM;;%_cj8=c_@9bHHZ=^Q=)+@%~Sp^Zhh*7lPvaHB5Lc@2Rfy;{kpQC;9W0GN7YEJK8;D z#PuZ1%=ehoD2)+huuN(>SZ=0CjP%&vOOQcUKk>CJLVaXB6Z1m?CzMe-ocDl3@R8FJ z`P}{#>qZ3f)jqL9K!S%4${lNM*S2=yzMjwW;oF<`Nn_nI8M^t)nbjl6O6RF65oa?j z!Hs+1r^F8CYr25Sf@&+mS27i5^){OYBF^l0 z2S#keI*l)16+2;>hK->*i@U5C$NU>*gSgh04tWiBc)e&X!PwlbooXb^kF(<9k% z5wGd&=}c@aSkHrm)o*y}>{V42F3afJp{3)AW2hf75Wb{>YTl6vm%e(U%wOO+6}P>p4tEy_$3}B@L-9_@c3VE=gHCLs6Ibapf9s-6rS$J1&}#n1D`(T2{zURP~d{?`t8Ir!S8e~ zl61Yap0oPUqEmD0NQAT#ZBCIF3_{rso?C~!dA(w3veL#Vc^g&xjkq-l@h=qtekt$MdY@Y1GdOoDjJ4vuN{Sd=I!9}>+VY5@KK2?$!H?p=%1>c|gH&5MbqW#5qUfG+mMsn?UG6QNa zBth2ei^w0xtw7D{_vDtpMZ4@NFYt+TO}x&-a71l(xo!k}Wh4KU7IurPG$-m0CqZt7 z-p|}zt}V!d=~w-ALB9(rEbnMN$6ICdeM+uM50h&I0!K5xU(pZqt%03~rw_c6u$J>A z>bYI*ub~Fay862AE6eM3-N}wl8ZDCLeVRUQYrIC?MgubW{Mqt-yV%PSfUlVsdGgi^ z+gO{Q_nNJ^$SqF^f|!6PHxys#?|h(m6VZNjH|m=s_{h^9N?Zgr0A)JRH~Aw^*Y`n) z)Rxn9GfGM@MoK`*JRrU0%Rx8W(AbX+pdFB1fqdrb2Z=_#x@YKxSHX5%7iGeiiAPYg zAK3Q~*@?0SL_Z(;BX7Wa$562I36TFqt#&ScZ*ly(SmRGQ;$Tgk4IO4d1|Y-9m<#Km zzhDV2aEgBR(d6;kS(x<40KN?CQPT9gSus41Gh;^OasrhAc(tEAFqr0r=HRLqjEPc) zJU&0C*(a+nDnGhvgYkQ(jwmVc%%jNK{ zWdiY%*MpM*DB}bb^#+4_cgvVQ37R#0*y{<>dfDwb`BF79V4pO!uTsnh%t`%;VZrQ; zEjLZJ&BxUOw>Rcz`JhY2bf~jQRYie0U*5XdY64=`E_p?=t3t3b#4-?#O-LKS?o#iN zSco(~+`uvutO5^`6h4TJl{NmcQ@iHU{Dq_OtI4L|gIJgNccb@xOIc$FgWAOXyYvex z)(xF2@3zsq=7qU{Ca_y8!vMzsk5JE*1v1zD#j#>LyX|OR2Eica;WtkhrOWV=U$S~< zXO-u*uT|`tzfzQeF?!!rA$}Our4i$fiGFP`faj@n|1*P)hKMxrYIhB&JwAg!GCKw| z0yd9v_o-DiA;aaLUAEu$8il9)CJeBk-W1`l8sV$P-QRBg&R7pd!Utu?BQP&7Y$ehO z5VD7xYmXDZRd#`Q^W4G3L*JHC*(KGLGsAne+`>~&;mkg%oUZOG*`d+M zCuu}Y;R_I!w~SlL59H^yAvLbQCy;i;_Y{B#kGs)C_kJS)lHm2C{V@Y25Gl4q+i?Q0 zp+u@J0^fB_Q)m1zmhRvfx$v~-k)!1G?Zi@TE+x;=nXyzh{=EAf6Sz~A5WB-bPCA<; zT1ee5<;7u5kmI91LOjLbBPwL_6~|Jj14^m?^oBoCnWL&VGN<9a)y~}C1f`na@bkSKTBq>LBJDx z`k{GCE!T(37c@ARVia9TP$FS*AWV+2JN@&-w{8OjP+DFBH{vQsrMj9drI89$x9ms~t@4ZJ_n9(-=1cLP0lsG{wyi}`;~lR?}bi1KSkM%OqTIHtwTXjYwGXI0rI4x^tI zyy222#26G>f#J8uCP>uxxADR-o}enD>7(%$?kA+|(#lw&wr`7cZv(f*q;Ideu*Ca; zJDNBnsc$9xABt&7`iPfWa&>X11vjZngUjcP(w1IxN8)az_Wz=Nz%OHp^I+G`W*MJl zs9u)l*GG>GAUbJz)f9i@}iuCJor- zC}n1Q5{!Jv@JoNnl8fXB0l3+%p2OUqV(ho!3Agb{`@rAC&Hliyze8Jt)F*&tA!+3$ zq8%8E*hol+JQ`&m^5M^NH$5O?_QsO}OMsO5@C!{zZ!3LyS)N6?F$eEAW*Zs2-jff) zI`8Ise%O($yT?cr&kMWi*rx|lH-4)kNw#^0Zh*lSb=nYu)g+6ZuO`BlX0}5gz!bw$ zYf_J0`sLDyMxlMML3feBXK?f?PG>6lqlsL=Iva+?thnYr4F4IPuhr)ZK#0u6xN)zC zi73>>-F6%DH$gBa{ivftofgE(GkDe*4@f4Z2P;}E(;!0F{{2;@vZ$)Iw;6-9f>T6h zP9YsuKP8LPQLp|!pFor5D?)}9_@eKfeZ1wM=Zi=0TVUteX0D|-$bDRFrY>JC6`5fD z#fAYwqkjId-(Oa8HV=pZrW6JjE@6M8iG>pHla;ezPewU2c_xLwq3V(w$fgGvi%N8i zUf9)ALQ(Eb54*swDn*X{^EVXCp-@RSZ7(dB@c#S)HCBt$qB-Rz-r`HMrbimzpcF$B zdf}pEd%-;jyIjCrs#y~$59Q@Tb;%_gT7KR0+KtWfJ}7y8KFx+Ee;wzH=Ws@z|`7f?&-;1~qMB}*cPgs4c z^aG2qO8VwdB-{7wVWBZaqX@RVF3BY;Pd$?H@4t|sH(3*`^k5a0y;@ryHTiri!tVQ9 zQ9Zl&u!Ci@`Fy4JdB86*^nE_YLZFFgV5|NI~r zIIa8rLiXd$B$gHBWhh?zRG`9k|K<&pb|xA@<}4eK$JS_tk_g6OnE;`lQL-RjbFrTA z5UlzQnMyha-=M31CTk^w+=7Q*5zEwWuHB#>*KP68-x=PUP$$ZeIF(?-II|R5J}VvE zk&{`9{-k(}O8{T6a5Xdb7E8(CV_c!|Ae&T*lbeqdjXn}J4)7kI7s zRLj5D5=?v+@Pr$qbetIGveTHuBD3OnJt^JBtMbHdvB#-NFZPTzo|5Ay&%tXv70_Of zoKL(8A6?QPn1#7Ij6{;-K{i0C(M|=IWi=kqfHI1l+Im=ICf^Ov%U*#hPRHl>&=#f1KGLOW0rs^G6Cyza^_Lyy257a;% zcGY+N`D>>wAOM?z|e7he()`u&hYcNM};EIjpiM??Bz4t>>cwO7B~6rF}SZQPsAV+2dWf`YFwVmoDh4@>bz~_NV1fM@0DmXb9-Jw>`sBvkvb-oi1##h$N>)cM4=Udi0RuX#b7kG@FLCOs) zB1~1mFKL$_G)c5%q6|@SqpC z9iR)L{x#UqpqiBYN}ElaIZ&)X={vi}E>=stk2<h&b1}`^-`nNuv_l*=Q7LRVMZ$wpnDT`y&WP7bCt_&|6~k~Pm*5jAV^NvU>F@N zd{bmqF&Y*(12nW_qT>~i7%xq<&BoJ>DsB8!G6r=Yp*kNxr)+60@xXD;TB!3lxC&7jzzzx5Tj{GzDSz zT1F)|GCJ-2spc&Pf`rnvm2B+YeM%-#gr)k{I(tX>@lhd;+U5=+8m^0Hm`6I?3Pl-Y!S25P7~sKiG<09ChuZg zok@CvbfzLl2VcAGo{6zQ+w?tP;cSouvh7pIN%x?r8L|k{lYa$ljwC$-HbE?tx9&AP zLIze*YwB%Kqqp5x#4T)XCw!ZLNN+d9pQ)|d$!&hG>w1yV&%S|SItv80K3$Y_9$}B6 z_oFTH7S4xs?=WA%A>zC{=9rPFS@J!Tm~M2vAbO`Z-0TL)lQ~5@_><|k8EYIv)a2iox0TOzI;x!Lkg0xX_wF3ob5yD%sE*H#1L_ADoehQwH%l!-s_aD z!DpEix0y}|RHlo)z#Joie=7ax{-hc3?TVOf0XXF5V1^3GZ3q&wvB9`*D-6_6B5eJn zRKGoe!p&#&!qi%~iXI79#F5=JF`}Tf46=_(w$Z8aZ@u?hWi6OJjZ9;$sG8b5#>Y0n zGWb98l8V2@Qlt*>bL_Q-2}wvCt#ZJ0h}+2YiFz|`x4euF@;>0sHI(!IuyzTL{J^Fx z%$uQXIL0j2vcS5h8>0WAK}|&$H!a}RjnUrB5d8!W$3892NH?A=%2u&KsDaV}<+&+? zWd3Z(5PFsWIlz6_l@sH?``oGpuHT6H1)GU^@O=pX?X$Ol$;KHI8mWFhv1mk!X{S$~ z&~2?TLw`Re{zE+Zs;NxmYY4fQPC`PvVlO_~@H1vugbLl{`ls!fYW+eyW!v1`C?S#7 z78Y_#uQ|EDW7r>-nI+XnPn{^TzucyM+*kWy^~ueaEhp=1MbPj;JmC1S*T}sV6?9AU z-f}{=v1y*6?0y`8E!uu91)qm*Sr)r2+f=r;XZbkFhCI zJv39GL_t3<@+L5BVfNlQJ)3x@5sSEdwa4`SgQ{S_xRLw*)S{;6GM*(DN^(`?Yhf;x z>;h-bQ+>pJ;DBlLu3DBG!U6W+aP~NX_+%+1KSPi^fjGZmCu%fIli2RpDEx-iCFNdy zFr-t)gjLmoNjUf=LO6Lxuhrx0Y*J(Lj&?3kO`vxxVrC#LY~{L1TLyZR6`_+(RuN4> zMAh{~3|@X4z}>&K{8yX#rKGFJ!7Jrg(}1HjbtmOf(dm4`@)Cm(XGeo*$CkHa8s8;~ z9HMe-!eVjPOIdFmM5vzc(18!6=Y+`fDVwoYPZz0hOiW%^I(jp7sU?>7L;tr-+6=8I z-lhYiR>XlV6V@~j+C*{_h}{D(${gxyXq*K-n%Ao~owZzy%xNP&v$X7cJ?Jv!;JtrUaSH zt~4<@S^Wna{kl_ZjcR7jkCBa6h4&wR5y|FGD(R1vL^s^0Il#k^T+okur*;V~v+mlC ziun}nqMkNvq@}NlDKYGIAw+Lkij$6?ufY4EA*jlqN3e}V{{j>c(j{(`tBj`+< zPTk=J=a!AnXU53;T``TLG64#}`ic$mNU*FbzC!N3YC}Q&^@i2ImNjWmXNIA?(xFS+6RY19 zTyS>u;b`>3z>PF9pbAey(J2@v==RS97H)U&$EF_e#do#-(O{}_xafPH4j*wQmGJ13 zP8+kn5sFVkH_#$-0quT>Kk$3s^n?CAr{ap6`6!DHSAFXzP)Ty1)SA1JC_jX@Khx~} z0qo9aq+l4j3$;EQg6=+KKzf+A^JT)PoY!H!R|gM5Cc^l`!rzu^b|J|&ZSHVxmh%Ta z9~`r!;(wU848RUjphu|4M0^flL*!JYsPiLDE7h*N*)E)9en(kUaG$(B=V)$Nsl-P} z^qiB5BA7X6ZDW)-mZ`5Wec_g``-$!Mp;0_m050Ei>dPKVr|O2ZDE(p7cd1YOmzYGq z1fgTnbCcoRpnNo`8r6kkU6?za-&?P3uP&|0GE5#3Q+?K2GXorZB}whbJbJ_1P5@?iB4tSv!ku;CB1ewwN;Li= zk*N7SEHhj!4u(15gp2|Ha*U*l#M7+=((18}Xs&Jj>fe3`EMUknwp;a1ycUEuB^dtf{F^vX_-0uOqh1gn7WBbSYU*o`gXDr9Z1<3}H7y&p=yP9O;~|B2FVgj zXko$s%{SNVAR&$DpjI-cWwv9YeElFC*8#@D_pvjmB^m}G=#83S ztU)66Sr#g46Fc+811_v06bfzcS^+s?R~=0xe+6fP(CvLt2#2QJJuw? zHU~5#Via(@gX=&42;;R;K0C$@Ba(L;*`6(rXM7orw(@lsgJ7K@xMFM7%5;ULiY9l@ zQ9l9yTVTN2D*@h7y0AQi-vGWkj^pZC`k9y$m1E)h5SlGSJZ>Oc{1*+Vlh2vd%7i3e zxY|J>Q8HrM1t9Lm9ii<}&)paPBA*wMFtdwt;cY{xu;w5|EWRe(5=+PUHzS0V%e$ed zEttzllJAKxfAKU)gXCCI6d+tQ&lB@OyR$y(<*ReigJ+I+w7H^Kdj!0Q?{AY^?xuE( zo@Gt!)%{LY2!PNeOOP;WzHI02&1<6@0PdFT0zrSHkWV+GxF1UhyWa4y>e>eK=Og+} zHal)dk(ZU8-Z;Sb;EDVlg*nS|{+9vs`9`0oV(BgcRDm05Gh_{oGG)hjln2G#{g*}F zk|rLu<1YnU$X;t?K`9V6jjj!fG#t0P0`|0zOXgiz_ zl2F(SwfU{p!x2p1aR^%uz5k;=XQ}8bc}6=w;d-}rzaBa%6qwloBB2_>{Ip_@OeB)( zl0|ZU6()PaP%DHWY_NzUQ4U^EnIwlbxEd<-f^f!C zKJz2=_@;nUTT<})zlj~y4!K6T3yp3^R@;pc4!CIU@Hw;GWY_0s7ov!+(AW;DgPeDZ#eP7 zeS<(07F#whVdOkru@e_xji&sq1uU6II3T?aGYHzQ_y~GNZj!@dr#7BmIv}ljcCn>s z#HwbECF53Op|OPJsuEvIyTy^}%-$?YzJvLDX_s)KglE=N`Y-uCxGPz)z^6y1?UqvT zgQ9&bOQKKE;H}*{i*DRr4vvAe(*4ya?b4>}jQl(S`DmH0_fMp0x=!<(nK;U9Im7c< zjrvrw1Vsu*WKNSYyz-dA@!}u#$l)0;)kWy>RXApG90ePbhKqTC$@(;SP06Hln0E|a zZriXzJLyM}r%>~O>$I`Y5pPfhVVX2(s7LrNUsMehs|W6}6L1az*Ur|NtKG+28&2Mc zO=)xo>m#qZJw-1h9q&=rxh~bdTcZ#xO zigfUI5(Wh9eT6sQC4Fl-gM`ji<8k2W3zE3vO8fg97E>WpK724~{;ol#587Y`Rr^^~TJNUoe?qYqcsh5lr#Sj3{7V zji@w27#6Nqd4!rP{SVskeqkK~=7wJ&d2CYXEu~xj-e6$k!xsnQx)(l5gZRmt2@Zj| zNPSs1gy&?Oknn)UK5Yog*xZH2f%&+RKF7@N_avXH2FERjL;1`-2vEm3ra8|3-T-23y}xpY@k>s)A{|2;{*Lct>?W&F9yPRK`y? zH%2aDVWJP3nm2syqW8`abQh7dQOZQSq>@(aUO^_{D}zv!w??GH*61sO=#r(|h=H0&w3FhksMm@X7 ztp4`HdGLiOt6HexJ#Tf6#cOrUA=wnDrFQe2IE-(x)<`z9@t=?NCra?(A3cM%hMxxH ztNrEVq7O~s1CSq?p$~dkG3DLA1oy1$)1LXLH1t|Q_}`d-jF)3h+;O6pLjAVo#jpiP zC|@Tj@=}8gOZnl|Gu7r1`6{m$YInI}606N2+Egqi9r5}6ij7|xfhON<&p?@QH}-UV zf$2Yh?nZr&-I!g7SQPQByf1XO7A*IdV;eTP$L2o?O&NcEfa=4zdi8>L&4kY)#ft^v z+H7xiLkxYG$Qx+^ws$1xx(vw_+nwy&kwqV=SSg8qe*Mzi{FBZ1cDRW}AWLZnApfNB z`j)tV)l{~X-157^*;i$7czxu@Ss%P~O`1CHgX~Y+U4(kLpD!hNN{i%gOA|khH7MvH zRuyY7{xHDGejQDI;q1~EW_}6oV5*%zC;ZX79CWLay=$WzM^x_#5K<^7zpsrySmUF=E*<3dC;-2MO*bnw;#i z1ROG2p&oSUmbPkzsramxUt|41j`(mXs-55cg;}%Z7PpmG;%`$FX12)X8F>YHI}xLn znQeE{rxSs8@<4-*byyW+ukOE!P$=5R^dQ6ouIb;&4{sK7Ozi0;j_m0^)CdlxIGNge zB>5QedA^nMM5CR{&!V+!ztGY$jqx^g`TYm}qq)z>f)SYKEA#lFe0Umcjub_?n8>k) z7b8o!rs!kEAVRZ_hk%?X;*XCGyE({3JvoM_@3P%~pWDA4E?OYfW_Yp^`i~-(^yY?JJ3YK446X1-q795N%fprKDv5<9S>Wc-$3(#EKy5Igg1)x%y>9~Xm zWC96N8v?xCiMg=QOSpX@<6^EVKLNy}r6d2#WG^^7{Kao2Hj7nT{g^)ZqrL9X^R)XH zJOpK;6?6fHuK}WGLEmdTbbDXvV}g8`NnKt4Ro4tW#u=M0 zL}Kv(@4$0&w{U}2uAQwPyO8_DM%t-p4k&+ zO#JT@th@y5XlnxdrybP-OIP2!N~6P(ubaUWBYqgN58YVqoYrKDR?lPgX~WzDw_^K9 z9@XWBA}NWKihvE2(!>JE_)gW0=t2M>h5YA*F&ko8+q#EezyCr~(jf+`zkR-5&6wqqafnj zb2dS@r}2i*H(6-5p*rlPFD%ndqpUivM7!C@pz2XjO;2fPS;O@7LIALg!T|@J<+-6Q z6r7NY6Kt+$rsk7UT+K{?zIr|`x4C18SJ%}o>K)|2^#*w{-@P#*iwE>YXe(pA0<|=u z7^z#oC3CR-m*k%KTQZ1tP;%^^;0{;SHV5$l4T0KrFf5|(LRef=h2(C#nR#hfslu2B z+gd2((3YhX_?SHvH{gSos{AeF1KSHK+pP%8fWSZaR~zggZiblsUAqAS4i-)bYzw9^ zGzIv>bxr-U1|gS>**c|V?bV`+@1<4Kpu=YlPQJN@(Vz>`N0&znxh2hF$>&UlI5t$5^u2j8**` zb_c1Gw+1a6@TKH`LEkZcLm8!GOUYNsoK`}gTl(1&&?N+k4lGfC$?lF5Bi%_kXt4L8 zMnqUR| zZ<5rh)bSz5g7iy?ffdC%&I>OV;EeEPn$2`HRw{jp{yPD?z~NgK7Y&#<%G{!X+5s5q zmw942fkf$j7Do{Db@&7vpB!&?mb%|Z8)(a4!IctTN{}3C&wPgKcJINPt|mu>#-c{c>3tbu11&wTKmg-3dH*? z@O0uozhq#Nttu-k%2BuHl~;O0N_f^iS#mWYcYisFm=%eb zqhSv}7({Gu(@9gfdFM@Dr;$z-o7hK~TyoWHy=j?nX<8EW@abTq+%K3p;t%i_A8&y> zn)lWhaoMmib_s98NFQ~6kg&PmrmTa1ckRMRU3Xw;gnd)s%k)ar`f8T@(5oApzi#4* zZ9Bhzeq5;aMyN$Np>l1qa69CTDq)vADsw~i%PivBp>{s;LLGWh)2-$dM@G7foPcN(;RUyo?DZYG5x zg{Z+hMG5&tEZ3o)+CZ74NK5b8$%F2nnY62MfGL15+EcsI{8DTEcKSn1>&-=$P@yy# z*)~1e|L>9UIhrQv$OBh+sl)~y0>8mbwZ#PFy==NZUl;haYHIvK0lQWKfd*VcR(2>t?CT+JcfNZyq|Xe z>*CgQAj%0(zaWFAMgbS%QK7HP-pV)5oq%5`YE*XhQ8((~vYH9&jYcK`>{PC!imVi9 zMn*^b-p5>Bx_uPo-Rfpg<3-Lcm$Sw{51FWBC5=0 z%t%z7!v^vb1y3x!F)30mCs)VEyuW4tO*Yr@m4n>Ngp$>`I2=tRIjO;`cw|&V2U_Zj zyoe66G}QHgwtGg>X&}$@um!u%Wr4`PmzDZe&26wo&52b|z&t?h=BAuTw6sIwX*|oG znfELsaHi;aOR0i{XJt|>Np8t8z`@i6J7la!vdc*cncTX2viQ0Tjl#H=oh5{VOWr$k zhRmF=g-PiI2BRR_=015$=Z~$kq^=k&IcH`0+X)U}KGl6fk#L>RnqaM~jq5}F;4?QhkNy#BGD`;Mn2<{PO^J3iQuAUkEs zQ>myGx4iGgRW)<-KRliFUsT^0?iEoaq!E!Ax+SG!2$2TqW~8JW1c@05Nu^Vi5do2w zZienqX%Ge&x`!NwiOc8vy7&G8=ZAgHK6|hAJZrtzH2kU8welbh#Z8VJ9du;p`Xb;h z%8w-jUwLv1(||N7oNY$vR>w65DO%i1Y=T{!X&VgUf8T~yzLy*w!~6R64+U3n4>x#1 zF`0I%uE<%rbihD0OTJ8G6OiEgYS3Op_=Pk$Oz*ZV!dL&&@b9N%udpE8SyVs$L#J`2 zsBNn?yXKzWDlxJ6z=f8V7egtTp|OEU@jGv?Xtdft9zsU4s!RBjK#He!YEQqcabr;K} zbK9P&JhY1F)NvO4E;ppq_%5m@NUn87#ze z+198NInGGCb8r31I~RVkjkv~FAvk@lr)=sN0n#PcHQGy1tk!YDP5QldBfV+P{Z^5N zLbNt>#J7=`hs^RYd304hAXfi@Vovy8OW?K{0}6HuOoAjs7>=f^0>{&A1}O#r|LW@Z zPi*jMbFtYoP%eLkvgkc7Mvyn3!@E1sV)<~vB@>kV zdgBQ^7y*D`4*~9O?*9RrnP(t*s5$GinbWj1I3A~ewhiMO|0fFeTP;av!{`$b)$Q&Y z^XDG9X*6~&!H}5~?|>ei-g@vd^$%}cC6nJgN%54#+qzy})7@-e(+iT;^lk@fgcWon zde)rJZf7p;-mjQL);VD37A7wjD2Top%L>6`OX`-ok)zjA$#w7K1wS&kXuVTn|P_`4TASVAhvr?Fs%m7jJYDn7xr?<*l9qS74TbK z)%WyUt=@J2h0_76;}%B^?{BfKL_Lp~iB7*t%&$hl2kMe#P1B+uxbs56ocW}n&6bG| z$C)9ru1S-VRo!N~7v`$F&^VsX(*|#L_IBjboLNTpaSCoJ3S?w+(NGQ}!<1KbO6F@E z31STJ=Y2bgpt753?LuL2!DZy2`_?}T*|P+VVe=O)ht=Sq*Jtv*?^em!c@puSJKhH% zsR!Q9yVVM&9^-52O9cn%K$ZLY>q+O;uhn8PRyc9j`Uhb5h z^j4CUSNo=w89by{;zLc?G-^~;KOiuu;72UbYs_WgQA0zJ7muRJSSfJvMgN^Bl+{Iv z=`?6@6TxA&*kx|^pMhM7WEZ=BQBhfNsK!j{2-FyTS_UKy)UV5VR%(qB{Pp)Qu%lO- z&Z^?hWB61||E+hQke^?ndmyd&=Rk}WCk#1jL3&5>S1I73ToGwLz(i)l{8C+8Fy zUb^_n@XItlBW__U^u#0t>2AEhhw2QE;Yf{4Xiw1WC$csUUp!3h(UQOUceMh4=ANH) zIW4YQWz4>E1YSL(nflRp;MD?2e2(rbK8(8kOoM5v7n=6I-^^TeGXP&49-)%Ic_uHoN(oo<)k9}T?C!Q&#A(N?7 z49T`gq5sV`fPD=WgqdRf)r{M35#u6s--eUX9dP9$?>n<0p#~+g!f{HGNP1O6u~;Cn zhMG#9iz6R4q~guc`0&fc6&u1a+WXfaBw>}l zT;+RFkdtY?pSMHA|1AEAKvOG|QvZ$_a3+1QKba?gx1f?LY{UTa$;IN$1-&w@U*hH2 z?-lk1J4Gr|Ng%C zy00*rcknMSl@qB9Lvg_rNnyJ{5Fz+iUO$C@KuwBOcT;BF^>E^bP4J)VA?(yw$Z(H7 zXL@zJY;|R&XXtqoN4<^FP?h4iqQkfZ;+60;xlNk+E5N}V^j9# z0q7*G0a7YtnjHv!R<&%2G5#+6r&VmBopWYxtd{LWV##>mSgBMxAW2G?_)&n^)E6D2 ziBJ9632$Ss*?T2$VOR;P5%Zp9otx)sD+4N8YHd-5{~7({plcsY@LLC(ENW+w5EOKAbr0RCDZ!m=hgvPlUb13`8_&EafO2@mKu}P)ebtr#Q?W8zf2jSrt2SnvRg*)IhZRi@lw zSHSH_naw!WA0{RlQjLv@5?3>D{KcAalUbF!V}N7WL?|3eyk5;?u69Nr%DA1tH@ zfHknzcs+ttk;k46eysfBZ~Mni{Q>fk3;#@0u-((jb|6>$G# zc^UuB&hBQ(7q!(p;M&T-UI|dbCr02_E2B}kf@je3AM8MT06Tf^p1!RiI(6!9tH*Ae zz=~BSU=((1$EOO@hQy{tZw{ALSY@uQ=_ravLKZNSGKgtLFVs=l)vTaxt;b^hJq28K z`za%&Olk8HtVY>w>@Jjqzn^`eQ9*~+; z=S}nwy6scPiWZCGnA2Mq&@|9XVf!DMKP7%0wOnR*e(*AQcMhS`kzT0d(BND&4HQP} z;#*t7xFpLze4jDWD#5#Z{Hrm9Z}Tiq&7)x3FUv106%k1RwdH3GfQ!m-?u>*&(*-*a zzv3!X9vq1xDE%B~8i5rI%WzzPncnGa@aHCe-PAgmFcyfqEws4cz4f4!`-XZ+GYMpk`wIRY5&UYWvMHMY>cFdCrBMC0Z5i#1s9T@d zxGgIBIIR6wG4i$wC5qBwNQ+x44Y2^L(;rNB>RKxM<6{<*SqB)6S~zk92iH`k{vel% z8$40uDH;Z@fB*l3dROoBMc3-W@b7Lpls`D$-AC}mIMkq8C6Ky|jNowh zg*NSSVf05+9>VN^vYG;9BY>TbPbmIST&DVsF+RbmbT(_H>GAn9kR`qnuw`PBqdMZt zdHQl>=lh^u<8$xM&Ct?`%QTBYW1DkVf;_ITZf=XG>Bl@zC1cMVZiy_Dv zh~5>2@t44=5+Ic?r_M@a!)tKxR8Y0Pq(}Gl2tYzsL4=aQrsOm5e8<5BImQrcY+|BJ z8oFpPv*Sq2$#h}FTsiP^$ipM|z)j66yeAq-#2m1?-juC)x&!CTkU&*;C<54-51GA% zZA0cisy4+}A9O1|I(rP=i^s)hZE9?q>5I!+L^y7v8=b3Tu+a{ie+-DW>1HmZo{?R6 z>@JY1$v`FqSeU2b>l~9-f8%w}Ca z{I_1Yh%@AQfk2dUZp>d1b0k}wnKZcab2YU248IBk z0ZBY%!q-gSM||!+2!7D)c?DlaZgAL4DwsUK_;yS3BW2N4TE0cUXFBIcu{OS54ER?) zIu_81@1Xkx#A}vyR9EOd6nKg1)*t6N3+yai$9ry_i0#s?A0uZ% z{BmnWKFT#ztK8V3LjBkN8>zA7I9sZq!+x?&LJG?e%un2w$TZX~M8ep4n&xdhNp#(W zJofN*FQRwgowx=81x($9^kE6`W@ZI32oS@r9`^Elp64-$Lj5iX>Q_ZRBR#dJQ_Gn@ zuTL%9&P*0oM2XidM%iEF=*{H~Pa%KwGf#r@4m=OQ``Mf7pzWE5JCnV35k2t(YM%bp z#3k#+;+?kx2du}9haJ6*ZW8B8(iGHg#`xsc1=e_V?n`Fx+_vN7_d`6?pNH;E7G~aD zqeP4{uJHJS4&ofAITMzUE)TIkgBq(0{7-CEFLzy zvi-%XX{pwvxT?&y&FgF3mlMR5s29=#0uBf$Vb zOll9E{5=sy>y780;U3}C@U=Hoix*Rdxe?^!({JM)&bMVRo*2% zK8v>)a+I_+#8XH1?QH&r60w9hzWEXVwjE)$5->y8RzdVw5EnB(8lSA&Rohj%m^}@1 zOncJ7gk?N!bK*MK8|Z?)Ql9FgZvZD=E1Z}7zAI(tUkIGH-?)W|D@LEi8YEE6sfPWg z%gY6qh)`qbUd6@zD;rFGDu_3wF5|R_BPGJNpr+*NnWwJTs^>HeF4Hgp(v>Zge=H+B zv_{+)J)XbV)hmA9-E(CvI;EA$lV+hr94)rVrmoCjWF&ADd^WNK=L9|;cJXCaTsyS_ zC0fQRUJ#FP;4)NFXO7Vmxc%M1r;zDCP5TKA-VmbNl6=U^FNyc|hE6#eWF)=vs<37@ zZEFC?&)J=9w;v7Rw0PiCr6%#ap^Be3GgTB~mCa&<9t%9?w}Vmly#x(}-%!c=%OVRa={YzbnGFOy;aQS>dcSz65_hHU)ixUxa>C zxP!IpL*y5_dHd8nyT7r&zJNC!d_EpNWmI&az`k^Mt9QoEl!MNUjt0N$6o&SH zI^Jh!Zjq3XyhI(FUDvVy9GYIGH-lgLj|M^X3rWF(1*W{`{^Ups-1~oQM@7&G{nhjb zua{)3xaXj~v9`e*f7Fu!K-O>G;_yi<;9i0U_OS@*9W7`B}nxhCS4; zNju;aW$Blt!+Z7Wt<-1-k^72$Y=y7>eASw`FWcF=yWl%S$v$5CsQulm*U~PZQ=4r{ z=j45TeDi4A8cZqG;e`#}M4GI&L#q~6>iItiQBf0sBEgYoYDXy%Ft6jU9JsQgdk}@8 zC6{>?ey4)uD!CuKZx^IC{$+77k>Bmh-uaw(T34ITckpCT{MV!DZ5RH93WLJVOPeqs zDxJ!YNtH9+;Qe{*l@9q4^dGG0YF*nrjiJw$@TGfrZ}8k~qR$t_5aW;3bd#4;4H{K5 z6JKP|`*^Pq9}wIr+Y{Fn>mH&*Kb*U{6MhxxG2;&Z-S8keN-U1*`U;L-T*RXZS(3i8 z$j)?d!+Qk>I~Vp~m#w%wFB4*#z3L&)b>jM@_p7}^3QVhX;S2H$oB+ITkM6iSNVtyE zmqXE_a{<$4cC3OMJGoo_WjaL#^}1Z;-@bV7jo$J#$BD*GHEM!Rs(msik^E4NLhsWt zmR-oq`ii1KvrtREZKVk@o*sJymB&SAis6(1RJ>{kAslr%zNT22Sd1_We)U+S z1jltiwwK-o>*~1x5l2uA>h|MCaXR|C3V6)z(XCHLMpj|j;3hOEJof&ecl14egVy$| z(hR5x95^3av|oT1idZdWs8XR+JIGQk(3)Qepd^Y)WzT_0 zWXbXu4JG;TwjizQsk|tp08SVRt_>nB6el`0a5KR1Vskd zRuDk6MzMwR&{@ii<)8WH8@@a5^WwX5A!A%DgC0W9m&Iz7k02#nm+g= ziP@VR>Y@9^Rri!9Oi&tP`!n`cxHo(_8Jk=)$nw%*4u1@vGw*ihUfO^%Fmz8gyua+j zW4tSqv0z5r#`9h%Cim&TIY_U7wS8kEYCbQ${4^a;8oO(F8E{cy^Qn5{LxiRI08hib zg)D;}Sxlbu_?CCvn=na_`T6CkPat^rey+QeZSpBYf{u~i!5A>p0^Ccn{$OQVCgZ`a z&31D>WCnhBFq}L$5No=O^N)XQEVQw)29xtY$)DX>%dMgROfz_LPrDia`NJqnflCC1 z%Jhd8M|nSL^n%D}2I(-UmoMEJ z_>ob6DJCt^<$zXKFk*GKml&IepX(rb^<)JmB(G17w>Kzp6jhi+e)yA)-5w z=jNMZH{F@pD#A#!keCV6jpcaZIfyFaA7>BekS9MWtIB8| z3Lz;pywm$xZjABm+Rwjj4i=>e&3;c0hoG!~>1P$jOyNwY^g&4PZ0M(+Ny?g+BNTkA z%La~2Yf#~Br z$hz}MnPVE4;m~g;1y2+L+uQJx9uz?;s==nr=3Q-D=K9E4Ap?$XstGg6%teU%p`V+d zpI-BX$IUR|IG}uJ&v4{RY-b3hj4#ju=PB| z)b*r@N(1L6lNA0+~qJD5-&liR3DM4m72YroVO(cm8b>eh{Wgt3v@1_4WuorHR zC#Jg`JcO*$T(T_@@vF}37f|k}d-vc#IcQb0EXJb7;DI~qBMh4Vei(l_;+t#93G*TN z`hY>NU7dsn<7)7T8=OAOv zxq(jUs^l$fB!FN#1uGY}aAoqBIBDTL-7gq`qZ=0?k)DpR^0?uAJ&VFPts!gf^RXGK zrJ}gE-iu?j20BNfM?32HdzY_osyn^L<=`_x*ItheS2p}7?WgEaymyJJA0Biu2k~9m zfG=9F!X`;!XzvNKBZcc4I0(OjpW>~M4hRkohjLS20rQ@>T|^8jw?R&W65Yi5q#@e!g~#2oJ`rVik1bm%3j^NG zRI$L1f7{uk+CIWst$#7t#KWjh&UfAW%4Gu2|HN2ZywZmTpH9OuQ|NQ^A z?k<{|%?(^(-c@?Robw{6>EGM{s~4E7++S(`D0<8<211o2M8c-Ed@?S?PkhIPcOk32 zY{cO;$kBy?D$zKUrCJe31W_KK)FQYJNOBFV%8fao_lCDeYmL`>Z(LEM(p^g-$xJd2 zG?AOO!ccuSc*`aLttwy2Y#i|fWGJGn{OTNlx)Vq53DB^73KQ+L4+~d48||3}=;Xd~ zYxQFy&QV^2``YOoPn|P6gLCvRh(2xEtX#%%{yhuwNE!dDsDj#h&7HV$fH4VNryxJ; z0vWv@P2S_J7@kxkT;jZ*F|Xu0U*~pb^{4AoHJhg|9Ic8uTgA7=oM*tPm7l%cfXnwk zl6v6CNbJ8`Fir+lF@z^2W_GdnLa#?>Q7?}B<)p%Q2G<5d*fL|_qz^Q4eISVfs*Y^y z)@yZ0?Nyo$W9Jos&3hve3g|fY%2aLOkG=S_*MO1yZjmP&CNeBk@NwdW*-JLy(^1_0 z4^NG=K*fz73tG*4mA%4D+#hywd)aZ5>5=U687QkMqf0^D(9mfVel1G9)T&|DwDW8? zZ*%g4nVV@QY#6>{V{&}d|710}!BV1OaozzEw>(#M(KgqKG;5WDb4s^!jcc}d)fM6M zD_+j*jaG+ECRl-+A=`PkF(T1>zm0rQkHELI19`;M49uWRLct#`k~c_U`9bVV?v= z=>p}xH^ax@FFaN(kN1>uw>fDq09V?ehru1|!F*Dj(lNms4aW%rzB0EmjnnJ^C^Ptj z)3u3puF3Uq!|YYF4P^(*-wm6McXSF#_TJrIJ%ZT4C*tQ4?xsv+M z4NQ8tyf57Jva0n$HLmH0dh8LJzLG)V`pe1gf{$)T8wF;P2~ASuhS1-7=!sfFsgNoi z;?I(R`*wjTa`8u^Byq1xg|)z`>53aXw0%eWdyrM{R|_Zt$3$}oKccC|7csD34STcS zHLLc#6Soh*AVJ{E38Xm9uM7nRg>2jQXXpOAJ0&`Q*;znrK+2PAOG}0`?FxNsfJlW* ztu~RXhL-uqeW@_6F>br=Pj$yqZgA>kQuZjTlz#zJ3Cgu*-SB7pS!|_| z->;P@-@JKw+)2vE0N`A=-|&at9c4LiySyx;=yPB=`ctXjYe$n1O(L42uk!_$HyPhU zoiU;lBZ--V%w4_pZX;An!fmO$83p8u;pwWu%tM2?qfYV3Lp%F*eIXLHNPGT;3HXN8 zsYJP%5U7)kM64MARC91jiFybV$jNzv*9TxLDZ*BJp|~;UB@_fh0}aDdV28Z1mw36t zAYHb(la}L7BJjC7enA-b7a|{W{v;;@Ik>sX>gFm4Y79I4+~9Pr?4h+N1e+;y7yzWL zUD&$Zhj|UpJHBmL+%W@cVXLLkjUCi#l_nP}nJG0g?Qj}HE98wVLLbXlH3Yyvd|e#( zh(%k89aY(KxV^tTTB5HIiay3URHZnzW?$F@$R&JII0bd3=ukrj=xQ+&AcVHaw&aFb z93{jd%}9WFb2KEg#LpK~)WUZn390EwCFD4wQ#z;-)ze1NXCtS1P(wQa8} zX_GR56(RRA+W^R-)Iz>4qg4Bq9K6A+64s}95Ve5+jW3#%j}5=`@N;0I>T0@(FDHo$ zEom45fVHdG!*;@u=Nr@EzCMg6XV`q&-*-%pl6q?(w!Oe9}aT)BmKGQmILw z2!>U#m#8 z8Yb?`J9O#VB!+>;|L3`|VL#v*-`ZKs9E=KLd2}a;=fahyKRADl9uR46A5QdanH(E^| zorJJ7)O*3O4ROw4U>rSUbCJ;&ySTLSxx=2Wg6WR-0MwtK%5LeIg;{gU)#^rs@K;Rv z)hCLT`&$B4=&FITL~+FqE3doA+zu#_#Ty0j5TBhYs9U~FKeNRYtAi^_W0G>M9cB>7>HHt+bWNfKU6J!9M6dqZX31u`jvvLEE|8$Ur4Jyai^o zSWMB)O{PSZ={W;nKnF}MmbEFIO@>q9IAJ3z0B#nD%GnO^ECCK2ZEMfc1ghKpF0^h8 z7PMNtL&BVJ_EO2{>qa?S{4yLlafR;+g`hT|jjW4=2$t|6u#Q89?XeMb;KimW9na#~hOLd)r7#g@5f8M1}knBeSv zN`{<2Y=j2-4Z?DcF=}cn@vzW48rkBjj{e<%it}P$P4MglBzi+>=)SR0JmE^um=3-+ z*U<8;GDE_UtOA*k0MkOgB6e}CYdmU$d1Kb9^HIz2C+Mli;Hd30qL2uT?(LulEw+UZPN&jyL*Y?3O_KO|eP(O}q&!*U^(O-{+SUNZ;ST$9Gm*f&i-cz6)RR5&=sc8g;tz1vQ@Yzt@fin>QVOZQbKiP3eKGVMEDB=De@X~7K{3Svzz-{MFP>@0E z#R&(B_#X*w%E$;HHoO+vS7FJ)_pet!Yao=TR{4nXqw^x+O+@6hi355Dx=4=h!C&oT9yC-%2cGDAVTZin!HlDro=!oRVX+oMk zwK}MM2(i}wrb3on+F$gxbNArX>_lJ9-0s8-|3I;dR@3{h%=zGZnH$t%YvAkG`*&7` z^?II{F$gc{kJgTPhhhB2vbTl(RCB~}7t3b0N0?7_%-c!$uu%X;Mu+Ziv##@-`fA9R z=jd!DLPf*a-%xXqGS!w74n1&?jBWgxVOYg4L6dBZ{y}GY_3%sOzc8+Tr`n=z&z_%D zu#v*<$}mq~J2`4os*eF`AweIMt=GKko}oDAQ$?e*Q(;(Jg%`h=%~<}p3@b@LV;v{p z8m&}e5vxEpmh5lH-+lkmeW78_8?zc~2D_aFoqtrL4q$?u7v!d{9bH(>hEHC3qi_Jh zGxhlVMB#pn?#yP`Idu4MoD}hY;WnE>!g~T_CLBzj;Kcgy|5wA znYGTU_QOYA_&xyUXu2S(g?X7#>JerdW{XWacBz1iD1?Np@AB}lga`Zifc)(V^p5wu z!=1YcpPk^;NJn*FhLVP@Tt4&OJ3M4&X1Hm;G~1+;K{i2d z9R*`s1KSxZOPY{XLE(9#s?6?lm7xemALz6CVkAW;!iG>J+jZs$vz{HJu6K2Q*@5+h z6Rgu(-ac=7KEG!oP~Czq%gC8Xq7e3{dZ`0+7r$5xsQfTVcHwt1(U}OZUmv*g48A!& z&jaL*Hn=J5S6g4r!VhdA5>KTAF~jlOIQzXF)mw$E19u3UnfEc7M3)y433jcba&YBa z*5MtUdnUlyhPP(^A?uug&okbCM-&d0Pe%gbm+(~;1iechLYoZx5*LtxL~HNv;N|gVFmu9%>574f##Br*rhh*1&hLRUoq%rgy^MdxXx8gt@F&ZF z2-*-=QO%hYtx+9G?sx9(;k2z!GrV79esnV|mk|>S-0+#(3%uPQl<)h3CGoQx)8`S` zW|JrRJYIC*RE+lNyYWmTlc&bA{(Go%&Cc+q8n?i!&kZPsrG#?}dHrYE)gri9IKERK zKjRELTRukLX5*@ivA6lryY+Y;(9Po9IkM!bSbIYa5*d1QJ)$eM{L8Kb8~HsdA}<<- z*}NfY^jrztEzZx-17h^S>&ZBje&^=1AWZl1LdT%(%=GlM4XAZHX1}Vt+(@49>j<@( zl~F205*HrBx0_)Yr@@wzkj4ou|Q@#uK0}37Lb6qi5{LL<6w06_q@?>7%BMZG>y;j`NT( zVerpO^Xsy|H3fL5uY7|7BAG}U14Z5v)wdF*VVlU2(l1a8`o94~Rot1?^0qRWXHj^m z*3L!WakvB3`ymObFm0RPgBelf0XE&;9^>_vbDisNQd800@%{L6jOt61LE;`w!#edGbR>mpVIUJitfQc#o?i0gIV0r$lYl;fJ|$E11fihDppO zPZjKFQD$2>cbgO-I>?5iAvV*>mw$@lBqRW+vL|QUw}TrVJC>%1WMBGwT?3?p?@aA> z-C5ybLI|AmF#dB4F7>oXzXv6J=}R8=zN@Ff+iNkWYkE*vWY=dF&*c%yi2B)>h`xXQ7%`EKvR zl=F3OiVpBg%Fn}|2lS8YlgqYUX@tP0jn;PkN}vg!FfwUMk!lY7cVix$O0eB2yyK<} zfLpyO$s32FccDf%Tedg|ZVD(TF@-4rgupN6Y_ivM(R{{_MHGeL-w)v_@PV%kk;PKr zLP)kLUJ_OAYdp1wp}SOHWPmOUpHuc{O+IEnvpl{k<9AHVHIw3M`k1=An)iSkPVUUb;(R7-*LHkA9zyG@`KSZlv} z`P&99t$%)>srIxO6G`}e30IHN&l)wx?5kmX*(+>+G>MDEak8RiwOV@px&7>AAemek z0}xBHLH1I^uuFjJ4^TX;t<~3Es+Vbm!UI1pj2VSre@#BmU}^rUiW54qAAr7( z#rz1=_6<|Re_liUOvd$B_*PxtKg+HtJox;Of%JxTnHXCj_QeRIwOD67%Ts{21D0NC zLRInE^XQfdXQz&+wJ^8YDf_$N@=F)rh<8-C`p!s`g!okJ&PkI*d*f()?*w1D<`e8bpZF<>21ZK_WGkyHd z7bK6v>Gs@o9g4ok$V*GPDeI`hM!fQ2*63Fkce@F;27*m9tNDELZW39ee0jH`tkF{~ zA@ib~4T}F#W3F@O*@uZpx=Wsel5v*LF%IC;`M6&cc7PtmW`np3)qcqn_JdybMhZWt z<>8`x&R_Z9!`6R)*xqQXXXwM$&8*B-qyT4RD%b6P%OaAihw((EyIE=P1DGTiv0wV3 zLO(Qob0}~)_eMW`XJkqJ2TX=>bM|2|XJ?`VX1_Qnq zK?{JQo&Wwuhc~}Jyw~Y7OG|S``cicaCPw`CgE{aasnzFxH2;C>d~7iS)a5)%qMJ;n ztoOuz%SV(?#v6BDo{%&3V6jJjeZf+}D}kP&w@uA-fi2^2J<{28`z!3;`+;&Uk8m5Q zm-L;yn;V($zN2O=xM>sBY>bxTA##lQc#^ zv02v~4XgT}`$#Ib6JZ-b0SIUp?b+M8tz|CAv39T2x9$1VQ#$&uyz@Z+TnZI#UI}q3 zMV$uPzvElgVXF=@Zv{~$J>9?)Hi8%ec0;K>=Nt`p)L2LwW;9_osd2&KG?kfetE zpp=aXe|Y1wwn$_pXMQ6i>B8ZFrM&Dux359dpDuixzIY6=%W|vaKs;XK>@xqFmm0<+ z$|Q;9essDP%5SE~8~6EKo8f$sJ8@luC~^P>rnwM9gE^M8xmNKH;)9ww@#%Z1^S{*%%jQe&w2#PH=Q?^XnaP7ZHs=?ZncIJ#zyDC& zd9UHm8YVLbHCmS$WP0EfnUp>^?D%xofWdli7vF!0fEV^dqZPoQ4_jAXx6LA+vmaCZ`m zJ%Lj!MSL&`Gl%zdv=?}%Yt^1->l!BtpZhU7XcOSxu(KpOFmtT z>lW3$XJJ(okRi>1juGcr?g$^BCDUaATV{fvWF82wm{B!-P`gff^mn_7?rV!KdkcnFfQ(qlB z_LLe$sQ4!KCv~mf4@Nu4``)xBsK@Iu;l1sTgdCDr0~k`)`X5xBb^!i|uQUmu=8zby zwa2CS;mgx3OIhC(xV)IHRE=3;dIK>-uyNzNJrq*hfkvZmx&EkluV+UiAFH;ahFM3Y zQ;|Jn0==6yER;b|%;v)0O{XPbTK*jhd^!DV^%6+I6-Tud%?vweUk0}b$=`0}biqh;Teo)@7LzCW` z%g6HRt|#)$9;HoCp4R{QnS6&f zpDjORWrOVHfabxx;i*|&PNrneC(2w?{~0r5zpwgzk;EUw-0~YZvMW4US1;7UzSCM z+~_*8tTpFp55;GsVskD}&Uk4?@Q0YnJGpPyK_|Z8Zdl~4iG7=ACl<0E^nUOH%1wg) z3jm_S<1Xk9-+L%8p(X#jq59nc&569($+{{0y%%S9l9R6}dymCqCy93^>`S|t=+pwrIcM*@Ez4#_5Zq zkV+7!!MUvFWL}Ea z^B#zEZ7C&Pf9Nn3^|ynIv6{Tb@ShNeNxMAh!O4-yF4!5&LlQy?79gm~ez0r0&=-i2 zY6)e2MF-S8-Vc@YuPi7+@cu!>NJ%tB!n)4=j|nFq<3Q{y8T%xPB#%yyzn6Rz9hbIQ zikj{!kmwg5g?nyqxLCD$A|m#!>>P*_L(%`jwBC;}d@{mzvuXN=z! z?Os7Dn+0bFpV52*;5M&@WbVz>tH0aQ{AhMJ2sCWx_`DaI2K6l+7g#=lB8qH$wA+$Wl!Y0&8zQTxM`eI7LQqH~XUyw>>I*FqX5q)MqQ@_eNA{ z-=ibX-gepFYhWu><>}52XXKq}pT`DToy?6&YvzCdsEHZ125ZW;!q$^zHK&YqH6ke7 zZaT~Kn%EM>1$=R7S{RFTlX%02W#q;wfHspj^Ul%abJ=C9kQuUbZi_gxfB#Osf6_KA zzKFSJ;a6y;zsYaF=h#h#k*aYm|3=H~Bf}B9cEU(2sh6 zC%|{9^Z)N(ob9PlpNEo8gWa?)`J&6d@&50tDn05^M6EU}9p0l=DtBFc5c7-T9rnrP zUGy*1!99!;i6>)p+-{3SIEZ)o2Wh-emVR80Oo5Nb^%loZpo04Nr}kAnL0|yw+P{&Y z;%a^|;Q9;D0@jk8+jC}Qp?FRwX+w!ZhORiT+>Z-4-20{@qxXQSe?zaD3H10o(CgH_ ze(!->)_cs5@sOGYGj4Zw&xLTMFvjU1F7*Gg0FwC&No@&9w%A$*v(nPaF`90IHt!{I zV-LS3^Uz+m>m=7_Qip&*r%057E@bE^JHtQ!g8acI(pK?T;g}V8U z2^Zi+fr}@?v)(nGBsWTgW3mI7ocajo5Qg*QCy)6RTPW_4tWFiVG)h_P2`s$752&UiKauqH7VWUh+U)4|^YAT*L;ZGr z`TENZEFSU*!xQ;}F)O>{jO;F-cuB>GE<+_?;!MY{PRpBE^Vg%5QIZ`!ElmJU6umliln_ z*;8H9pXwKM2i%+#NDaRnn#`DryNA)zALwWyS$t4DILbcs(%?%o-DtRp;`s=holse$ zSzxyC0^+Ts?9T)@=WMfu_~NBf_s?_(ehDdHVRt&Z79`!!`s*eUBYOk(aTL$>Zj`F5 zs1q@2Tb}(r$7bUTmhhzqY2x(i?DJkPhRNBdL#LRCCKisA~e;YXN(W0bjMLU0z*g@{}{H=rTnBH&;po26o zg+0wH0MRPv-j;imN#=OY=k{RO>Q)f?XU^q@pxcAK#QdM+TZ#naTdVXA4edrQq* z6A`o!j0=P=k>EPvccG9>J~43# z&wZvcwAHhzBUe=|wKOMKjkRCV!ceL|d{|pbwXZc(hm}7@rkHHz^p3bbJns^~>WSUX z&uH#qRuhT+se%w*V{nR@u{YD%=>myUmdYW`s01dwi9X(&$m(+^F|oc6VWmVlVl%vQ zLZWd2Phb%gmDwMD0k!88-A&1`v1K%bcT=~ne&fx7zwZoSp4^_n_o%vnijN;RK>j?s zdZ<;|7WwD@F!q*TQGapYuXJ~Zbk`7qh`=BvDbguJhjc0m4Bg#5fP|EE3j;`ZNeI%N zLps1PocUeXeLp$tJUDCCnm^!M`?Fu~*p(6HR^!-}`omUSk+P33&RQ-x_LBfw^4O3O zNAX>yODpd*0xrJK60z@Z7^I+hAkBA zjOaXw)$tvHKy$PcS@9UU_R<)@^T&Uq)JWZJw%xH`Yt^aGux2MnJE}Tz=c`uv9>s;m z5J33Y`7>~TI-?uAj9fRu8)H!8{(GE1^VDC^%;dq(;v!Tw6rSTfq&oA=ShT%ADerbE zRe~98Gv4-Y2&?o3dcGiym4@8IaQ#L3f=PPmM~=r`oYPuBWp{m}^=YFoJby6om(63TU#1vtfGr5*WHErCi-3EU}^8$o=gYa$ME z6O@QxJiq8{M)QF&gz6^Z5Pb|Sf;}N?)!s?oI8d0vNh12PF&)>cn%36kqiHs>bz38)y;{*p4md$n&rllM z_0SO3Tm3jdD@%AX&orKY$|g@}6URmGcyMlFb-M_3M~L|084v!P1%-+-_em%bEfYbK z8mu3o6V7#Ao?1p(Ndf=)6K>I$YLDHDms$WmRGT74`RjY63P?(|27)G4wSKYn@%t59 z^e~6&ljoVkEDiXs<1hBR25`L@O7U$<3vo<&*&s>b^DVq_0__dWT zc&-SAf*Dv`GEvCw|MMTfEqlGJb_L+5zpK(L$pT@jj6=gVcju>!o|@wOd%zMbF1$q$ zm!PH(*s`l%28QAZS~(A^mVsT0wwqCjoz5EaDu(`KfU{A>{%O2lIA|3*n# z#Eo;#goK(qk6-8eD%216$0=Iyw9*Fh*@_?ww#+uXM*+4%YX09Y)jv!0=7eLj^mSzQ zhQ9jaA8P` z7bV(5!R!x%Dn5uoI2#vkaN_&AP$#7Wl1;g&yD@i_p)8P9;AWl5eUR6ZRtW1ay5p%j z5q1OPmr zWFr-eNE+QKheu0{xg`jf8g9n~7^+*nED?1sKsPOL(tni%v;Nv)qmM~S&dkN3JbKc< zuI|zNez&%7N86J1a>K1~d_hY=3^g@tP+TrWUnr@wrRp`iMWp^ruLH)?GJov&Yk>-1 z-2zX*OJKT2X*BZ0x~DQKOXiH200-D<&%EXcbn)}Dl}m+E^XRiI&1Gg}lb_rIM@ODO@LtfLinyR4RHH;*<0dC% zocNpR0wFIihi%B*>r0xGcRHKr8AGa1!s@yyOtY(_00ZTjw`O0+TvYau$UA7LC`MdNE;aq1_88-9Pn;Hy=(B($TLW_M> zBdw)U!3BYI{|HO3OnPh6Xb@JY-{^V|Chk^;7eT`kl&b~2G2zbii%ZeT)4rZ5+F%W&HjS?_{g z>{kZ`c$WuC0k*4S?FFKl&T4Iv!zBq-llkuH?o%!B9uJ+@(IGDasb9$wAwRC3+@Tiz z=xadcvl-|}T;_t?3{;V20a72>y>WtZ*7jSoZ$7YF#%S`{*3U4hCFfxQY+9|dY$(n- z$ysF=Y|*XbHwo+@m&_GoCKhWZWRnEkoWy*p7kiqu^H1+f3!Ck?=qMt>W@Vq%$AmG*&Zi$7*U1ZQcojRVz8O@4l#=@_Cf8CUPk8Rl=I2LH(& zNO$O0Ofw^i&Yxk}mq4122AETgU4|BIrav1)JO^|CJ3)OsvXpK9=gGjr>_aZK{fC&j zT`^dXF;F-THv~!GJ^LBYf7~5Y))FW}Ey)<8;MdlV*dqAR^Y-J`y<9k}u-q7X`a*Np-`M&_cZQY=@%=BHr;=LCr7T_tEuCYSb{+R(E2|TT8Q4i@Z9U~tx1rS zxkleR7l!Ow@9I&A+C5!}=a~NGpZfS9Y5hcRqj+{R9y?dg*hX9u<-RJ$VP+Zuxn+Bt zs9cabX5~Fkn3_|;*sTWTzQ^Jn&|A(P0p}ucam{tMZZHpvdxC{c* z-749B3_N?(_m9DNF5c!`7c6b@lBPc9%?_6!#W*CCpOD&@|I8m&F1f#@CBh3#$m_ci zZ{D&0m4cws9}J(XN~1S)EZp_vHW~StF1cgW_cpy%j2lelT_)`}uOgUfo1WLs)+;{< zgkvOysgV)*mvEz4C+lFQar~^v35g~@(OXMtHJAYB!?+>iAVTNN?6!l;;5i{fBE9iA zGj!2e!h^Mb1=cVOHrQ%-yQS>>3*X0s;|aEBW7wW zhTT#Y>28J>vhJrsq5ZTvmxmvQr>KwjtdE4`Z6)TY4A8uLb=lPwgD{!A|FlnBv7PVr zVdWgY{w0ti9}W$oa>$4CXYNv}!Wq~bEPFMqM_exXGi{1ney|qdC6DouBQPM<^m^oB z(-3K8!lW18|3f-vg^k;8Q(H9#5L*fodmuEjV;soesED|wzUR>Tz^nQ(-8fJ%+4jHV zc+i(ma0lnPV+yM>8OPXUA>O5pAT4CWA|cxQGE<{CnUtWi%`+w$>%d7daEx*K`kyzP zMMF9AzLbaOqOrlt)Ze}mN3IJUFnmpzRZ3&}rc}}2+_!$@>27zSm0~m#0MTs~n_z{FZN4{h^57`>xY{~k8IE2!!LLA1q#)RE z>~;u2esvyR{8Zl^b7NTzo;5R+#BU*2IaGHE7(RX5jAzcbf=hyT)dkk=jcPGV4kc1A zA*UuSQ~W^@0LrAm(!~8BkYSw>>bnNl#g3{peyqM!&Bg-WRckaa&(482;v>Yv{P`97>UX`e*BNEw`JpOV?NZjA8r`oi|6kPxd|8f1t1KqW4WQQWKET9f12-PL%XYLs@k1tvp+2 zo6!wOmf?PGO>*2ZF`pka&vxQ5c(fWfPdKu^X_?}0+O!g2R`TL-OEh-3l=o-Gr?0Yi zRjMhVc-|d*FU}(Ikj#!-&{(rTDrjOiK@3-iwa*HT_j9l)%AWgSqll4-yh5(ew%9&n zNFCu7qa+GeJ~8#B#z!XTZft*HW054RVg-qj|7V!YRS+Y;jbxF;SD%z!A=0)Zne|RP z4d$fTM(wUpMj_*+usRZ*C{AbQnC^(ZG2t*IO;#8ZApaQ2e@sDVE*HnNgXVUyJ4x(D zT~?5rFxJT_xT^nGHCB2}yBgX0T1xJtR8SvVYYIUWa6oW`gq4@EGd`s8#&_bAsb9jZ z2Pv9K)PIsmX|hIzN=B+PDUX)~N-u%`rk~yk8!RB?g!1l;sz;CZlpWD$VMUFdJ$I(LsY=`34dPiYw(JO& zCpplTwY`DM$A5H9)=n+S{Tl}w6dx^YgZR2EYO-i7131PUJA^z)=TM6VZtxcAy)_2T zkTdwtkQ@DuNOu(Z1s`z{u%G?JYaF11K}48hd0LghD_9i|CLzUr9KlcNwu`ygO`4AB&B{Xa zdKi2|aXaL4&o(%;mvFFNGB)o-plEmT53oYM{c-^)0v$rw`U*Y=*gOn=Q1Sn4T}Sse zD40xsJMj}WF6sptA5btXDwrOc*Cg+x28Lio`1rVKaPL-uYCr#xwIqTyA}POhNz z^E~vG5%1EC5c{U}l=Sii)@YQ-k?N^)*JK(?_~~!@>B`*TtLMqq;jdx#yxYdR=ja=0 zM%ZAh6x2nI3Tl$N<{r%S4vw_)A2y%9z5t#iCgJ+yKL%OxaHL1yg`;MPGAiG=JI)jP zC7edQdfD?GW)J^7p#R2~UJ<9B#s1}i4K`fuuGMIdEOs6x#HWH6A;Mzm0sR}*AwgEYrCtMRsT zTa;pZOT`c_qJkhO6EY14w$my7&jWF3F}xj;wE-N=e3Kfdw2^w^U_i$p^K3Bm%>X+x zGYIKj0Ig2PWIrjdbI4uCfRq+LeZ(P_fSnqdtVbXp2+80}m=^4iw+H~*1DN#)_=&9D zo-f}Zvc=yzIUd-i7yZx3+{Tj*|99T29*FaP7?4i&GjN2v z^@Bl+!Q}%PN>2KGlu_yY#tM@&Nuaq;(lGUM)k*ow-c(yR*LzHyH&tG0A_dWr5dL!1 zRFCmA%^aUAZSI%eZDc16V@08|un;W_^}axz?PbzA#5CBa?&c)r0Mx>LzxdYqhVn6Y zQRe>$7B<8lMmopLF2-D^uCuD&496(g5#mOjwV2VjngE1OSFMrlPS@t1RenIc14C2) zi0@`T+KeeJg7y97LO?<*#qRz}w4cSXbZRCgQ}B5^I^*G=DEB7HlLgT_Bfca1*PQwPtgsnOVtD&AVX%FiW!A-r%S^&OMMZ_903esw0Vz zGjaG&e6OQC!DykqfOD^M+-Yhu(gk;IhyGYf3Wum|4}rVrV$5@fYaV3OJ3B@oHw4t^ zwO3=1+KP{;>OTCDDWoIUZf6yJj5zaJ{}h z;aI4s^qlZZB!~FjtoH5-aW5puhVsue?=B{?v95xJ2Bk2{71p^~f*H|rHc^ER|08A< zawZAZi9-w=ESV)m|6BAVNp8`AgVs53X@Uaj*VU`<==tg5_14_0^B3&CXp*mgz*hw~H>^I#@mb{R`)t9zZ>DX^U_ zQ29BPMVLn^(mVN%e_hRYC(%DNmW+K8QI+e4GBK#~$t#IG+Hg23qkI=_BKQxX!5)^& zT3NxwSB6VCEEaaGFjmSIBfJMWj@kYSuU)qPG%BOEl9-#{=*^Ih-Yo2R1)3-CH|j4( z`XIXjeG)&~wT_>E%dQsnP*0bsM_K#nFBi)l^ikFL5 zxva9hJG0?;eH{Jlo2cI)2A-uGn?ww7ujq*i!uQ`$BJfhfd)`Wxu#U!hTSGPt?===axOw@!dQ`i%pESoc6j==QPRgby2`oC}7tgwL%WS!k^SnqiA1 z{?yb(o5VT3oPO3KV7YV!lY-|{zX2lJ!;9$G_jPDahW_7#KUwNZ5KORx@q7%BBiSvg z{9}MG&zIbtEM4Q*-c@%Qi}Q@RvC|*Gf{m!u?OUd{$K3}5a|R%X#8g**;QUyaB|KN$ zyko|ygQ4IJc5&E6x{m@r_5JoYfkB#Jp160se5T}Z0Zsqu?HOnuH<|ns5zaHz%qtco z0*nZNy+P5vPV(5lvM>B6w==!+p3RAO>D~vecJ~kEF01{UPRTo~LCO{7n`RWIZzwct z)XQrmgJ1tc@Unb3Y`oZC$!8(oeF^FmfQoBTN+%I0mACy#*C+7n^~SQYBI%E*vCSfE zPtz@zw~>$O2bQuIVSuMO(HC~pk9KhIjJXt~;WW4?4NqGh?4MOaHXuT~%};`YC}AOd z_17oddTZT>-_9bD6ljojbqfxs_iB7aR99{r?9Ik8w`fGMH{5TGif=)Jog0II4~80F z_i}W4?~1wQX5Qm(Y_yMfZ?bz1evbZ{bu#tNM=Iuv2W8YD#g-yA>SYVbR|rJdxEcpa zHLC>aMZGbTP!P0M;HhEyy!&&%fWy(n_?f)(=;f&C03+9tjg7o2LjMN_xP~PgWk`@T z_IP8sJH^N21mpG(L3>XL$B``pGUiiT`Hy^Y_!0S#<-sLIICX~dZM7WMD)l{W(K|Drc@!-Ttkxam!w|f(LXt&Ute;UykaN2$_v?& z#(bJ5!a@e23`LLi^(m3bP3T{OF)b*z)fG5SNSYN>74)@N!vuW&C8^Z5#c5|bnC=1A zEE<)6nQnWjY@-jJteBy!z#EUlKl=ykeg`0DlN>KDn#mTMcE*LsGiI0WpW4}9OM8<0 zl}ujPufHQMc3ml@Zy=4$(?V9ujsc=y4{I6AOe>U;BYV$yscajNDlGn=f57$)*wsZpKrVylaZw+WV0!QQscGf};qV^r6B4T4@zTSv zg#Si0`Tv>g3uSO03VSVLCyjvp_m&rviK`B~Q5m5bi1!?xIOKFo13?Ovg2u%Dq<>mU zU-@Q)v5&LqZ1e=@mBJF&dy32pul+B}JN;deX@wlnfZw4_#Auf*|AVHN1%SiL%3t-U zOYbZPtom!wNSg~CWQ9}EFY3|zhZI#VL%AB+1Hz%n^b7;Bp`3q2;0*3-{I>I$?@=GU zC6#ED)oe(>V-}|%GcKTKJS;bHz9|b7!(=Y{I97^I|BLjI;nB3-W?)u$0m#Tq&k>%G zMve|C4JYA}zW4EzYgbYMtC@!X^vWa_f&}RoH|Ih})$qTE>GcX$o({9&DUB1QeS16W zw+r}po_D!@w%>rDe9k&HMS#T-N&?azH`^=kG3tv957b>9$`~D&4OJG<$F6^e zSW#=fa2s>!Bt-r%GXDSm@6Lly+w)IAllu2+C6cWI$yf#uOmKG}1)t~})m$O>S9A8=&zJya`#wd9Mh?n<|R)foD(e)ce(tQqsKW2uf#dHE@fX}RD_*&2qMl0JF5_xNJ$%)+AqMvIQOLY+o5cG zwGBQ=tjWIRsS-_Kd1Xt*b)JN|>Uk$}>Js=CEXTEl(7`C}GH{^iD=I@EwlhggEO9tbt)iQ&tSt?KRgPlSYXG$g^ z6TjzvrsU%^TA(0v)Bix`I(Kw*E22`b$&mjyWVRRN)q^X%GiPX2Eb@Z2{=oJBo?Ha< zbN8l)qEdX^Cy8(BIZnBKm{SWvrs#5@@=pp+1ej_^ma*|ofx5~|Q$0gIO6pTa;KBP! zQ83)ZYjYg%CtZoV0^%Q;YFg(`v@?^_lVphE%ER$jgmbWYWph^dHAS?Po>zL-QzT%p z2K5>L(OZIfjuxzt3bf0h|9@y1T=;*`vU#BB8J*gGa|npnZS77=^PQ%q<~uFTi5K?s zNCB23Ezk0+F?OJotJT(cMUn2?L?${qy6l1isYJL&oK~KshyV5UVR&fbO@!XS>pkf$ z_UEb?{X0f__so~pS&>Nh7kB;z8BZA{+jqT@>o2D|A4yQZOkx4)$Ng!7M;u&BNCiH@ zq^xe)w3hEU<76WIgK?X$``@~ku{DMp$FXX+K!5Ic(P7UGIj%EhMF^PLv4~u&f4kaN zMN{ni{1k{;C2ezi?S|l0rtpyujN!S{G@}q4n+oq71IWKfZK$Wja3xwOg>0-hb~$%a zCa6aJGeEz zvjaj!d&IzLs6+cCzGHVwC1{+1T22Jr0=?cM3ne{w4l>WXGD#&&j~8m&Pg@pa$ro{b zZ7^NH*U4{h&;I7l5+I2)-G}eJ{>HyN`RTwt#{XCp$wa^UGAefo2item|B9b{A0KQ! z?^OOS{|oZ23x|Ywa=Z{Wpo=fEf``_^v#kg&F9UZRe}0m6HV7PE#tp3oTK|1`N- zaf7-{`#PFAp(;(G@#=Klo0FFYd(2gFoI_zfF{VI4LO7EuYlTq?1j8 z*1FyG^eninwAO%HWi#bV;=#E{n^95l@Gw{A4oS;rLDi1 zbp_G@Wr;MP^bf!9)HB$dWlk_QP(aVJA0baEDePS4kPAR(4&{bL-%w>X5qJgmKX2_& z&9cr)h{G1!`srO%^N{62U|pT~n;MB<#Y9{RW+^rZ4HSr-<)5y-5bn!OqIm{}thRSA zQkGGBJy8kz+|7JZ1uQPDXevsNE`$)QMdyXsvf$xK(`(Iae=Pf*_l8VXj=-%`T=MfU zUHxePiwif2TpSz{a_uM5=8!cf8~OloOx2k6loR*ay1LG>>;a~qq(OkJ!>br?4Zt8g~KQZ^zpX1PF=k$wB8dm3~kWGwx zdWR&o1^dmXgKvpzK8qh7{+(m2exJM1{nSR1m=}nc89Mukn&FPoQ~L8${LJoo$4v!a zwEy;pZ$`2>rSwe(Di#Sqlb1xcuT~3WK<)p`Pw=$fY1;W0K2cC?Ps#jSeFU{bPPK%C z9a*)01TSlx4MPh7sBM&(i0@`7@Qvnn?8UqLU)OB7cRfHforBzROxb5vn~4CUSsPRN zCrgZ3g!zHj2D_kZE)<=a$j!JNg-W=mBkCZr{egdeR4?$ZY7M{!B8ho_?1V@#AiqgB zJu?1V}fL59UPzU zQ+df4?cgGq*GLIO4lv)CbQHxDIagvTkt5UU(**9aYrss695GkZ-)qeqbE>ryCVgD& zzI=4{j;sG-{rgCth$fTsp*?;%`)Pdsy69J=wvypDkLnjVZ+Y(^z>_; zpVm1uPxLf>Rp7dmL+fAuKA3Nv_?@*6F?}6}{}Vi3uM2!^KqBieqU-BtHa9IxKuuRx z`g=r2Js@&KbC4nT{h)5pX?uEZ1p&3E}3>2S<6dIoJ2-BIn&UWJQ8u?o3Dltycy94D2*n{e z`_oKdT&xx6BU=XsF8^kD40zn8*uLx>2%n_|w|{NJq=LEG2RqHiMt_6}jW;*lfB6b} zx_=oJGaCZ$zo0-x8eM-~-maK0I(TR9PH|H4!kMMKlO7;9^k;wnJ|N6bxaZQlj?{3^ zC(4{7EFUlVf3%&%@Mi^aXbyc^_nNx+HdM&++V^DIrDIfAHkO^kztY7!!Z`5#X+Yrm zCi~mM7>DB={VG(i@j^PkVVz}y8PV4wZ$SN~)Z7ddK- zDJUMP@(TQ`TmZbsqMD@;OfFk$rbzJ%MPb{B)2J|GDDHn+B2oN( z5z)DG1Kb-bby@#Ud5ql^vd+6`>K*3}C2<=*AW_sxe@XoCbU^(=cymqOd| zN7Jd%tO!{*meEoSSQf6E=XLQf!@-1w2o%^-TMcacxDAw%dF)Ts%0bBd{oA_wCHA2{NkZT6urzb+%W(}kR9qx* z&q)iIAI$!8o5$)|x8v2`TDN)Hz%8muLgp-9D61X$8YQQbU9-Sr?T;_V0Flh5u-e~s zcm5-#of(3lcYkO?wNjua(X1Bo>b{Be`mbf%ovkv4+-6ENzNx@67tmrcjW=}B*{_F` zqqF1Xm2{k0H?7yLBLcn?ZlJi)x)n11Mq&KC)VS-JHR}YZMdC?$576Fl)<5edYF*pD zY^Eb46+Q4WSM@3MA=xDEI1b~3LQ!w=-fhm@L3om%?A?QU+-`wdU`tl#$F!WHkc=O7 z_=N=T62HacCiR3~5zT~=7{d}Lb|Tz)Nwq}}4-Zk1Uzy9ucSM$77x)CPfbK9BCPu6q zrIkK;tV6FoegrjxB^C}Xm;gQ}l{tF(4&(!w+@Q#%eoww!Cytyjzp45$-> zXiXMY=DJ*eMbwzKnmnB`@BC;8#|NvcUGnpfC06+&7c?k6i%7*DvpIozPZbqn7SHZ# zp~wg-euI?xO8x{vm9_+cDO+wR4spgEh4$D+MZ!aA?cey!S7f~yIM|6yug#+}cNV*F zjRUFew6S3SY6JK}!~B%fY;`#{&%-_BJ#p>?*Aw_uM73Lw%RN=UtDsnIAwhT`*8uM0 zCatO^-d5-4x6*Phj7!2KwX=~1XO`{> zm^}MYFk#v<{-V5wCEuX@!V3$WN{mT4jh-{C(#Jfzm81IZIL)^hl7F{{w53<50C!PR zTtvp(Zj;cE37{&AL)c{_iJ#{b053pm^=TP2ImhjGa#cerXrV=Tff%t8Q zHrzHaW#^~Dl$4&liXAru9<>Ji$Cr4oz3LMHYxch?oa;xK@9}ict;zDUtSp~?b&sS( z21txi-x3{>-oCMxXQ(k|9R~=r$0+8$&vJ^TS9IsD%-nYJCADxTxaz}k+!TWGntW~@ zP5~Hbde`n7A$%8@%}KH1S?%D+$%TrY*3WV%gQ=wl2F3b$L)K{FR&gIZ=dJIscV6?bm|# z55yEYo+^mmnVnDmaXoN_pA!C_9!`!KPdn4RKE^J)d?!Pq9LTtgT@W--MlmyR;a#5O zOfVF4lcZ;%t+y&N(3IW!n-=ib5Xg(?7@Q3ybN(a0&h*iJqi5~mtdj)buk+>25*PTR ziXGVCE`BQy9+h3G<~$V)gzLlbkP$u0*W4&}8`Z-`2g(CGK6TA`<39vNM_<7pT{#P$%ckqUl7*KTj=3d{g&X8duy*2lMQR^F_%kcupq{M5aT|M#fp*F6@|ez~ zjvvnL+%0mK>O9B<4=p<8wta_~($L63@EcU?FdMzv&>e(m+`}*hM4K_Q3i6~Gz@N8S zOuIa9b~8`eG^>!~b6OWfQ!3&a2_!e`I@J|F9e)4lx-~)20@5(hw@XJMPpkG9RekX6 z;%cA(R<~;42hO#vTG>Mu=mns6)S|NUwCoqd0aX4z2G*hxcFux_=%;MWxd;_hw&?^%ZkMG z!B*lX<7;2%)mAp+P*heT1u}vMJ|w{tMRu@&A6majzt8N!`?z}GI;oM1s51C54EIiB z*1rWDx4LF!?QAzk1MdzQXpeyA1I~!rw#!P}v5Ys;i1}%SMCtJemB1QOg1g?ZJW`Gi zpA5HsYCBy{JAA@YyO#by!B6?0)}mi>Cnm)E_OGkiBgs$9;0%wbIh_#^E9-K;-ZRwn zt6BVdh_cuPA;kGu&rrOi@#p1pg0IzjCUH6?&Jf*T&N!`^#bA;qmWlHpq?SN5%*eO4 zfdFqV)Cy^Rpc=oS0cAAhWjQd)vqsoUV?mlY z={}0^Mybzzk5qK=w zQD23sVqa9?agPKCCY|S(ovbDTxsmQ!pnn~UAHds0V|T=SYLOz|7Va?AsZD|B$bbbY zt_G9PY%{^O_v2Sj4TxfotUo)327D2*8=%wmp8e`=^=V95brR;BA8NP{&m{W-_u5MX z0@E5WWrMYR%XUy1g)A zqBdNxBOj7mfPrGt^Mx{J-?a+Diwb*8^wIPY8^L*8+z9K z>c>$cKxi851B^!|;0mrI=jr-8hWQz$zhd)=r!=;x&3+bCIypO2wo;IsF*Al;NlBu* zh-2-ew7u7nk2ZOQpB*n(GSPnK=euVZ*l#56Cp=^VbU!tF|MLB4#(h^_W{0Xp$0$0Q zxR0S4Q{tQP7Di|Wif3KAEqB;nEeH-ip^B3s1$$jX{t*U*LJ_tqvmO_Fq%Z7G#pmgLzc}a`}N7h`t>Catr}ow>SrEOX@eQD>=g_yQas(} zM@5%|6GJ!3N~NHvMVX9Obt9FFx!`ZsXL1~E6cOj(jJi>6phsnYIre&FH}oTCg{xcZ zBh&0%y{vkfc~}2=TKBtfl@$?=j$rll{h3uPJ~c7#yg*+@z+S5I3@+}HXwOQyWFW#z zVjNe9h^$iQ@mY&+>*-gZJ2S8g(P#rX7Qt-SqKZF)M8+$=&SF}MP<)J0E~Ydr@G4uU z-Dyrg;35-OW1LJo3V3E;<~8tswAqckuG2w~N|t=gvH?A9B>Y!&vwm9?P$!S$YG~@z z=xJ+j4F`I^VMxa0zfnc9fn2UVTW?MD|JaP$TT^grQ6p;lQo^=!uZL#U+qt0lyy=f$ z4el~)VGzgX&vzS#UX5owT_2L|$rHJ=|7)Ns_C~5Ho0dL}ZoGk;eR}lyOhBWS|4Qs) zCsm7;4!RKf4Zb~{K+@Qg{$w$|)Z(&oS_?hhL+Pn*Yau}835vw>^~wo&XxhB*<+k&k zm+#)WZRLITNH-JG;NI*K=gI4z8|pHrMVOK)o%~D$5uHdp*v;9bh@B)Zuhv1Pqh?Pi zuEykPq4cF9fz|;j6FxBq{%iZ0;S~_G95Gmii9p}()iO(;&s<8gs_GC`1cX0uJ$ozn zvmSmLU&yPxeagrcITHe}3FaTmvAc;9+QK}~7}>9kc&KdDtp{x9M^p}LuBI458%<(3 z*1}8I-gGTFyW8O!~IyI~9ut8@(n2zY`6NXTc*=W~yjNLy#Zm*2Wd$YARn! zyd*cL;)%}yW{3yS&tP`mnC`wzuYFNCrSUGFaIB)mpn!^b`(H8q>u>wR_4%Iy7WV$0 z5{ET$FfAHM?ss^)=8*_ugNtU&D?ju-i^H@Nf^*!kOh%o^c zW5e+e=ceVVy?@Ve1znF_o-c*WQc&2xV*SUu-$0%B;B5U~n)`etgM%`sD z)CW9{Uy#B3??(-Cyt=wi%RD`vew5hhNjfmPo;CryK1LY3%z;l-|XcB9$I3FHx@q~39hDng-=^@pdfbe`Jz72 zpx(>h#T-g@DmQXj`c(#-^m(Wbc#os`ie{(96gmAvBS=n8;3mv6P3ceB&8?aZS=}ev z;p!xiaRf;Ns+avx9&sTj;Caz%{VT*eQXzR>(85{o|%LAq*srt*^5{4~{m+4LHFWEvHrQ&nK$GIG- z^s-x0tNu;dUD1g?d$Z{*H?sRM6m*u*%v0H(BA2wk6 zCJ0N`nKOV5gk`1H-$9zn!G2q7Opc?at>Nfy9bC&&fP-{MJ@M zl(lcxI$Q=WZKGKBt4REP9B>)xl>6tdudg%DA4Qpru+U)bpZ5m@boq$4X4B#ONO1{i zsbAi%L_|cJL+;5jQ!S@3Z8{abzVccU=nI0W?8_CBanTjY^h!lFW3VW+h78$FYd4Tr9T* z{!*d=^;a95hSQkK`Bdl|8&D6DjL6zKfS|pX}W~m99HVfl8>O%qXHZ=nz5`Dq1MM{~jLm$*AYc znFX8sc5=2KWTRagvQtsd-|M@sUw`~f;-bp1m)z``QvTr~wZUO8YzZj(_bA`EECjU1euW%wI^?ACTT2I|Jq&u5YeSo{F$ zcipL^s+z|6oJG;wfvqI8>^BlY#K2Nkg3*py#=&F+1cQbD0p_CR%T!N$)MEs3zVG2&al7bn$ozv-n_M|O1tI)!dD*h)CJ;FKXRF}S6_0Ya`7L1 z+8wXB;Mvb8Y$M((cf-N~C}?lFJDUD^ZWa!QkEC*Y*ksNhp%lB9tL_+C-dljPGGMz& z)w}t&Q2GKs-(2mNz32kUZqX9F- zWM%VoDzG1crsI^P*ipWZO1>I}e3EJ%(TZ$@1y)osEwR0VI7FH3>#0!)_)k%Z)tv6c z+Asv^*IhLN-hy8|e*O2K`iK$?5)!qN>I_!e{I(g^KS!>|$*3bkz_VZ~ zzI&SI-VB2G@kuF?(oI$ z{L!fxiwdl&>4+~$FGmxdTU1PAY9-u< zIIc9)+%Btp?)Ug9Fc{D+erk}@rWF$vFL5J`B>ZRmu5#e=T=K)O6eFhF$U?uT!=_Be z3*X}}0ZbzRnFU?zf$FApqnR7l?Tto8O%5|x1rMv%iLYCtZr0ypbV|$4`H1G@;Pzu$jhBvu&QYt|QAK9)rjSK(5SJ32A?Xza`worG|h;KzeV=Tl2<#^2?@Rruh?gv z78Y8WwzwHT-X3?7n1Ql5pxyH(ANX6RvM)v+YX5gMn^2zxI+v_ zrqHKTjEuycQ(Ht*jj)FDq6Yz)d;yPL*4CvN)IVh^vBt6}{nnE~Qe^%4q=DGj*f3(g zRf3xEW5&M}AzDc<^tLmH)E*T=QMeh-i&o&GfB}h}JRCGH15!+aM~SR|BX%hId_Dzw zQ}vrA2=8;h9g+<94EzXdv^%AbgMO(9zS0eaILgY7j&d;UbH7h!2qph=`HL#mE6nd{ z6xBUd5<_7%sU@#?E#k$fNelEhATLt+MERz>2x0V7H1do-)2?~y^__3vLXd8zv{UJj zZu=-hqp>6T#m(52!Nm@O}d{?durO=gRg*VGV=H5ASFZywuh&P&%S z{j>6i39FAa+7NA($=esFa)IlMx*NY)Pp-adgS0aRRtxESo^lXOb!{)cWcTKha=bi$ zT+BSV7&ZA^R$F_8v6lbT)$z1-*%sjbz=ECfBPZ_78hAu5YpAqr{0=XsKJ{v9yo7_o z=i%Ghzws$x`6+_qvuwv$7KVlNJ8HX4+|g`_-*Nw@kAyhys_zA3ebHPYu6!+#LfKX= zy?hOQVcT=6rTjz(IdJc(8Pd_(vuOR5@1UfFX6^I|>o9F;z$ivWM(G^d9My2N3@N{n zor#Nrp`be9k)jbl*@c3HZnl0nvrgT&C0uR%;A>pUnQLh&t7WiX#YdtYC$r6gq^FsTs@#@)ocD8iu zT!w2&_R22RHO%p%hK9tK^?cM@f@Y6`4X?(GHG0dic!pQ9JQ}9?cCZ5Lw$c2W6rY>c z^Z7eIYYZ(PbqE2-VTk2;!37TCHdMWL$$w%97MYJiZ$RguqEI<82bp>OCXc|f_{V-> zG8qwi+*T4-=I=Oj%1_IB5K#Lg4F)Zi%jm&9fUE2T(H?vZZt`%Sh8fPQ$64Zz^MCtg zpVPCildS$W0YFjg<**QP9#WYW>lsmx&u352@ojgip+Ga=!9VZSmUT}=A!!PeWNPfS zlJ+z3N2;lsp4%c0s9@UYRNiM>y0?~JuM!zQt50VbjVlY$C)%snk!X-szB3Q6 z{ZlU|8O5QX+=P?ed?9G;m*DmyOr3QU-DOgXh0Qbdp!_)TAK>`;bXfnm3V$KHiu=R= zL*07@H5qmbyCO}H-a#NBz4wkpniQq?A|2^fQ9wwf_udqN(53f|^xmacrFT#Q0tpGp z7x%l*p800>`F-a6$-rbXlX>zy>t6S@)_pC?&e85^(kP|Zdg9Sp8?|06{nwjxy0^D* z4Mw&SrV}39U8J+;2~t;V1Efhm>8r~@wxF20*JT&f_ceM-W_PMB=nr3Up$Jvmor8+6emrmR@R$<5Si^8>utavmI*+d=Fg|0r=rl=aJ8LE& z3i>>wbh&O87eY|=^@HY@*nZ?UT}nXAj*c12@H21XlMgMu&dQ{h%f_Fg%10TM?U4i-_ z5abm_n*EePUYw@M@#WjI(DxG_%7l#4R89g&sK5X$YAr2B=R?3cES-f7NV;03^7j?a zf3=>n`8UKMxrbdoJ>!jAL(Wh>9<};{Yex6zv!_25HoTtyvPd)lshhH&@^!~TFHEDL zv3&e(5Zg5T!#xz`m^mCD>G4zH6(!^1yN%`=5E^ME&juD66^hYMk@sbPwBjzvFn2u8; zOvfqPn`TaO>wzmtD7@lZJZ3}=8^@>+LAz~Q{SaR)y%UHiUKJFb4!hopa(w9G;PnLS zOQ<2wpzF4YQEh+ic(p9%kfu@vNiO7ne}!m(j?x^4t<~*zO)}IKx}%fd1$_WXcNTQO zkj0v`{m38i@&gWLVA{>pwOB*m?_988SLtxvMCy{oRG~|Po;D!f!h1E8lqL!GlpU$2 zK}=wp$aF3y4ARUdJfv$KbBF-4_tNM=(Z; z^QsEA-M>Q+M0g|U10!Z?eGmHLzpd*eQ@ogye>SbN1JIHL28kH3SXXAr|Dbi^H_{2Y zRI_@8cAl~`Gfwf_^%%8`+&|$*ith7;3CX?aT4)~f74$W;c?$K3QIcv!T6Z!H=`?Hp^450sgKQ?lwGlc8OkDPmi1;C5p!2KAIdk+H}9CrC)=tLBlbTj=8iO)fn;bzZ$g9Lz}Bl zJkNklq$PHiP8MM!BmVwqTbqXj3xscV$Qv)E(@h=~v5q8v)O+!b){6b=mLf>oG8EaC zlWg2y@>Xsv>8ahPKRjG%Jrw+k>~rwr^M~LS|+h zX?C6KlcoXQBh{W1l7JXU#*p|ZYJ}OV%Zets=Q>hCyTj4ja?bxolgTj8X>t)2$gVkF zDQH{hVe17|IjuT1;VHM7MdlaNAOb>DxtAmuZ$U*S##=zD7lTZvQ3esYHvO)Dp?5Hp zOjA$#+tq{S3ojd4Mlq0In$K(02v(43ns|`{c)(yS!rDiQ93f2fdL<1URxX6p09nG# zx9|DPC0l`KY?2_6VPWDkE__cn_c<$-4TWT!`;s%2U~f>By)=YQNpbQ(D zxdsCk!8PONz0dk$*LX>h&xnFn#?um*v#ZrEv)AtjB!$(9-|2`hK5&FXyo8rlWHeyU zNo$V%;XE?WPFa8qSgbJ3k?+U?yN!CH(7k4lNrI1dg~8@AFH$pXeL4lq7R?r9vF+QR z2eH>ZbOZpNvb%L-Vs=~tvlLy3PYHpiuG_;rG`EXgnPfdg?jGs+SB>RPNL@O6jCP{{_J7$7Q7M=1h7NAAd z*CcFmM(BJm+vLNe(2*CSVpI<~F7kKBt0~%3zE-`7%OBe_<;M)5|FU3iiUs3;G9dR^Q}^mmGTKX zfWiOESa8Fx;P|rzNslG-qkPfb>+dw%LoxVBb+_z9(Q~{BVee*1EyA3Cz5=pM5VLN( z=~9DVvGc3iVf@hDxEHB1d0=)K;9kTYOB;%g^jA+jek*W(NWmL9g)-)I>rKGSqetP{ zZ(UIW09w>RK}4_n4-XN4kzX+L1?MmHW$+^-lt1=sK4tSgNe+upDb_#N6Xx{wCOYlN z;f7xKh^JJIR0)^=vWKN(6}lR3Rv?q9SUdJ?r!tyMX`S+-6$vKz6D=AYyR&O$xyvHm zC>5WAK1qOd6IlCNmAj9=^tD84AwM6$FrilGh`f|gUbtxYKF+Z1{>#!02vm_@}sMRM45>_+UR23xqhKL5ifvsL#SNRYH^~7FY0vYxv#= z|Ia*|H0LA=g8Jj{e7+31I0`eqva#)&^`F_os0koSirL)2p@PAcN>%9vADDTK;}_&g zAu*8)hd3XOo^mMc%WEn_5~;|nosr8)LMRa^)h-1GLXODD&0qvx>>+WUk&~D9g)p4w z01mlKzc_D(1`02plWKgfK&}w$)u0Wo?*h?7^3H^});-;z;9yjX!7i<(nJAtbfe=gN z&qF+nhd{{WyBQt9#e{=+6(iD!feh9(y2~_l^42oZNbmRFPuGM&*WaozDk(N#c(M1R zR7iEJefK)=o++q~p9Ontn|L^L*v=NCzA1C2;(jZyAeK_18O!~d!aHby%{kNLwW6vhPr-WFW{kedDo0)N8 zzm-52I+O6-n@E?sK42)|c%>cg{y;oyDf=5Mg|=W`h6FGvicG&4eN|!*`x4)z`$O~--SdnIJN|I3{v@MU&?2%y zeU}MB*egXFR>ECap<<2$-Fr|Opa!_)w~&z9y>~xxp7ig_HDH&!cq42Y33>1&6@XB< z(HvJksR9}YSCK;{YNj?++kw;UV;GMeFVJjQ+1rY`o@eTdT1h$dxqK;>MlYDSm3oz8%FbgHUpD0)S>5gHhAfkm zGB#G(inc5xX(UT`)ALO`Z_Knc^#Xug_|#hX_R?9})I5t16720I^ka^5BWL4L!~B>+!S*(q%6-==O-d zuqBIh_vK1+BtM2&DVXX7o+7{D)qhgo)_|+H2Ue?6FT3c4({G10;eGj_mXW#Z#HbKQ z78Amepu;q*B`=Z01ZX}7h{399MhW9aK_HdkCWP&i+^Nw4hf zqpUZ}{y7R9-fZ@CyT{#HL(nkT@7=7`=C<7Fn}o__7^a{-B^^rim+bD1W&fVdC!lQc zXQIMz>LNx20|k-FS;YaZz>=JQsE z{c=C`ex_9weeEiMiCYS}b4qhWO@!HWDyXFK3`OJ55zmvEkwAJ}*r8AkChKx0 zB0Wb-@aVAE1gWKv^cz)J_R4y>5Bl`kRU1T;gL99VQYYg-c)vZ)>vWhOEfxD)CZ$^wdm z3As=ExMH=d(s_|o;-i@ZT&Wq45dO)jpl|_yiFpgrymAh}#U>6Kz*cse4=qKpo(*1nm$_3dl zHd|#M1GGpNrbK=7EFXVUpv$kET5|A7Z(QF#FITX-hVCWD(csip)WcUXbheQ7A^8y< ze_v3cFYeD6*;F=8XQRot_dfSNh@!-_`cXu5aOvRLC?~v|3+VCz9;Q0|XG4MOy^PMQ z{{jTrq!EllGNLiK!rM`_*f?_*`;&V~iuw41-zz1wUG&J`8`*DN_`+8&n*{{E3Mz1laW! zFl0zN%YUJ~XTlyV^z}*M_uYM@ng7%UrHVOtTTkSd`i^I|6-}y2`*ljL27wrPLA9Ze zo7L!Ch38+V0W3Z&&zYSo2_vJ+2{Ym=h1cKPY~z}K$3~X<_2HXj^IkkNnQUsIq#au^ ze^?$LKrYtVYAzpBYFSkoy=ZGl&pIzH6-1+2(@R0c`arEtDCC($E2{2 zTyyECuFC<7*=$)yv;;@4ofxI2bru+xA!Urm$i9)=-Ur`g6wp2h`c8FEh$+b-*T_rx z&%cpd_VT6l?4kdJ2K*l%zT~Uyf0EcdXP#KAvGXzAFm_*;Xc0D90s2W!SNDlmy!f|B zP}O_=R9-j_|HiGeh)1oYJte4MN0x_=YmFSwPEvJqqvS69m9f!(iU(Tqy7~<;R|&VB zqR`o)M<_B1WO4Uy9Ni&T#iL`gCmU@je{?7VW)1&!gY_nV7`A_dMfC3ylQs7qnw*h6 zQUI$TEPDd-NfE!0ic)k2-m!_mj{GlQ9gfR(C@ebLw4XHniamPXehEz;LvzRHT3NX# zD}fH6JZHvxQ6sUhaKFO2E{iA*9&DInxyj5u#4V%zqup{+dK=I6yWVwa*hxmYB0(sp zNhf9Ok;7!g^9DtBA>doae^G<523W{?W6eB>56A%s>pE`cK-9++JRl-(!Z&m8?_xuw zyA67RgA9cZ@%j!)hn1CZxyglCS24S6XR%P$jO=0`2;}SgGh*b0nQ6G4_YZf+jN82( z?25Cw%d@r_^k|%B-%#Ol6t1b<&Xc%y!v7F$js;_Ak(ftXstPD$Ig+@QhO>HhJ*HW* z5|88ZtJ;J2u;*13L(kS}cP1b8+Def?jzf44jJEl3aZR7b%@kHSNzi`?I#hEdyE7?# zqA$D*`7!YwoD#ioR~kvkczFQh_1+i1L$?JON7Iyb;N56o`&s z?nsd&pn}hX_>sTb$JoAb3be8qAC%dg1~XU^%w3RSvGm_=1I>SK11O9tx#sWEMLUQv zg}Vp7W(Kbg;O!&U{#V+Mbru@iaT$gDp%HFJWY#PJDPY$)0rEuLUvgGf5 z89&CPl}IJi2U2y;>xyrR%*kTawlNH<;_cg-{v)hC>;6> zgGcec6cbq}pfL39Yq>MvhcE=38qVX2UTkn#1|N6Wt%xnB6He1U3yCe%e~y3aSQ-bQ zc8ZT`iyA|%);w3!6G~LFy$fFSgb^}(?IV^|3t~dI52tXZc$Q_-2=)}X{WW; z`#8Ml84VKohbZc63VYc{m)XgVVl14(S;|iY>}E^5`SscZNK5uI6-*%YP^fuJV<(Iz%fEg3}uK0AC6!GVU`Gn zXPB?!lSD|`&5GW^o;ud$^|4~J0{Pj<2^3JFbcazyZTC4#H}mJ%9(xK0JvOs*Ib!YJ zE$lCW+UR3cy}`tjjCK=3Mh!+4FCpmp9?MC~>$zUdss=7-z?}+6!%`VE&hYS=!`)Vy zD*Q{uUA!49zig%IFzJ<?Qs={wwWDBa-by^|1IRDZnXVMLYGO?B7`9sW(VCBPznqX6d+Js^p zh?@eM)Oui-K}J%Z>97jb`;jRyRo}?&ZcCH$5T9ho>@gUIM{@nJnTrzg`?3Yfqxb@Z zD93V14IO$6S0<1Gl)ET&7n}HxTUu*V z|DePBw+nci$)C$`hm5*c&ShUrc@=sk)(q?Wq}HQN!kzW#SjVM28H1MlFlbq`>HRvF zLkdN1Lm3%22dS{2^Y|>=O7YIb{dy^~4I#tV6A)jHOig~mf)!QE{U+x;E~I{xbcWX0 z>dUBd#*&p<{378fRq+Xn@#CHfD{7FD=VHOG3Aw)C5z_E~eTBWc97vHCLn%=_>8Vh; zgsO%Y?{;1dtP(E{9da3UkR3!#>qrPeVPBfOY9J}s@BSd)9!p4AS!OoIZL*{1|FE^no90eD$$tx{JS3>=~b3d*3aO+ev2tJv;zC`8^L>_ zm>Ysr_fadPzyyY5cVezMi1N{n6wOZDKa46UP3mFqho{KGV3)5FgfLL~D8#&LFQi-A zzC4gH9e7#zac*s-q3Y@B%zAQwl;EEaiao~NqTXSYRZsu4C-`yV0-RPz6pBURJRttB zqcfY8yFUjet4XP^tg8Qv}uwtokpV*%EnpW5@D0G}Kzn`E`Rg4|rDb;iR^(S~1uw9p${ z7s>7(%6l$ZU-kL;&jD>~-#zFK6dlF!FrwUeB4pYCZI{ASIb740xcnohyj>7Pqze?CX`71Z=x`DE}MTFwru2O|gzF>=gXs znfuB+P(!1v0Tl#@$)U2hZr;|mLd-KFI0nFf%^Uw%hDNxtBrU}Q8+F+o$_Ao{7!*~` zxy>Ik&TiX3%~3WBdlm*@PFw7(EJUU!glaehJeMX^Oeh6U)8N1b;*7|ofpxVLCqIHf zlAHcyrM?f@b}y7A&Rn;npwz;V=_5L&5F7&BP|Hw`($Gsr2)_();nBR#za4=mV6c~} z74ltU{2WLOSqGnVu7l^XThR?51z^t34a6j1Z552r<$d=xI9KPpXefI7KFXH+`NJ;W z|6$2Tr`$SEd1qPRdjeaG2eBHul>5KHo+pNH^c^BIhB+W+oig|=K zE+nh%EvT5qOxDiwBPPfZ#FDwktz%@l_o3yRQubcuj_6w^gyoAc zzc3d@qEe*Vd;zx=pU>}yW8uc2DPmHz(x+c>fZP`svWFxD1MJ_aLrD__z?~`s1D|Yw ze|aMyrUFG|n6A8hW(S>ur$*dWMGhWjZ|tA}ujkSZFRpnjT;Z!v?-rJxj?eJ9zNJ%{ zd}uRCS#_Bnn~)o!cGLH|dTJ;7x|zVv`>xkn-r+qpsEjPgisrfch1PfWf6&?D__N1o zqK@$^U@pKl^{C9<%hNJyPjI1QUf~VpZdPEA;P=y>(;m72U< zm+8<#y{$(PorG&3)jI=@_~@^4UnDm3AU)lprIy zoeMhf-^XoDr2zIb$&ID5{rsN<{oNf($+$!CnM^#5<{znbWYZhxnQ=ric1I6I#_U2f zCIVwsP{gCIqXMnrZGJ%_+en;d)+aTawLCRv}%wfG=t&YpD1A(zRtYjtR5Rzjp=quYyDCKBeSD@<8w z@;AQ)R_Q?M^?C3q|JVjSGUWi03Y2BAdiw5sLJ58yw$ZYWx7>0uf7w!Ek)hWS zJA#=lSjpMl3+sHaJ-lsElS|&tOQrqBalSofR}MoEmSXI5>__xA5LxSxV|O4ltg+)$ z0@E>Ue>ZL&UrW9Y3Xhqo-B56*_R8h^jrah^Yxnq7ZML4=7YKnG93$+q&nYqr=eW z;s4O*39I}RWj0ktWlWui_Fr=MinNTd-izhrsxm!ZJ^2co^QnL*P)lGgvBBw{RuFiS z-TQK1LWwl8J2FG_Mblm^BR~7o47(zmS9{WAOMWR;%jh|rI_AcH)y@9}N3U?${eOw0 z-T(iKqu-BI89N5VkDIgAXMZGD7@8Wzm~nH~yyPVGHWCVY-RCd3&<89;{R($a`@MdWP$kf z5x6P&r(c98 z{51jY*gGy|s#m@<=WAKIHKU8hN@rnp4L@OtFy=ShhU=PhRrI&=v&w+_znG2*pCSJN z4PS(EC(GBV=yiM_ay(Xmb)mLl!k_7+8J!^1^MT{5nRplVgKSU0%^Sog6Q+u*9jHlF z!AYUZh6z;`3BDzyB=9uJqGnWowY@tAJ#M7+ib;1y-YmnZeypz*cay0<>S$J{$($ZO z%i#9q=}IrhAzQsOr-kc(A?dkh2`->9p`$9!oQlm#V{|edYs)>WIkvTGQ+WhrPgbEO zgi269)s{|UI_YZne&P=6qk8EF41XcHQEZtV$&yyV^Z?L(Cb`ooI=teW3Zvj0jF|yy zgw2qC+e0Q-mJ{7s@^|UCxl2BJTJJt~qe9MT0wewFU(X!(>MSg)0^8kGit<1BnKVER z`p=Jx8)+|)^xADS6{3F_Mvd{~f?dfTM^ojc>kO6#_YFU?NOF7uW2sg=_$g4b52KHo zc{=#UMq}3?%7;>C%6>#gP^XxyU3{99&ih`2iXAn%ch9G*#AodBzmaFmo)q7}8v@La zQsXTIjUtCsAl5R#7{NjHCLa0sn9n;1eYWA@XGpVpJ0{6I7WtlElqEx6>boAIZ>?s1un3Xh=Q*B+(U)O9LGS z;H-~DMtM6hSd<9U=+bM2X%AS#`~6d)&SY!m(909x!17b!OzQ@#hL*AMsTWac+;H!- zCYOcK2fK|tmW;c|xDj!fSAknm;!wP{SL02mT%w>HJ<*HVrSt8g7=3xqSD?ib zo$T;r&;Q}hr{mGbM$^W9q7+D7zPxWV3VQGC9F4cXy>(w7Y~mocyLI;4dRw$4GR8=svPLN*Xevn5VQLU8j5pzKTO?f zoMVB6Bm3YY5z&E^w~9KJ;G02YNM*ET+TzfU>pqjWO3y{-j&E^=Od`$%9Zpeq1&N83 z@ge6*3`pynKqak*3btH0kms|h^#PY-9vMba<5FFYoOTxryCT^mN-+oKZa(hiV+xFG zf(PZvtQ`J>g>lTvBtZ5C(BLD)hTs9_F-*Inq~<-+UPxgSQLMDfJH<3+tONXV;#GgC zVdnY0QIj0IeFoR)oB;6qf(~zF>L&v1`ctlUkw1cjVK8dvAJdWsOFchQ9nbC^WnKQd zw%dnWhczQKlbw71_6sc{VvW=U1w93q6uccCH!T!-vqfShk91)Jh+}>Q((QVv!Qt=i zJXboB$CL?^dT%WYB%mvVwr)J8)s8mJrV?i!v~U7WDV}gyC9Z)l9q;Mn*hH(+ckvr? zAkV}9b&yp2E3-j#!yE>q!;=4jXHNhHo?Yt&9Ggec8?kkx7-+NhT+|LgfCvr)@QYwh z0=x>7ChnE;uL_%o420E~{`2M@#()FGs4U8NmcA#K82vn&iNrR3xREz>=vGm&m(|E{ z5ZvMKGeG0=^Pe|2l(a_NXzOFmXBQ7H!PNR@9DVw$r*GbSHTzR&wVRrdR}PekDwX

j#j!TE9}_SIflH8EMZPNSRCx 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 W0O5QBh6RcM0000Yr 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 z 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%0D^z7Tr%^suE+5 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

*Nhlk{SD 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, which is the Playground HTML generated by `async-graphql`: + +```rust, no_run +// src/main.rs + +... + +use async_graphql::{EmptySubscription, Schema}; +use async_graphql::{ ++ http::{playground_source, GraphQLPlaygroundConfig}, + EmptySubscription, Schema, +}; +use async_graphql_rocket::*; +- use rocket::*; ++ use rocket::{response::content, *}; + +... + ++ #[rocket::get("/graphql")] ++ fn graphql_playground() -> content::RawHtml { ++ content::RawHtml(playground_source(GraphQLPlaygroundConfig::new("/graphql"))) ++ } + +... + + rocket::build() + .manage(schema) +- .mount("/", routes![index, graphql_request]) ++ .mount("/", routes![index, graphql_playground, graphql_request]) + +... +``` + +## Major Merits + +### Autocomplete requests + +![Requests are autocompleted in GraphQL Playground](assets/graphql_playground_autocomplete.png) + +The Playground discovers all the types and their attributes and autocompletes your requests for you. + +### Preview Documentation + +![Documentation is easily accessible in GraphQL Playground](assets/graphql_playground_docs.png) + +You can open up the DOCS panel on the side to see the comprehensive documentation for your GraphQL API. + +### Export Schema + +![The schema can be viewed and exported in GraphQL Playground](assets/graphql_playground_schema.png) + +On the SCHEMA panel, you can view the [schema](https://graphql.org/learn/schema/) of your GraphQL API, and export it in JSON or SDL format. From 61ef2c24614a6c8b226f7e59cb43a53b392bdd67 Mon Sep 17 00:00:00 2001 From: Sanford Pun Date: Tue, 12 Jul 2022 18:24:58 +0800 Subject: [PATCH 60/60] Remove section for GraphQL subscription because it is not supported yet --- tutorials-book/src/SUMMARY.md | 3 +-- tutorials-book/src/ch03-01-project-setup.md | 2 +- ...-05-graphql-playground.md => ch03-04-graphql-playground.md} | 0 tutorials-book/src/ch03-04-subscription.md | 1 - 4 files changed, 2 insertions(+), 4 deletions(-) rename tutorials-book/src/{ch03-05-graphql-playground.md => ch03-04-graphql-playground.md} (100%) delete mode 100644 tutorials-book/src/ch03-04-subscription.md diff --git a/tutorials-book/src/SUMMARY.md b/tutorials-book/src/SUMMARY.md index 9e051b0..9bf73bd 100644 --- a/tutorials-book/src/SUMMARY.md +++ b/tutorials-book/src/SUMMARY.md @@ -29,5 +29,4 @@ - [Project Setup](ch03-01-project-setup.md) - [Query](ch03-02-query.md) - [Mutation](ch03-03-mutation.md) - - [Subscription](ch03-04-subscription.md) - - [Optional: GraphQL Playground](ch03-05-graphql-playground.md) + - [Optional: GraphQL Playground](ch03-04-graphql-playground.md) diff --git a/tutorials-book/src/ch03-01-project-setup.md b/tutorials-book/src/ch03-01-project-setup.md index 2d2fd34..58f1d61 100644 --- a/tutorials-book/src/ch03-01-project-setup.md +++ b/tutorials-book/src/ch03-01-project-setup.md @@ -125,7 +125,7 @@ To verify it works: $ cargo run ``` -For debugging, GraphQL requests can be sent via the [GraphQL Playground](ch03-05-graphql-playground.md). +For debugging, GraphQL requests can be sent via the [GraphQL Playground](ch03-04-graphql-playground.md). ``` GraphQL Request: diff --git a/tutorials-book/src/ch03-05-graphql-playground.md b/tutorials-book/src/ch03-04-graphql-playground.md similarity index 100% rename from tutorials-book/src/ch03-05-graphql-playground.md rename to tutorials-book/src/ch03-04-graphql-playground.md diff --git a/tutorials-book/src/ch03-04-subscription.md b/tutorials-book/src/ch03-04-subscription.md deleted file mode 100644 index 13dc747..0000000 --- a/tutorials-book/src/ch03-04-subscription.md +++ /dev/null @@ -1 +0,0 @@ -# Subscription