From 7b26f7f150d428d10b754a67190e696597ed30be Mon Sep 17 00:00:00 2001 From: ddcat666 <26564566+ddcat666@users.noreply.github.com> Date: Tue, 29 Sep 2026 08:27:03 +0800 Subject: [PATCH] =?UTF-8?q?fix(api):=20=E9=94=99=E8=AF=AF=E6=8F=90?= =?UTF-8?q?=E7=A4=BA=20-=20=E5=B0=86=E4=B8=9A=E5=8A=A1=E5=86=B2=E7=AA=81?= =?UTF-8?q?=E4=B8=8E=E6=A0=A1=E9=AA=8C=E4=BF=A1=E6=81=AF=E6=9C=AC=E5=9C=B0?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/internal/kernel/token_billing.go | 4 ++-- backend/internal/repository/admin_audit.go | 6 ++--- .../repository/admin_storage_delete.go | 6 ++--- .../internal/repository/announcement_image.go | 4 ++-- .../repository/channel_model_pricing.go | 2 +- backend/internal/repository/creation.go | 2 +- backend/internal/repository/finance.go | 16 ++++++------- backend/internal/repository/logical_models.go | 4 ++-- backend/internal/repository/notifications.go | 6 ++--- backend/internal/repository/payment.go | 8 +++---- backend/internal/repository/payment_export.go | 2 +- backend/internal/repository/repository.go | 24 +++++++++---------- .../internal/repository/resource_cleanup.go | 4 ++-- 13 files changed, 44 insertions(+), 44 deletions(-) diff --git a/backend/internal/kernel/token_billing.go b/backend/internal/kernel/token_billing.go index c20babd2b..ebd88da55 100644 --- a/backend/internal/kernel/token_billing.go +++ b/backend/internal/kernel/token_billing.go @@ -6,8 +6,8 @@ import ( ) var ( - ErrInvalidTokenBilling = errors.New("invalid token billing parameters") - ErrTokenBillingOverflow = errors.New("token billing amount overflows int64") + ErrInvalidTokenBilling = errors.New("按量计费参数无效") + ErrTokenBillingOverflow = errors.New("按量计费金额超出上限") ) type TokenBillingTerm struct { diff --git a/backend/internal/repository/admin_audit.go b/backend/internal/repository/admin_audit.go index 2c0c8fdb7..98afab639 100644 --- a/backend/internal/repository/admin_audit.go +++ b/backend/internal/repository/admin_audit.go @@ -11,9 +11,9 @@ import ( ) var ( - ErrBulkUserNotFound = errors.New("bulk user not found") - ErrBulkCurrentAdmin = errors.New("bulk includes current admin") - ErrBulkLastActiveAdmin = errors.New("bulk removes last active admin") + ErrBulkUserNotFound = errors.New("所选用户中有不存在的账号") + ErrBulkCurrentAdmin = errors.New("批量操作不能包含当前管理员自己") + ErrBulkLastActiveAdmin = errors.New("不能移除最后一个可用的管理员") ) type AdminUserCounts struct { diff --git a/backend/internal/repository/admin_storage_delete.go b/backend/internal/repository/admin_storage_delete.go index 23add4213..3b9ac39e0 100644 --- a/backend/internal/repository/admin_storage_delete.go +++ b/backend/internal/repository/admin_storage_delete.go @@ -9,9 +9,9 @@ import ( "gorm.io/gorm/clause" ) -var ErrAdminResourceDeleteChanged = errors.New("admin resource delete set changed") -var ErrAdminResourceStillReferenced = errors.New("admin resource is still directly referenced") -var ErrAdminResourceAuditMismatch = errors.New("admin resource delete audit mismatch") +var ErrAdminResourceDeleteChanged = errors.New("待删除的资源已变化,请刷新后重试") +var ErrAdminResourceStillReferenced = errors.New("资源仍被引用,无法删除") +var ErrAdminResourceAuditMismatch = errors.New("资源删除记录不一致,请刷新后重试") func (r *Repository) AdminResourcesByIDs(ids []string) ([]model.Resource, error) { if len(ids) == 0 { diff --git a/backend/internal/repository/announcement_image.go b/backend/internal/repository/announcement_image.go index 75312cbdc..45e401922 100644 --- a/backend/internal/repository/announcement_image.go +++ b/backend/internal/repository/announcement_image.go @@ -9,8 +9,8 @@ import ( "gorm.io/gorm" ) -var ErrAnnouncementImageDraftUnavailable = errors.New("announcement image draft unavailable") -var ErrAnnouncementImageReferenced = errors.New("announcement image is still referenced") +var ErrAnnouncementImageDraftUnavailable = errors.New("公告图片草稿已失效,请重新上传") +var ErrAnnouncementImageReferenced = errors.New("公告图片仍被引用,无法删除") func (r *Repository) CreateAnnouncementImageDraft(draft *model.AnnouncementImageDraft) error { return r.db.Create(draft).Error diff --git a/backend/internal/repository/channel_model_pricing.go b/backend/internal/repository/channel_model_pricing.go index a79bd226c..6926bf9c5 100644 --- a/backend/internal/repository/channel_model_pricing.go +++ b/backend/internal/repository/channel_model_pricing.go @@ -8,7 +8,7 @@ import ( "gorm.io/gorm" ) -var ErrChannelModelPriceConflict = errors.New("channel model prices changed concurrently") +var ErrChannelModelPriceConflict = errors.New("模型价格已变化,请刷新后重试") // UpdateChannelModelSalePrices commits the entire selection or nothing. Only // pricing columns are written; version checks protect the cost snapshot used by app. diff --git a/backend/internal/repository/creation.go b/backend/internal/repository/creation.go index 8afebd330..01083bc66 100644 --- a/backend/internal/repository/creation.go +++ b/backend/internal/repository/creation.go @@ -11,7 +11,7 @@ import ( "infinite-canvas/backend/internal/model" ) -var ErrCreationConflict = errors.New("creation state changed; reload before continuing") +var ErrCreationConflict = errors.New("数据已被更新,请刷新后重试") func (r *Repository) CreationStorageUsage(userID string) (int64, int64, error) { var usage struct { diff --git a/backend/internal/repository/finance.go b/backend/internal/repository/finance.go index f2150b49b..9e73eee6d 100644 --- a/backend/internal/repository/finance.go +++ b/backend/internal/repository/finance.go @@ -17,14 +17,14 @@ import ( ) var ( - ErrInsufficientCredits = errors.New("insufficient credits") - ErrRedeemCodeInvalid = errors.New("redeem code invalid") - ErrActiveTaskLimit = errors.New("active task limit reached") - ErrTaskNotRetryable = errors.New("task is not retryable") - ErrBillingStateConflict = errors.New("billing state conflict") - ErrBillingUsageUnavailable = errors.New("billing usage unavailable") - ErrBillingChargeLimit = errors.New("billing amount exceeds authorized charge limit") - ErrChannelModelInUse = errors.New("channel model is in use") + ErrInsufficientCredits = errors.New("积分不足,请先充值") + ErrRedeemCodeInvalid = errors.New("兑换码无效或已使用") + ErrActiveTaskLimit = errors.New("同时进行的任务数已达上限,请等待已有任务完成") + ErrTaskNotRetryable = errors.New("该任务当前状态不支持重试") + ErrBillingStateConflict = errors.New("计费状态已变化,请刷新后重试") + ErrBillingUsageUnavailable = errors.New("暂时无法获取用量,计费未完成") + ErrBillingChargeLimit = errors.New("本次费用超过授权上限,已拒绝扣费") + ErrChannelModelInUse = errors.New("该渠道模型正在被使用,无法删除或停用") ) // 先抢占唯一业务键再更新账户,确保注册和签到奖励在多实例并发下只入账一次。 diff --git a/backend/internal/repository/logical_models.go b/backend/internal/repository/logical_models.go index f196b2405..fb5b165b9 100644 --- a/backend/internal/repository/logical_models.go +++ b/backend/internal/repository/logical_models.go @@ -17,8 +17,8 @@ type LogicalModelGraph struct { ChannelModels []model.ChannelModel } -var ErrLogicalModelInUse = errors.New("logical model is in use") -var ErrLogicalModelUnavailable = errors.New("logical model is unavailable") +var ErrLogicalModelInUse = errors.New("该模型正在被使用,无法删除或停用") +var ErrLogicalModelUnavailable = errors.New("所选模型已停用或不可用,请重新选择") func (r *Repository) LogicalModels(includeDisabled bool) ([]model.LogicalModel, error) { var items []model.LogicalModel diff --git a/backend/internal/repository/notifications.go b/backend/internal/repository/notifications.go index 6b7fc181c..35cc97b0c 100644 --- a/backend/internal/repository/notifications.go +++ b/backend/internal/repository/notifications.go @@ -8,9 +8,9 @@ import ( "time" ) -var ErrNotificationLimit = errors.New("notification limit reached") -var ErrVerificationInvalid = errors.New("verification expired, changed or consumed") -var ErrChannelConflict = errors.New("sms channel changed") +var ErrNotificationLimit = errors.New("通知发送次数已达上限,请稍后再试") +var ErrVerificationInvalid = errors.New("验证码已过期或已使用,请重新获取") +var ErrChannelConflict = errors.New("短信通道配置已变化,请重新获取验证码") func (r *Repository) AttemptLegacyEmailVerification(id string) error { result := r.db.Model(&model.EmailVerificationCode{}).Where("id = ? AND attempts < 5 AND used_at IS NULL AND expires_at > ?", id, time.Now()).Update("attempts", gorm.Expr("attempts + 1")) diff --git a/backend/internal/repository/payment.go b/backend/internal/repository/payment.go index 0438e1bc6..6e326e104 100644 --- a/backend/internal/repository/payment.go +++ b/backend/internal/repository/payment.go @@ -12,10 +12,10 @@ import ( ) var ( - ErrPaymentOrderStateConflict = errors.New("payment order state conflict") - ErrPaymentEvidenceMismatch = errors.New("payment evidence does not match order") - ErrPaymentTradeNoConflict = errors.New("payment provider trade number is already used") - ErrPaymentCreditOverflow = errors.New("payment credit balance would overflow") + ErrPaymentOrderStateConflict = errors.New("订单状态已变化,请刷新后重试") + ErrPaymentEvidenceMismatch = errors.New("支付凭证与订单不一致") + ErrPaymentTradeNoConflict = errors.New("该支付流水号已被使用") + ErrPaymentCreditOverflow = errors.New("积分余额超出上限,无法入账") ) // Credit balances are serialized to JavaScript clients as JSON numbers. diff --git a/backend/internal/repository/payment_export.go b/backend/internal/repository/payment_export.go index e212bade6..6da9ef16d 100644 --- a/backend/internal/repository/payment_export.go +++ b/backend/internal/repository/payment_export.go @@ -20,7 +20,7 @@ type PaymentReconciliationFilter struct { ProviderID, Status, From, To string } -var ErrPaymentReconciliationRunning = errors.New("payment reconciliation is running") +var ErrPaymentReconciliationRunning = errors.New("正在对账,请稍后再试") func (r *Repository) paymentReconciliationItemsQuery(runID, result string) *gorm.DB { query := r.db.Model(&model.PaymentReconciliationItem{}).Where("run_id = ?", strings.TrimSpace(runID)) diff --git a/backend/internal/repository/repository.go b/backend/internal/repository/repository.go index 1cf4e235b..2ae0e9a80 100644 --- a/backend/internal/repository/repository.go +++ b/backend/internal/repository/repository.go @@ -17,27 +17,27 @@ import ( "gorm.io/gorm/clause" ) -var ErrDailyUploadLimitExceeded = errors.New("daily upload limit exceeded") +var ErrDailyUploadLimitExceeded = errors.New("今日上传额度已用完,请明天再试") -var ErrTaskProviderRecoveryConflict = errors.New("task provider recovery is already running") +var ErrTaskProviderRecoveryConflict = errors.New("任务正在恢复中,请稍后查看") -var ErrTaskProviderCancellationConflict = errors.New("task provider cancellation is already claimed") +var ErrTaskProviderCancellationConflict = errors.New("任务正在取消中,请稍后查看") -var ErrTaskStateConflict = errors.New("task state changed concurrently") +var ErrTaskStateConflict = errors.New("任务状态已变化,请刷新后重试") -var ErrTextReplayQuotaExceeded = errors.New("text replay quota exceeded") +var ErrTextReplayQuotaExceeded = errors.New("文本回放额度已用完") -var ErrTextReplayClosed = errors.New("text replay task is closed") +var ErrTextReplayClosed = errors.New("该文本任务已结束") -var ErrEmailVerificationCodeInvalid = errors.New("email verification code is no longer valid") +var ErrEmailVerificationCodeInvalid = errors.New("邮箱验证码已失效,请重新获取") -var ErrProjectAssetFolderNotEmpty = errors.New("project asset folder is not empty") +var ErrProjectAssetFolderNotEmpty = errors.New("资产文件夹不为空,无法删除") -var ErrProjectHasActiveTasks = errors.New("project has active tasks") +var ErrProjectHasActiveTasks = errors.New("项目中还有进行中的任务,请等待完成后再操作") -var ErrProjectUnitShotsChanged = errors.New("project unit shots changed") +var ErrProjectUnitShotsChanged = errors.New("镜头已被修改,请刷新后重试") -var ErrCanvasRevisionConflict = errors.New("canvas revision changed") +var ErrCanvasRevisionConflict = errors.New("画布已被更新,请刷新后重试") type Repository struct { db *gorm.DB @@ -282,7 +282,7 @@ func (r *Repository) CreateUserWithEmailVerification(user *model.User, verificat return result.Error } if result.RowsAffected != 1 { - return errors.New("email verification code is no longer valid") + return errors.New("邮箱验证码已失效,请重新获取") } return tx.Create(user).Error }) diff --git a/backend/internal/repository/resource_cleanup.go b/backend/internal/repository/resource_cleanup.go index 925652dac..079566aef 100644 --- a/backend/internal/repository/resource_cleanup.go +++ b/backend/internal/repository/resource_cleanup.go @@ -10,8 +10,8 @@ import ( "gorm.io/gorm/clause" ) -var ErrResourceCleanupSetChanged = errors.New("resource cleanup set changed") -var ErrResourceCleanupStillReferenced = errors.New("resource cleanup resource is still directly referenced") +var ErrResourceCleanupSetChanged = errors.New("待清理的资源已变化,请刷新后重试") +var ErrResourceCleanupStillReferenced = errors.New("资源仍被引用,暂不清理") // DeleteDetachedResources removes Resource rows and enqueues physical deletion in one transaction. // JSON references are checked by the service before this call; direct foreign-key-like references