From d0d8a98a0bcb056961edd2de6669762ad750d4a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Djk=C3=A1=C5=A5o?= Date: Mon, 18 Mar 2024 18:52:05 +0100 Subject: [PATCH] logo, gh workflow, locales --- .env | 2 + .env.example | 14 +++- .github/workflows/rust-clippy.yml | 2 +- Cargo.lock | 48 ++++++++++++- Cargo.toml | 1 + sdk/Cargo.toml | 1 + sdk/src/locales.rs | 3 +- sdk/src/webhooks/sync_response.rs | 21 ++++++ simple-payment-gateway/Cargo.toml | 1 + simple-payment-gateway/public/logo.png | Bin 24834 -> 14884 bytes simple-payment-gateway/src/app.rs | 63 ++++++++++-------- simple-payment-gateway/src/routes/webhooks.rs | 19 ++++-- 12 files changed, 137 insertions(+), 38 deletions(-) diff --git a/.env b/.env index 997de49..4ffda0f 100644 --- a/.env +++ b/.env @@ -23,3 +23,5 @@ SITEMAP_INDEX_HOSTNAME="https://example.com" ACTIVE_GATEWAYS="cod,cash,transfer" # only SK,EN available :). Determines what language the gateway names will be in storefront LOCALE="SK" +# uses https://crates.io/crates/iso_currency +CURRENCIES="EUR" diff --git a/.env.example b/.env.example index a5a63ce..d60974f 100644 --- a/.env.example +++ b/.env.example @@ -1,8 +1,12 @@ +## COMMON VARIABLES FOR ALL APPS REQUIRED_SALEOR_VERSION="^3.13" APP_API_BASE_URL="http://0.0.0.0:3000" APL="Redis" -APL_URL="redis://localhost:6380/2" +APL_URL="redis://localhost:6379/1" LOG_LEVEL="DEBUG" + +## THESE VARIABLES ARE FOR SITEMAP-GENERATOR APP +SITEMAP_TARGET_FOLDER="./temp" # Available fields can be found in ./sitemap-generator/src/queries/event_subjects_updated.rs: ProductUpdate SITEMAP_PRODUCT_TEMPLATE="https://example.com/{product.category.slug}/{product.slug}" # Available fields can be found in ./sitemap-generator/src/queries/event_subjects_updated.rs: CategoryUpdate @@ -13,3 +17,11 @@ SITEMAP_COLLECTION_TEMPLATE="https://example.com/collection/{collection.slug}" SITEMAP_PAGES_TEMPLATE="https://example.com/{page.slug}" # Without trailing "/"! SITEMAP_INDEX_HOSTNAME="https://example.com" + +## THESE VARIABLES ARE FOR SIMPLE-PAYMENT-GATEWAY APP +#To see all possible options, check simple-payment-gateway/src/app:GatewayTypes +ACTIVE_GATEWAYS="cod,cash,transfer" +# only SK,EN available :). Determines what language the gateway names will be in storefront +LOCALE="SK" +# uses https://crates.io/crates/iso_currency +CURRENCIES="EUR" diff --git a/.github/workflows/rust-clippy.yml b/.github/workflows/rust-clippy.yml index c844e8e..732d74b 100644 --- a/.github/workflows/rust-clippy.yml +++ b/.github/workflows/rust-clippy.yml @@ -32,7 +32,7 @@ jobs: --all-features --message-format=json | clippy-sarif | tee rust-clippy-results.sarif | sarif-fmt -D warnings - continue-on-error: true + continue-on-error: false - name: Upload analysis results to GitHub uses: github/codeql-action/upload-sarif@v1 diff --git a/Cargo.lock b/Cargo.lock index 7c58663..75a4497 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1704,6 +1704,26 @@ dependencies = [ "waker-fn", ] +[[package]] +name = "iso_country" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20633e788d3948ea7336861fdb09ec247f5dae4267e8f0743fa97de26c28624d" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "iso_currency" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33f07181be95c82347a07cf4caf43d2acd8a7e8d08ef1db75e10ed5a9aec3c1b" +dependencies = [ + "iso_country", + "serde", + "strum 0.25.0", +] + [[package]] name = "itertools" version = "0.12.1" @@ -2696,14 +2716,15 @@ dependencies = [ "dotenvy", "envy", "http 1.0.0", + "iso_currency", "jsonwebtoken", "redis", "reqwest", "rust_decimal", "serde", "serde_json", - "strum", - "strum_macros", + "strum 0.26.2", + "strum_macros 0.26.1", "tower", "tracing", "tracing-subscriber", @@ -2950,6 +2971,7 @@ dependencies = [ "dotenvy", "enum-iterator", "envy", + "iso_currency", "redis", "rust_decimal", "saleor-app-sdk", @@ -3149,12 +3171,34 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" +[[package]] +name = "strum" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125" +dependencies = [ + "strum_macros 0.25.3", +] + [[package]] name = "strum" version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5d8cec3501a5194c432b2b7976db6b7d10ec95c253208b45f83f7136aa985e29" +[[package]] +name = "strum_macros" +version = "0.25.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23dc1fa9ac9c169a78ba62f0b841814b7abae11bdd047b9c58f893439e309ea0" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.48", +] + [[package]] name = "strum_macros" version = "0.26.1" diff --git a/Cargo.toml b/Cargo.toml index d53637e..73624e3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -25,3 +25,4 @@ tower = { version = "0.4.13", features = ["util"] } tower-http = { version = "0.5.2", features = ["fs", "trace"] } cynic-codegen = "3.4.3" rust_decimal = { version = "1.34.3", features = ["serde-float"] } +iso_currency = { version = "0.4.4", features = ["with-serde", "iterator"] } diff --git a/sdk/Cargo.toml b/sdk/Cargo.toml index 09728bc..705d80c 100644 --- a/sdk/Cargo.toml +++ b/sdk/Cargo.toml @@ -27,6 +27,7 @@ envy.workspace = true dotenvy.workspace = true tower = { workspace = true } rust_decimal = { workspace = true, features = ["serde-float"] } +iso_currency = { workspace = true, features = ["with-serde", "iterator"] } reqwest = { version = "0.11.24", features = ["json"] } jsonwebtoken = "9.2.0" async-trait = "0.1.77" diff --git a/sdk/src/locales.rs b/sdk/src/locales.rs index b5f4e16..2674fd2 100644 --- a/sdk/src/locales.rs +++ b/sdk/src/locales.rs @@ -1,6 +1,7 @@ use serde::{Deserialize, Serialize}; +use strum_macros::EnumString; -#[derive(Debug, Clone, Serialize, Deserialize)] +#[derive(Debug, Clone, Serialize, Deserialize, EnumString)] pub enum LocaleCode { Ar, Az, diff --git a/sdk/src/webhooks/sync_response.rs b/sdk/src/webhooks/sync_response.rs index 28f1cfc..b94c935 100644 --- a/sdk/src/webhooks/sync_response.rs +++ b/sdk/src/webhooks/sync_response.rs @@ -1,3 +1,4 @@ +use iso_currency::Currency; use rust_decimal::Decimal; use serde::Serialize; @@ -234,3 +235,23 @@ pub struct ListStoredPaymentMethodsResponse { pub name: Option, pub data: Option, } + +#[derive(Serialize, Debug, Clone)] +#[serde(rename_all = "camelCase")] +pub struct PaymentGateway { + pub id: String, + pub name: String, + pub currencies: Vec, + pub config: Vec, +} + +#[derive(Serialize, Debug, Clone)] +#[serde(rename_all = "camelCase")] +pub struct ConfigMap { + field: String, + value: serde_json::Value, +} + +#[derive(Serialize, Debug, Clone)] +#[serde(rename_all = "camelCase")] +pub struct PaymentListGatewaysResponse(pub Vec); diff --git a/simple-payment-gateway/Cargo.toml b/simple-payment-gateway/Cargo.toml index 4a2a98e..5a46443 100644 --- a/simple-payment-gateway/Cargo.toml +++ b/simple-payment-gateway/Cargo.toml @@ -34,6 +34,7 @@ surf.workspace = true cynic = { workspace = true, features = ["http-surf"] } cynic-codegen.workspace = true rust_decimal = { workspace = true, features = ["serde-float"] } +iso_currency = { workspace = true, features = ["with-serde", "iterator"] } const_format = "0.2.32" enum-iterator = "2.0.0" diff --git a/simple-payment-gateway/public/logo.png b/simple-payment-gateway/public/logo.png index f5911307aa2ecc3982f960c709099ebc57251487..f2c9aa9bbb3f16c4ca471540a93945ac47542819 100644 GIT binary patch delta 10803 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� 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 vbu8FQH%Bw|NU#qNyDn anyhow::Result> { //eg: "accreditation,cod,other,transfer" let env_types = std::env::var("ACTIVE_GATEWAYS")?; let locale = std::env::var("LOCALE")?; - let locale = match locale.as_str() { - "SK" => LocaleCode::Sk, - "EN" => LocaleCode::En, - l => unimplemented!("Locale {l} not implemented"), - }; + let locale = LocaleCode::from_str(&locale)?; + let currencies = std::env::var("CURRENCIES")?; + let currencies = currencies.split(",").collect::>(); + let currencies = currencies + .iter() + .map(|c| Currency::from_str(*c)) + .collect::, _>>() + .map_err(|e| anyhow::anyhow!(format!("{:?}", e)))?; let str_types: Vec<_> = env_types.split(',').collect(); let gateway_types = str_types @@ -95,23 +102,25 @@ pub fn get_active_gateways_from_env() -> anyhow::Result> { }) .map(|g| ActiveGateway { gateway_type: g.clone(), - currencies: vec!["EUR".to_owned()], - id: format!("{:?}", &g).to_lowercase(), - config: [], - name: match (g, &locale) { - (GatewayType::COD, LocaleCode::Sk) => "Dobierka".to_owned(), - (GatewayType::Cash, LocaleCode::Sk) => "Hotovosť".to_owned(), - (GatewayType::Transfer, LocaleCode::Sk) => "Bankový prevod".to_owned(), - (GatewayType::Inkaso, LocaleCode::Sk) => "Inkaso".to_owned(), - (GatewayType::Accreditation, LocaleCode::Sk) => "Vzajomný zápočet".to_owned(), - (GatewayType::Other, LocaleCode::Sk) => "Iné".to_owned(), - (GatewayType::COD, LocaleCode::En) => "Cash on delivery".to_owned(), - (GatewayType::Cash, LocaleCode::En) => "Cash".to_owned(), - (GatewayType::Transfer, LocaleCode::En) => "Bank transfer".to_owned(), - (GatewayType::Inkaso, LocaleCode::En) => "Encashment".to_owned(), - (GatewayType::Accreditation, LocaleCode::En) => "Mutual credit".to_owned(), - (GatewayType::Other, LocaleCode::En) => "Other".to_owned(), - (g, l) => unimplemented!("Gateway {:?} in locale {:?} not implemented", g, l), + gateway: PaymentGateway { + currencies: currencies.clone(), + id: format!("{:?}", &g).to_lowercase(), + config: vec![], + name: match (g, &locale) { + (GatewayType::COD, LocaleCode::Sk) => "Dobierka".to_owned(), + (GatewayType::Cash, LocaleCode::Sk) => "Hotovosť".to_owned(), + (GatewayType::Transfer, LocaleCode::Sk) => "Bankový prevod".to_owned(), + (GatewayType::Inkaso, LocaleCode::Sk) => "Inkaso".to_owned(), + (GatewayType::Accreditation, LocaleCode::Sk) => "Vzajomný zápočet".to_owned(), + (GatewayType::Other, LocaleCode::Sk) => "Iné".to_owned(), + (GatewayType::COD, LocaleCode::En) => "Cash on delivery".to_owned(), + (GatewayType::Cash, LocaleCode::En) => "Cash".to_owned(), + (GatewayType::Transfer, LocaleCode::En) => "Bank transfer".to_owned(), + (GatewayType::Inkaso, LocaleCode::En) => "Encashment".to_owned(), + (GatewayType::Accreditation, LocaleCode::En) => "Mutual credit".to_owned(), + (GatewayType::Other, LocaleCode::En) => "Other".to_owned(), + (g, l) => unimplemented!("Gateway {:?} in locale {:?} not implemented", g, l), + }, }, }) .collect::>(); @@ -122,9 +131,5 @@ pub fn get_active_gateways_from_env() -> anyhow::Result> { #[derive(Debug, Clone, Serialize)] pub struct ActiveGateway { pub gateway_type: GatewayType, - pub id: String, - pub name: String, - pub currencies: Vec, - //don't need this one yet - pub config: [(); 0], + pub gateway: PaymentGateway, } diff --git a/simple-payment-gateway/src/routes/webhooks.rs b/simple-payment-gateway/src/routes/webhooks.rs index d21d9c5..42555e7 100644 --- a/simple-payment-gateway/src/routes/webhooks.rs +++ b/simple-payment-gateway/src/routes/webhooks.rs @@ -7,10 +7,11 @@ use saleor_app_sdk::{ webhooks::{ sync_response::{ CancelationRequestedResult, ChargeRequestedResult, - PaymentGatewayInitializeSessionResponse, RefundRequestedResult, - TransactionCancelationRequestedResponse, TransactionChargeRequestedResponse, - TransactionInitializeSessionResponse, TransactionProcessSessionResponse, - TransactionRefundRequestedResponse, TransactionSessionResult, + PaymentGatewayInitializeSessionResponse, PaymentListGatewaysResponse, + RefundRequestedResult, TransactionCancelationRequestedResponse, + TransactionChargeRequestedResponse, TransactionInitializeSessionResponse, + TransactionProcessSessionResponse, TransactionRefundRequestedResponse, + TransactionSessionResult, }, utils::{get_webhook_event_type, EitherWebhookType}, SyncWebhookEventType, @@ -52,6 +53,16 @@ pub async fn webhooks( let event_type = get_webhook_event_type(&headers)?; let res: Json = match event_type { EitherWebhookType::Sync(a) => match a { + SyncWebhookEventType::PaymentListGateways => { + let gateways = state + .active_gateways + .iter() + .cloned() + .map(|g| g.gateway) + .collect::>(); + Json::from(serde_json::to_value(PaymentListGatewaysResponse(gateways))?) + } + SyncWebhookEventType::TransactionCancelationRequested => { let data = serde_json::from_str::(&body)?; Json::from(serde_json::to_value(