|
|
package dberrorhandler
|
|
|
|
|
|
import (
|
|
|
"git.noahlan.cn/noahlan/ntool/nlog"
|
|
|
"git.noahlan.cn/noahlan/ntool-biz/core/nstatus"
|
|
|
"git.noahlan.cn/noahlan/ntool-biz/core/nstatus/msg"
|
|
|
// api
|
|
|
"git.noahlan.cn/noahlan/ntool-biz/core/nstatus/code"
|
|
|
|
|
|
"{{.package}}/ent"
|
|
|
)
|
|
|
|
|
|
// HandleEntErr returns errors dealing with default functions.
|
|
|
func HandleEntErr(logger logx.Logger, err error, detail any) error {
|
|
|
logger := nlog.WithCallerSkip(1)
|
|
|
if err != nil {
|
|
|
switch {
|
|
|
case ent.IsNotFound(err):
|
|
|
// 未找到数据实体
|
|
|
logger.Errorw(err.Error(), nlog.Field("detail", detail))
|
|
|
return nstatus.NewBizErr(code.StatusNotFound, msg.ObjectNotFound)
|
|
|
case ent.IsConstraintError(err):
|
|
|
// 创建/更新时,发生约束错误
|
|
|
logger.Errorw(err.Error(), nlog.Field("detail", detail))
|
|
|
return nstatus.NewBizErr(code.StatusConflict, msg.ConstraintError)
|
|
|
case ent.IsValidationError(err):
|
|
|
// 数据类型错误,验证错误
|
|
|
logger.Errorw(err.Error(), nlog.Field("detail", detail))
|
|
|
return nstatus.NewBizErr(code.StatusBadRequest, msg.ValidationError)
|
|
|
case ent.IsNotSingular(err):
|
|
|
// 查询时发生,非单一实体错误,通常是因为记录中存在多个实体,查询单个实体时未添加Limit
|
|
|
logger.Errorw(err.Error(), nlog.Field("detail", detail))
|
|
|
return nstatus.NewBizErr(code.StatusBadRequest, msg.NotSingularError)
|
|
|
default:
|
|
|
logger.Errorw("database error", nlog.Field("err", err.Error()), nlog.Field("detail", detail))
|
|
|
return nstatus.NewGrpcInternalErr(msg.DatabaseError)
|
|
|
}
|
|
|
}
|
|
|
return err
|
|
|
}
|