6eb5440d4d
- /api/categories ve /api/payment-methods: listele, ekle, düzenle, sırala, pasife al - Sürüm kontrolü ile eşzamanlı düzenleme çakışması (409) - Backend lib + bin yapısına ayrıldı (entegrasyon testleri için) - tests/: hane izolasyonu (3) ve katalog (4) entegrasyon testleri - db:reset artık artık test veritabanlarını da siler - api.http tamamlandı; Faz 1 tamamlandı Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
32 lines
834 B
Rust
32 lines
834 B
Rust
//! 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<Config>,
|
||
pub jwt: Arc<Jwt>,
|
||
pub login_limiter: Arc<LoginLimiter>,
|
||
}
|
||
|
||
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),
|
||
}
|
||
}
|
||
}
|