---
# System prepended metadata

title: Specifiche per realizzazione almanacco digitale degli eventi

---

# Specifiche per realizzazione almanacco digitale degli eventi

## Riepilogo
La proposta verte sulla realizzazione di una piattaforma in grado di organizzare in modo facilmente fruibile gli eventi realizzati in città.
Gli eventi potranno essere descritti da coordinate geografiche e temporali e da eventuali link esterni.

## Descrizione delle funzionalità

* Gli eventi saranno descritti dalle seguenti informazioni
    * Nome
    * Tipologia
    * Artista o organizzatore o responsabile (singolo o multiplo)
    * Luogo (singolo o multiplo)
    * Data (singola o multipla)
    * Orario (singolo o multiplo)
    * Descrizione
    * Link di informazioni
    * Link di prenotazione
    * Tag (singolo o multiplo)

* I dati degli eventi potranno essere immagazzinati in un database OpenData per favorirne l'utilizzo da parte di altre iniziative.
  La piattaforma Yucca potrebbe essere il backend ottimale.
  
* Gli eventi potranno essere inseriti da organizzatori accreditati.
  L'accreditamento dovrà essere legato ad un metodo di identificazione del facente richiesta, per esempio tramite SPID/CIE.
  
* L'inserimento degli eventi potrà essere moderato da alcuni amministratori.
  Gli eventi non ancora moderati potranno essere inseriti in un database collaterale in attesa di moderazione.
  
* La fruizione degli eventi dovrà avvenire tramite una webapp client-side.
  L'applicazione dovrà essere eseguita localmente sui device degli utenti.
  Le informazioni necessarie alla webapp (immagazzinate localmente sul suo device e non condivise in uscita) sono:
  * Coordinate di geolocalizzazione del device (GPS o altro in background)
  * Orario del giorno e data
  * Tag sottoscritti dall'utente
  * Dati personali per semplificare la prenotazione di biglietti e posti
  
  La webapp utilizzerà tali informazioni internamente per filtrare l'elenco degli eventi scaricati dal database pubblico al fine di offrire all'utente:
  * Un elenco di tutti gli eventi
  * Un elenco degli eventi pertinenti ai tag sottoscritti
  * Notifiche riguardanti gli eventi in procinto di iniziare nei dintorni (triangolazione con coordinate e ora)

  Gli elenchi degli eventi (quello globale e quello basato sui tag) potranno essere visualizzati in due modalità distinte:
  * **Modalità geografica:** una mappa Open Street Map o similare con indicatori ciccabili degli eventi.
  * **Modalità cronologica:** un calendario per data ed orario con brevi descrizioni, a scorrimento continuo verticale.

## Specifiche tecniche e schemi
### Diagramma di relazione
```mermaid
erDiagram   
    Database_buffer ||--o{ Evento : contiene
    Organizzatori }o--|| Database_buffer : popolano
    Moderatori }o--|| Database_buffer : leggono
    Moderatori }o--|| Database_pubblico : popolano
    Database_pubblico ||--o{ Evento : contiene
    Utente ||--|| Webapp : configura
    Webapp }o--|| Database_pubblico : legge
    Webapp ||--|| Mappa : genera
    Webapp ||--|| Calendario : genera
    Webapp ||--o{ Notifica : invia
```

### Diagramma di sequenza
```mermaid
sequenceDiagram
    Organizzatore->>Database buffer: inserimento nuovo evento
    
    Database buffer->>Moderatore: moderazione nuovi eventi
    
    alt accettato
        Moderatore->>Database pubblico: pubblicazione evento
    end
    
    Database pubblico->>Webapp: lettura del database
    
    loop
        Webapp->>Elenco eventi: creazione
        activate Elenco eventi
        Webapp->>Elenco eventi filtrati: creazione
        activate Elenco eventi filtrati
    end
    
    alt app aperta
        par
            activate Mappa
            Elenco eventi->>Mappa: rendering
            Elenco eventi filtrati->>Mappa: rendering
        and
            activate Calendario
            Elenco eventi->>Calendario: rendering
            Elenco eventi filtrati->>Calendario: rendering
        end
    end
    
    Webapp->>Notifiche: generazione e invio
    
    Notifiche->>Utente: ricezione
    Mappa->>Utente: consultazione
    Calendario->>Utente: consultazione
	
    deactivate Elenco eventi
	deactivate Elenco eventi filtrati
    deactivate Mappa
    deactivate Calendario
```

### Diagramma delle classi
```mermaid
classDiagram
    class Evento {
        string name
        string type
        List~string~ organisers
        List~string~ places
        List~date_type~ dates
        string description
        string info_url
        string book_url
        List~string~ tags
        uint ID
    }
    
    class Webapp {
        coord_type current_location
        date_type current_date
        int location_range
        date_interval date_range
        List~string~ subscribed_tags
        List~uint~ fav_IDs
    }
```