Blocca i dati nel DB mentre la chiamata API esterna è in sospeso?

1

Ho una situazione interessante e sto cercando il modo migliore per risolverlo. La mia app funziona così:

1) L'utente ottiene un Pin promozione da Some Company, e ho anche una tabella db con questi pin. L'utente invia il mio modulo per ricevere un premio.

2) Per prima cosa verifica se il pin è valido / non scaduto utilizzando una procedura memorizzata di base.

3) contatto un'API di terze parti per inviare loro la ricompensa.

4) Ritiro il pin utilizzando una procedura memorizzata di base.

Il mio problema è, come posso garantire che il pin non venga riutilizzato mentre la chiamata API è in sospeso. So che si tratta di un'operazione suddivisa in due, ma preferirei rimuovere questa possibilità.

    
posta IKnowledge 01.12.2014 - 21:55
fonte

2 risposte

2

Puoi inserire una colonna scadenza per i tuoi pin. Dopo aver interrogato la tabella pin per vedere se il tuo pin è valido (e non scaduto), aggiorni la data di scadenza all'ora corrente.

Se la tua chiamata API ha esito positivo, non è richiesta alcuna ulteriore azione e hai una registrazione di ciò che è successo (hai fatto solo una scrittura in db). Se la chiamata API non riesce, devi impostare la data di scadenza su Null in modo che i record siano nuovamente disponibili.

    
risposta data 01.12.2014 - 22:18
fonte
0

Se il tuo PIN è valido una sola volta, allora perché non scrivi la procedura memorizzata usando DELETE INTO in modo che, dato il livello di isolamento corretto, tu sappia che il PIN può essere usato esattamente una volta. Quindi interrogare la tabella temporanea inserita per vedere se ha valori - se lo fa, il PIN è valido. In questo modo puoi eliminare completamente il punto 4.

    
risposta data 01.12.2014 - 22:00
fonte

Leggi altre domande sui tag