refactor(plugins): restructure admin and message_gateway into standard layered sub-packages

This commit is contained in:
ryan
2026-08-28 22:33:26 +08:00
parent 85b383a4e0
commit f4975d6732
128 changed files with 12050 additions and 9901 deletions
@@ -25,11 +25,11 @@ import (
pkgcache "Wavelet/pkg/cache/disk"
"Wavelet/pkg/ginutil"
"Wavelet/plugins/domain/upload/repository"
uploadstorage "Wavelet/plugins/domain/upload/storage"
"github.com/gin-gonic/gin"
"golang.org/x/sync/singleflight"
"gorm.io/gorm"
)
var (
@@ -76,15 +76,15 @@ const (
func ServeFileByID(c *gin.Context) {
upload, err := GetUploadRecordByID(c)
if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
response.AbortNotFound(c, "文件记录未找到")
if repository.IsRecordNotFound(err) {
response.AbortNotFound(c, shared.ErrFileRecordNotFound)
return
}
if _, ok := err.(*strconv.NumError); ok {
response.AbortBadRequest(c, "无效的上传ID")
response.AbortBadRequest(c, shared.ErrInvalidUploadID)
return
}
response.AbortInternal(c, "服务器内部错误")
response.AbortInternal(c, shared.ErrInternalServerError)
return
}
@@ -277,7 +277,7 @@ func ImageCompressionCacheKey(upload *models.Upload, quality string) string {
func serveOriginal(c *gin.Context, upload *models.Upload) {
obj, err := uploadstorage.OpenStoredObject(c.Request.Context(), upload)
if err != nil {
response.AbortNotFound(c, "文件未找到")
response.AbortNotFound(c, shared.ErrFileNotFound)
return
}
defer func() { _ = obj.Body.Close() }()
@@ -111,7 +111,7 @@ func DeleteFile(c *gin.Context) {
if _, err := softDeleteUpload(ctx, uploadID); err != nil {
if isRecordNotFound(err) {
response.AbortNotFound(c, "文件记录未找到")
response.AbortNotFound(c, shared.ErrFileRecordNotFound)
return
}
response.AbortBadRequest(c, shared.ErrDeleteFileFailed)
@@ -230,11 +230,11 @@ func DeleteMyFile(c *gin.Context) {
if _, err := softDeleteOwnedUpload(ctx, currUser.ID, uploadID); err != nil {
if isRecordNotFound(err) {
response.AbortNotFound(c, "文件记录未找到")
response.AbortNotFound(c, shared.ErrFileRecordNotFound)
return
}
if err == ingest.ErrForbidden {
response.AbortForbidden(c, "无权操作")
response.AbortForbidden(c, shared.ErrOperationForbidden)
return
}
response.AbortBadRequest(c, shared.ErrDeleteFileFailed)
@@ -284,11 +284,11 @@ func UpdateMyFile(c *gin.Context) {
updated, err := updateOwnedUpload(ctx, currUser.ID, uploadID, updateMyUploadInput(req))
if err != nil {
if isRecordNotFound(err) {
response.AbortNotFound(c, "文件记录未找到")
response.AbortNotFound(c, shared.ErrFileRecordNotFound)
return
}
if err == ingest.ErrForbidden {
response.AbortForbidden(c, "无权操作")
response.AbortForbidden(c, shared.ErrOperationForbidden)
return
}
response.AbortBadRequest(c, shared.ErrUpdateFileFailed)
@@ -8,10 +8,7 @@ import (
"Wavelet/plugins/domain/upload/models"
"Wavelet/plugins/domain/upload/repository"
"context"
"errors"
"sort"
"gorm.io/gorm"
)
func listUploadFiles(ctx context.Context, filter repository.UploadListFilter) (int64, []models.Upload, error) {
@@ -82,5 +79,5 @@ func loadUploadStats(ctx context.Context) ([]models.UploadStat, error) {
}
func isRecordNotFound(err error) bool {
return errors.Is(err, gorm.ErrRecordNotFound)
return repository.IsRecordNotFound(err)
}
@@ -32,7 +32,6 @@ import (
"Wavelet/pkg/ginutil"
"github.com/gin-gonic/gin"
"gorm.io/gorm"
uploadstorage "Wavelet/plugins/domain/upload/storage"
)
@@ -170,8 +169,8 @@ func UploadFile(c *gin.Context) {
func DownloadFile(c *gin.Context) {
upload, err := filesrv.GetUploadRecordByID(c)
if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
response.AbortNotFound(c, "文件记录未找到")
if isRecordNotFound(err) {
response.AbortNotFound(c, shared.ErrFileRecordNotFound)
return
}
if _, ok := err.(*strconv.NumError); ok {
@@ -306,7 +305,7 @@ func resolveUploadAccessMode(c *gin.Context, uploadType string) (int, string) {
accessMode, err := strconv.Atoi(accessModeStr)
if err != nil || (accessMode != 0 && accessMode != 1) {
return 0, "无效的 access_mode 参数"
return 0, shared.ErrInvalidAccessModeParam
}
return accessMode, ""
}
@@ -9,6 +9,7 @@ import (
"Wavelet/plugins/domain/upload/models"
"Wavelet/plugins/domain/upload/shared"
"context"
"errors"
"strings"
"gorm.io/gorm"
@@ -137,3 +138,9 @@ func ListUploadStats(ctx context.Context) ([]models.UploadStat, error) {
}
return stats, nil
}
// IsRecordNotFound reports whether err is the persistence "record not found" sentinel.
// Upper layers must use this helper instead of importing gorm directly.
func IsRecordNotFound(err error) bool {
return errors.Is(err, gorm.ErrRecordNotFound)
}
@@ -40,4 +40,10 @@ const (
ErrQueryTypeListFailed = "查询文件类型列表失败"
ErrUpdateFileFailed = "更新文件失败"
ErrUnauthorized = "未登录"
ErrFileRecordNotFound = "文件记录未找到"
ErrFileNotFound = "文件未找到"
ErrOperationForbidden = "无权操作"
ErrInvalidUploadID = "无效的上传ID"
ErrInvalidAccessModeParam = "无效的 access_mode 参数"
ErrInternalServerError = "服务器内部错误"
)