Analisi Funzionalità Mancanti: Microservizi vs Web-App
Questa analisi confronta le funzionalità disponibili nei microservizi backend di visla-platform con quelle attualmente integrate nella web-app visla-web.
📊 Stato per Microservizio
| Microservizio | Endpoint Totali | Integrati | Mancanti | Copertura |
|---|---|---|---|---|
| Auth | 15 | 9 | 6 | 60% |
| Devices | 8 | 4 | 4 | 50% |
| Billing | 5 | 4 | 1 | 80% |
| Commands | 7 | 4 | 3 | 57% |
| Events | 2 | 0 | 2 | 0% |
| Geofences | 5 | 0 | 5 | 0% |
| Positions | 2 | 1 | 1 | 50% |
| Sharing | 7 | 0 | 7 | 0% |
| Notification | 12 | 4 | 8 | 33% |
🔴 Funzionalità Completamente Mancanti
1. Geofences (Geofencing)
Non Integrato
Il servizio è completamente implementato ma NON integrato nella web-app.
Endpoint disponibili:
GET /- Lista geofences dell'utentePOST /- Crea nuova geofence (CIRCLE, POLYGON, LINESTRING in WKT)GET /{geofence_id}- Dettaglio geofencePUT /{geofence_id}- Modifica geofenceDELETE /{geofence_id}- Elimina geofence
Da implementare nella web-app:
- Pagina
/dashboard/geofencesper gestione geofences - Editor visuale su mappa per disegnare aree
- Collegamento geofences a dispositivi
- Notifiche per ingresso/uscita zone
2. Events (Storico Eventi)
Non Integrato
Nessuna UI per visualizzare lo storico eventi.
Endpoint disponibili:
GET /- Lista eventi con filtri (deviceId, type, from, to, limit, offset)GET /{event_id}- Dettaglio singolo evento
Tipi di eventi tracciati:
deviceOnline/deviceOfflinedeviceMoving/deviceStoppedgeofenceEnter/geofenceExitalarm(SOS, batteria bassa, manomissione, ecc.)
Da implementare nella web-app:
- Sezione "Cronologia Eventi" nella dashboard
- Timeline visuale per dispositivo
- Filtri per tipo evento e range temporale
- Notifiche push per eventi critici
3. Sharing (Condivisione Dispositivi)
Non Integrato
Il sistema di inviti e condivisione è completo ma manca l'UI.
Endpoint disponibili:
POST /devices/{device_id}/share- Invita utente (via email)GET /devices/{device_id}/shares- Lista utenti con accessoDELETE /devices/{device_id}/shares/{user_id}- Revoca accessoDELETE /devices/{device_id}/leave- Abbandona dispositivo condivisoPOST /invites/accept- Accetta invitoDELETE /invites/{token}- Annulla invitoGET /invites- Lista inviti pendenti per l'utente
Permessi granulari supportati:
position- Vedere posizioni in tempo realeevents- Vedere storico eventigeofences- Gestire geofencesnotifications- Ricevere notifichecommands- Inviare comandi
Da implementare nella web-app:
- Dialog "Condividi dispositivo" nel settings del device
- Gestione permessi per ogni utente condiviso
- Pagina "I miei inviti" per accettare/rifiutare
- Badge su dispositivi condivisi
🟡 Funzionalità Parzialmente Integrate
4. Auth - Funzionalità mancanti
| Funzione | Stato |
|---|---|
| ✅ Login/Logout | Integrato |
| ✅ Registrazione | Integrato |
| ✅ Verifica email | Integrato |
| ✅ OAuth (Google/Apple/Facebook) | Integrato |
| ✅ Accept terms | Integrato |
| ✅ Set password (OpenID users) | Integrato |
| ⚠️ Password reset | NON integrato |
| ⚠️ 2FA TOTP setup/disable | NON integrato |
| ⚠️ Update profile (phone, name) | NON integrato |
| ⚠️ Delete account | NON integrato |
Da implementare:
- Pagina "Password dimenticata" (
/auth/reset-password) - Sezione Sicurezza con setup 2FA (QR code per Google Authenticator)
- Sezione Profilo con modifica phone/name
- Sezione per eliminazione account
5. Commands - Funzionalità mancanti
| Funzione | Stato |
|---|---|
| ✅ send command | Integrato |
| ✅ get command types | Integrato |
| ✅ get command status | Integrato |
| ⚠️ Command templates | NON integrato |
| ⚠️ Batch commands | NON integrato |
Da implementare:
- Gestione template comandi personalizzati
- UI per salvare comandi frequenti
- Invio batch a più dispositivi (admin)
6. Notification - Funzionalità mancanti
| Funzione | Stato |
|---|---|
| ✅ Device notification settings | Integrato |
| ✅ Device contacts CRUD | Integrato |
| ⚠️ Global user settings | NON integrato |
| ⚠️ Push token management | NON integrato (solo mobile) |
| ⚠️ Notification history | NON integrato |
| ⚠️ Mark as read | NON integrato |
Da implementare:
- Pagina impostazioni notifiche globali
- Centro notifiche (bell icon con history)
- Mark as read per singola notifica
- Badge unread count
7. Positions - Funzionalità mancanti
| Funzione | Stato |
|---|---|
| ✅ Get current positions | Integrato (via WebSocket) |
| ⚠️ Historical positions | NON integrato |
| ⚠️ Delete positions | NON integrato |
Da implementare:
- Replay/traccia storica su mappa
- Date picker per range storico
- Export traccia (GPX/CSV)
- Amministrazione: elimina posizioni per range
8. Devices - Funzionalità mancanti
| Funzione | Stato |
|---|---|
| ✅ List devices | Integrato |
| ✅ Get device | Integrato |
| ✅ Update device (name) | Integrato |
| ✅ Claim device | Integrato |
| ⚠️ Update attributes (category, icon, color) | Parziale |
| ⚠️ Unclaim device | NON integrato |
Da implementare:
- Picker per icona/colore dispositivo
- Azione "Rimuovi dispositivo" (unclaim)
- Categorie dispositivo (auto, moto, persona, etc.)
📋 Priorità Suggerite per Implementazione
Alta Priorità (Core Features)
- Sharing - Funzionalità chiave per multi-utente
- Geofences - Feature richiesta per tracking
- Historical Positions - Traccia storica
Media Priorità (User Experience)
- Events History - Cronologia eventi
- Password Reset - Essenziale per self-service
- Notification Center - Centro notifiche
Bassa Priorità (Nice to Have)
- 2FA Setup - Sicurezza avanzata
- Command Templates - Power user feature
- Profile Management - Modifica profilo
- Delete Account - Compliance GDPR
🔧 Schema API Mancanti da Aggiungere a api.ts
// --- GEOFENCES ---
export interface Geofence {
id: number;
name: string;
description?: string;
area: string; // WKT format
calendarId?: number;
attributes?: Record<string, unknown>;
}
export async function getGeofences(): Promise<Geofence[]>;
export async function createGeofence(data: Partial<Geofence>): Promise<Geofence>;
export async function updateGeofence(id: number, data: Partial<Geofence>): Promise<Geofence>;
export async function deleteGeofence(id: number): Promise<void>;
// --- EVENTS ---
export interface Event {
id: number;
deviceId: number;
type: string;
eventTime: string;
positionId?: number;
geofenceId?: number;
attributes?: Record<string, unknown>;
}
export async function getEvents(params?: {
deviceId?: number;
type?: string;
from?: string;
to?: string;
limit?: number;
}): Promise<Event[]>;
// --- SHARING ---
export interface Share {
userId: number;
email: string;
name?: string;
permissions: SharePermissions;
sharedAt: string;
}
export interface SharePermissions {
position: boolean;
events: boolean;
geofences: boolean;
notifications: boolean;
commands: boolean;
}
export async function shareDevice(deviceId: number, email: string, permissions?: Partial<SharePermissions>): Promise<void>;
export async function getDeviceShares(deviceId: number): Promise<Share[]>;
export async function revokeShare(deviceId: number, userId: number): Promise<void>;
export async function leaveDevice(deviceId: number): Promise<void>;
export async function getPendingInvites(): Promise<ShareInvite[]>;
export async function acceptInvite(token: string): Promise<void>;
// --- AUTH ---
export async function requestPasswordReset(email: string): Promise<void>;
export async function resetPassword(token: string, password: string): Promise<void>;
export async function setup2FA(): Promise<{ secret: string; otpauth_url: string }>;
export async function verify2FA(code: string): Promise<{ backup_codes: string[] }>;
export async function disable2FA(): Promise<void>;
export async function deleteAccount(): Promise<void>;
// --- POSITIONS HISTORY ---
export async function getPositionHistory(deviceId: number, from: string, to: string): Promise<Position[]>;
export async function deletePositions(deviceId: number, from: string, to: string): Promise<void>;
🗂️ Pagine/Componenti da Creare
/dashboard/geofences- Gestione geofences/dashboard/history- Storico posizioni/dashboard/events- Timeline eventi/dashboard/notifications- Centro notifiche/dashboard/sharingo dialog in device settings/auth/reset-password- Reset password/dashboard/settings/security- 2FA e sicurezza/dashboard/settings/profile- Modifica profilo
Analisi generata il 22 Dicembre 2024