4 "github.com/golang/groupcache/lru"
5 "github.com/jinzhu/gorm"
7 "github.com/vapor/errors"
8 "github.com/vapor/federation/database/orm"
11 const maxAssetCached = 1024
13 type AssetStore struct {
18 func NewAssetStore(db *gorm.DB) *AssetStore {
20 cache: lru.New(maxAssetCached),
25 func (a *AssetStore) GetByOrmID(id uint64) (*orm.Asset, error) {
26 asset := &orm.Asset{ID: id}
27 if err := a.db.Where(asset).First(asset).Error; err != nil {
28 return nil, errors.Wrap(err, "asset not found by orm id")
34 func (a *AssetStore) Get(assetID string) (*orm.Asset, error) {
35 if v, ok := a.cache.Get(assetID); ok {
36 return v.(*orm.Asset), nil
39 asset := &orm.Asset{AssetID: assetID}
40 if err := a.db.Where(asset).First(asset).Error; err != nil {
41 return nil, errors.Wrap(err, "asset not found in memory and mysql")
44 a.cache.Add(assetID, asset)
48 func (a *AssetStore) Add(asset *orm.Asset) error {
49 if err := a.db.Create(asset).Error; err != nil {
53 a.cache.Add(asset.AssetID, asset)