//! Tüm route'ların paylaştığı uygulama durumu. use std::{sync::Arc, time::Duration}; use mongodb::Database; use crate::{ auth::{jwt::Jwt, limiter::LoginLimiter}, config::Config, }; /// `Clone` ucuzdur: `Database` ve `Arc` içte referans sayımı kullanır, veri kopyalanmaz. #[derive(Clone)] pub struct AppState { pub db: Database, pub config: Arc, pub jwt: Arc, pub login_limiter: Arc, } impl AppState { pub fn new(db: Database, config: Config) -> Self { Self { db, jwt: Arc::new(Jwt::new(&config.jwt_secret)), // Aynı e-postaya 15 dakikada en fazla 5 hatalı giriş denemesi login_limiter: Arc::new(LoginLimiter::new(5, Duration::from_secs(15 * 60))), config: Arc::new(config), } } }