Updating structure
This commit is contained in:
@@ -0,0 +1,117 @@
|
||||
---
|
||||
sessionId: session-260925-234832-1pc0
|
||||
---
|
||||
|
||||
# Requirements
|
||||
|
||||
### Overview & Goals
|
||||
Rename all projects in the repository from single-word names (`Build`, `Deploy`, `Model`, `Web`) to qualified names starting with the `ZeroSpace.` prefix (`ZeroSpace.Build`, `ZeroSpace.Deploy`, `ZeroSpace.Model`, `ZeroSpace.Web`). Ensure all solution definitions, project files, folder paths, project references, namespaces, and script paths are updated consistently.
|
||||
|
||||
### Scope
|
||||
- **In Scope:**
|
||||
- Renaming project directories: `ZS/Build` → `ZS/ZeroSpace.Build`, `ZS/Deploy` → `ZS/ZeroSpace.Deploy`, `ZS/Model` → `ZS/ZeroSpace.Model`, `ZS/Web` → `ZS/ZeroSpace.Web`.
|
||||
- Renaming `.csproj` files: `Build.csproj` → `ZeroSpace.Build.csproj`, `Deploy.csproj` → `ZeroSpace.Deploy.csproj`, `Model.csproj` → `ZeroSpace.Model.csproj`, `Web.csproj` → `ZeroSpace.Web.csproj`.
|
||||
- Updating `ZS/ZeroSpace.sln` project declarations and configuration mappings.
|
||||
- Updating `<ProjectReference>` in `ZeroSpace.Web.csproj`.
|
||||
- Updating C# namespaces and `@using` directives to match the `ZeroSpace.*` convention.
|
||||
- Updating hardcoded project/folder paths in `ZeroSpace.Build/Program.cs` and `ZeroSpace.Deploy/Program.cs`.
|
||||
- **Out of Scope:**
|
||||
- Modifying business logic or UI behavior in the Blazor web application.
|
||||
- Renaming Markdown documentation files under `zs.docs`.
|
||||
|
||||
# Technical Design
|
||||
|
||||
### Current Implementation
|
||||
The solution contains 4 projects in `ZS/`:
|
||||
- `ZS/Model/Model.csproj`: Class library declaring `namespace Model;`.
|
||||
- `ZS/Build/Build.csproj`: Console generator referencing `Model/Units.g.cs` and scanning for `ZS.sln`.
|
||||
- `ZS/Deploy/Deploy.csproj`: Deployment tool targeting `../Web/Web.csproj`.
|
||||
- `ZS/Web/Web.csproj`: Blazor WebAssembly app referencing `..\Model\Model.csproj` and using `Web`, `Web.Layout`, and `Model`.
|
||||
- `ZS/ZeroSpace.sln`: Solution listing `Web`, `Build`, `Model`, and `Deploy`.
|
||||
|
||||
### Key Decisions
|
||||
- **Rename Project Directories:** Project folder names will be updated to match the project names (`ZeroSpace.Build`, `ZeroSpace.Deploy`, `ZeroSpace.Model`, `ZeroSpace.Web`) to maintain standard .NET convention where directory name matches the assembly/project name.
|
||||
- **Update Namespaces:** Align namespaces (`ZeroSpace.Model`, `ZeroSpace.Web`) with project naming for consistency across the solution.
|
||||
- **Fix Solution Search in Build Tool:** Update `FindSolutionRoot` in `ZeroSpace.Build/Program.cs` to locate `ZeroSpace.sln` (or any `*.sln`).
|
||||
|
||||
### Proposed Changes
|
||||
- **Project Structure & Naming:**
|
||||
- `ZS/Build/` → `ZS/ZeroSpace.Build/`
|
||||
- `ZS/Build/Build.csproj` → `ZS/ZeroSpace.Build/ZeroSpace.Build.csproj`
|
||||
- `ZS/Deploy/` → `ZS/ZeroSpace.Deploy/`
|
||||
- `ZS/Deploy/Deploy.csproj` → `ZS/ZeroSpace.Deploy/ZeroSpace.Deploy.csproj`
|
||||
- `ZS/Model/` → `ZS/ZeroSpace.Model/`
|
||||
- `ZS/Model/Model.csproj` → `ZS/ZeroSpace.Model/ZeroSpace.Model.csproj`
|
||||
- `ZS/Web/` → `ZS/ZeroSpace.Web/`
|
||||
- `ZS/Web/Web.csproj` → `ZS/ZeroSpace.Web/ZeroSpace.Web.csproj`
|
||||
- **Solution File (`ZS/ZeroSpace.sln`):**
|
||||
- Update project name strings and project file paths to `ZeroSpace.*`.
|
||||
- **Project Reference (`ZS/ZeroSpace.Web/ZeroSpace.Web.csproj`):**
|
||||
- Change `..\Model\Model.csproj` to `..\ZeroSpace.Model\ZeroSpace.Model.csproj`.
|
||||
- **Source Files & Namespaces:**
|
||||
- `ZS/ZeroSpace.Model/UnitData.cs`: `namespace ZeroSpace.Model;`
|
||||
- `ZS/ZeroSpace.Model/UnitEfficiency.cs`: `namespace ZeroSpace.Model;`
|
||||
- `ZS/ZeroSpace.Model/Units.g.cs`: `namespace ZeroSpace.Model;`
|
||||
- `ZS/ZeroSpace.Build/Program.cs`: update model path to `ZeroSpace.Model`, generate `namespace ZeroSpace.Model;`, check `ZeroSpace.sln`.
|
||||
- `ZS/ZeroSpace.Deploy/Program.cs`: update path lookups for `ZeroSpace.Web` and `ZeroSpace.Web.csproj`.
|
||||
- `ZS/ZeroSpace.Web/Program.cs`: `using ZeroSpace.Web;`
|
||||
- `ZS/ZeroSpace.Web/_Imports.razor`: `@using ZeroSpace.Web`, `@using ZeroSpace.Web.Layout`, `@using ZeroSpace.Model`
|
||||
- `ZS/ZeroSpace.Web/Pages/Units.razor`: `@using ZeroSpace.Model`
|
||||
|
||||
### Architecture Diagram
|
||||
```mermaid
|
||||
graph TD
|
||||
Sln[ZS/ZeroSpace.sln] --> Web[ZS/ZeroSpace.Web]
|
||||
Sln --> Model[ZS/ZeroSpace.Model]
|
||||
Sln --> Build[ZS/ZeroSpace.Build]
|
||||
Sln --> Deploy[ZS/ZeroSpace.Deploy]
|
||||
Web --> Model
|
||||
Build -. generates Units.g.cs .-> Model
|
||||
Deploy -. publishes .-> Web
|
||||
```
|
||||
|
||||
# Testing
|
||||
|
||||
### Validation Approach
|
||||
- Verify solution builds cleanly via CLI (`dotnet build ZS/ZeroSpace.sln`).
|
||||
- Run code generation via `dotnet run --project ZS/ZeroSpace.Build/ZeroSpace.Build.csproj` to confirm `Units.g.cs` is generated with the proper namespace.
|
||||
- Validate project references and dependencies resolve without warnings or missing assembly errors.
|
||||
|
||||
### Key Scenarios
|
||||
- `dotnet build ZS/ZeroSpace.sln` succeeds with 0 errors and 0 warnings.
|
||||
- `ZeroSpace.Web` compiles with reference to `ZeroSpace.Model`.
|
||||
- `ZeroSpace.Build` locates `zs.docs` and writes generated code into `ZS/ZeroSpace.Model/Units.g.cs`.
|
||||
|
||||
### Edge Cases
|
||||
- Relative path traversal from build outputs (`AppContext.BaseDirectory` in `ZeroSpace.Deploy`) resolving the renamed `ZeroSpace.Web` project directory.
|
||||
- `FindSolutionRoot` helper locating `ZeroSpace.sln` accurately.
|
||||
|
||||
# Delivery Steps
|
||||
|
||||
### ✓ Step 1: Rename project directories and project files
|
||||
Project folders and `.csproj` files follow the `ZeroSpace.*` naming convention.
|
||||
|
||||
- Rename directory `ZS/Model` to `ZS/ZeroSpace.Model` and project file `Model.csproj` to `ZeroSpace.Model.csproj`.
|
||||
- Rename directory `ZS/Build` to `ZS/ZeroSpace.Build` and project file `Build.csproj` to `ZeroSpace.Build.csproj`.
|
||||
- Rename directory `ZS/Deploy` to `ZS/ZeroSpace.Deploy` and project file `Deploy.csproj` to `ZeroSpace.Deploy.csproj`.
|
||||
- Rename directory `ZS/Web` to `ZS/ZeroSpace.Web` and project file `Web.csproj` to `ZeroSpace.Web.csproj`.
|
||||
|
||||
### ✓ Step 2: Update solution file and project references
|
||||
`ZeroSpace.sln` and project reference paths correctly reference the renamed projects and directories.
|
||||
|
||||
- Update `ZS/ZeroSpace.sln` project entries and relative paths for `ZeroSpace.Web`, `ZeroSpace.Build`, `ZeroSpace.Model`, and `ZeroSpace.Deploy`.
|
||||
- Update project reference `<ProjectReference Include="..\ZeroSpace.Model\ZeroSpace.Model.csproj" />` in `ZS/ZeroSpace.Web/ZeroSpace.Web.csproj`.
|
||||
|
||||
### ✓ Step 3: Update namespaces and code path references
|
||||
Source code files, generator scripts, and deployment scripts use the updated `ZeroSpace.*` namespaces and folder paths.
|
||||
|
||||
- Update C# namespaces in `ZS/ZeroSpace.Model/UnitData.cs`, `ZS/ZeroSpace.Model/UnitEfficiency.cs`, and `ZS/ZeroSpace.Model/Units.g.cs` to `ZeroSpace.Model`.
|
||||
- Update code generator in `ZS/ZeroSpace.Build/Program.cs` to target `ZeroSpace.Model` folder, output `namespace ZeroSpace.Model;`, and verify solution root resolution for `ZeroSpace.sln`.
|
||||
- Update deploy script paths in `ZS/ZeroSpace.Deploy/Program.cs` to locate `ZeroSpace.Web` and `ZeroSpace.Web.csproj`.
|
||||
- Update `ZS/ZeroSpace.Web/Program.cs`, `ZS/ZeroSpace.Web/_Imports.razor`, and `ZS/ZeroSpace.Web/Pages/Units.razor` to reference `ZeroSpace.Web`, `ZeroSpace.Web.Layout`, and `ZeroSpace.Model`.
|
||||
|
||||
### ✓ Step 4: Validate solution build and code generation
|
||||
The entire solution builds cleanly with zero errors/warnings and code generation runs successfully.
|
||||
|
||||
- Run `dotnet build ZS/ZeroSpace.sln` to ensure all projects compile and link without errors.
|
||||
- Run `ZeroSpace.Build` console application to ensure unit code generation completes and updates `ZeroSpace.Model/Units.g.cs` correctly.
|
||||
Reference in New Issue
Block a user