Billing upgrade/downgrade, inviti in app e diretta YouTube da mobile.

Upgrade Stripe con addebito immediato; downgrade programmato a fine periodo.
UX billing più sobria con box info; icone piani. API inviti e OAuth YouTube
per staff trasmissione; deep link join; scelta partita programmata o nuova.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-06-02 22:15:27 +02:00
parent 2cb267f991
commit 566104aff4
49 changed files with 1615 additions and 173 deletions

59
docs/APP_YOUTUBE_LIVE.md Normal file
View File

@@ -0,0 +1,59 @@
# Diretta YouTube dallapp (invito staff)
Percorso per il **responsabile trasmissione** invitato via email: accede in app, collega **il proprio** canale YouTube e avvia la live.
## Prerequisiti (società)
- Piano **Premium Full** attivo
- `YOUTUBE_CLIENT_ID` / `YOUTUBE_CLIENT_SECRET` configurati sul server
- Partita programmata per la squadra
## 1. Invito
1. Il titolare società → **Responsabili trasmissione** → invita `tua@email.it`
2. Linvitato apre il link (web o **Apri invito nellapp**)
3. Registrazione / login con **la stessa email** dellinvito
4. Lapp accetta linvito automaticamente dopo il login
API: `GET /api/v1/invitations/:token`, `POST /api/v1/invitations/:token/accept`
## 2. Collega canale YouTube (tuo)
1. Nellapp: nuova diretta → passo **Piattaforma**
2. Tocca **YouTube Live** → si apre Google OAuth
3. **Avanzate** → continua (se app OAuth in verifica)
4. Scegli laccount del **tuo** canale → Consenti
5. Torna allapp → messaggio «Canale collegato»
Il token OAuth è salvato sulla **squadra**; chi collega deve essere `can_stream` (responsabile trasmissione o titolare).
## 3. Scegli la partita
Nella home app (**Partite**):
- **Partita programmata** — scegli dal calendario una gara già inserita (sito o app)
- **Nuova partita** — programma data/ora oppure **Avvia subito** senza orario
Poi tocca la card o conferma dal foglio: si apre il wizard (Partita → Trasmissione → …).
## 4. Avvia diretta
1. Nel wizard, seleziona **YouTube Live** (dopo il collegamento canale)
2. Completa i passi → **Camera**
3. Il telefono invia RTMP a MediaMTX; il server inolvia su YouTube con la stream key della live creata via API
## Sviluppo locale
- App: `flutter run --dart-define=API_BASE_URL=http://10.0.2.2:3000` (emulatore) o IP LAN del PC (telefono)
- Invito deep link: `matchlivetv://join/TOKEN` oppure incolla token aprendo `/login?invite=TOKEN`
- OAuth: utente in **Utenti di test** Google Cloud
## Troubleshooting
| Problema | Soluzione |
|----------|-----------|
| Nessuna squadra in app | Accetta invito con email corretta |
| YouTube disabilitato | Premium Full + collegamento canale |
| «Collega canale» | Tocca YouTube Live per OAuth da app |
| OAuth «app non verificata» | Utente di test Google + Avanzate |
| Live non su YouTube | Verifica relay ffmpeg / `stream_key` in sessione |