Questo repository contiene il progetto WASA Text, un'applicazione web che simula le funzionalità di WhatsApp, sviluppato per l'esame di Web and Software Architecture (Programmazione Web - WASA) presso l'Università La Sapienza di Roma.
🏆 Valutazione conseguita: 30/30
WASA Text è una piattaforma di messaggistica istantanea progettata per replicare l'esperienza utente delle moderne app di chat. Il sistema permette agli utenti di registrarsi, cercare altri utenti, avviare conversazioni private o di gruppo e scambiare contenuti multimediali.
- Chat 1-to-1 e di Gruppo: Creazione dinamica di conversazioni singole e gruppi con foto personalizzabili.
- Messaggistica Avanzata: Invio di messaggi testuali e multimediali (foto).
- Interazioni: Possibilità di rispondere a messaggi specifici e aggiungere reazioni (emoji).
- Inoltro: Funzionalità per inoltrare messaggi verso altre chat o utenti.
- Gestione Profilo: Modifica del nome utente e della foto profilo.
- Aggiornamento in Tempo Reale: Sistema di polling per ricevere nuovi messaggi e aggiornamenti di stato.
Il progetto è stato realizzato seguendo rigorosi pattern architetturali per garantire scalabilità, manutenibilità e sicurezza.
Il cuore dell'applicazione è un server RESTful scritto in Go.
- Routing: Utilizza
julienschmidt/httprouterper un routing HTTP ad alte prestazioni e basso consumo di memoria. - Architettura: Struttura modulare che separa nettamente la logica di business (
service/api) dall'accesso ai dati (service/database), facilitando il testing e l'evoluzione del codice. - API: Espone un'interfaccia REST conforme alle specifiche OpenAPI (documentata in
doc/api.yaml). - Database: Persistenza dei dati gestita tramite SQLite, ideale per la portabilità del progetto esame, con query SQL ottimizzate e gestione transazionale.
L'interfaccia utente è una Single Page Application (SPA) moderna e reattiva.
- Framework: Sviluppata con Vue.js 3 (Composition API) per una gestione dello stato pulita e modulare.
- Build Tool: Utilizza Vite per tempi di avvio istantanei e hot module replacement (HMR) durante lo sviluppo.
- Styling: Integrazione di Bootstrap e CSS personalizzato per un design responsive e "pixel-perfect" simile all'originale.
- Networking: Gestione delle chiamate HTTP tramite Axios, con intercettori per l'autenticazione (Bearer Token).
Il progetto include script per l'automazione dell'ambiente di sviluppo e produzione, simulando un ambiente containerizzato per il frontend (tramite open-node.sh) per garantire che le dipendenze siano isolate e consistenti.
- Go 1.25+
- Docker (opzionale, per l'ambiente Node isolato)
- Node.js/Yarn (se eseguito localmente senza container)
Puoi lanciare il backend e il frontend separatamente per lo sviluppo.
-
Backend:
go run ./cmd/webapi/
-
Frontend (in un nuovo terminale, usando l'ambiente containerizzato):
./open-node.sh # (dentro il container) yarn run dev
Per generare l'eseguibile finale che include il frontend (embedded):
./open-node.sh
# (dentro il container)
yarn run build-prod
exit
# (fuori dal container)
go build -tags webui ./cmd/webapi/Se riscontri crash del Javascript in produzione che non appaiono in dev, usa:
yarn run build-prod
yarn run preview