github.com/mundipagg/boleto-api@v0.0.0-20230620145841-3f9ec742599f/bb/validations.go (about)

     1  package bb
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/mundipagg/boleto-api/models"
     7  	"github.com/mundipagg/boleto-api/validations"
     8  )
     9  
    10  var bb bankBB
    11  
    12  func bbAgencyDigitCalculator(agency string) string {
    13  	multiplier := []int{5, 4, 3, 2}
    14  	return validations.ModElevenCalculator(agency, multiplier)
    15  }
    16  
    17  func bbAccountDigitCalculator(agency, account string) string {
    18  	multiplier := []int{9, 8, 7, 6, 5, 4, 3, 2}
    19  	return validations.ModElevenCalculator(account, multiplier)
    20  }
    21  
    22  func bbValidateAgencyAndDigit(b interface{}) error {
    23  	switch t := b.(type) {
    24  	case *models.BoletoRequest:
    25  		err := t.Agreement.IsAgencyValid()
    26  		if err != nil {
    27  			return err
    28  		}
    29  		t.Agreement.CalculateAgencyDigit(bbAgencyDigitCalculator)
    30  		return nil
    31  	default:
    32  		return validations.InvalidType(t)
    33  	}
    34  }
    35  
    36  func bbValidateAccountAndDigit(b interface{}) error {
    37  	switch t := b.(type) {
    38  	case *models.BoletoRequest:
    39  		err := t.Agreement.IsAccountValid(8)
    40  		if err != nil {
    41  			return err
    42  		}
    43  		t.Agreement.CalculateAccountDigit(bbAccountDigitCalculator)
    44  		return nil
    45  	default:
    46  		return validations.InvalidType(t)
    47  	}
    48  }
    49  
    50  func bbValidateOurNumber(b interface{}) error {
    51  	switch t := b.(type) {
    52  	case *models.BoletoRequest:
    53  		if t.Title.OurNumber > 9999999999 {
    54  			return models.NewErrorResponse("MPOurNumber", "Nosso número inválido")
    55  		}
    56  		return nil
    57  	default:
    58  		return validations.InvalidType(t)
    59  	}
    60  }
    61  
    62  func bbValidateWalletVariation(b interface{}) error {
    63  	switch t := b.(type) {
    64  	case *models.BoletoRequest:
    65  		if t.Agreement.WalletVariation < 1 {
    66  			return models.NewErrorResponse("MPWalletVariation", "Variação da carteira inválida")
    67  		}
    68  		return nil
    69  	default:
    70  		return validations.InvalidType(t)
    71  	}
    72  }
    73  
    74  func bbValidateTitleInstructions(b interface{}) error {
    75  	switch t := b.(type) {
    76  	case *models.BoletoRequest:
    77  		return t.Title.ValidateInstructionsLength(220)
    78  	default:
    79  		return validations.InvalidType(t)
    80  	}
    81  }
    82  
    83  func bbValidateTitleDocumentNumber(b interface{}) error {
    84  	switch t := b.(type) {
    85  	case *models.BoletoRequest:
    86  		maxAllowedLength := 15
    87  		if len(t.Title.DocumentNumber) > maxAllowedLength {
    88  			message := fmt.Sprintf("O campo documentNumber do título ultrapassou o limite permitido de %d caracteres", maxAllowedLength)
    89  			return models.NewErrorResponse("MP400", message)
    90  		}
    91  		return nil
    92  	default:
    93  		return validations.InvalidType(t)
    94  	}
    95  }
    96  
    97  func bbValidateBoletoType(b interface{}) error {
    98  	bt := bbBoletoTypes()
    99  
   100  	switch t := b.(type) {
   101  
   102  	case *models.BoletoRequest:
   103  		if len(t.Title.BoletoType) > 0 && bt[t.Title.BoletoType] == "" {
   104  			return models.NewErrorResponse("MP400", "espécie de boleto informada não existente")
   105  		}
   106  		return nil
   107  	default:
   108  		return validations.InvalidType(t)
   109  	}
   110  }