package models import ( "time" cdssdk "gitlink.org.cn/cloudream/common/sdks/storage" stgmod "gitlink.org.cn/cloudream/storage/common/models" "gitlink.org.cn/cloudream/storage/common/pkgs/sysevent" "gorm.io/gorm" ) type Storage struct { StorageID cdssdk.StorageID `gorm:"column:StorageID; primaryKey; type:bigint; autoIncrement" json:"storageID"` StorageName string `gorm:"column:StorageName; type:varchar(1024); not null" json:"storageName"` HubID cdssdk.HubID `gorm:"column:HubID; type:bigint; not null" json:"hubID"` DataCount int64 `gorm:"column:DataCount; type:bigint; not null" json:"dataCount"` NewDataCount int64 `gorm:"column:NewDataCount; type:bigint; not null" json:"newDataCount"` Timestamp time.Time `gorm:"column:Timestamp; type:datatime; not null" json:"timestamp"` } func (Storage) TableName() string { return "storage" } type StorageRepository struct { repo *GormRepository } func NewStorageRepository(db *gorm.DB) *StorageRepository { return &StorageRepository{repo: NewGormRepository(db)} } func (r *StorageRepository) CreateStorage(storage *Storage) error { return r.repo.Create(storage) } func (r *StorageRepository) UpdateStorage(storage *Storage) error { return r.repo.Update(storage) } func (r *StorageRepository) DeleteStorage(storage *Storage) error { return r.repo.Delete(storage, uint(storage.StorageID)) } func (r *StorageRepository) GetStorageByID(id int64) (*Storage, error) { var storage Storage err := r.repo.GetByID(uint(id), &storage) if err != nil { return nil, err } return &storage, nil } func (r *StorageRepository) GetStorageByHubID(hubId int64) (*Storage, error) { var storage Storage query := "SELECT * FROM storage WHERE HubID = ?" err := r.repo.db.Raw(query, hubId).Scan(&storage).Error if err != nil { return nil, err } return &storage, nil } func (r *StorageRepository) GetAllStorages() ([]Storage, error) { var storages []Storage err := r.repo.GetAll(&storages) if err != nil { return nil, err } return storages, nil } type StorageInfoWatcher struct { Name string } func (w *StorageInfoWatcher) OnEvent(event sysevent.SysEvent) { repo := NewStorageRepository(DB) switch body := event.Body.(type) { case *stgmod.BodyNewStorage: storage := &Storage{ StorageID: body.Info.StorageID, StorageName: body.Info.Name, HubID: body.Info.MasterHub, Timestamp: time.Now(), } err := repo.CreateStorage(storage) if err != nil { return } case *stgmod.BodyStorageUpdated: storage := &Storage{ StorageID: body.Info.StorageID, StorageName: body.Info.Name, HubID: body.Info.MasterHub, Timestamp: time.Now(), } err := repo.UpdateStorage(storage) if err != nil { return } case *stgmod.BodyStorageDeleted: storage := &Storage{ StorageID: body.StorageID, } err := repo.DeleteStorage(storage) if err != nil { return } } }