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  }