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
This commit is contained in:
@@ -0,0 +1,140 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user