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  }