mirror of
https://github.com/d0zingcat/gocryptotrader.git
synced 2026-05-20 07:26:46 +00:00
* reworked request struct and exchange response started work on validation system * removed import cycle until work around * Added intial withdraw support via CLI added * Added Crypto command to gctcli * moved var declartion to single line * Test updates for binance and anx * All exchange tests have been updated test coverage added to validate * First pass at adding withdrawl select from database * started adding basic lru cache system * Added basic LRU cache including Add Get Remove Contains ContainsOrAdd Clear * wording changes on comments * removed exported var's in strut as they are not required * Added README * README updates * corrected ID on commands * rm line :D * merged in origin/cache * linter fixes (gofmt) * Added basic cache lookup to events * swapped to mutex over rwmutex updated comments * unexported getNewest & getOldest * unexported getNewest & getOldest * Updated comments and cited references in source * updated comments * WIP * Migrated exchange WithdrawFiat wrapper to new struct response * Migrated exchange WithdrawFiat wrapper to new struct response * started work on bank management * Added exchange level banking details back with migration to banking package * Removed broken tests for now * Added validation to bank accounts * removed duplicate bank details from withdraw struct * Test coverage increased * gofmt * merged upstream/master with clean up * First pass at adding command line linking to gctcli * added validation for crypto address, added gctcli support to retreive previous withdrawal requests * general cleanup * general cleanup * reordered imports * Increased test coverage moved to database sublogger * Pass incorrect currency no longer return error from c.CheckBankAccountConfig * remove TestMain() for now as other tests in this package will need to be reworked * Happy little race car * Reverted to upstream tests * Added test covarege for validation method, corrected response on cli protobuf * query clean up and removal of duplicated code * cleaned up queries into singlem ethod increased test coverage * Migrated international fund withdraw to new exchange response and added cache size override * Migrated international fund withdraw to new exchange response and added cache size override * Extended gctcli commands * lowered default cache to 25 * small code clean up * added get by date method * add returned error * cli commands cleaing return error on nil results to fix out of bounds * merged write & read helpers into one for test coverage and increased engine/withdraw test coverage * gofmt * Added test coverage for valid ID * removed unused param * converted to use timestamp package from protobuf * gofmt * use built in RFC3339 timestamp * remove setting of CreatedAt & UpdatedAt and allow ORm to take care of it * also use ptype on byid * code flow improvements * remove inverse conditional check and linters run * removed test data * removed comment * removed comment * also write failures to database for auditing * converted to use default time for start & end * Default to time.Now() minus 30 days * Default to time.Now() minus 30 days * small code clean up * fixed missing semicolon on migrations, code clean up * updated sqlite migrations * Added additonal check for exchange level bank account if global is not found * case sensativity fix for currency names * use correct compare * test coverage fixed * removed space * return pointer to banking.Account * return pointer to banking.Account * added else check back to validate() * Added empty string as default to migration over NULL due to retrivial of data
80 lines
2.2 KiB
Go
80 lines
2.2 KiB
Go
package withdraw
|
|
|
|
import (
|
|
"errors"
|
|
"strings"
|
|
|
|
"github.com/thrasher-corp/gocryptotrader/currency"
|
|
"github.com/thrasher-corp/gocryptotrader/portfolio"
|
|
)
|
|
|
|
// Validate takes interface and passes to asset type to check the request meets requirements to submit
|
|
func Validate(request *Request) (err error) {
|
|
if request == nil {
|
|
return ErrRequestCannotBeNil
|
|
}
|
|
|
|
var allErrors []string
|
|
if request.Amount <= 0 {
|
|
allErrors = append(allErrors, ErrStrAmountMustBeGreaterThanZero)
|
|
}
|
|
|
|
if (request.Currency == currency.Code{}) {
|
|
allErrors = append(allErrors, ErrStrNoCurrencySet)
|
|
}
|
|
|
|
switch request.Type {
|
|
case Fiat:
|
|
if request.Fiat == nil {
|
|
return ErrInvalidRequest
|
|
}
|
|
if (request.Currency != currency.Code{}) && !request.Currency.IsFiatCurrency() {
|
|
allErrors = append(allErrors, ErrStrCurrencyNotFiat)
|
|
}
|
|
allErrors = append(allErrors, validateFiat(request)...)
|
|
case Crypto:
|
|
if request.Crypto == nil {
|
|
return ErrInvalidRequest
|
|
}
|
|
if (request.Currency != currency.Code{}) && !request.Currency.IsCryptocurrency() {
|
|
allErrors = append(allErrors, ErrStrCurrencyNotCrypto)
|
|
}
|
|
allErrors = append(allErrors, validateCrypto(request)...)
|
|
default:
|
|
allErrors = append(allErrors, "invalid request type")
|
|
}
|
|
if len(allErrors) > 0 {
|
|
return errors.New(strings.Join(allErrors, ", "))
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// validateFiat takes interface and passes to asset type to check the request meets requirements to submit
|
|
func validateFiat(request *Request) (err []string) {
|
|
errBank := request.Fiat.Bank.ValidateForWithdrawal(request.Exchange, request.Currency)
|
|
if errBank != nil {
|
|
err = append(err, errBank...)
|
|
}
|
|
return err
|
|
}
|
|
|
|
// validateCrypto checks if Crypto request is valid and meets the minimum requirements to submit a crypto withdrawal request
|
|
func validateCrypto(request *Request) (err []string) {
|
|
if !portfolio.IsWhiteListed(request.Crypto.Address) {
|
|
err = append(err, ErrStrAddressNotWhiteListed)
|
|
}
|
|
|
|
if !portfolio.IsExchangeSupported(request.Exchange, request.Crypto.Address) {
|
|
err = append(err, ErrStrExchangeNotSupportedByAddress)
|
|
}
|
|
|
|
if request.Crypto.Address == "" {
|
|
err = append(err, ErrStrAddressNotSet)
|
|
}
|
|
|
|
if request.Crypto.FeeAmount < 0 {
|
|
err = append(err, ErrStrFeeCannotBeNegative)
|
|
}
|
|
return
|
|
}
|