CitiZen – project info

Il progetto CitiZen consiste in una soluzione full-stack per segnalare ‘cose-che-non-vanno’ nella tua città e per permettere agli amministratori di gestire le segnalazioni. Attualmente consiste dei seguenti componenti:

  • web-services
  • app iOS
  • app Android
  • portale di amministrazione

Web-services e portale di Amministrazione

I web-services e il portale di amministrazione sono pubblicati insieme con spring-boot. Per questo motivo si trovano sotto un unico repository-git:

https://@bitbucket.org/exmachinamobile/citizen-server.git

Il progetto consiste in due moduli:

citizen-server-interfaces

Modulo che produce un jar e contiene:

  • oggetti dto scambiati come request e response nelle chiamate ai web-services
  • interfaccie che dichiarano i servizi offerti dai ws

Questo modulo é stato fatto per essere condiviso con l’applicazione Android.

citizen-server-webapp

Modulo che produce il jar spring-boot e che contiene:

  • l’implementazione dei web-services
  • l’implementazione del portale

web-services

I web-services sono stati implementati con la seguente struttura a layer/package:

Layer-api:

Contiene tutto quello che riguarda la pubblicazione dei servizi Rest. Le sue classi sono:

  • <prefix>RestService: classi @RestController che pubblicano i servizi dichiarati in citizen-server-interfaces.
  • Classi di utilità a supporto dei RestService

Layer-logics:

Contiene le classi che implementano le logiche applicative che fondamentalmente sono:

  • validazione delle request
  • verifica dell’autorizzazione a compiere le azioni richieste
  • salvataggio dei dati nel database utilizzando i dao
  • esecuzione ricerche

Layer-integration:

Contiene le classi che si occupano di invocare servizi remoti, la convenzione é di chiamarli <prefix>ServiceClient. Attualmente sono due:

  • FirebaseServiceClient: si occupa di invocare i servizi di firebase (non lo fa direttamente ma attraverso sdk)
  • GeocodingServiceClient: si occupa di invocare i servizi di geocoding di google maps (non lo fa direttamente ma attraverso sdk)

Layer-domain.model:

Contiene le classi che definiscono le entità trattate dai web-services, sia che siano o non siano persistenti con JPA.

Layer-persistence:

Contiene l’implementazione della persistenza con JPA.

portal

Il portale é stato implementato utilizzando angular-1.x e boostrap.js. Il file html sono statici e tutti i contenuti dinamici sono caricati invocando i web-services (webapp jsp-free 🙂 ).

Informazioni utili per la webapp spring-boot

I web-service utilizzano per la persistenza un database postgres esteso con postgis.

Nella directory ci sono diversi file .yaml con informazioni utili:

  • come configurare ed inizializzare postgres
  • come utilizzare nebbiolo (attualmente unico server di deploy)
  • struttura dei web-services
  • come utilizzare spring-boot

Applicazione iOS

Scaricabile da BitBucket al seguente git url:

https://@bitbucket.org/exmachinamobile/citizen-ios.git

Applicazione Android

Scaricabile da BitBucket al seguente git url:

https://@bitbucket.org/exmachinamobile/citizen-android.git