Files
platforms/backend/api/internal/logic/common/staff_error.go
2026-08-11 13:37:44 +08:00

53 lines
1.9 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// 功能描述:转换工作人员写入时的数据库错误,避免向客户端泄露数据库实现细节。
// 版本v1.0
package common
import (
"errors"
"log"
"git.apinb.com/heqiapp/platforms/backend/api/internal/impl"
"git.apinb.com/heqiapp/platforms/backend/api/internal/models"
"github.com/jackc/pgx/v5/pgconn"
)
const (
staffUsernameUniqueConstraint = "idx_staff_account_username"
staffPhoneUniqueConstraint = "idx_staff_account_phone"
)
var (
errStaffUsernameExists = errors.New("该用户名已存在")
errStaffPhoneExists = errors.New("该联系电话已被其他工作人员使用")
errStaffSaveFailed = errors.New("保存失败,请稍后重试")
)
// CreateStaffRecord 创建工作人员记录,并统一转换数据库写入错误。
// 参数staff 为已经完成业务校验和密码哈希处理的工作人员模型。
// 返回值:创建成功返回 nil失败返回脱敏后的工作人员写入错误。
func CreateStaffRecord(staff *models.StaffAccount) error {
if err := impl.DBService.Create(staff).Error; err != nil {
return StaffWriteError(err)
}
return nil
}
// StaffWriteError 将工作人员写入错误转换为稳定的中文业务提示。
// 参数err 为工作人员创建或更新操作返回的数据库错误。
// 返回值:已知唯一约束冲突返回对应业务提示,其他错误脱敏后返回通用保存失败提示。
func StaffWriteError(err error) error {
var postgresError *pgconn.PgError
if errors.As(err, &postgresError) && postgresError.Code == "23505" {
switch postgresError.ConstraintName {
case staffUsernameUniqueConstraint:
return errStaffUsernameExists
case staffPhoneUniqueConstraint:
return errStaffPhoneExists
}
}
// 未识别错误仅写入服务端日志,客户端不能看到数据库表名、约束名或 SQLSTATE。
log.Printf("staff write failed: %v", err)
return errStaffSaveFailed
}