122 lines
2.7 KiB
Go
122 lines
2.7 KiB
Go
package api
|
|
|
|
import (
|
|
"ssq-desk/internal/service"
|
|
)
|
|
|
|
// PackageAPI 离线数据包 API
|
|
type PackageAPI struct {
|
|
packageService *service.PackageService
|
|
}
|
|
|
|
// NewPackageAPI 创建数据包 API
|
|
func NewPackageAPI() (*PackageAPI, error) {
|
|
packageService, err := service.NewPackageService()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &PackageAPI{
|
|
packageService: packageService,
|
|
}, nil
|
|
}
|
|
|
|
// DownloadPackage 下载数据包
|
|
func (api *PackageAPI) DownloadPackage(downloadURL string) (map[string]interface{}, error) {
|
|
if api.packageService == nil {
|
|
newAPI, err := NewPackageAPI()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
api.packageService = newAPI.packageService
|
|
}
|
|
|
|
result, err := api.packageService.DownloadPackage(downloadURL, nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return map[string]interface{}{
|
|
"file_path": result.FilePath,
|
|
"file_size": result.FileSize,
|
|
"duration": result.Duration,
|
|
}, nil
|
|
}
|
|
|
|
// ImportPackage 导入数据包
|
|
func (api *PackageAPI) ImportPackage(packagePath string) (map[string]interface{}, error) {
|
|
if api.packageService == nil {
|
|
newAPI, err := NewPackageAPI()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
api.packageService = newAPI.packageService
|
|
}
|
|
|
|
result, err := api.packageService.ImportPackage(packagePath)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return map[string]interface{}{
|
|
"imported_count": result.ImportedCount,
|
|
"updated_count": result.UpdatedCount,
|
|
"error_count": result.ErrorCount,
|
|
"duration": result.Duration,
|
|
}, nil
|
|
}
|
|
|
|
// CheckPackageUpdate 检查数据包更新
|
|
func (api *PackageAPI) CheckPackageUpdate(remoteURL string) (map[string]interface{}, error) {
|
|
if api.packageService == nil {
|
|
newAPI, err := NewPackageAPI()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
api.packageService = newAPI.packageService
|
|
}
|
|
|
|
info, err := api.packageService.CheckPackageUpdate(remoteURL)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if info == nil {
|
|
return map[string]interface{}{
|
|
"need_update": false,
|
|
}, nil
|
|
}
|
|
|
|
return map[string]interface{}{
|
|
"need_update": true,
|
|
"version": info.Version,
|
|
"total_count": info.TotalCount,
|
|
"latest_issue": info.LatestIssue,
|
|
"package_size": info.PackageSize,
|
|
"download_url": info.DownloadURL,
|
|
"release_date": info.ReleaseDate,
|
|
"checksum": info.CheckSum,
|
|
}, nil
|
|
}
|
|
|
|
// ListLocalPackages 列出本地数据包
|
|
func (api *PackageAPI) ListLocalPackages() (map[string]interface{}, error) {
|
|
if api.packageService == nil {
|
|
newAPI, err := NewPackageAPI()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
api.packageService = newAPI.packageService
|
|
}
|
|
|
|
packages, err := api.packageService.ListLocalPackages()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return map[string]interface{}{
|
|
"packages": packages,
|
|
"count": len(packages),
|
|
}, nil
|
|
}
|