diff --git a/backend/cmd/server/main.go b/backend/cmd/server/main.go index ee5bb7b..e7302b8 100644 --- a/backend/cmd/server/main.go +++ b/backend/cmd/server/main.go @@ -45,6 +45,8 @@ func main() { panic(err) } + s.euse.SyncLatest() + svc := service.NewService(service.WithPprof()) svc.Add(s) if err := svc.Run(); err != nil { diff --git a/backend/cmd/server/wire.go b/backend/cmd/server/wire.go index aaa0fdc..0337296 100644 --- a/backend/cmd/server/wire.go +++ b/backend/cmd/server/wire.go @@ -35,6 +35,7 @@ type Server struct { version *version.VersionInfo report *report.Reporter reportuse domain.ReportUsecase + euse domain.ExtensionUsecase } func newServer() (*Server, error) { diff --git a/backend/cmd/server/wire_gen.go b/backend/cmd/server/wire_gen.go index 42af4ba..df12a93 100644 --- a/backend/cmd/server/wire_gen.go +++ b/backend/cmd/server/wire_gen.go @@ -104,6 +104,7 @@ func newServer() (*Server, error) { version: versionInfo, report: reporter, reportuse: reportUsecase, + euse: extensionUsecase, } return server, nil } @@ -123,4 +124,5 @@ type Server struct { version *version.VersionInfo report *report.Reporter reportuse domain.ReportUsecase + euse domain.ExtensionUsecase } diff --git a/backend/domain/extension.go b/backend/domain/extension.go index ba970b8..2812176 100644 --- a/backend/domain/extension.go +++ b/backend/domain/extension.go @@ -10,6 +10,7 @@ import ( type ExtensionUsecase interface { Latest(ctx context.Context) (*Extension, error) + SyncLatest() GetByVersion(ctx context.Context, version string) (*Extension, error) } diff --git a/backend/internal/extension/usecase/extension.go b/backend/internal/extension/usecase/extension.go index 3481e85..6108489 100644 --- a/backend/internal/extension/usecase/extension.go +++ b/backend/internal/extension/usecase/extension.go @@ -19,11 +19,10 @@ import ( ) type ExtensionUsecase struct { - logger *slog.Logger - repo domain.ExtensionRepo - config *config.Config - version string - mu sync.Mutex + logger *slog.Logger + repo domain.ExtensionRepo + config *config.Config + mu sync.Mutex } func NewExtensionUsecase( @@ -37,7 +36,6 @@ func NewExtensionUsecase( mu: sync.Mutex{}, logger: logger, } - e.syncLatest() return e } @@ -61,21 +59,24 @@ func (e *ExtensionUsecase) Latest(ctx context.Context) (*domain.Extension, error return cvt.From(ee, &domain.Extension{}), nil } -func (e *ExtensionUsecase) syncLatest() { - latest, err := e.repo.Latest(context.Background()) - if err == nil { - e.version = latest.Version - } - - logger := e.logger.With("fn", "syncLatest") - logger.With("version", e.version).Debug("开始同步插件版本信息") - +func (e *ExtensionUsecase) SyncLatest() { e.innerSync() } func (e *ExtensionUsecase) innerSync() { v := strings.ReplaceAll(version.Version, "v", "") - if v == e.version { + logger := e.logger.With("fn", "syncLatest").With("current", v) + latest, err := e.repo.Latest(context.Background()) + if err != nil { + if strings.Contains(err.Error(), "extension not found") { + latest = &db.Extension{} + } else { + logger.With("error", err).Error("获取最新插件版本失败") + return + } + } + + if v == latest.Version { return } @@ -120,5 +121,4 @@ func (e *ExtensionUsecase) download(version string) { os.Remove(filename) return } - e.version = version }