Skip to content

Zhey-on/workshops-project

Repository files navigation

Workshop App

Applicazione Laravel + Vue/Inertia per la gestione workshop con ruoli, iscrizioni, waiting list FIFO, reminder email e statistiche admin in tempo reale (polling).

Funzionalita principali

  • Ruoli utente: admin e employee
  • CRUD workshop (admin)
  • Iscrizione workshop (employee)
  • Waiting list con promozione automatica FIFO
  • Vincolo No Ubiquity: un utente non puo iscriversi a due workshop nello stesso slot orario
  • Reminder email ai partecipanti dei workshop del giorno successivo (academy:remind)
  • Dashboard admin con:
    • workshop piu popolare
    • contatore registrazioni live via polling

Stack tecnico

  • PHP 8.3+
  • Laravel 13
  • Vue 3 + Inertia.js + Vite
  • MySQL (runtime)
  • PHPUnit (test unit/feature)

Requisiti

  • PHP 8.3+
  • Composer
  • Node.js 18+ e npm
  • MySQL 8+ (o compatibile)
  • Docker (opzionale, consigliato per Mailpit)

Installazione

  1. Clona il repository e entra nella cartella progetto.
  2. Installa dipendenze backend e frontend.
  3. Configura l'ambiente.
  4. Esegui migrazioni e seed.
  5. Avvia applicazione.

Comandi:

composer install
npm install

cp .env.example .env
php artisan key:generate

Configura DB in .env (esempio MySQL):

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=workshop_app
DB_USERNAME=root
DB_PASSWORD=

Poi esegui:

php artisan migrate
php artisan db:seed

Avvio sviluppo (server + queue + log + vite):

composer run dev

In alternativa, avvio separato minimo:

php artisan serve
npm run dev

Accesso demo

Seeder utenti (password per tutti: password):

  • admin@workshop.test
  • employee@workshop.test
  • employee2@workshop.test
  • employee3@workshop.test
  • employee4@workshop.test
  • employee5@workshop.test

Test

Esegui tutti i test:

php artisan test

Esegui gruppi specifici:

php artisan test --filter=WorkshopFlowTest
php artisan test --filter=AdminDashboardStats
php artisan test --filter=AcademyRemindCommandTest

Nota: in ambiente test viene usato SQLite in-memory (configurato in phpunit.xml).

Seeder e dati di test

Seeder principali:

  • DatabaseSeeder -> esegue UserRoleSeeder + WorkshopSeeder
  • ReminderDemoSeeder -> crea workshop di domani + iscritti per test reminder

Comandi utili:

# Seeder base (utenti + workshop)
php artisan db:seed

# Solo utenti ruolo
php artisan db:seed --class=UserRoleSeeder

# Solo workshop
php artisan db:seed --class=WorkshopSeeder

# Dataset demo reminder (workshop domani + registrazioni)
php artisan db:seed --class=ReminderDemoSeeder

Reminder email da command line

Il comando academy:remind invia un'email di promemoria a tutti i partecipanti iscritti ai workshop in programma il giorno successivo.

php artisan academy:remind
# output: Reminder inviati: 3

Configurare il mailer per lo sviluppo locale

In locale non è necessario un server SMTP reale. Le opzioni consigliate sono due.


Opzione A — Mailpit (consigliata, richiede Docker)

Mailpit è uno strumento che intercetta tutte le email in uscita e le mostra in una inbox web. Non recapita mai nulla a destinatari reali: è completamente sicuro.

1. Avvia il container:

docker run -d --name workshop-mailpit \
  -p 1025:1025 \
  -p 8025:8025 \
  --restart unless-stopped \
  axllent/mailpit
Porta Funzione
1025 Server SMTP (MAIL_PORT)
8025 Inbox web → http://127.0.0.1:8025

2. Configura .env:

MAIL_MAILER=smtp
MAIL_HOST=127.0.0.1
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS="hello@workshop.test"
MAIL_FROM_NAME="${APP_NAME}"

3. Applica la configurazione e invia i reminder:

php artisan config:clear
php artisan db:seed --class=UserRoleSeeder
php artisan db:seed --class=ReminderDemoSeeder
php artisan academy:remind

Apri http://127.0.0.1:8025 per vedere le email nella inbox Mailpit.

Fermare/riavviare il container:

docker stop workshop-mailpit   # ferma
docker start workshop-mailpit  # riavvia (i dati vengono persi al riavvio)
docker rm -f workshop-mailpit  # rimuovi completamente

Opzione B — Driver log (senza Docker)

Se non hai Docker, puoi usare il driver log di Laravel: le email vengono scritte nel file di log invece di essere inviate.

MAIL_MAILER=log

Le email appariranno in storage/logs/laravel.log:

php artisan academy:remind
tail -f storage/logs/laravel.log | grep -A 20 "Message-ID"

Dashboard statistiche admin

Accedi come admin e vai su /dashboard.

Sezioni disponibili:

  • Future Workshops
  • Total Registrations (Live) aggiornato automaticamente (polling)
  • Most Popular Workshop

Build produzione

npm run build
php artisan optimize

Troubleshooting rapido

Se non vedi la UI aggiornata:

npm run build
php artisan optimize:clear
php artisan view:clear

Poi fai hard refresh del browser (Ctrl+Shift+R).

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages