From 824cd2ad538d01eb258e696d020205120fd3d532 Mon Sep 17 00:00:00 2001 From: stefiosif Date: Sun, 28 Jun 2026 17:46:16 +0300 Subject: [PATCH] refactor(backend): extract governor setup into a function --- backend/src/main.rs | 55 ++++++++++++++++++++++++--------------------- 1 file changed, 30 insertions(+), 25 deletions(-) diff --git a/backend/src/main.rs b/backend/src/main.rs index f7231ff..2ee8502 100644 --- a/backend/src/main.rs +++ b/backend/src/main.rs @@ -78,31 +78,12 @@ async fn main() -> Result<()> { .layer(DefaultBodyLimit::max(BODY_LIMIT)); let user_repository = UserRepository::new(pool); - let mut routes_auth = routes_auth(user_repository.clone()); - - if std::env::var("ENVIRONMENT").unwrap_or_default() != "test" { - let governor_conf_auth = GovernorConfigBuilder::default() - .per_second(4) - .burst_size(2) - .key_extractor(SmartIpKeyExtractor) - .finish() - .expect("failed to initialize rate limiter configurations"); - let governor_auth_limiter = governor_conf_auth.limiter().clone(); - let interval = Duration::from_secs(60); - - std::thread::spawn(move || { - loop { - std::thread::sleep(interval); - let len = governor_auth_limiter.len(); - if len > 0 { - info!("rate limiting auth storage size: {len}"); - } - governor_auth_limiter.retain_recent(); - } - }); - - routes_auth = routes_auth.layer(GovernorLayer::new(governor_conf_auth)); - } + let routes_auth = routes_auth(user_repository.clone()); + let routes_auth = if std::env::var("ENVIRONMENT").unwrap_or_default() == "test" { + routes_auth + } else { + apply_governor(routes_auth) + }; let mut openapi = AuthApi::openapi(); openapi.merge(FileApi::openapi()); @@ -141,3 +122,27 @@ async fn main() -> Result<()> { Ok(()) } + +fn apply_governor(routes_auth: Router) -> Router { + let governor_conf_auth = GovernorConfigBuilder::default() + .per_second(4) + .burst_size(2) + .key_extractor(SmartIpKeyExtractor) + .finish() + .expect("failed to initialize rate limiter configurations"); + let governor_auth_limiter = governor_conf_auth.limiter().clone(); + let interval = Duration::from_secs(60); + + std::thread::spawn(move || { + loop { + std::thread::sleep(interval); + let len = governor_auth_limiter.len(); + if len > 0 { + info!("rate limiting auth storage size: {len}"); + } + governor_auth_limiter.retain_recent(); + } + }); + + routes_auth.layer(GovernorLayer::new(governor_conf_auth)) +}