Files
ssq-desk/internal/api/package_api.go
2026-01-14 14:17:38 +08:00

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
}