Skip to content

Commit 0a44d01

Browse files
committed
refactor: [#1298] remove duplicate code
1 parent 3ce6fb2 commit 0a44d01

File tree

10 files changed

+173
-155
lines changed

10 files changed

+173
-155
lines changed

packages/tracker-api-core/src/container.rs

+28-23
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
11
use std::sync::Arc;
22

3+
use bittorrent_http_tracker_core::container::HttpTrackerCoreContainer;
34
use bittorrent_tracker_core::authentication::handler::KeysHandler;
45
use bittorrent_tracker_core::container::TrackerCoreContainer;
56
use bittorrent_tracker_core::torrent::repository::in_memory::InMemoryTorrentRepository;
67
use bittorrent_tracker_core::whitelist::manager::WhitelistManager;
8+
use bittorrent_udp_tracker_core::container::UdpTrackerCoreContainer;
79
use bittorrent_udp_tracker_core::services::banning::BanService;
8-
use bittorrent_udp_tracker_core::{self, MAX_CONNECTION_ID_ERRORS_PER_IP};
10+
use bittorrent_udp_tracker_core::{self};
911
use tokio::sync::RwLock;
10-
use torrust_tracker_configuration::{Core, HttpApi};
12+
use torrust_tracker_configuration::{Core, HttpApi, HttpTracker, UdpTracker};
1113

12-
pub struct HttpApiContainer {
14+
pub struct TrackerHttpApiCoreContainer {
1315
// todo: replace with TrackerCoreContainer
1416
pub core_config: Arc<Core>,
1517
pub in_memory_torrent_repository: Arc<InMemoryTorrentRepository>,
@@ -26,40 +28,43 @@ pub struct HttpApiContainer {
2628
pub http_api_config: Arc<HttpApi>,
2729
}
2830

29-
impl HttpApiContainer {
31+
impl TrackerHttpApiCoreContainer {
3032
#[must_use]
31-
pub fn initialize(core_config: &Arc<Core>, http_api_config: &Arc<HttpApi>) -> Arc<HttpApiContainer> {
33+
pub fn initialize(
34+
core_config: &Arc<Core>,
35+
http_tracker_config: &Arc<HttpTracker>,
36+
udp_tracker_config: &Arc<UdpTracker>,
37+
http_api_config: &Arc<HttpApi>,
38+
) -> Arc<TrackerHttpApiCoreContainer> {
3239
let tracker_core_container = Arc::new(TrackerCoreContainer::initialize(core_config));
33-
Self::initialize_from(&tracker_core_container, http_api_config)
40+
let http_tracker_core_container = HttpTrackerCoreContainer::initialize_from(&tracker_core_container, http_tracker_config);
41+
let udp_tracker_core_container = UdpTrackerCoreContainer::initialize_from(&tracker_core_container, udp_tracker_config);
42+
43+
Self::initialize_from(
44+
&tracker_core_container,
45+
&http_tracker_core_container,
46+
&udp_tracker_core_container,
47+
http_api_config,
48+
)
3449
}
3550

3651
#[must_use]
3752
pub fn initialize_from(
3853
tracker_core_container: &Arc<TrackerCoreContainer>,
54+
http_tracker_core_container: &Arc<HttpTrackerCoreContainer>,
55+
udp_tracker_core_container: &Arc<UdpTrackerCoreContainer>,
3956
http_api_config: &Arc<HttpApi>,
40-
) -> Arc<HttpApiContainer> {
41-
// HTTP stats
42-
let (_http_stats_event_sender, http_stats_repository) =
43-
bittorrent_http_tracker_core::statistics::setup::factory(tracker_core_container.core_config.tracker_usage_statistics);
44-
let http_stats_repository = Arc::new(http_stats_repository);
45-
46-
// UDP stats
47-
let (_udp_stats_event_sender, udp_stats_repository) =
48-
bittorrent_udp_tracker_core::statistics::setup::factory(tracker_core_container.core_config.tracker_usage_statistics);
49-
let udp_stats_repository = Arc::new(udp_stats_repository);
50-
51-
let ban_service = Arc::new(RwLock::new(BanService::new(MAX_CONNECTION_ID_ERRORS_PER_IP)));
52-
53-
Arc::new(HttpApiContainer {
57+
) -> Arc<TrackerHttpApiCoreContainer> {
58+
Arc::new(TrackerHttpApiCoreContainer {
5459
core_config: tracker_core_container.core_config.clone(),
5560
in_memory_torrent_repository: tracker_core_container.in_memory_torrent_repository.clone(),
5661
keys_handler: tracker_core_container.keys_handler.clone(),
5762
whitelist_manager: tracker_core_container.whitelist_manager.clone(),
5863

59-
http_stats_repository: http_stats_repository.clone(),
64+
http_stats_repository: http_tracker_core_container.http_stats_repository.clone(),
6065

61-
ban_service: ban_service.clone(),
62-
udp_stats_repository: udp_stats_repository.clone(),
66+
ban_service: udp_tracker_core_container.ban_service.clone(),
67+
udp_stats_repository: udp_tracker_core_container.udp_stats_repository.clone(),
6368

6469
http_api_config: http_api_config.clone(),
6570
})

src/bootstrap/jobs/tracker_apis.rs

+15-6
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ use axum_server::tls_rustls::RustlsConfig;
2727
use tokio::task::JoinHandle;
2828
use torrust_axum_server::tsl::make_rust_tls;
2929
use torrust_server_lib::registar::ServiceRegistrationForm;
30-
use torrust_tracker_api_core::container::HttpApiContainer;
30+
use torrust_tracker_api_core::container::TrackerHttpApiCoreContainer;
3131
use torrust_tracker_configuration::AccessTokens;
3232
use tracing::instrument;
3333

@@ -56,7 +56,7 @@ pub struct ApiServerJobStarted();
5656
///
5757
#[instrument(skip(http_api_container, form))]
5858
pub async fn start_job(
59-
http_api_container: Arc<HttpApiContainer>,
59+
http_api_container: Arc<TrackerHttpApiCoreContainer>,
6060
form: ServiceRegistrationForm,
6161
version: Version,
6262
) -> Option<JoinHandle<()>> {
@@ -78,7 +78,7 @@ pub async fn start_job(
7878
async fn start_v1(
7979
socket: SocketAddr,
8080
tls: Option<RustlsConfig>,
81-
http_api_container: Arc<HttpApiContainer>,
81+
http_api_container: Arc<TrackerHttpApiCoreContainer>,
8282
form: ServiceRegistrationForm,
8383
access_tokens: Arc<AccessTokens>,
8484
) -> JoinHandle<()> {
@@ -98,7 +98,7 @@ mod tests {
9898
use std::sync::Arc;
9999

100100
use torrust_server_lib::registar::Registar;
101-
use torrust_tracker_api_core::container::HttpApiContainer;
101+
use torrust_tracker_api_core::container::TrackerHttpApiCoreContainer;
102102
use torrust_tracker_test_helpers::configuration::ephemeral_public;
103103

104104
use crate::bootstrap::app::initialize_global_services;
@@ -108,12 +108,21 @@ mod tests {
108108
#[tokio::test]
109109
async fn it_should_start_http_tracker() {
110110
let cfg = Arc::new(ephemeral_public());
111+
111112
let core_config = Arc::new(cfg.core.clone());
112-
let http_api_config = Arc::new(cfg.http_api.clone().unwrap());
113+
114+
let http_tracker_config = cfg.http_trackers.clone().expect("missing HTTP tracker configuration");
115+
let http_tracker_config = Arc::new(http_tracker_config[0].clone());
116+
117+
let udp_tracker_configurations = cfg.udp_trackers.clone().expect("missing UDP tracker configuration");
118+
let udp_tracker_config = Arc::new(udp_tracker_configurations[0].clone());
119+
120+
let http_api_config = Arc::new(cfg.http_api.clone().expect("missing HTTP API configuration").clone());
113121

114122
initialize_global_services(&cfg);
115123

116-
let http_api_container = HttpApiContainer::initialize(&core_config, &http_api_config);
124+
let http_api_container =
125+
TrackerHttpApiCoreContainer::initialize(&core_config, &http_tracker_config, &udp_tracker_config, &http_api_config);
117126

118127
let version = Version::V1;
119128

src/container.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ use bittorrent_udp_tracker_core::container::UdpTrackerCoreContainer;
1717
use bittorrent_udp_tracker_core::services::banning::BanService;
1818
use bittorrent_udp_tracker_core::{self, MAX_CONNECTION_ID_ERRORS_PER_IP};
1919
use tokio::sync::RwLock;
20-
use torrust_tracker_api_core::container::HttpApiContainer;
20+
use torrust_tracker_api_core::container::TrackerHttpApiCoreContainer;
2121
use torrust_tracker_configuration::{Configuration, Core, HttpApi, HttpTracker, UdpTracker};
2222
use tracing::instrument;
2323

@@ -78,8 +78,8 @@ impl AppContainer {
7878
}
7979

8080
#[must_use]
81-
pub fn http_api_container(&self, http_api_config: &Arc<HttpApi>) -> HttpApiContainer {
82-
HttpApiContainer {
81+
pub fn http_api_container(&self, http_api_config: &Arc<HttpApi>) -> TrackerHttpApiCoreContainer {
82+
TrackerHttpApiCoreContainer {
8383
http_api_config: http_api_config.clone(),
8484
core_config: self.core_config.clone(),
8585
in_memory_torrent_repository: self.in_memory_torrent_repository.clone(),

src/servers/apis/routes.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ use axum::routing::get;
1616
use axum::{middleware, BoxError, Router};
1717
use hyper::{Request, StatusCode};
1818
use torrust_server_lib::logging::Latency;
19-
use torrust_tracker_api_core::container::HttpApiContainer;
19+
use torrust_tracker_api_core::container::TrackerHttpApiCoreContainer;
2020
use torrust_tracker_configuration::{AccessTokens, DEFAULT_TIMEOUT};
2121
use tower::timeout::TimeoutLayer;
2222
use tower::ServiceBuilder;
@@ -36,7 +36,7 @@ use crate::servers::apis::API_LOG_TARGET;
3636
/// Add all API routes to the router.
3737
#[instrument(skip(http_api_container, access_tokens))]
3838
pub fn router(
39-
http_api_container: Arc<HttpApiContainer>,
39+
http_api_container: Arc<TrackerHttpApiCoreContainer>,
4040
access_tokens: Arc<AccessTokens>,
4141
server_socket_addr: SocketAddr,
4242
) -> Router {

src/servers/apis/server.rs

+11-6
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ use torrust_axum_server::signals::graceful_shutdown;
3838
use torrust_server_lib::logging::STARTED_ON;
3939
use torrust_server_lib::registar::{ServiceHealthCheckJob, ServiceRegistration, ServiceRegistrationForm};
4040
use torrust_server_lib::signals::{Halted, Started};
41-
use torrust_tracker_api_core::container::HttpApiContainer;
41+
use torrust_tracker_api_core::container::TrackerHttpApiCoreContainer;
4242
use torrust_tracker_configuration::AccessTokens;
4343
use tracing::{instrument, Level};
4444

@@ -125,7 +125,7 @@ impl ApiServer<Stopped> {
125125
#[instrument(skip(self, http_api_container, form, access_tokens), err, ret(Display, level = Level::INFO))]
126126
pub async fn start(
127127
self,
128-
http_api_container: Arc<HttpApiContainer>,
128+
http_api_container: Arc<TrackerHttpApiCoreContainer>,
129129
form: ServiceRegistrationForm,
130130
access_tokens: Arc<AccessTokens>,
131131
) -> Result<ApiServer<Running>, Error> {
@@ -238,7 +238,7 @@ impl Launcher {
238238
#[instrument(skip(self, http_api_container, access_tokens, tx_start, rx_halt))]
239239
pub fn start(
240240
&self,
241-
http_api_container: Arc<HttpApiContainer>,
241+
http_api_container: Arc<TrackerHttpApiCoreContainer>,
242242
access_tokens: Arc<AccessTokens>,
243243
tx_start: Sender<Started>,
244244
rx_halt: Receiver<Halted>,
@@ -296,7 +296,7 @@ mod tests {
296296

297297
use torrust_axum_server::tsl::make_rust_tls;
298298
use torrust_server_lib::registar::Registar;
299-
use torrust_tracker_api_core::container::HttpApiContainer;
299+
use torrust_tracker_api_core::container::TrackerHttpApiCoreContainer;
300300
use torrust_tracker_test_helpers::configuration::ephemeral_public;
301301

302302
use crate::bootstrap::app::initialize_global_services;
@@ -306,7 +306,11 @@ mod tests {
306306
async fn it_should_be_able_to_start_and_stop() {
307307
let cfg = Arc::new(ephemeral_public());
308308
let core_config = Arc::new(cfg.core.clone());
309-
let http_api_config = Arc::new(cfg.http_api.clone().unwrap());
309+
let http_tracker_config = cfg.http_trackers.clone().expect("missing HTTP tracker configuration");
310+
let http_tracker_config = Arc::new(http_tracker_config[0].clone());
311+
let udp_tracker_configurations = cfg.udp_trackers.clone().expect("missing UDP tracker configuration");
312+
let udp_tracker_config = Arc::new(udp_tracker_configurations[0].clone());
313+
let http_api_config = Arc::new(cfg.http_api.clone().expect("missing HTTP API configuration").clone());
310314

311315
initialize_global_services(&cfg);
312316

@@ -322,7 +326,8 @@ mod tests {
322326

323327
let register = &Registar::default();
324328

325-
let http_api_container = HttpApiContainer::initialize(&core_config, &http_api_config);
329+
let http_api_container =
330+
TrackerHttpApiCoreContainer::initialize(&core_config, &http_tracker_config, &udp_tracker_config, &http_api_config);
326331

327332
let started = stopped
328333
.start(http_api_container, register.give_form(), access_tokens)

src/servers/apis/v1/context/stats/routes.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@ use std::sync::Arc;
77

88
use axum::routing::get;
99
use axum::Router;
10-
use torrust_tracker_api_core::container::HttpApiContainer;
10+
use torrust_tracker_api_core::container::TrackerHttpApiCoreContainer;
1111

1212
use super::handlers::get_stats_handler;
1313

1414
/// It adds the routes to the router for the [`stats`](crate::servers::apis::v1::context::stats) API context.
15-
pub fn add(prefix: &str, router: Router, http_api_container: &Arc<HttpApiContainer>) -> Router {
15+
pub fn add(prefix: &str, router: Router, http_api_container: &Arc<TrackerHttpApiCoreContainer>) -> Router {
1616
router.route(
1717
&format!("{prefix}/stats"),
1818
get(get_stats_handler).with_state((

src/servers/apis/v1/routes.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@
22
use std::sync::Arc;
33

44
use axum::Router;
5-
use torrust_tracker_api_core::container::HttpApiContainer;
5+
use torrust_tracker_api_core::container::TrackerHttpApiCoreContainer;
66

77
use super::context::{auth_key, stats, torrent, whitelist};
88

99
/// Add the routes for the v1 API.
10-
pub fn add(prefix: &str, router: Router, http_api_container: &Arc<HttpApiContainer>) -> Router {
10+
pub fn add(prefix: &str, router: Router, http_api_container: &Arc<TrackerHttpApiCoreContainer>) -> Router {
1111
let v1_prefix = format!("{prefix}/v1");
1212

1313
let router = auth_key::routes::add(&v1_prefix, router, &http_api_container.keys_handler.clone());

0 commit comments

Comments
 (0)