mirror of
https://github.com/1Panel-dev/1Panel.git
synced 2026-11-07 00:05:14 +00:00
* feat(sync): sync php extended template * fix(i18n): complete resource sync translations --------- Co-authored-by: ssongliu <sloooop1x@gmail.com>
139 lines
3.9 KiB
Go
139 lines
3.9 KiB
Go
package service
|
|
|
|
import (
|
|
"errors"
|
|
"sync"
|
|
|
|
"github.com/1Panel-dev/1Panel/agent/app/dto"
|
|
"github.com/1Panel-dev/1Panel/agent/app/dto/request"
|
|
"github.com/1Panel-dev/1Panel/agent/app/dto/response"
|
|
"github.com/1Panel-dev/1Panel/agent/app/model"
|
|
"github.com/1Panel-dev/1Panel/agent/app/repo"
|
|
"github.com/1Panel-dev/1Panel/agent/buserr"
|
|
"github.com/1Panel-dev/1Panel/agent/global"
|
|
"github.com/1Panel-dev/1Panel/agent/utils/xpack"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
var phpExtensionsMu sync.Mutex
|
|
|
|
type PHPExtensionsService struct {
|
|
}
|
|
|
|
type IPHPExtensionsService interface {
|
|
Page(req request.PHPExtensionsSearch) (int64, []response.PHPExtensionsDTO, error)
|
|
List() ([]response.PHPExtensionsDTO, error)
|
|
Create(req request.PHPExtensionsCreate) error
|
|
Update(req request.PHPExtensionsUpdate) error
|
|
Delete(req request.PHPExtensionsDelete) error
|
|
Get(id uint) (model.PHPExtensions, error)
|
|
Import(req request.PHPExtensionsCreate) (string, error)
|
|
Push(req dto.PHPExtensionsPush) error
|
|
}
|
|
|
|
func NewIPHPExtensionsService() IPHPExtensionsService {
|
|
return &PHPExtensionsService{}
|
|
}
|
|
|
|
func (p PHPExtensionsService) Page(req request.PHPExtensionsSearch) (int64, []response.PHPExtensionsDTO, error) {
|
|
var (
|
|
total int64
|
|
extensions []model.PHPExtensions
|
|
err error
|
|
result []response.PHPExtensionsDTO
|
|
)
|
|
total, extensions, err = phpExtensionsRepo.Page(req.Page, req.PageSize, repo.WithByLikeName(req.Name))
|
|
if err != nil {
|
|
return 0, nil, err
|
|
}
|
|
for _, extension := range extensions {
|
|
result = append(result, response.PHPExtensionsDTO{
|
|
PHPExtensions: extension,
|
|
})
|
|
}
|
|
return total, result, nil
|
|
}
|
|
|
|
func (p PHPExtensionsService) List() ([]response.PHPExtensionsDTO, error) {
|
|
var (
|
|
extensions []model.PHPExtensions
|
|
err error
|
|
result []response.PHPExtensionsDTO
|
|
)
|
|
extensions, err = phpExtensionsRepo.List()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
for _, extension := range extensions {
|
|
result = append(result, response.PHPExtensionsDTO{
|
|
PHPExtensions: extension,
|
|
})
|
|
}
|
|
return result, nil
|
|
}
|
|
|
|
func (p PHPExtensionsService) Create(req request.PHPExtensionsCreate) error {
|
|
phpExtensionsMu.Lock()
|
|
defer phpExtensionsMu.Unlock()
|
|
exist, _ := phpExtensionsRepo.GetFirst(repo.WithByName(req.Name))
|
|
if exist.ID > 0 {
|
|
return buserr.New("ErrNameIsExist")
|
|
}
|
|
extension := model.PHPExtensions{
|
|
Name: req.Name,
|
|
Extensions: req.Extensions,
|
|
}
|
|
return phpExtensionsRepo.Create(&extension)
|
|
}
|
|
|
|
func (p PHPExtensionsService) Update(req request.PHPExtensionsUpdate) error {
|
|
phpExtensionsMu.Lock()
|
|
defer phpExtensionsMu.Unlock()
|
|
exist, err := phpExtensionsRepo.GetFirst(repo.WithByID(req.ID))
|
|
if err != nil {
|
|
return err
|
|
}
|
|
exist.Extensions = req.Extensions
|
|
return phpExtensionsRepo.Save(&exist)
|
|
}
|
|
|
|
func (p PHPExtensionsService) Delete(req request.PHPExtensionsDelete) error {
|
|
phpExtensionsMu.Lock()
|
|
defer phpExtensionsMu.Unlock()
|
|
return phpExtensionsRepo.DeleteBy(repo.WithByID(req.ID))
|
|
}
|
|
|
|
func (p PHPExtensionsService) Get(id uint) (model.PHPExtensions, error) {
|
|
return phpExtensionsRepo.GetFirst(repo.WithByID(id))
|
|
}
|
|
|
|
func (p PHPExtensionsService) Import(req request.PHPExtensionsCreate) (string, error) {
|
|
phpExtensionsMu.Lock()
|
|
defer phpExtensionsMu.Unlock()
|
|
existing, err := phpExtensionsRepo.GetFirst(repo.WithByName(req.Name))
|
|
if err == nil {
|
|
if existing.Extensions == req.Extensions {
|
|
return "skipped", nil
|
|
}
|
|
return "", buserr.New("ErrPHPExtensionsConflict")
|
|
}
|
|
if !errors.Is(err, gorm.ErrRecordNotFound) {
|
|
return "", err
|
|
}
|
|
item := model.PHPExtensions{Name: req.Name, Extensions: req.Extensions}
|
|
if err := phpExtensionsRepo.Create(&item); err != nil {
|
|
return "", err
|
|
}
|
|
return "created", nil
|
|
}
|
|
|
|
func (p PHPExtensionsService) Push(req dto.PHPExtensionsPush) error {
|
|
if !global.IsMaster {
|
|
return errors.New("PHP extension template sync must be submitted to the master node")
|
|
}
|
|
if !xpack.MultiNodeProvider.IsXpack() {
|
|
return buserr.New("ErrXpackNotFound")
|
|
}
|
|
return xpack.MultiNodeProvider.PushPHPExtensionsToNode(req)
|
|
}
|