From 5e6d202acd5b479cccdc51a47f0b9ec157e24bab Mon Sep 17 00:00:00 2001 From: nyne Date: Fri, 30 May 2025 12:04:54 +0800 Subject: [PATCH] Improve statistic --- server/dao/resource.go | 22 ++++------------------ server/service/file.go | 16 +++++++++++++--- server/service/resource.go | 5 ++++- 3 files changed, 21 insertions(+), 22 deletions(-) diff --git a/server/dao/resource.go b/server/dao/resource.go index cd177da..bd9817c 100644 --- a/server/dao/resource.go +++ b/server/dao/resource.go @@ -293,6 +293,10 @@ func init() { for id, stats := range cachedResourcesStats { var count int64 if err := tx.Model(&model.Resource{}).Where("id = ?", id).Count(&count).Error; err != nil { + if errors.Is(err, gorm.ErrRecordNotFound) { + log.Warnf("Resource with ID %d not found, skipping stats update", id) + continue + } return err } if count == 0 { @@ -322,15 +326,6 @@ func init() { } func AddResourceViewCount(id uint) error { - // 检查资源是否存在 - exists, err := ExistsResource(id) - if err != nil { - return err - } - if !exists { - return model.NewNotFoundError("Resource not found") - } - cacheMutex.RLock() stats, exists := cachedResourcesStats[id] cacheMutex.RUnlock() @@ -350,15 +345,6 @@ func AddResourceViewCount(id uint) error { } func AddResourceDownloadCount(id uint) error { - // 检查资源是否存在 - exists, err := ExistsResource(id) - if err != nil { - return err - } - if !exists { - return model.NewNotFoundError("Resource not found") - } - cacheMutex.RLock() stats, exists := cachedResourcesStats[id] cacheMutex.RUnlock() diff --git a/server/service/file.go b/server/service/file.go index e5de8bf..4276b6b 100644 --- a/server/service/file.go +++ b/server/service/file.go @@ -437,7 +437,10 @@ func DownloadFile(ip, fid, cfToken string) (string, string, error) { if file.StorageID == nil { if file.RedirectUrl != "" { - _ = dao.AddResourceDownloadCount(file.ResourceID) + err := dao.AddResourceDownloadCount(file.ResourceID) + if err != nil { + log.Errorf("failed to add resource download count: %v", err) + } return file.RedirectUrl, file.Filename, nil } return "", "", model.NewRequestError("file is not available") @@ -454,10 +457,17 @@ func DownloadFile(ip, fid, cfToken string) (string, string, error) { } path, err := iStorage.Download(file.StorageKey, file.Filename) + if err != nil { + log.Error("failed to download file from storage: ", err) + return "", "", model.NewInternalServerError("failed to download file from storage") + } - _ = dao.AddResourceDownloadCount(file.ResourceID) + err = dao.AddResourceDownloadCount(file.ResourceID) + if err != nil { + log.Errorf("failed to add resource download count: %v", err) + } - return path, file.Filename, err + return path, file.Filename, nil } func testFileUrl(url string) (int64, error) { diff --git a/server/service/resource.go b/server/service/resource.go index 20a6e64..87108af 100644 --- a/server/service/resource.go +++ b/server/service/resource.go @@ -113,10 +113,13 @@ func parseResourceIfPresent(line string, host string) *model.ResourceView { func GetResource(id uint, host string) (*model.ResourceDetailView, error) { r, err := dao.GetResourceByID(id) - _ = dao.AddResourceViewCount(id) if err != nil { return nil, err } + err = dao.AddResourceViewCount(id) + if err != nil { + log.Error("AddResourceViewCount error: ", err) + } v := r.ToDetailView() if host != "" { related := findRelatedResources(r, host)