Skip to main content

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

MicroservizioEndpoint TotaliIntegratiMancantiCopertura
Auth159660%
Devices84450%
Billing54180%
Commands74357%
Events2020%
Geofences5050%
Positions21150%
Sharing7070%
Notification124833%

🔴 Funzionalità Completamente Mancanti

1. Geofences (Geofencing)

Non Integrato

Il servizio è completamente implementato ma NON integrato nella web-app.

Endpoint disponibili:

  • GET / - Lista geofences dell'utente
  • POST / - Crea nuova geofence (CIRCLE, POLYGON, LINESTRING in WKT)
  • GET /{geofence_id} - Dettaglio geofence
  • PUT /{geofence_id} - Modifica geofence
  • DELETE /{geofence_id} - Elimina geofence

Da implementare nella web-app:

  • Pagina /dashboard/geofences per 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 / deviceOffline
  • deviceMoving / deviceStopped
  • geofenceEnter / geofenceExit
  • alarm (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 accesso
  • DELETE /devices/{device_id}/shares/{user_id} - Revoca accesso
  • DELETE /devices/{device_id}/leave - Abbandona dispositivo condiviso
  • POST /invites/accept - Accetta invito
  • DELETE /invites/{token} - Annulla invito
  • GET /invites - Lista inviti pendenti per l'utente

Permessi granulari supportati:

  • position - Vedere posizioni in tempo reale
  • events - Vedere storico eventi
  • geofences - Gestire geofences
  • notifications - Ricevere notifiche
  • commands - 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

FunzioneStato
✅ Login/LogoutIntegrato
✅ RegistrazioneIntegrato
✅ Verifica emailIntegrato
✅ OAuth (Google/Apple/Facebook)Integrato
✅ Accept termsIntegrato
✅ Set password (OpenID users)Integrato
⚠️ Password resetNON integrato
⚠️ 2FA TOTP setup/disableNON integrato
⚠️ Update profile (phone, name)NON integrato
⚠️ Delete accountNON 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

FunzioneStato
✅ send commandIntegrato
✅ get command typesIntegrato
✅ get command statusIntegrato
⚠️ Command templatesNON integrato
⚠️ Batch commandsNON integrato

Da implementare:

  • Gestione template comandi personalizzati
  • UI per salvare comandi frequenti
  • Invio batch a più dispositivi (admin)

6. Notification - Funzionalità mancanti

FunzioneStato
✅ Device notification settingsIntegrato
✅ Device contacts CRUDIntegrato
⚠️ Global user settingsNON integrato
⚠️ Push token managementNON integrato (solo mobile)
⚠️ Notification historyNON integrato
⚠️ Mark as readNON 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

FunzioneStato
✅ Get current positionsIntegrato (via WebSocket)
⚠️ Historical positionsNON integrato
⚠️ Delete positionsNON 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

FunzioneStato
✅ List devicesIntegrato
✅ Get deviceIntegrato
✅ Update device (name)Integrato
✅ Claim deviceIntegrato
⚠️ Update attributes (category, icon, color)Parziale
⚠️ Unclaim deviceNON 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)

  1. Sharing - Funzionalità chiave per multi-utente
  2. Geofences - Feature richiesta per tracking
  3. Historical Positions - Traccia storica

Media Priorità (User Experience)

  1. Events History - Cronologia eventi
  2. Password Reset - Essenziale per self-service
  3. Notification Center - Centro notifiche

Bassa Priorità (Nice to Have)

  1. 2FA Setup - Sicurezza avanzata
  2. Command Templates - Power user feature
  3. Profile Management - Modifica profilo
  4. 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

  1. /dashboard/geofences - Gestione geofences
  2. /dashboard/history - Storico posizioni
  3. /dashboard/events - Timeline eventi
  4. /dashboard/notifications - Centro notifiche
  5. /dashboard/sharing o dialog in device settings
  6. /auth/reset-password - Reset password
  7. /dashboard/settings/security - 2FA e sicurezza
  8. /dashboard/settings/profile - Modifica profilo

Analisi generata il 22 Dicembre 2024