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 }