DevEats è una piattaforma moderna per recensire ristoranti, sviluppata con .NET 8, Blazor Server, Entity Framework Core e SQL Server. Il progetto è destinato al deployment su Azure (Azure SQL Database + Azure App Service).
- Blazor Server: Interfaccia utente reattiva e moderna
- Entity Framework Core: ORM per la gestione del database con migrazioni automatiche
- SQL Server / Azure SQL Database: Database relazionale scalabile
- Bootstrap 5: Design responsive e accattivante
- CI/CD: GitHub Actions per deployment automatico su Azure
- Test Unitari: Copertura completa con NUnit
- Seeding Automatico: Popolamento dati di esempio all'avvio
Il progetto segue un'architettura a 3 livelli:
DevEats/
├── src/
│ ├── DevEats.Core/ # Modelli di dominio e interfacce
│ │ ├── Models/ # Restaurant, Review
│ │ └── Interfaces/ # IRestaurantService, IReviewService
│ ├── DevEats.Infrastructure/ # Implementazione EF Core
│ │ ├── Data/ # DevEatsDbContext, DataSeeder
│ │ ├── Services/ # RestaurantService, ReviewService
│ │ └── Migrations/ # Migrazioni database EF Core
│ └── DevEats.Web/ # Applicazione Blazor Server
│ └── Pages/ # Index.razor, RestaurantDetails.razor
├── tests/
│ └── DevEats.Tests/ # Test unitari NUnit
└── scripts/
├── start-dev.sh/.ps1 # Script di avvio sviluppo
└── stop-dev.sh/.ps1 # Script di arresto
- .NET 8 SDK
- Docker Desktop (per sviluppo locale con SQL Server)
- Azure Account (opzionale, per deployment in produzione)
# 1. Clonare il repository
git clone https://github.com/your-username/deveats.git
cd deveats
# 2. Avviare tutto (Docker + Applicazione)
./scripts/start-dev.sh# 1. Clonare il repository
git clone https://github.com/your-username/deveats.git
cd deveats
# 2. Avviare tutto (Docker + Applicazione)
.\scripts\start-dev.ps1Lo script automaticamente:
- ✅ Avvia SQL Server 2022 in Docker
- ✅ Attende che il database sia pronto
- ✅ Avvia l'applicazione Blazor
- ✅ Applica automaticamente le migrazioni EF Core
- ✅ Popola i dati di esempio tramite DataSeeder
L'applicazione sarà disponibile su: https://localhost:5001
macOS/Linux:
./scripts/stop-dev.shWindows:
.\scripts\stop-dev.ps1Se preferisci maggiore controllo, puoi eseguire i passaggi manualmente:
# Avviare SQL Server
docker-compose up -d
# Verificare che sia in esecuzione
docker psdotnet restoredotnet buildcd src/DevEats.Web
dotnet runL'applicazione sarà disponibile su https://localhost:5001
Le migrazioni e il seeding dei dati avvengono automaticamente all'avvio dell'applicazione.
- Server:
localhost,1433 - Database:
deveats_dev(creato automaticamente) - Username:
sa - Password:
DevEats2024! - Connection String: Configurata in
appsettings.Development.json
# Visualizzare i log di SQL Server
docker logs deveats-sqlserver
# Rimuovere tutto inclusi i dati (reset completo)
docker-compose down -v
# Riavviare SQL Server
docker-compose restart
# Fermare i container
docker-compose down# Build dell'intera soluzione
dotnet build
# Build di un progetto specifico
dotnet build src/DevEats.Core/DevEats.Core.csproj
dotnet build src/DevEats.Infrastructure/DevEats.Infrastructure.csproj
dotnet build src/DevEats.Web/DevEats.Web.csproj
# Eseguire tutti i test
dotnet test
# Eseguire test di un progetto specifico
dotnet test tests/DevEats.Tests/DevEats.Tests.csproj
# Eseguire un test specifico
dotnet test --filter "FullyQualifiedName~DataSeederTests"# Aggiungere una nuova migrazione
cd src/DevEats.Infrastructure
dotnet ef migrations add NomeMigrazione --startup-project ../DevEats.Web
# Aggiornare il database manualmente (normalmente avviene automaticamente all'avvio)
dotnet ef database update --startup-project ../DevEats.Web
# Rimuovere l'ultima migrazione
dotnet ef migrations remove --startup-project ../DevEats.Web
# Reset completo del database
docker-compose down -v
docker-compose up -dLayer di dominio con modelli (Restaurant, Review) e interfacce dei servizi (IRestaurantService, IReviewService).
Implementazione dell'infrastruttura con:
- DevEatsDbContext: Context di Entity Framework Core
- Services: Implementazioni concrete dei servizi
- DataSeeder: Popola il database con dati di esempio all'avvio
- Migrations: Migrazioni EF Core per versioning del database
Applicazione Blazor Server con componenti Razor, configurazione Dependency Injection, middleware, auto-migrazione e seeding.
Test unitari con NUnit per la logica di seeding, operazioni sulle recensioni e operazioni sui ristoranti. I test utilizzano provider database in-memory per l'isolamento.
- Home Page: Lista di tutti i ristoranti con rating medio
- Dettagli Ristorante: Informazioni dettagliate e visualizzazione recensioni
- Aggiungi Recensione: Form per inviare nuove recensioni con rating
- Rating Automatico: Calcolo automatico della media dei voti
- Gestione Relazioni: Le recensioni sono collegate ai ristoranti con cascade delete
Il progetto include due workflow GitHub Actions:
- deploy-test.yml: Deploy automatico all'ambiente di test
- deploy-prod.yml: Deploy automatico all'ambiente di produzione
I workflow eseguono:
- Build con .NET 8
- Esecuzione dei test
- Publish su Azure Web App (richiede
AZURE_WEBAPP_PUBLISH_PROFILEsecret)
# Login ad Azure
az login
# Creare un resource group
az group create --name DevEatsRG --location westeurope
# Creare SQL Server
az sql server create \
--name deveats-sql-server \
--resource-group DevEatsRG \
--location westeurope \
--admin-user sqladmin \
--admin-password <YourStrongPassword>
# Configurare firewall per permettere servizi Azure
az sql server firewall-rule create \
--resource-group DevEatsRG \
--server deveats-sql-server \
--name AllowAzureServices \
--start-ip-address 0.0.0.0 \
--end-ip-address 0.0.0.0
# Creare database
az sql db create \
--resource-group DevEatsRG \
--server deveats-sql-server \
--name DevEatsDB \
--service-objective S0# Creare App Service Plan
az appservice plan create \
--name DevEatsPlan \
--resource-group DevEatsRG \
--sku B1 \
--is-linux
# Creare Web App
az webapp create \
--resource-group DevEatsRG \
--plan DevEatsPlan \
--name DevEats-WebApp \
--runtime "DOTNET|8.0"# Configurare la connection string nell'App Service
az webapp config connection-string set \
--resource-group DevEatsRG \
--name DevEats-WebApp \
--settings DefaultConnection="Server=tcp:deveats-sql-server.database.windows.net,1433;Initial Catalog=DevEatsDB;User ID=sqladmin;Password=<YourPassword>;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;" \
--connection-string-type SQLAzure-
Ottenere il Publish Profile:
az webapp deployment list-publishing-profiles \ --resource-group DevEatsRG \ --name DevEats-WebApp \ --xml
-
Aggiungere Secret in GitHub:
- Vai su GitHub Repository → Settings → Secrets and variables → Actions
- Crea un nuovo secret chiamato
AZURE_WEBAPP_PUBLISH_PROFILE - Incolla il contenuto XML del publish profile
-
Push sul branch main:
git add . git commit -m "Deploy to Azure" git push origin main
GitHub Actions eseguirà automaticamente build, test e deploy su Azure!
L'applicazione applica automaticamente le migrazioni EF Core e popola i dati di esempio all'avvio. Il DataSeeder verifica se i dati esistono già prima di inserirli.
I servizi sono iniettati tramite Dependency Injection e implementano le interfacce definite in DevEats.Core. Le recensioni sono collegate ai ristoranti tramite foreign key con cascade delete.
- Development: Usa Docker SQL Server su
localhost,1433con databasedeveats_dev - Production: Configurato per Azure SQL Database tramite secret
AZURE_WEBAPP_PUBLISH_PROFILE
- .NET 8: Framework applicativo
- Blazor Server: UI framework con SignalR
- Entity Framework Core: ORM con Code-First approach
- SQL Server 2022 / Azure SQL: Database relazionale
- Bootstrap 5: Framework CSS
- NUnit: Framework di testing
- GitHub Actions: CI/CD pipeline
- Docker: Containerizzazione per ambiente di sviluppo
IMPORTANTE: Dopo aver apportato modifiche al codice, è necessario:
- Eseguire il build dei progetti modificati per verificare la compilazione
- Eseguire la suite di test per assicurarsi che nulla si sia rotto
# Build della soluzione
dotnet build
# Eseguire i test
dotnet testNon saltare questi passaggi - rilevano problemi in anticipo e garantiscono la qualità del codice.
- Autenticazione utenti con Azure AD B2C
- Upload immagini ristoranti con Azure Blob Storage
- Ricerca e filtri avanzati
- Integrazione con Azure OpenAI per analisi sentiment recensioni
- Notifiche in tempo reale con SignalR
- Sistema di moderazione recensioni
- API REST per applicazioni mobile
Le pull request sono benvenute! Per modifiche importanti, apri prima una issue per discutere cosa vorresti cambiare.
Per domande o supporto, apri una issue su GitHub.
- GitHub spec-kit: https://github.com/github/spec-kit
- GitHub Copilot custom agents: https://docs.github.com/en/copilot/tutorials/customization-library/custom-agents/your-first-custom-agent
- GitHub Copilot custom prompts: https://docs.github.com/en/copilot/tutorials/customization-library/prompt-files/your-first-prompt-file
- Claude Code: https://code.claude.com/docs/en/overview