github.com/condensat/bank-core@v0.1.0/database/query/feeinfo.go (about)

     1  // Copyright 2020 Condensat Tech. All rights reserved.
     2  // Use of this source code is governed by a MIT
     3  // license that can be found in the LICENSE file.
     4  
     5  package query
     6  
     7  import (
     8  	"errors"
     9  
    10  	"github.com/condensat/bank-core/database"
    11  	"github.com/condensat/bank-core/database/model"
    12  
    13  	"github.com/jinzhu/gorm"
    14  )
    15  
    16  var (
    17  	ErrFeeInfoInvalid = errors.New("Invalid FeeInfo")
    18  )
    19  
    20  // AddOrUpdateFeeInfo
    21  func AddOrUpdateFeeInfo(db database.Context, feeInfo model.FeeInfo) (model.FeeInfo, error) {
    22  	gdb := db.DB().(*gorm.DB)
    23  	if db == nil {
    24  		return model.FeeInfo{}, database.ErrInvalidDatabase
    25  	}
    26  
    27  	if !feeInfo.IsValid() {
    28  		return model.FeeInfo{}, ErrFeeInfoInvalid
    29  	}
    30  
    31  	var result model.FeeInfo
    32  	err := gdb.
    33  		Where(model.FeeInfo{
    34  			Currency: feeInfo.Currency,
    35  		}).
    36  		Assign(feeInfo).
    37  		FirstOrCreate(&result).Error
    38  
    39  	return result, err
    40  }
    41  
    42  // FeeInfoExists
    43  func FeeInfoExists(db database.Context, currency model.CurrencyName) bool {
    44  	entry, err := GetFeeInfo(db, currency)
    45  
    46  	return err == nil && entry.Currency == currency && entry.IsValid()
    47  }
    48  
    49  // GetFeeInfo
    50  func GetFeeInfo(db database.Context, currency model.CurrencyName) (model.FeeInfo, error) {
    51  	gdb := db.DB().(*gorm.DB)
    52  	if db == nil {
    53  		return model.FeeInfo{}, database.ErrInvalidDatabase
    54  	}
    55  
    56  	if len(currency) == 0 {
    57  		return model.FeeInfo{}, ErrInvalidCurrencyName
    58  	}
    59  
    60  	var result model.FeeInfo
    61  	err := gdb.
    62  		Where(&model.FeeInfo{
    63  			Currency: currency,
    64  		}).First(&result).Error
    65  	if err != nil {
    66  		return model.FeeInfo{}, err
    67  	}
    68  
    69  	if result.Currency != currency || !result.IsValid() {
    70  		return model.FeeInfo{}, ErrFeeInfoInvalid
    71  	}
    72  
    73  	return result, nil
    74  }