From 6a2c35a74a6b1640f883d1bfd8b781f436138165 Mon Sep 17 00:00:00 2001 From: "Yu Squire[ Yu, Tsung-Ying ]" Date: Tue, 1 Jul 2025 12:23:25 +0800 Subject: [PATCH] BLOG-56 refactor: remove controller initialization from container --- .../src/adapter/delivery/post_controller.rs | 5 ++- .../use_case/get_all_post_info_use_case.rs | 4 ++- .../post/src/framework/web/post_web_routes.rs | 31 +++++++++++++++---- backend/server/src/container.rs | 18 +++++------ backend/server/src/main.rs | 6 ++-- 5 files changed, 42 insertions(+), 22 deletions(-) diff --git a/backend/feature/post/src/adapter/delivery/post_controller.rs b/backend/feature/post/src/adapter/delivery/post_controller.rs index 861bfb8..5d67cce 100644 --- a/backend/feature/post/src/adapter/delivery/post_controller.rs +++ b/backend/feature/post/src/adapter/delivery/post_controller.rs @@ -45,7 +45,10 @@ impl PostController for PostControllerImpl { &self, is_published_only: bool, ) -> Result, PostError> { - let result = self.get_all_post_info_use_case.execute(is_published_only).await; + let result = self + .get_all_post_info_use_case + .execute(is_published_only) + .await; result.map(|post_info_list| { let post_info_response_dto_list: Vec = post_info_list diff --git a/backend/feature/post/src/application/use_case/get_all_post_info_use_case.rs b/backend/feature/post/src/application/use_case/get_all_post_info_use_case.rs index f2895d5..1084849 100644 --- a/backend/feature/post/src/application/use_case/get_all_post_info_use_case.rs +++ b/backend/feature/post/src/application/use_case/get_all_post_info_use_case.rs @@ -25,6 +25,8 @@ impl GetAllPostInfoUseCaseImpl { #[async_trait] impl GetAllPostInfoUseCase for GetAllPostInfoUseCaseImpl { async fn execute(&self, is_published_only: bool) -> Result, PostError> { - self.post_repository.get_all_post_info(is_published_only).await + self.post_repository + .get_all_post_info(is_published_only) + .await } } diff --git a/backend/feature/post/src/framework/web/post_web_routes.rs b/backend/feature/post/src/framework/web/post_web_routes.rs index b403829..b773adf 100644 --- a/backend/feature/post/src/framework/web/post_web_routes.rs +++ b/backend/feature/post/src/framework/web/post_web_routes.rs @@ -1,10 +1,17 @@ -use std::sync::Arc; - use actix_web::{HttpResponse, Responder, web}; use crate::{ - adapter::delivery::{post_controller::PostController, post_info_query_dto::PostQueryDto}, - application::error::post_error::PostError, + adapter::delivery::{ + post_controller::{PostController, PostControllerImpl}, + post_info_query_dto::PostQueryDto, + }, + application::{ + error::post_error::PostError, + use_case::{ + get_all_post_info_use_case::GetAllPostInfoUseCase, + get_full_post_use_case::GetFullPostUseCase, + }, + }, }; pub fn configure_post_routes(cfg: &mut web::ServiceConfig) { @@ -16,9 +23,15 @@ pub fn configure_post_routes(cfg: &mut web::ServiceConfig) { } async fn get_all_post_info_handler( - post_controller: web::Data>, + get_all_post_info_use_case: web::Data, + get_full_post_use_case: web::Data, query: web::Query, ) -> impl Responder { + let post_controller = PostControllerImpl::new( + get_all_post_info_use_case.into_inner(), + get_full_post_use_case.into_inner(), + ); + let is_published_only = query.is_published_only.unwrap_or_else(|| true); let result = post_controller.get_all_post_info(is_published_only).await; @@ -32,9 +45,15 @@ async fn get_all_post_info_handler( } async fn get_full_post_handler( - post_controller: web::Data>, + get_all_post_info_use_case: web::Data, + get_full_post_use_case: web::Data, path: web::Path, ) -> impl Responder { + let post_controller = PostControllerImpl::new( + get_all_post_info_use_case.into_inner(), + get_full_post_use_case.into_inner(), + ); + let id = path.into_inner(); let result = post_controller.get_full_post(id).await; diff --git a/backend/server/src/container.rs b/backend/server/src/container.rs index b1558a0..b6bb7ce 100644 --- a/backend/server/src/container.rs +++ b/backend/server/src/container.rs @@ -1,20 +1,18 @@ use std::sync::Arc; use post::{ - adapter::{ - delivery::post_controller::{PostController, PostControllerImpl}, - gateway::post_repository_impl::PostRepositoryImpl, - }, + adapter::gateway::post_repository_impl::PostRepositoryImpl, application::use_case::{ - get_all_post_info_use_case::GetAllPostInfoUseCaseImpl, - get_full_post_use_case::GetFullPostUseCaseImpl, + get_all_post_info_use_case::{GetAllPostInfoUseCase, GetAllPostInfoUseCaseImpl}, + get_full_post_use_case::{GetFullPostUseCase, GetFullPostUseCaseImpl}, }, framework::db::post_db_service_impl::PostDbServiceImpl, }; use sqlx::{Pool, Postgres}; pub struct Container { - pub post_controller: Arc, + pub get_all_post_info_use_case: Arc, + pub get_full_post_use_case: Arc, } impl Container { @@ -27,11 +25,9 @@ impl Container { Arc::new(GetAllPostInfoUseCaseImpl::new(post_repository.clone())); let get_full_post_use_case = Arc::new(GetFullPostUseCaseImpl::new(post_repository.clone())); - let post_controller = Arc::new(PostControllerImpl::new( + Self { get_all_post_info_use_case, get_full_post_use_case, - )); - - Self { post_controller } + } } } diff --git a/backend/server/src/main.rs b/backend/server/src/main.rs index 320f2d0..e3550d3 100644 --- a/backend/server/src/main.rs +++ b/backend/server/src/main.rs @@ -51,10 +51,10 @@ fn create_app( Error = Error, >, > { - let container = Container::new(db_pool.clone()); + let container = Container::new(db_pool); App::new() - .app_data(web::Data::new(db_pool)) - .app_data(web::Data::new(container.post_controller)) + .app_data(web::Data::from(container.get_all_post_info_use_case)) + .app_data(web::Data::from(container.get_full_post_use_case)) .configure(configure_post_routes) }