github.com/condensat/bank-core@v0.1.0/database/query/swap.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 "time" 10 11 "github.com/condensat/bank-core/database" 12 "github.com/condensat/bank-core/database/model" 13 14 "github.com/jinzhu/gorm" 15 ) 16 17 const ( 18 DefaultSwapValidity time.Duration = 24 * time.Hour 19 ) 20 21 var ( 22 ErrInvalidSwapID = errors.New("Invalid SwapID") 23 ErrInvalidSwapType = errors.New("Invalid Swap Type") 24 ErrInvalidSwapAmount = errors.New("Invalid Amount") 25 ) 26 27 func AddSwap(db database.Context, swapType model.SwapType, cryptoAddressID model.CryptoAddressID, debitAsset model.AssetID, debitAmount model.Float, creditAsset model.AssetID, creditAmount model.Float) (model.Swap, error) { 28 gdb := db.DB().(*gorm.DB) 29 if db == nil { 30 return model.Swap{}, database.ErrInvalidDatabase 31 } 32 33 if len(swapType) == 0 { 34 return model.Swap{}, ErrInvalidSwapType 35 } 36 if cryptoAddressID == 0 { 37 return model.Swap{}, ErrInvalidCryptoAddressID 38 } 39 if debitAsset == 0 { 40 return model.Swap{}, ErrInvalidAssetHash 41 } 42 if debitAmount <= 0.0 { 43 return model.Swap{}, ErrInvalidSwapAmount 44 } 45 if creditAsset == 0 { 46 return model.Swap{}, ErrInvalidAssetHash 47 } 48 if creditAmount <= 0.0 { 49 return model.Swap{}, ErrInvalidSwapAmount 50 } 51 52 timestamp := time.Now().UTC().Truncate(time.Second) 53 result := model.Swap{ 54 Timestamp: timestamp, 55 ValidUntil: timestamp.Add(DefaultSwapValidity), 56 Type: swapType, 57 CryptoAddressID: cryptoAddressID, 58 DebitAsset: debitAsset, 59 DebitAmount: debitAmount, 60 CreditAsset: creditAsset, 61 CreditAmount: creditAmount, 62 } 63 err := gdb.Create(&result).Error 64 if err != nil { 65 return model.Swap{}, err 66 } 67 68 return result, nil 69 70 } 71 72 func GetSwap(db database.Context, swapID model.SwapID) (model.Swap, error) { 73 gdb := db.DB().(*gorm.DB) 74 if db == nil { 75 return model.Swap{}, database.ErrInvalidDatabase 76 } 77 78 if swapID == 0 { 79 return model.Swap{}, ErrInvalidSwapID 80 } 81 82 var result model.Swap 83 err := gdb. 84 Where(&model.Swap{ID: swapID}). 85 First(&result).Error 86 if err != nil { 87 return model.Swap{}, err 88 } 89 90 return result, nil 91 } 92 93 func GetSwapByCryptoAddressID(db database.Context, cryptoAddressID model.CryptoAddressID) (model.Swap, error) { 94 gdb := db.DB().(*gorm.DB) 95 if db == nil { 96 return model.Swap{}, database.ErrInvalidDatabase 97 } 98 99 if cryptoAddressID == 0 { 100 return model.Swap{}, ErrInvalidCryptoAddressID 101 } 102 103 var result model.Swap 104 err := gdb. 105 Where(&model.Swap{CryptoAddressID: cryptoAddressID}). 106 First(&result).Error 107 if err != nil { 108 return model.Swap{}, err 109 } 110 111 return result, nil 112 }