# 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 } ```