arch: push wire types out of ClientApp, extract event_service, cleanup dead code
- ClientApp stores domain types, RepaintCommand carries DisplayHint + Vec<(String,Value)> - adapters no longer convert Wire→Domain (eliminated duplication in esp32 + desktop) - event_service in application layer handles LayoutChanged/WebhookDataReceived/ThemeChanged - bootstrap event_handler reduced to 10-line dispatcher - polling_service reuses event_service::apply_and_broadcast (deduplicated broadcast pattern) - AppState.config_service() replaces 11 inline ConfigService::new() calls - delete unused poll_interval_secs parameter chain - delete unused StoragePort/ClientConfig (zero implementations)
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
pub mod extractors;
|
||||
mod routes;
|
||||
|
||||
use application::ConfigService;
|
||||
use axum::Router;
|
||||
use domain::{
|
||||
AuthPort, BroadcastPort, ClientRegistry, ConfigRepository, EventPublisher, PasswordHashPort,
|
||||
@@ -36,6 +37,18 @@ impl<C, E, W, B, R, A, H> Clone for AppState<C, E, W, B, R, A, H> {
|
||||
}
|
||||
}
|
||||
|
||||
impl<C, E, W, B, R, A, H> AppState<C, E, W, B, R, A, H>
|
||||
where
|
||||
C: ConfigRepository,
|
||||
C::Error: std::fmt::Debug,
|
||||
E: EventPublisher,
|
||||
E::Error: std::fmt::Debug,
|
||||
{
|
||||
pub fn config_service(&self) -> ConfigService<'_, C, E> {
|
||||
ConfigService::new(self.config.as_ref(), self.events.as_ref())
|
||||
}
|
||||
}
|
||||
|
||||
pub fn router<C, E, W, B, R, A, H>(state: AppState<C, E, W, B, R, A, H>) -> Router
|
||||
where
|
||||
C: ConfigRepository + UserRepository + WidgetStateCache + Send + Sync + 'static,
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
use crate::AppState;
|
||||
use crate::extractors::AuthUser;
|
||||
use api_types::DataSourceDto;
|
||||
use application::ConfigService;
|
||||
|
||||
use axum::{
|
||||
extract::{Path, State},
|
||||
http::StatusCode,
|
||||
@@ -65,7 +65,7 @@ where
|
||||
let source = body
|
||||
.into_domain()
|
||||
.map_err(|e| (StatusCode::BAD_REQUEST, e))?;
|
||||
let svc = ConfigService::new(state.config.as_ref(), state.events.as_ref());
|
||||
let svc = state.config_service();
|
||||
svc.create_data_source(source)
|
||||
.await
|
||||
.map_err(|e| (StatusCode::INTERNAL_SERVER_ERROR, format!("{e}")))?;
|
||||
@@ -87,7 +87,7 @@ where
|
||||
let source = body
|
||||
.into_domain()
|
||||
.map_err(|e| (StatusCode::BAD_REQUEST, e))?;
|
||||
let svc = ConfigService::new(state.config.as_ref(), state.events.as_ref());
|
||||
let svc = state.config_service();
|
||||
svc.update_data_source(source)
|
||||
.await
|
||||
.map_err(|e| (StatusCode::INTERNAL_SERVER_ERROR, format!("{e}")))?;
|
||||
@@ -105,7 +105,7 @@ where
|
||||
E: EventPublisher,
|
||||
E::Error: std::fmt::Debug,
|
||||
{
|
||||
let svc = ConfigService::new(state.config.as_ref(), state.events.as_ref());
|
||||
let svc = state.config_service();
|
||||
svc.delete_data_source(id)
|
||||
.await
|
||||
.map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
use crate::AppState;
|
||||
use crate::extractors::AuthUser;
|
||||
use api_types::LayoutDto;
|
||||
use application::ConfigService;
|
||||
|
||||
use axum::{extract::State, http::StatusCode, response::Json};
|
||||
use domain::{ConfigRepository, EventPublisher};
|
||||
|
||||
@@ -39,7 +39,7 @@ where
|
||||
let layout = body
|
||||
.into_domain()
|
||||
.map_err(|e| (StatusCode::BAD_REQUEST, e))?;
|
||||
let svc = ConfigService::new(state.config.as_ref(), state.events.as_ref());
|
||||
let svc = state.config_service();
|
||||
svc.update_layout(layout)
|
||||
.await
|
||||
.map_err(|e| (StatusCode::INTERNAL_SERVER_ERROR, format!("{e}")))?;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
use crate::AppState;
|
||||
use crate::extractors::AuthUser;
|
||||
use api_types::{CreatePresetDto, PresetDto};
|
||||
use application::ConfigService;
|
||||
|
||||
use axum::{
|
||||
extract::{Path, State},
|
||||
http::StatusCode,
|
||||
@@ -65,7 +65,7 @@ where
|
||||
let preset = body
|
||||
.into_domain()
|
||||
.map_err(|e| (StatusCode::BAD_REQUEST, e))?;
|
||||
let svc = ConfigService::new(state.config.as_ref(), state.events.as_ref());
|
||||
let svc = state.config_service();
|
||||
svc.save_preset(preset)
|
||||
.await
|
||||
.map_err(|e| (StatusCode::INTERNAL_SERVER_ERROR, format!("{e}")))?;
|
||||
@@ -83,7 +83,7 @@ where
|
||||
E: EventPublisher,
|
||||
E::Error: std::fmt::Debug,
|
||||
{
|
||||
let svc = ConfigService::new(state.config.as_ref(), state.events.as_ref());
|
||||
let svc = state.config_service();
|
||||
svc.delete_preset(id)
|
||||
.await
|
||||
.map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?;
|
||||
@@ -101,7 +101,7 @@ where
|
||||
E: EventPublisher,
|
||||
E::Error: std::fmt::Debug,
|
||||
{
|
||||
let svc = ConfigService::new(state.config.as_ref(), state.events.as_ref());
|
||||
let svc = state.config_service();
|
||||
svc.load_preset(id)
|
||||
.await
|
||||
.map_err(|e| (StatusCode::INTERNAL_SERVER_ERROR, format!("{e}")))?;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
use crate::AppState;
|
||||
use crate::extractors::AuthUser;
|
||||
use api_types::ThemeDto;
|
||||
use application::ConfigService;
|
||||
|
||||
use axum::{extract::State, http::StatusCode, response::Json};
|
||||
use domain::{ConfigRepository, EventPublisher};
|
||||
|
||||
@@ -38,7 +38,7 @@ where
|
||||
E::Error: std::fmt::Debug,
|
||||
{
|
||||
let theme = body.into_domain();
|
||||
let svc = ConfigService::new(state.config.as_ref(), state.events.as_ref());
|
||||
let svc = state.config_service();
|
||||
svc.update_theme(theme)
|
||||
.await
|
||||
.map_err(|e| (StatusCode::INTERNAL_SERVER_ERROR, format!("{e}")))?;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
use crate::AppState;
|
||||
use crate::extractors::AuthUser;
|
||||
use api_types::{CreateWidgetDto, WidgetDto};
|
||||
use application::ConfigService;
|
||||
|
||||
use axum::{
|
||||
extract::{Path, State},
|
||||
http::StatusCode,
|
||||
@@ -65,7 +65,7 @@ where
|
||||
let widget = body
|
||||
.into_domain()
|
||||
.map_err(|e| (StatusCode::BAD_REQUEST, e))?;
|
||||
let svc = ConfigService::new(state.config.as_ref(), state.events.as_ref());
|
||||
let svc = state.config_service();
|
||||
svc.create_widget(widget)
|
||||
.await
|
||||
.map_err(|e| (StatusCode::INTERNAL_SERVER_ERROR, format!("{e}")))?;
|
||||
@@ -87,7 +87,7 @@ where
|
||||
let widget = body
|
||||
.into_domain()
|
||||
.map_err(|e| (StatusCode::BAD_REQUEST, e))?;
|
||||
let svc = ConfigService::new(state.config.as_ref(), state.events.as_ref());
|
||||
let svc = state.config_service();
|
||||
svc.update_widget(widget)
|
||||
.await
|
||||
.map_err(|e| (StatusCode::INTERNAL_SERVER_ERROR, format!("{e}")))?;
|
||||
@@ -105,7 +105,7 @@ where
|
||||
E: EventPublisher,
|
||||
E::Error: std::fmt::Debug,
|
||||
{
|
||||
let svc = ConfigService::new(state.config.as_ref(), state.events.as_ref());
|
||||
let svc = state.config_service();
|
||||
svc.delete_widget(id)
|
||||
.await
|
||||
.map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?;
|
||||
|
||||
Reference in New Issue
Block a user