-
Notifications
You must be signed in to change notification settings - Fork 0
Description
Overview
Establish an explicit Input Layer in the presentation structure by creating src/presentation/input/ and moving the CLI module there. This is the first step in transforming the presentation layer into a four-layer architecture (Input → Dispatch → Controllers → Views).
Parent Epic: #154 - Presentation Layer Reorganization
Related: Refactor Plan | Design Proposal
Impact: 🟢🟢 Medium - Clear separation of user input parsing from command execution
Effort: 🔵🔵 Medium - Straightforward move with import updates
Estimated Time: 2-3 hours
Goals
- Create
src/presentation/input/directory with proper module structure - Move
src/presentation/cli/tosrc/presentation/input/cli/ - Update all imports from
presentation::clitopresentation::input::cli - Add module documentation explaining the input layer's purpose
- Document this as first step in refactor plan
- Ensure old structure (
commands/,user_output/) remains functional
🏗️ Architecture Requirements
DDD Layer: Presentation
Module Path: src/presentation/input/
Pattern: Input Layer (Layer 1 of 4-layer presentation architecture)
Target Structure
After this proposal:
src/presentation/
├── input/ # ← NEW: Layer 1 - Input parsing
│ ├── mod.rs # Re-exports cli module
│ └── cli/ # ← MOVED from presentation/cli/
│ ├── mod.rs # Main CLI structure
│ └── global.rs # Global arguments
├── commands/ # ← UNCHANGED (for now)
├── user_output/ # ← UNCHANGED (for now)
├── progress.rs # ← UNCHANGED (for now)
└── errors.rs # ← UNCHANGED
Implementation Plan
Phase 1: Create Directory Structure (30 minutes)
- Create
src/presentation/input/directory - Create
src/presentation/input/mod.rswith module documentation - Verify directory structure
Phase 2: Move CLI Module (30 minutes)
- Move
src/presentation/cli/tosrc/presentation/input/cli/ - Verify files moved correctly
- Remove old
src/presentation/cli/directory
Phase 3: Update Imports (60 minutes)
- Update
src/presentation/mod.rs:pub mod input; - Update
src/main.rs:use torrust_tracker_deployer_lib::presentation::input::cli::Cli; - Search for all usages:
rg "use.*presentation::cli" --type rust - Update each file found with new path
presentation::input::cli
Phase 4: Documentation Updates (30 minutes)
- Add completion note to refactor plan
- Update
README.mdif it references presentation structure - Verify all documentation links still work
Phase 5: Testing & Verification (30 minutes)
- Run pre-commit checks:
./scripts/pre-commit.sh - Verify all commands work:
cargo run -- --help, etc. - Verify no compilation warnings
Acceptance Criteria
Note for Contributors: These criteria define what the PR reviewer will check. Use this as your pre-review checklist before submitting the PR.
Quality Checks:
- Pre-commit checks pass:
./scripts/pre-commit.sh
Structure:
-
src/presentation/input/directory exists -
src/presentation/input/mod.rscontains module documentation -
src/presentation/input/cli/contains moved CLI module - Old
src/presentation/cli/directory removed
Imports:
- All imports updated from
presentation::clitopresentation::input::cli - No references to old path remain
-
cargo buildcompletes without warnings
Functionality:
- All CLI commands work as before
-
--helpoutput unchanged - Command execution unchanged
- Old structure (
commands/,user_output/) still functional
Documentation:
-
input/mod.rsexplains input layer purpose - References refactor plan for context
- Refactor plan updated with completion status
- No broken documentation links
Mergeable State:
- Code compiles without warnings
- All tests pass
- Documentation accurate
- Ready to merge to main
- No intermediate or broken state
📚 Related Documentation
Created: November 6, 2025
Next Action: Begin Phase 1 (Create Directory Structure)