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 }