Files
admin e6956aa001 Initial commit: TaskPool React panel
- React frontend with route-level code splitting
- Backend rebranded from Baihu to TaskPool
- DB brand migration script and local compatibility
2026-07-26 08:43:52 +08:00

141 lines
4.1 KiB
Go

package services
import (
"errors"
"github.com/engigu/taskpool/internal/database"
"github.com/engigu/taskpool/internal/models"
"github.com/engigu/taskpool/internal/services/deps"
"github.com/engigu/taskpool/internal/utils"
)
type DependencyService struct{}
func NewDependencyService() *DependencyService {
return &DependencyService{}
}
// List 获取依赖列表
func (s *DependencyService) List(language, langVersion string) ([]models.Dependency, error) {
var results []models.Dependency
query := database.DB
if language != "" {
query = query.Where("language = ?", language)
}
if langVersion != "" {
query = query.Where("lang_version = ?", langVersion)
}
err := query.Order("id desc").Find(&results).Error
return results, err
}
// Create 创建依赖记录
func (s *DependencyService) Create(dep *models.Dependency) error {
// 检查是否已存在(名称、版本、语言及版本必须完全匹配)
var existing models.Dependency
res := database.DB.Where("name = ? AND version = ? AND language = ? AND lang_version = ?", dep.Name, dep.Version, dep.Language, dep.LangVersion).Limit(1).Find(&existing)
if res.Error == nil && res.RowsAffected > 0 {
// 如果已存在,更新 ID 并执行更新
dep.ID = existing.ID
return database.DB.Model(&existing).Updates(dep).Error
}
// 不存在则新建
if dep.ID == "" {
dep.ID = utils.GenerateID()
}
return database.DB.Create(dep).Error
}
// Delete 删除依赖记录
func (s *DependencyService) Delete(id string) error {
return database.DB.Where("id = ?", id).Delete(&models.Dependency{}).Error
}
// Install 安装依赖
func (s *DependencyService) Install(dep *models.Dependency) error {
m := deps.GetManager(dep.Language)
if m == nil {
return errors.New("不支持的依赖类型: " + dep.Language)
}
return m.Install(dep)
}
// Uninstall 卸载依赖
func (s *DependencyService) Uninstall(dep *models.Dependency) error {
m := deps.GetManager(dep.Language)
if m == nil {
return errors.New("不支持的依赖类型: " + dep.Language)
}
return m.Uninstall(dep)
}
// GetInstalledPackages 获取已安装的包列表
func (s *DependencyService) GetInstalledPackages(language, langVersion string) ([]models.Dependency, error) {
m := deps.GetManager(language)
if m == nil {
return nil, errors.New("不支持的依赖类型: " + language)
}
return m.GetInstalledPackages(language, langVersion)
}
// GetInstallCommand 获取安装命令
func (s *DependencyService) GetInstallCommand(dep *models.Dependency) (string, error) {
m := deps.GetManager(dep.Language)
if m == nil {
return "", errors.New("不支持的依赖类型: " + dep.Language)
}
return m.GetInstallCommand(dep)
}
// GetReinstallAllCommand 获取全部重装命令
func (s *DependencyService) GetReinstallAllCommand(language, langVersion string) (string, error) {
m := deps.GetManager(language)
if m == nil {
return "", errors.New("不支持的依赖类型: " + language)
}
deps_list, err := s.List(language, langVersion)
if err != nil {
return "", err
}
return m.GetReinstallAllCommand(deps_list)
}
// GetVerifyCommand 获取环境验证命令
func (s *DependencyService) GetVerifyCommand(language, langVersion string) (string, error) {
m := deps.GetManager(language)
if m == nil {
return "", errors.New("不支持的依赖类型: " + language)
}
return m.GetVerifyCommand(langVersion)
}
// GetBatchInstallCommand 获取批量安装命令
func (s *DependencyService) GetBatchInstallCommand(depsList []models.Dependency) (string, error) {
if len(depsList) == 0 {
return "", errors.New("依赖包列表不能为空")
}
firstDep := depsList[0]
m := deps.GetManager(firstDep.Language)
if m == nil {
return "", errors.New("不支持的依赖类型: " + firstDep.Language)
}
return m.GetBatchInstallCommand(depsList)
}
// ImportDependencies 批量导入依赖并自动入库去重
func (s *DependencyService) ImportDependencies(depsList []models.Dependency) ([]models.Dependency, error) {
var imported []models.Dependency
for i := range depsList {
dep := &depsList[i]
if err := s.Create(dep); err == nil {
imported = append(imported, *dep)
}
}
return imported, nil
}