52 lines
1.0 KiB
Go
52 lines
1.0 KiB
Go
package repository
|
|
|
|
import (
|
|
"u-desk/internal/storage"
|
|
"u-desk/internal/storage/models"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
type TabRepository interface {
|
|
SaveAll(tabs []models.SqlTab) error
|
|
FindAll() ([]models.SqlTab, error)
|
|
Delete(id uint) error
|
|
}
|
|
|
|
type tabRepository struct {
|
|
db *gorm.DB
|
|
}
|
|
|
|
func NewTabRepository() (TabRepository, error) {
|
|
db := storage.GetDB()
|
|
if db == nil {
|
|
var err error
|
|
db, err = storage.Init()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
return &tabRepository{db}, nil
|
|
}
|
|
|
|
func (r *tabRepository) SaveAll(tabs []models.SqlTab) error {
|
|
return r.db.Transaction(func(tx *gorm.DB) error {
|
|
if err := tx.Where("1=1").Delete(&models.SqlTab{}).Error; err != nil {
|
|
return err
|
|
}
|
|
if len(tabs) > 0 {
|
|
return tx.Create(&tabs).Error
|
|
}
|
|
return nil
|
|
})
|
|
}
|
|
|
|
func (r *tabRepository) FindAll() ([]models.SqlTab, error) {
|
|
var tabs []models.SqlTab
|
|
return tabs, r.db.Order("`order` ASC, created_at ASC").Find(&tabs).Error
|
|
}
|
|
|
|
func (r *tabRepository) Delete(id uint) error {
|
|
return r.db.Delete(&models.SqlTab{}, id).Error
|
|
}
|
|
|