mirror of https://github.com/1Panel-dev/1Panel
appstorecrontabdatabasedockerdocker-composedocker-containerdocker-imagedocker-uifilemanagerlamplnmppanel
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
83 lines
2.1 KiB
83 lines
2.1 KiB
package service |
|
|
|
import ( |
|
"github.com/1Panel-dev/1Panel/backend/app/dto" |
|
"github.com/1Panel-dev/1Panel/backend/app/dto/request" |
|
"github.com/1Panel-dev/1Panel/backend/app/dto/response" |
|
"github.com/1Panel-dev/1Panel/backend/app/model" |
|
"github.com/1Panel-dev/1Panel/backend/buserr" |
|
"github.com/1Panel-dev/1Panel/backend/constant" |
|
"github.com/1Panel-dev/1Panel/backend/utils/files" |
|
"github.com/spf13/afero" |
|
) |
|
|
|
type FavoriteService struct { |
|
} |
|
|
|
type IFavoriteService interface { |
|
Page(req dto.PageInfo) (int64, []response.FavoriteDTO, error) |
|
Create(req request.FavoriteCreate) (*model.Favorite, error) |
|
Delete(id uint) error |
|
} |
|
|
|
func NewIFavoriteService() IFavoriteService { |
|
return &FavoriteService{} |
|
} |
|
|
|
func (f *FavoriteService) Page(req dto.PageInfo) (int64, []response.FavoriteDTO, error) { |
|
total, favorites, err := favoriteRepo.Page(req.Page, req.PageSize) |
|
if err != nil { |
|
return 0, nil, err |
|
} |
|
var dtoFavorites []response.FavoriteDTO |
|
for _, favorite := range favorites { |
|
dtoFavorites = append(dtoFavorites, response.FavoriteDTO{ |
|
Favorite: favorite, |
|
}) |
|
} |
|
return total, dtoFavorites, nil |
|
} |
|
|
|
func (f *FavoriteService) Create(req request.FavoriteCreate) (*model.Favorite, error) { |
|
exist, _ := favoriteRepo.GetFirst(favoriteRepo.WithByPath(req.Path)) |
|
if exist.ID > 0 { |
|
return nil, buserr.New(constant.ErrFavoriteExist) |
|
} |
|
op := files.NewFileOp() |
|
if !op.Stat(req.Path) { |
|
return nil, buserr.New(constant.ErrLinkPathNotFound) |
|
} |
|
openFile, err := op.OpenFile(req.Path) |
|
if err != nil { |
|
return nil, err |
|
} |
|
fileInfo, err := openFile.Stat() |
|
if err != nil { |
|
return nil, err |
|
} |
|
favorite := &model.Favorite{ |
|
Name: fileInfo.Name(), |
|
IsDir: fileInfo.IsDir(), |
|
Path: req.Path, |
|
} |
|
if fileInfo.Size() <= 10*1024*1024 { |
|
afs := &afero.Afero{Fs: op.Fs} |
|
cByte, err := afs.ReadFile(req.Path) |
|
if err == nil { |
|
if len(cByte) > 0 && !files.DetectBinary(cByte) { |
|
favorite.IsTxt = true |
|
} |
|
} |
|
} |
|
if err := favoriteRepo.Create(favorite); err != nil { |
|
return nil, err |
|
} |
|
return favorite, nil |
|
} |
|
|
|
func (f *FavoriteService) Delete(id uint) error { |
|
if err := favoriteRepo.Delete(commonRepo.WithByID(id)); err != nil { |
|
return err |
|
} |
|
return nil |
|
}
|
|
|