github.com/condensat/bank-core@v0.1.0/database/query/asseticon.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 MaxAssetIconDataLen = (256 << 10) - 1 19 ) 20 21 var ( 22 ErrInvalidAssetIcon = errors.New("Invalid AssetIcon") 23 ErrAssetIconToLarge = errors.New("AssetIcon Too Large") 24 ) 25 26 // AddOrUpdateAssetIcon 27 func AddOrUpdateAssetIcon(db database.Context, entry model.AssetIcon) (model.AssetIcon, error) { 28 gdb := db.DB().(*gorm.DB) 29 if db == nil { 30 return model.AssetIcon{}, database.ErrInvalidDatabase 31 } 32 33 if entry.AssetID == 0 { 34 return model.AssetIcon{}, ErrInvalidAssetIcon 35 } 36 if len(entry.Data) == 0 { 37 return model.AssetIcon{}, ErrInvalidAssetIcon 38 } 39 if len(entry.Data) > MaxAssetIconDataLen { 40 return model.AssetIcon{}, ErrAssetIconToLarge 41 } 42 43 entry.LastUpdate = time.Now().UTC().Truncate(time.Second) 44 45 var result model.AssetIcon 46 err := gdb. 47 Where(model.AssetIcon{ 48 AssetID: entry.AssetID, 49 }). 50 Assign(entry). 51 FirstOrCreate(&result).Error 52 53 return result, err 54 } 55 56 // GetAssetIcon 57 func GetAssetIcon(db database.Context, assetID model.AssetID) (model.AssetIcon, error) { 58 gdb := db.DB().(*gorm.DB) 59 if db == nil { 60 return model.AssetIcon{}, database.ErrInvalidDatabase 61 } 62 63 if assetID == 0 { 64 return model.AssetIcon{}, ErrInvalidAssetID 65 } 66 67 var result model.AssetIcon 68 err := gdb. 69 Where(&model.AssetIcon{AssetID: assetID}). 70 First(&result).Error 71 if err != nil { 72 return model.AssetIcon{}, err 73 } 74 75 return result, nil 76 }