mirror of
https://github.com/1Panel-dev/1Panel.git
synced 2026-11-07 00:05:14 +00:00
174 lines
5.3 KiB
Go
174 lines
5.3 KiB
Go
package repo
|
|
|
|
import (
|
|
"github.com/1Panel-dev/1Panel/agent/app/model"
|
|
"github.com/1Panel-dev/1Panel/agent/global"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
type LauncherRepo struct{}
|
|
|
|
type ILauncherRepo interface {
|
|
Get(opts ...DBOption) (model.AppLauncher, error)
|
|
ListName(opts ...DBOption) ([]string, error)
|
|
Create(launcher *model.AppLauncher) error
|
|
Save(launcher *model.AppLauncher) error
|
|
Delete(opts ...DBOption) error
|
|
|
|
GetQuickJump(opts ...DBOption) (model.QuickJump, error)
|
|
ListQuickJump(withAll bool) []model.QuickJump
|
|
UpdateQuicks(quicks []model.QuickJump) error
|
|
ListQuickDirectories() ([]model.QuickDirectory, error)
|
|
CountQuickDirectories() (int64, error)
|
|
CreateQuickDirectory(item *model.QuickDirectory) error
|
|
UpdateQuickDirectory(item *model.QuickDirectory) error
|
|
DeleteQuickDirectory(id uint, legacy bool) error
|
|
}
|
|
|
|
func NewILauncherRepo() ILauncherRepo {
|
|
return &LauncherRepo{}
|
|
}
|
|
|
|
func (u *LauncherRepo) Get(opts ...DBOption) (model.AppLauncher, error) {
|
|
var launcher model.AppLauncher
|
|
db := global.DB
|
|
for _, opt := range opts {
|
|
db = opt(db)
|
|
}
|
|
err := db.First(&launcher).Error
|
|
return launcher, err
|
|
}
|
|
func (u *LauncherRepo) ListName(opts ...DBOption) ([]string, error) {
|
|
var ops []model.AppLauncher
|
|
db := global.DB.Model(&model.AppLauncher{})
|
|
for _, opt := range opts {
|
|
db = opt(db)
|
|
}
|
|
_ = db.Find(&ops).Error
|
|
var names []string
|
|
for i := 0; i < len(ops); i++ {
|
|
names = append(names, ops[i].Key)
|
|
}
|
|
return names, nil
|
|
}
|
|
|
|
func (u *LauncherRepo) Create(launcher *model.AppLauncher) error {
|
|
return global.DB.Create(launcher).Error
|
|
}
|
|
|
|
func (u *LauncherRepo) Save(launcher *model.AppLauncher) error {
|
|
return global.DB.Save(launcher).Error
|
|
}
|
|
|
|
func (u *LauncherRepo) Delete(opts ...DBOption) error {
|
|
db := global.DB
|
|
for _, opt := range opts {
|
|
db = opt(db)
|
|
}
|
|
return db.Delete(&model.AppLauncher{}).Error
|
|
}
|
|
|
|
func (u *LauncherRepo) GetQuickJump(opts ...DBOption) (model.QuickJump, error) {
|
|
var launcher model.QuickJump
|
|
db := global.DB
|
|
for _, opt := range opts {
|
|
db = opt(db)
|
|
}
|
|
err := db.First(&launcher).Error
|
|
return launcher, err
|
|
}
|
|
func (u *LauncherRepo) ListQuickJump(withAll bool) []model.QuickJump {
|
|
var quicks []model.QuickJump
|
|
if withAll {
|
|
_ = global.DB.Find(&quicks).Error
|
|
} else {
|
|
_ = global.DB.Where("is_show = ?", true).Find(&quicks).Error
|
|
}
|
|
if !withAll && len(quicks) == 0 {
|
|
return []model.QuickJump{
|
|
{Name: "ModelServices", Title: "aiTools.model.model", Recommend: 0, IsShow: true, Router: "/ai/model-services"},
|
|
{Name: "Agent", Title: "aiTools.agents.agent", Recommend: 1, IsShow: true, Router: "/ai/agents/agent"},
|
|
{Name: "Website", Title: "menu.website", Recommend: 10, IsShow: true, Router: "/websites"},
|
|
{Name: "Database", Title: "menu.database", Recommend: 30, IsShow: true, Router: "/databases"},
|
|
{Name: "AppInstalled", Title: "home.appInstalled", Recommend: 70, IsShow: true, Router: "/apps/installed"},
|
|
}
|
|
}
|
|
|
|
return quicks
|
|
}
|
|
func (u *LauncherRepo) UpdateQuicks(quicks []model.QuickJump) error {
|
|
tx := global.DB.Begin()
|
|
for _, item := range quicks {
|
|
if err := tx.Model(&model.QuickJump{}).Where("id = ?", item.ID).Updates(map[string]interface{}{
|
|
"is_show": item.IsShow,
|
|
}).Error; err != nil {
|
|
tx.Rollback()
|
|
return err
|
|
}
|
|
}
|
|
return tx.Commit().Error
|
|
}
|
|
|
|
// Legacy entries remain in the overview configuration until explicitly deleted.
|
|
func legacyQuickDirectories(db *gorm.DB) *gorm.DB {
|
|
return db.Model(&model.QuickJump{}).Where("name = ? AND is_show = ? AND detail <> ?", "File", true, "")
|
|
}
|
|
|
|
func (u *LauncherRepo) ListQuickDirectories() ([]model.QuickDirectory, error) {
|
|
items := make([]model.QuickDirectory, 0)
|
|
if err := global.DB.Order("id ASC").Find(&items).Error; err != nil {
|
|
return nil, err
|
|
}
|
|
var quicks []model.QuickJump
|
|
if err := legacyQuickDirectories(global.DB).Order("id ASC").Find(&quicks).Error; err != nil {
|
|
return nil, err
|
|
}
|
|
for _, quick := range quicks {
|
|
items = append(items, model.QuickDirectory{BaseModel: quick.BaseModel, Path: quick.Detail, Alias: quick.Alias, Legacy: true})
|
|
}
|
|
return items, nil
|
|
}
|
|
func (u *LauncherRepo) CountQuickDirectories() (int64, error) {
|
|
var count, legacyCount int64
|
|
if err := global.DB.Model(&model.QuickDirectory{}).Count(&count).Error; err != nil {
|
|
return 0, err
|
|
}
|
|
if err := legacyQuickDirectories(global.DB).Count(&legacyCount).Error; err != nil {
|
|
return 0, err
|
|
}
|
|
return count + legacyCount, nil
|
|
}
|
|
func (u *LauncherRepo) CreateQuickDirectory(item *model.QuickDirectory) error {
|
|
return global.DB.Create(item).Error
|
|
}
|
|
func (u *LauncherRepo) UpdateQuickDirectory(item *model.QuickDirectory) error {
|
|
var result *gorm.DB
|
|
if item.Legacy {
|
|
result = legacyQuickDirectories(global.DB).Where("id = ?", item.ID).Updates(map[string]interface{}{"detail": item.Path, "alias": item.Alias})
|
|
} else {
|
|
result = global.DB.Model(&model.QuickDirectory{}).Where("id = ?", item.ID).Updates(map[string]interface{}{"path": item.Path, "alias": item.Alias})
|
|
}
|
|
if result.Error != nil {
|
|
return result.Error
|
|
}
|
|
if result.RowsAffected == 0 {
|
|
return gorm.ErrRecordNotFound
|
|
}
|
|
return nil
|
|
}
|
|
func (u *LauncherRepo) DeleteQuickDirectory(id uint, legacy bool) error {
|
|
var result *gorm.DB
|
|
if legacy {
|
|
result = legacyQuickDirectories(global.DB).Where("id = ?", id).Updates(map[string]interface{}{"detail": nil, "alias": nil})
|
|
} else {
|
|
result = global.DB.Delete(&model.QuickDirectory{}, id)
|
|
}
|
|
if result.Error != nil {
|
|
return result.Error
|
|
}
|
|
if result.RowsAffected == 0 {
|
|
return gorm.ErrRecordNotFound
|
|
}
|
|
return nil
|
|
}
|