fix: 优化工作人员重复信息提示
This commit is contained in:
52
backend/api/internal/logic/common/staff_error.go
Normal file
52
backend/api/internal/logic/common/staff_error.go
Normal file
@@ -0,0 +1,52 @@
|
||||
// 功能描述:转换工作人员写入时的数据库错误,避免向客户端泄露数据库实现细节。
|
||||
// 版本: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
|
||||
}
|
||||
Reference in New Issue
Block a user