WIP - ActixWeb multi-tenant blog and newsletter API server. Originally forked from LukeMathWalker/zero-to-production.
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Updates primary binary name and references

+66 -63
+40 -40
Cargo.lock
··· 1 1 # This file is automatically @generated by Cargo. 2 2 # It is not intended for manual editing. 3 - version = 3 3 + version = 4 4 4 5 5 [[package]] 6 6 name = "actix-codec" ··· 1566 1566 version = "0.0.3" 1567 1567 source = "registry+https://github.com/rust-lang/crates.io-index" 1568 1568 checksum = "6d02c0b00610773bb7fc61d85e13d86c7858cbdf00e1a120bfc41bc055dbaa0e" 1569 + 1570 + [[package]] 1571 + name = "newsletter_api" 1572 + version = "0.1.0" 1573 + dependencies = [ 1574 + "actix-session", 1575 + "actix-web", 1576 + "actix-web-flash-messages", 1577 + "anyhow", 1578 + "argon2", 1579 + "base64 0.22.1", 1580 + "chrono", 1581 + "claims", 1582 + "config", 1583 + "fake", 1584 + "linkify", 1585 + "log", 1586 + "quickcheck", 1587 + "quickcheck_macros", 1588 + "rand", 1589 + "reqwest", 1590 + "secrecy", 1591 + "serde", 1592 + "serde-aux", 1593 + "serde_json", 1594 + "serde_urlencoded", 1595 + "sqlx", 1596 + "thiserror", 1597 + "tokio", 1598 + "tracing", 1599 + "tracing-actix-web", 1600 + "tracing-bunyan-formatter", 1601 + "tracing-log 0.2.0", 1602 + "tracing-subscriber", 1603 + "unicode-segmentation", 1604 + "uuid", 1605 + "validator", 1606 + "wiremock", 1607 + ] 1569 1608 1570 1609 [[package]] 1571 1610 name = "nom" ··· 3497 3536 checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85" 3498 3537 dependencies = [ 3499 3538 "linked-hash-map", 3500 - ] 3501 - 3502 - [[package]] 3503 - name = "zero2prod" 3504 - version = "0.1.0" 3505 - dependencies = [ 3506 - "actix-session", 3507 - "actix-web", 3508 - "actix-web-flash-messages", 3509 - "anyhow", 3510 - "argon2", 3511 - "base64 0.22.1", 3512 - "chrono", 3513 - "claims", 3514 - "config", 3515 - "fake", 3516 - "linkify", 3517 - "log", 3518 - "quickcheck", 3519 - "quickcheck_macros", 3520 - "rand", 3521 - "reqwest", 3522 - "secrecy", 3523 - "serde", 3524 - "serde-aux", 3525 - "serde_json", 3526 - "serde_urlencoded", 3527 - "sqlx", 3528 - "thiserror", 3529 - "tokio", 3530 - "tracing", 3531 - "tracing-actix-web", 3532 - "tracing-bunyan-formatter", 3533 - "tracing-log 0.2.0", 3534 - "tracing-subscriber", 3535 - "unicode-segmentation", 3536 - "uuid", 3537 - "validator", 3538 - "wiremock", 3539 3539 ] 3540 3540 3541 3541 [[package]]
+16 -13
Cargo.toml
··· 1 1 [package] 2 - name = "zero2prod" 2 + name = "newsletter_api" 3 3 version = "0.1.0" 4 - authors = ["LukeMathWalker <rust@lpalmieri.com>"] 5 - edition = "2021" 4 + authors = [ 5 + "DiegEnriquezSerrano <diego@diegoenriquezserrano.dev>", 6 + "LukeMathWalker <rust@lpalmieri.com>", 7 + ] 8 + edition = "2024" 6 9 7 10 # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 8 11 [lib] ··· 10 13 11 14 [[bin]] 12 15 path = "src/main.rs" 13 - name = "zero2prod" 16 + name = "newsletter_api" 14 17 15 18 [dependencies] 16 19 actix-web = "4" ··· 18 21 serde = "1.0.115" 19 22 config = { version = "0.14", default-features = false, features = ["yaml"] } 20 23 sqlx = { version = "0.8", default-features = false, features = [ 21 - "runtime-tokio-rustls", 22 - "macros", 23 - "postgres", 24 - "uuid", 25 - "chrono", 26 - "migrate", 24 + "runtime-tokio-rustls", 25 + "macros", 26 + "postgres", 27 + "uuid", 28 + "chrono", 29 + "migrate", 27 30 ] } 28 31 uuid = { version = "1", features = ["v4", "serde"] } 29 32 chrono = { version = "0.4.22", default-features = false, features = ["clock"] } 30 33 reqwest = { version = "0.12", default-features = false, features = [ 31 - "json", 32 - "rustls-tls", 33 - "cookies", 34 + "json", 35 + "rustls-tls", 36 + "cookies", 34 37 ] } 35 38 log = "0.4" 36 39 tracing = "0.1.19"
+5 -5
src/main.rs
··· 1 + use newsletter_api::configuration::get_configuration; 2 + use newsletter_api::issue_delivery_worker::run_worker_until_stopped; 3 + use newsletter_api::startup::Application; 4 + use newsletter_api::telemetry::{get_subscriber, init_subscriber}; 1 5 use std::fmt::{Debug, Display}; 2 6 use tokio::task::JoinError; 3 - use zero2prod::configuration::get_configuration; 4 - use zero2prod::issue_delivery_worker::run_worker_until_stopped; 5 - use zero2prod::startup::Application; 6 - use zero2prod::telemetry::{get_subscriber, init_subscriber}; 7 7 8 8 #[tokio::main] 9 9 async fn main() -> anyhow::Result<()> { 10 - let subscriber = get_subscriber("zero2prod".into(), "info".into(), std::io::stdout); 10 + let subscriber = get_subscriber("newsletter_api".into(), "info".into(), std::io::stdout); 11 11 init_subscriber(subscriber); 12 12 13 13 let configuration = get_configuration().expect("Failed to read configuration.");
+5 -5
tests/api/helpers.rs
··· 1 1 use argon2::password_hash::SaltString; 2 2 use argon2::{Algorithm, Argon2, Params, PasswordHasher, Version}; 3 + use newsletter_api::configuration::{DatabaseSettings, get_configuration}; 4 + use newsletter_api::email_client::EmailClient; 5 + use newsletter_api::issue_delivery_worker::{ExecutionOutcome, try_execute_task}; 6 + use newsletter_api::startup::{Application, get_connection_pool}; 7 + use newsletter_api::telemetry::{get_subscriber, init_subscriber}; 3 8 use secrecy::Secret; 4 9 use sqlx::{Connection, Executor, PgConnection, PgPool}; 5 10 use std::sync::LazyLock; 6 11 use uuid::Uuid; 7 12 use wiremock::MockServer; 8 - use zero2prod::configuration::{get_configuration, DatabaseSettings}; 9 - use zero2prod::email_client::EmailClient; 10 - use zero2prod::issue_delivery_worker::{try_execute_task, ExecutionOutcome}; 11 - use zero2prod::startup::{get_connection_pool, Application}; 12 - use zero2prod::telemetry::{get_subscriber, init_subscriber}; 13 13 14 14 // Ensure that the `tracing` stack is only initialised once using `once_cell` 15 15 static TRACING: LazyLock<()> = LazyLock::new(|| {