github.com/mundipagg/boleto-api@v0.0.0-20230620145841-3f9ec742599f/api/fallback.go (about) 1 package api 2 3 import ( 4 "github.com/gin-gonic/gin" 5 "github.com/mundipagg/boleto-api/infrastructure/storage" 6 ) 7 8 const persistenceErrorMessage = "failure during send boleto to fallback. This boleto can't be recovery until manual insert content into database." 9 const getClientFallbackError = "failure to get client fallback storage" 10 const fallbackSaveSuccessfully = "loaded boleto into fallback storage" 11 12 type IFallback interface { 13 Save(context *gin.Context, registerId, payload string) 14 } 15 16 type Fallback struct{} 17 18 // Save resilience application 19 func (f *Fallback) Save(context *gin.Context, registerId, payload string) { 20 lg := loadBankLog(context) 21 22 client, err := storage.GetClient() 23 24 if err != nil { 25 lg.ErrorWithContent(getClientFallbackError, "Error", err, payload) 26 return 27 } 28 29 elapsedTime, err := client.UploadAsJson( 30 context, 31 registerId, 32 payload) 33 34 if err != nil { 35 lg.ErrorWithContent(persistenceErrorMessage, "Error", err, payload) 36 return 37 } 38 39 props := getLogUploadProperties(elapsedTime, registerId, payload) 40 lg.InfoWithParams(fallbackSaveSuccessfully, "Information", props) 41 } 42 43 func getLogUploadProperties(totalElapsedTimeInMilliseconds int64, registerId, payload string) map[string]interface{} { 44 props := make(map[string]interface{}) 45 props["TotalElapsedTimeInMilliseconds"] = totalElapsedTimeInMilliseconds 46 props["RegisterId"] = registerId 47 props["Content"] = payload 48 return props 49 }