Files
Encelado/TradingBot/docs/PROJECT_STRUCTURE.md
Alberto Balbo cc34d2b57f Riorganizzazione deployment, doc e publish automatico
- Spostata tutta la configurazione di deployment in /deployment (docker-compose, unraid-template, guide)
- Aggiunte e aggiornate guide dettagliate: publishing su Gitea, installazione Unraid, struttura progetto
- Migliorato target MSBuild: publish automatico su Gitea Registry da Visual Studio, log dettagliati, condizioni più robuste
- Aggiornato e ampliato .gitignore per escludere build, dati e file locali
- Rimossi file obsoleti dalla root (ora tutto in /deployment)
- Struttura più chiara, zero script esterni, documentazione completa e workflow di deploy semplificato
2025-12-17 23:15:46 +01:00

275 lines
7.8 KiB
Markdown

# ??? Project Structure - TradingBot
Struttura organizzata del progetto TradingBot con separazione chiara tra codice, configurazione e deployment.
---
## ?? Root Directory
```
TradingBot/
??? ?? Components/ # Blazor Components
? ??? ?? Layout/ # Layout components
? ??? ?? Pages/ # Page components
? ??? ?? Shared/ # Shared components
??? ?? deployment/ # ?? Deployment resources
? ??? docker-compose.yml # Docker Compose configuration
? ??? unraid-template.xml # Unraid template
? ??? PUBLISHING_GUIDE.md # Publishing guide
? ??? UNRAID_INSTALL.md # Unraid installation guide
? ??? README.md # Deployment index
??? ?? Models/ # Data models
??? ?? Properties/ # Project properties
? ??? ?? PublishProfiles/ # Visual Studio publish profiles
? ? ??? Docker.pubxml # Docker publish profile
? ? ??? FolderProfile.pubxml # Folder publish profile
? ??? launchSettings.json # Launch configurations
??? ?? Services/ # Business logic services
??? ?? wwwroot/ # Static web assets
? ??? ?? css/ # Stylesheets
? ??? ?? lib/ # Client libraries
??? .dockerignore # Docker ignore patterns
??? .gitignore # Git ignore patterns
??? appsettings.json # Application settings
??? appsettings.Development.json # Development settings
??? Dockerfile # Docker multi-stage build
??? Program.cs # Application entry point
??? README.md # Project documentation
??? TradingBot.csproj # Project file with MSBuild targets
```
---
## ?? Key Directories
### `/Components`
Blazor Server components organizzati per funzionalità:
- **Layout**: `MainLayout.razor`, `NavMenu.razor`, `ReconnectModal.razor`
- **Pages**: `Dashboard.razor`, `Market.razor`, `Portfolio.razor`, `Settings.razor`, `Strategies.razor`
- **Shared**: Componenti riutilizzabili
### `/Services`
Business logic e servizi core:
- `TradingBotService.cs` - Core trading service
- `SimulatedMarketDataService.cs` - Market data provider
- `SimpleMovingAverageStrategy.cs` - Trading strategy
- `SettingsService.cs` - Settings persistence
- `TechnicalAnalysis.cs` - Technical indicators
- Interface definitions
### `/Models`
Data models e DTOs:
- `Trade.cs` - Trade execution model
- `MarketPrice.cs` - Market data snapshot
- `TradingSignal.cs` - Strategy signal
- `PortfolioStatistics.cs` - Portfolio metrics
- `AssetConfiguration.cs` - Asset settings
- Enums (SignalType, TradeType, etc.)
### `/deployment` ??
**Nuova cartella organizzata** con tutti i file di deployment:
#### Guide
- `PUBLISHING_GUIDE.md` - Come pubblicare da Visual Studio
- `UNRAID_INSTALL.md` - Installazione su Unraid
- `README.md` - Indice deployment
#### Configuration
- `docker-compose.yml` - Docker Compose setup
- `unraid-template.xml` - Unraid 1-click install template
### `/Properties`
Visual Studio configuration:
#### PublishProfiles/
- `Docker.pubxml` - Docker container publish profile
- `FolderProfile.pubxml` - Folder-based publish profile
#### Other
- `launchSettings.json` - Debug/run configurations (HTTP, HTTPS, Docker)
### `/wwwroot`
Static web assets:
- `/css` - Custom stylesheets
- `/lib` - Client libraries (Bootstrap, etc.)
- Static files (favicon, etc.)
---
## ?? Configuration Files
### Root Level
| File | Purpose |
|------|---------|
| `TradingBot.csproj` | Project file with MSBuild post-build targets |
| `Dockerfile` | Multi-stage Docker build configuration |
| `Program.cs` | Application startup and service registration |
| `appsettings.json` | Production configuration |
| `appsettings.Development.json` | Development overrides |
| `.dockerignore` | Files excluded from Docker build |
| `.gitignore` | Files excluded from Git |
| `README.md` | Main project documentation |
---
## ?? Deployment Flow
```
Source Code (/) ? Build ? Docker Image ? Gitea Registry ? Unraid
?
Post-Build MSBuild Target
(TradingBot.csproj)
```
### Files Involved
1. **`TradingBot.csproj`**
- Contains `PushToGiteaRegistry` MSBuild target
- Hooks into `AfterTargets="DockerBuildImage"`
- Automatically tags and pushes to Gitea
2. **`Properties/PublishProfiles/Docker.pubxml`**
- Visual Studio publish profile
- Triggers Docker build
- Integrated with MSBuild post-build
3. **`Dockerfile`**
- Multi-stage build (build ? publish ? final)
- Optimized for .NET 10 and Blazor Server
- Creates minimal production image
4. **`deployment/docker-compose.yml`**
- Production deployment configuration
- Uses image from Gitea Registry
- Health checks and resource limits
5. **`deployment/unraid-template.xml`**
- Unraid Docker Manager template
- 1-click installation
- Pre-configured settings
---
## ?? Documentation Structure
```
/
??? README.md # Main project docs
??? deployment/
??? README.md # Deployment index
??? PUBLISHING_GUIDE.md # Publishing workflow
??? UNRAID_INSTALL.md # Unraid installation
```
### Reading Order
1. **[/README.md](../README.md)** - Start here for project overview
2. **[/deployment/PUBLISHING_GUIDE.md](../deployment/PUBLISHING_GUIDE.md)** - Learn how to publish
3. **[/deployment/UNRAID_INSTALL.md](../deployment/UNRAID_INSTALL.md)** - Deploy to Unraid
---
## ?? Development Workflow
### Local Development
```
1. Open solution in Visual Studio
2. F5 to run (uses launchSettings.json ? "TradingBot" profile)
3. Edit code with Hot Reload enabled
4. Test changes at http://localhost:5243
```
### Docker Local Testing
```
1. Switch to "Docker" profile in toolbar dropdown
2. F5 to run in container
3. Test changes at http://localhost:8080
4. Debug with breakpoints (works in container!)
```
### Publishing
```
1. Build ? Configuration Manager ? Release
2. Build ? Publish TradingBot
3. Select "Docker" profile
4. Click "Publish"
5. MSBuild post-build automatically pushes to Gitea
```
---
## ?? Sensitive Files (Not in Git)
These files are in `.gitignore`:
- `obj/` - Build intermediate files
- `bin/` - Build output
- `*.user` - User-specific VS settings
- `data/` - Runtime data (settings, trades)
- `.vs/` - Visual Studio cache
---
## ? Organization Benefits
### Before
```
TradingBot/
??? build-push-dockerhub.sh ? Script esterno
??? push-to-gitea.ps1 ? Script esterno
??? publish-all.ps1 ? Script esterno
??? full-workflow.bat ? Script esterno
??? docker-compose.yml ? Disordinato in root
??? unraid-template.xml ? Disordinato in root
??? ... (altri file misti)
```
### After ?
```
TradingBot/
??? deployment/ ? Tutto organizzato
? ??? docker-compose.yml ? Deployment configs
? ??? unraid-template.xml ? Templates
? ??? PUBLISHING_GUIDE.md ? Documentation
? ??? UNRAID_INSTALL.md ? Documentation
? ??? README.md ? Index
??? TradingBot.csproj ? Post-build integrato
??? (codice sorgente organizzato) ? Struttura chiara
```
**Vantaggi**:
- ? **Zero script esterni** - Tutto in MSBuild
- ? **Organizzazione chiara** - Deployment separato
- ? **Facile navigazione** - Struttura logica
- ? **Manutenibilità** - File raggruppati per scopo
- ? **Visual Studio friendly** - Tutto integrato nell'IDE
---
## ?? Summary
**Struttura pulita e professionale con:**
- ?? Codice organizzato per funzionalità
- ?? Deployment resources in cartella dedicata
- ?? Documentazione completa e accessibile
- ?? MSBuild integration per publishing automatico
- ? Zero dipendenze da script esterni
**Tutto gestibile da Visual Studio!** ??