use std::sync::Arc; use cache::redis::RedisCache; use db::conn::Db; use jwt::JwtState; use storage::StorageRepository; use crate::config::{IssueConfig, SharedIssueConfig}; #[derive(Clone)] pub struct IssueService { pub db: Db, pub kv: Arc, pub config: SharedIssueConfig, pub jwt: JwtState, pub storage: Arc, } impl IssueService { pub fn new( db: Db, kv: Arc, jwt: JwtState, storage: Arc, ) -> Self { Self { db, kv, config: Arc::new(IssueConfig::default()), jwt, storage, } } pub fn with_config(mut self, config: SharedIssueConfig) -> Self { self.config = config; self } } impl jwt::HasJwtState for IssueService { fn jwt_state(&self) -> &JwtState { &self.jwt } } impl rate_limit::RateLimitProvider for IssueService { fn rate_limit_kv(&self) -> Arc { self.kv.clone() } fn rate_limit_settings(&self) -> Arc { Arc::new(rate_limit::RateLimitConfig::default()) } }