italia / 18app

Official mobile app for 18app
https://www.18app.italia.it/
GNU General Public License v3.0
32 stars 19 forks source link

Messaggi di errore non definiti #44

Closed ncarandini closed 5 years ago

ncarandini commented 5 years ago

Implementando la soluzione della issue #33 mi sono accorto che la gestione degli errori è frammentata in più parti:

Quindi abbiamo due criticità: 1) Testo che va modificato di anno in anno. 2) Testo contenuto nel codice.

Il punto 1 non preoccupa, poiché in più occasioni (FAQ, Testo HTML relativo all'accettazione della privacy, ecc.) abbiamo deciso che è possibile utilizzare informazioni hard-coded sempreché siano immutabili per l'anno d'uso dell'app, il che corrisponde al fatto che l'app deve necessariamente essere modificata e ripubblicata per ogni nuovo anno di validità del bonus 18App. La soluzione è quella di centralizzare (ove possibile) tutte le info che potrebbero richiedere un aggiornamento di anno in anno nella cartella Data, e comunque di documentare in modo esaustivo tutti i punti dell'app che richiedono tale manutenzione annua.

Il punto 2 invece è essenziale e si risolve estrapolando tutte le informazioni in un file a parte che ho chiamato ErrorMessages.cs e che per quanto detto relativamente al punto precedente ho inserito nella cartella Data.

Ciò ci porta al nocciolo di questa issue, ovvero la necessità di definire i testi degli errori. Per quanto riguarda gli errori di login, la realizzazione della funzionalità ha portato ad identificare i seguenti possibili errori:

Errori generici di chiamata al servizio:

public enum ServiceFailureReason
{
    Unknown,
    Forbidden,
    JsonConvertionError,
    InternalServerError
}

Da notare che è stato inserito anche un errore di frontend relativo alla mancata conversione Json --> DTO (Data Transfer Object) della risposta fornita dal servizio.

Errori relativi all'ErrorCode restituito dalla chiamata al servizio che ne fanno uso:

Per questi errori non è stato creato alcun enumeratore visto che sono già definiti dal valore intero riportato dall'error code.

Errori relativi alle chiamate che fanno uso di un valore booleano per comunicare l'eventuale insuccesso della chiamata

Anche per questo caso, non è stato creato alcun enumeratore visto che vi è un solo possibile caso di insuccesso.

Errori relativi alle operazioni di Registrazione / Login

public enum LoginFailureReason
{
    UnsuccessfulHttpStatusCode,
    RegistrationTimeEnded,
    NonOperatingBeneficiary,
    RegistrationCheckFailed,
    UnavailableBeneficiary,
    UnavailableWallet,
    Unknown
}

Sulla scorta di questa casistica, ho provveduto a definire una serie di costanti nel suddetto file ErroMessages.cs:

Messaggi generici di chiamata al servizio:

Messaggi relativi all'ErrorCode

Messaggi relativi alle chiamate che fanno uso di un valore booleano (escluse quelle relative alle operazioni di Registrazone / Login)

Messaggi relativi alle operazioni di Registrazione / Login

Testi da definire per completare l'issue:

NON_OPERATING_BENEFICIARY

Questa costante di testo viene utilizzata quando la chiamata a /beneficiarioOperativo restituisce false e il risultato dell'operazione viene impostato a NonOperatingBeneficiary.

REGISTRATION_CHECK_FAILED

Questa costante di testo viene utilizzata quando la chiamata a /verificaPeriodoRegistrazioneBeneficiario restituisce false e il risultato dell'operazione viene impostato a RegistrationCheckFailed.

UNAVAILABLE_BENEFICIARY

Questa costante di testo viene utilizzata quando la chiamata a /beneficiario restituisce un beneficiarioBean con la proprietà idBeneficiario pari a null e il risultato dell'operazione viene impostato a UnavailableBeneficiary.

UNAVAILABLE_WALLET

Questa costante di testo viene utilizzata quando la chiamata a /borsellino restituisce un borsellinoBean pari a null e il risultato dell'operazione viene impostato a UnavailableWallet.

ncarandini commented 5 years ago

Per la soluzione dell'issue, come prima cosa ho creato il file ErrorsMessages.cs nel folder Data e ho revisionato tutto il codice in modo da utilizzare le costanti ivi riportate. Non appena mi comunicherete i testi da inserire per i quattro casi mancanti, potrò chiudere l'issue.

ncarandini commented 5 years ago

Al momento imposto: NON_OPERATING_BENEFICIARY: "Utente non abilitato all'operazione richiesta." REGISTRATION_CHECK_FAILED: "Si è verificato un errore: il servizio non è disponibile." UNAVAILABLE_BENEFICIARY: "Si è verificato un errore: il servizio non è disponibile." UNAVAILABLE_WALLET: "Si è verificato un errore in fase di registrazione."

Issue chiusa con il commit 9c867c7