Skip to content

Commit 4819f9c

Browse files
unhappychoiceclaude
andcommitted
refactor: separate ui module into clean architecture layers
- Move color_scheme, theme, color_mode to domain/models - Move theme_manager to domain/services - Move colors helper to presentation/ui - Update all references and imports throughout codebase - Maintain 580 tests passing 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent 740e808 commit 4819f9c

File tree

105 files changed

+137
-136
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

105 files changed

+137
-136
lines changed

src/domain/mod.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1-
pub mod models;
1+
pub mod models;
2+
pub mod services;
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
use crate::ui::color_mode::ColorMode;
1+
use crate::domain::models::color_mode::ColorMode;
22
use ratatui::style::Color;
33
use serde::{Deserialize, Serialize};
44
use std::collections::HashMap;
55

6-
const LANG_DARK: &str = include_str!("../../assets/languages/lang_dark.json");
7-
const LANG_LIGHT: &str = include_str!("../../assets/languages/lang_light.json");
8-
const LANG_ASCII: &str = include_str!("../../assets/languages/lang_ascii.json");
6+
const LANG_DARK: &str = include_str!("../../../assets/languages/lang_dark.json");
7+
const LANG_LIGHT: &str = include_str!("../../../assets/languages/lang_light.json");
8+
const LANG_ASCII: &str = include_str!("../../../assets/languages/lang_ascii.json");
99

1010
#[derive(Debug, Clone, Serialize, Deserialize)]
1111
pub struct ThemeFile {

src/domain/models/config.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::ui::color_mode::ColorMode;
1+
use crate::domain::models::color_mode::ColorMode;
22
use serde::{Deserialize, Serialize};
33

44
#[derive(Debug, Clone, Serialize, Deserialize, Default)]

src/domain/models/mod.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
pub mod challenge;
22
pub mod chunk;
3+
pub mod color_mode;
4+
pub mod color_scheme;
35
pub mod config;
46
pub mod countdown;
57
pub mod git_repository;
68
pub mod rank;
79
pub mod session;
810
pub mod stage;
11+
pub mod theme;
912
pub mod total;
1013
pub mod version;
1114

src/domain/models/rank.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::ui::Colors;
1+
use crate::presentation::ui::Colors;
22

33
/// Represents a rank with associated metadata
44
#[derive(Debug, Clone, PartialEq)]
Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,23 @@
1-
use crate::ui::color_mode::ColorMode;
2-
use crate::ui::color_scheme::ColorScheme;
1+
use crate::domain::models::color_mode::ColorMode;
2+
use crate::domain::models::color_scheme::ColorScheme;
33
use serde::{Deserialize, Serialize};
44

55
const THEME_FILES: &[&str] = &[
6-
include_str!("../../assets/themes/default.json"),
7-
include_str!("../../assets/themes/original.json"),
8-
include_str!("../../assets/themes/ascii.json"),
9-
include_str!("../../assets/themes/aurora.json"),
10-
include_str!("../../assets/themes/blood_oath.json"),
11-
include_str!("../../assets/themes/cyber_void.json"),
12-
include_str!("../../assets/themes/eclipse.json"),
13-
include_str!("../../assets/themes/glacier.json"),
14-
include_str!("../../assets/themes/inferno.json"),
15-
include_str!("../../assets/themes/neon_abyss.json"),
16-
include_str!("../../assets/themes/oblivion.json"),
17-
include_str!("../../assets/themes/runic.json"),
18-
include_str!("../../assets/themes/spectral.json"),
19-
include_str!("../../assets/themes/starforge.json"),
20-
include_str!("../../assets/themes/venom.json"),
6+
include_str!("../../../assets/themes/default.json"),
7+
include_str!("../../../assets/themes/original.json"),
8+
include_str!("../../../assets/themes/ascii.json"),
9+
include_str!("../../../assets/themes/aurora.json"),
10+
include_str!("../../../assets/themes/blood_oath.json"),
11+
include_str!("../../../assets/themes/cyber_void.json"),
12+
include_str!("../../../assets/themes/eclipse.json"),
13+
include_str!("../../../assets/themes/glacier.json"),
14+
include_str!("../../../assets/themes/inferno.json"),
15+
include_str!("../../../assets/themes/neon_abyss.json"),
16+
include_str!("../../../assets/themes/oblivion.json"),
17+
include_str!("../../../assets/themes/runic.json"),
18+
include_str!("../../../assets/themes/spectral.json"),
19+
include_str!("../../../assets/themes/starforge.json"),
20+
include_str!("../../../assets/themes/venom.json"),
2121
];
2222

2323
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
@@ -44,7 +44,7 @@ impl Theme {
4444
THEME_FILES
4545
.iter()
4646
.map(|json| {
47-
let theme_file: crate::ui::color_scheme::ThemeFile =
47+
let theme_file: crate::domain::models::color_scheme::ThemeFile =
4848
serde_json::from_str(json).expect("Failed to parse theme JSON");
4949

5050
let light = ColorScheme::from_theme_file(&theme_file, &ColorMode::Light);

src/domain/services/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
pub mod theme_manager;
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use crate::infrastructure::config::ConfigManager;
2-
use crate::ui::color_mode::ColorMode;
3-
use crate::ui::color_scheme::{ColorScheme, CustomThemeFile, ThemeFile};
4-
use crate::ui::theme::Theme;
2+
use super::super::models::color_mode::ColorMode;
3+
use super::super::models::color_scheme::{ColorScheme, CustomThemeFile, ThemeFile};
4+
use super::super::models::theme::Theme;
55
use once_cell::sync::Lazy;
66

77
pub static THEME_MANAGER: Lazy<std::sync::RwLock<ThemeManager>> = Lazy::new(|| {
@@ -110,7 +110,7 @@ impl ThemeManager {
110110
}
111111

112112
// Create default custom theme based on the default theme
113-
let default_theme_json = include_str!("../../assets/themes/default.json");
113+
let default_theme_json = include_str!("../../../assets/themes/default.json");
114114
let default_theme_file: ThemeFile = serde_json::from_str(default_theme_json)?;
115115

116116
let custom_theme = CustomThemeFile {

src/extractor/models/language.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::ui::Colors;
1+
use crate::presentation::ui::Colors;
22
use std::hash::{Hash, Hasher};
33

44
pub trait Language: std::fmt::Debug + Send + Sync {
@@ -137,11 +137,11 @@ impl LanguageRegistry {
137137
Some(lang) => Self::get_by_name(lang)
138138
.map(|l| l.color())
139139
.unwrap_or_else(|| {
140-
use crate::ui::Colors;
140+
use crate::presentation::ui::Colors;
141141
Colors::lang_default()
142142
}),
143143
None => {
144-
use crate::ui::Colors;
144+
use crate::presentation::ui::Colors;
145145
Colors::lang_default()
146146
}
147147
}

0 commit comments

Comments
 (0)