提交 639f55d7 authored 作者: mooncake's avatar mooncake

update

上级 a71424db
......@@ -4,6 +4,7 @@ package response
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
"strconv"
"time"
......@@ -267,17 +268,17 @@ func Error(c *gin.Context, err error) {
c.Set(ctxutils.KeyRspCode, 0)
msg := ""
if err != nil {
msg = err.Error()
if e, ok := err.(*xerror.Error); ok {
//if !errcode.IsSysDefinedError(xerr.Code()) {
// logger.Error(err.Error(), logger.Err(err), ctxutils.GinTraceIDField(c))
//}
if e.Code() != errcode.InvalidParams.Code() {
logger.Error(err.Error(), logger.Err(err), ctxutils.GinTraceIDField(c))
}
} else {
logger.Error(err.Error(), logger.Err(err), ctxutils.GinTraceIDField(c))
switch e := err.(type) {
case *xerror.BizError, *xerror.ParamError:
msg = e.Error()
case *xerror.DBError, *xerror.NetError:
logger.Error(fmt.Sprintf("[response]%s", err.Error()), ctxutils.GinTraceIDField(c))
msg = "网络开小差了,请稍后再试~"
default:
msg = e.Error()
logger.Error(fmt.Sprintf("[response]%s", err.Error()), ctxutils.GinTraceIDField(c))
}
}
respJSONWith200(c, CustomErrorCode, msg)
}
......@@ -8,16 +8,48 @@ import (
// New 用于创建一个自定义文本错误信息的 error 对象,并包含堆栈信息。
func New(text string) error {
return &Error{
return &Err{
stack: callers(),
text: text,
code: xcode.CodeDefault,
}
}
func NewNetError(text string) error {
e := NetError{}
e.stack = callers()
e.text = text
e.code = xcode.CodeDefault
return &e
}
func NewDBError(text string) error {
e := DBError{}
e.stack = callers()
e.text = text
e.code = xcode.CodeDefault
return &e
}
func NewParamError(text string) error {
e := ParamError{}
e.stack = callers()
e.text = text
e.code = xcode.CodeDefault
return &e
}
func NewBizError(text string) error {
e := BizError{}
e.stack = callers()
e.text = text
e.code = xcode.CodeDefault
return &e
}
// NewC add code
func NewC(code int, text string) error {
return &Error{
return &Err{
stack: callers(),
text: text,
code: code,
......@@ -49,21 +81,21 @@ func Join(errs ...error) error {
// Newf 用于创建一个自定义文本错误带参数信息的 error 对象,并包含堆栈信息。
func Newf(format string, args ...any) error {
return &Error{
return &Err{
stack: callers(),
text: fmt.Sprintf(format, args...),
code: xcode.CodeDefault,
}
}
func Errorf(format string, args ...any) error {
return &Error{
return &Err{
stack: callers(),
text: fmt.Sprintf(format, args...),
code: xcode.CodeDefault,
}
}
func NewCf(code int, format string, args ...any) error {
return &Error{
return &Err{
stack: callers(),
text: fmt.Sprintf(format, args...),
code: code,
......@@ -73,7 +105,7 @@ func NewCf(code int, format string, args ...any) error {
// NewSkip 用于创建一个自定义错误信息的 error 对象,并且忽略部分堆栈信息(按照当前调用方法位置往上忽略)。高级功能,一般开发者很少用得到。
// 参数 `skip` 指定堆栈跳过的层数。
func NewSkip(skip int, text string) error {
return &Error{
return &Err{
stack: callers(skip),
text: text,
code: xcode.CodeDefault,
......@@ -81,7 +113,7 @@ func NewSkip(skip int, text string) error {
}
func NewSkipC(code, skip int, text string) error {
return &Error{
return &Err{
stack: callers(skip),
text: text,
code: code,
......@@ -91,7 +123,7 @@ func NewSkipC(code, skip int, text string) error {
// NewSkipf 用于创建一个自定义错误信息的error对象,并且忽略部分堆栈信息(按照当前调用方法位置往上忽略)。
// 参数 `skip` 指定堆栈跳过的层数。
func NewSkipf(skip int, format string, args ...any) error {
return &Error{
return &Err{
stack: callers(skip),
text: fmt.Sprintf(format, args...),
code: xcode.CodeDefault,
......@@ -99,7 +131,7 @@ func NewSkipf(skip int, format string, args ...any) error {
}
func NewSkipCf(code, skip int, format string, args ...any) error {
return &Error{
return &Err{
stack: callers(skip),
text: fmt.Sprintf(format, args...),
code: code,
......@@ -112,7 +144,7 @@ func Wrap(err error, text string) error {
if err == nil {
return nil
}
return &Error{
return &Err{
error: err,
stack: callers(),
text: text,
......@@ -125,7 +157,7 @@ func Wrapf(err error, format string, args ...any) error {
if err == nil {
return nil
}
return &Error{
return &Err{
error: err,
stack: callers(),
text: fmt.Sprintf(format, args...),
......@@ -138,7 +170,7 @@ func WrapSkip(skip int, err error, text string) error {
if err == nil {
return nil
}
return &Error{
return &Err{
error: err,
stack: callers(skip),
text: text,
......@@ -151,7 +183,7 @@ func WrapSkipf(skip int, err error, format string, args ...any) error {
if err == nil {
return nil
}
return &Error{
return &Err{
error: err,
stack: callers(skip),
text: fmt.Sprintf(format, args...),
......
......@@ -9,7 +9,7 @@ import (
// NewCode 用于创建一个自定义错误信息的 error 对象,并包含堆栈信息,并增加错误码对象的输入。
func NewCode(code int, text ...string) error {
return &Error{
return &Err{
stack: callers(),
text: strings.Join(text, separatorSpace),
code: code,
......@@ -18,7 +18,7 @@ func NewCode(code int, text ...string) error {
// NewCodef 用于创建一个自定义错误信息的 error 对象,并包含堆栈信息,并增加错误码对象的输入。
func NewCodef(code int, format string, args ...any) error {
return &Error{
return &Err{
stack: callers(),
text: fmt.Sprintf(format, args...),
code: code,
......@@ -27,7 +27,7 @@ func NewCodef(code int, format string, args ...any) error {
// NewCodeSkip 用于创建一个自定义错误信息的 error 对象,并包含堆栈信息,并增加错误码对象的输入。并且忽略部分堆栈信息(按照当前调用方法位置往上忽略)。
func NewCodeSkip(code int, skip int, text ...string) error {
return &Error{
return &Err{
stack: callers(skip),
text: strings.Join(text, separatorSpace),
code: code,
......@@ -36,7 +36,7 @@ func NewCodeSkip(code int, skip int, text ...string) error {
// NewCodeSkipf 用于创建一个自定义错误信息的 error 对象,并包含堆栈信息,并增加错误码对象的输入。并且忽略部分堆栈信息(按照当前调用方法位置往上忽略)。
func NewCodeSkipf(code int, skip int, format string, args ...any) error {
return &Error{
return &Err{
stack: callers(skip),
text: fmt.Sprintf(format, args...),
code: code,
......@@ -48,7 +48,7 @@ func WrapCode(code int, err error, text ...string) error {
if err == nil {
return nil
}
return &Error{
return &Err{
error: err,
stack: callers(),
text: strings.Join(text, separatorSpace),
......@@ -61,7 +61,7 @@ func WrapCodef(code int, err error, format string, args ...any) error {
if err == nil {
return nil
}
return &Error{
return &Err{
error: err,
stack: callers(),
text: fmt.Sprintf(format, args...),
......@@ -74,7 +74,7 @@ func WrapCodeSkip(code int, skip int, err error, text ...string) error {
if err == nil {
return nil
}
return &Error{
return &Err{
error: err,
stack: callers(skip),
text: strings.Join(text, separatorSpace),
......@@ -87,7 +87,7 @@ func WrapCodeSkipf(code int, skip int, err error, format string, args ...any) er
if err == nil {
return nil
}
return &Error{
return &Err{
error: err,
stack: callers(skip),
text: fmt.Sprintf(format, args...),
......
......@@ -10,7 +10,7 @@ type Option struct {
// NewOption 用于自定义配置的错误对象创建。
func NewOption(option Option) error {
err := &Error{
err := &Err{
error: option.Error,
text: option.Text,
code: option.Code,
......
......@@ -8,14 +8,30 @@ import (
"github.com/pkg/errors"
)
// Error 自定义错误对象。
type Error struct {
// Err 自定义错误对象。
type Err struct {
error error // 包装错误。
stack stack // 堆栈数组,当创建或包装此错误时记录堆栈信息。
text string // 创建错误时自定义错误文本。
code int // 如有必要,错误码。
}
type NetError struct {
Err
}
type DBError struct {
Err
}
type ParamError struct {
Err
}
type BizError struct {
Err
}
const (
// stackFilterKeyLocal 过滤当前错误模块路径的键。
stackFilterKeyLocal = "/xerrors/xerror"
......@@ -33,7 +49,7 @@ func init() {
}
// Error 实现错误的接口,它将所有错误返回为字符串。
func (err *Error) Error() string {
func (err *Err) Error() string {
if err == nil {
return ""
}
......@@ -48,14 +64,14 @@ func (err *Error) Error() string {
}
// Cause 获取根错误 error。
func (err *Error) Cause() error {
func (err *Err) Cause() error {
if err == nil {
return nil
}
loop := err
for loop != nil {
if loop.error != nil {
if e, ok := loop.error.(*Error); ok {
if e, ok := loop.error.(*Err); ok {
// 内部自定义错误。
loop = e
} else if e, ok := loop.error.(ICause); ok {
......@@ -76,11 +92,11 @@ func (err *Error) Cause() error {
// Current 获取当前 error。
// 如果当前错误是 nil, 则返回 nil。
func (err *Error) Current() error {
func (err *Err) Current() error {
if err == nil {
return nil
}
return &Error{
return &Err{
error: nil,
stack: err.stack,
text: err.text,
......@@ -89,7 +105,7 @@ func (err *Error) Current() error {
}
// Unwrap 获取下一层 error。
func (err *Error) Unwrap() error {
func (err *Err) Unwrap() error {
if err == nil {
return nil
}
......@@ -98,7 +114,7 @@ func (err *Error) Unwrap() error {
// Equal 错误对象比较。
// 如果它们的 `code` 和 `text` 都相同,则认为错误相同。
func (err *Error) Equal(target error) bool {
func (err *Err) Equal(target error) bool {
if err.Error() == target.Error() {
return true
}
......@@ -112,7 +128,7 @@ func (err *Error) Equal(target error) bool {
}
// Is 当前错误 `err` 的链接错误中是否包含错误 `target`。
func (err *Error) Is(target error) bool {
func (err *Err) Is(target error) bool {
if Equal(err, target) {
return true
}
......
......@@ -4,7 +4,7 @@ import "gitlab.wanzhuangkj.com/tush/xpkg/pkg/xerrors/xcode"
// Code 获取错误码。
// 如果没有错误代码,则返回 `xcode.CodeDefault`。
func (err *Error) Code() int {
func (err *Err) Code() int {
if err == nil {
return xcode.CodeDefault
}
......@@ -15,7 +15,7 @@ func (err *Error) Code() int {
}
// SetCode 使用指定 `code` 更新内部 `code` 。
func (err *Error) SetCode(code int) {
func (err *Err) SetCode(code int) {
if err == nil {
return
}
......
......@@ -11,7 +11,7 @@ import (
// %-v, %-s : 打印当前级别错误字符串;
// %+s : 打印完整堆栈错误列表;
// %+v : 打印错误字符串和完整堆栈错误列表
func (err *Error) Format(s fmt.State, verb rune) {
func (err *Err) Format(s fmt.State, verb rune) {
switch verb {
case 's', 'v':
switch {
......
......@@ -2,6 +2,6 @@ package xerror
// MarshalJSON 实现 json.Marshal 接口。
// 注:这里不要使用指针作为其接收器。
func (err Error) MarshalJSON() ([]byte, error) {
func (err Err) MarshalJSON() ([]byte, error) {
return []byte(`"` + err.Error() + `"`), nil
}
......@@ -22,7 +22,7 @@ type stackLine struct {
}
// Stack 以字符串形式返回错误堆栈信息。
func (err *Error) Stack() string {
func (err *Err) Stack() string {
if err == nil {
return ""
}
......@@ -40,7 +40,7 @@ func (err *Error) Stack() string {
infos = append(infos, info)
loopLinesOfStackInfo(loop.stack, info)
if loop.error != nil {
if e, ok := loop.error.(*Error); ok {
if e, ok := loop.error.(*Err); ok {
loop = e
} else {
infos = append(infos, &stackInfo{
......
......@@ -221,7 +221,7 @@ func Test_SetCode(t *testing.T) {
assert.Equal(t, xerror.Code(err), -1)
assert.Equal(t, err.Error(), "123")
err.(*xerror.Error).SetCode(xcode.CodeValidationFailed)
err.(*xerror.Err).SetCode(xcode.CodeValidationFailed)
assert.Equal(t, xerror.Code(err), xcode.CodeValidationFailed)
assert.Equal(t, err.Error(), "123")
}
......
......@@ -2,7 +2,6 @@ package xcommon
import (
"context"
"errors"
"net/http"
"os"
"reflect"
......@@ -57,13 +56,14 @@ func (e *Controller) Bind(c *gin.Context, req any) error {
if valid, ok := req.(IValid); ok {
if err := valid.Valid(); err != nil {
return err
return xerror.NewParamError(err.Error())
}
}
storePagination(req, reflectPagination(c))
c.Set("reqbody", req)
return nil
}
......@@ -106,9 +106,9 @@ func zhError(err error) error {
strs = append(strs, zhStr)
}
if len(strs) > 0 {
return errors.New(strings.Join(strs, ";"))
return xerror.NewParamError(strings.Join(strs, ";"))
} else {
return xerror.Join(errs)
return xerror.NewParamError(xerror.Join(errs).Error())
}
}
return err
......
......@@ -67,7 +67,7 @@ func (x *ODao[T]) deleteCaches(ctx context.Context, ids []xsf.ID) error {
func (x *ODao[T]) TruncateTable(ctx context.Context) error {
var t T
if err := x.DB().WithContext(ctx).Exec(fmt.Sprintf("truncate table `%s`", t.TableName())).Error; err != nil {
return xerror.New(err.Error())
return xerror.NewDBError(err.Error())
}
return nil
}
......@@ -96,7 +96,7 @@ func (x *ODao[T]) CreateSliceSilent(ctx context.Context, tbs []*T) error {
func (x *ODao[T]) CreateTx(ctx context.Context, tx *gorm.DB, tb *T) error {
if err := tx.WithContext(ctx).Create(tb).Error; err != nil {
return xerror.New(err.Error())
return xerror.NewDBError(err.Error())
}
_ = x.deleteCache(ctx, (*tb).GetID())
return nil
......@@ -107,7 +107,7 @@ func (x *ODao[T]) CreateSliceInBatches(ctx context.Context, tbs []*T, batchSize
return nil
}
if err := x.DB().WithContext(ctx).CreateInBatches(tbs, batchSize).Error; err != nil {
return xerror.New(err.Error())
return xerror.NewDBError(err.Error())
}
_ = x.deleteCaches(ctx, x.getIDs(tbs))
return nil
......@@ -118,7 +118,7 @@ func (x *ODao[T]) CreateSliceTx(ctx context.Context, tx *gorm.DB, tbs []*T) erro
return nil
}
if err := tx.WithContext(ctx).Create(tbs).Error; err != nil {
return xerror.New(err.Error())
return xerror.NewDBError(err.Error())
}
_ = x.deleteCaches(ctx, x.getIDs(tbs))
return nil
......@@ -154,7 +154,7 @@ func (x *ODao[T]) DeleteByIDTx(ctx context.Context, tx *gorm.DB, id xsf.ID) erro
}
var tb T
if err := tx.WithContext(ctx).Where("id = ?", id).Delete(&tb).Error; err != nil {
return xerror.New(err.Error())
return xerror.NewDBError(err.Error())
}
_ = x.deleteCache(ctx, id)
return nil
......@@ -166,7 +166,7 @@ func (x *ODao[T]) DeleteByIDsTx(ctx context.Context, tx *gorm.DB, ids []xsf.ID)
}
var tb T
if err := tx.WithContext(ctx).Where("id IN (?)", ids).Delete(&tb).Error; err != nil {
return xerror.New(err.Error())
return xerror.NewDBError(err.Error())
}
_ = x.deleteCaches(ctx, ids)
return nil
......@@ -216,7 +216,7 @@ func (x *ODao[T]) updByIDTx(ctx context.Context, tx *gorm.DB, id xsf.ID, upd any
}
var table T
if err := tx.WithContext(ctx).Model(&table).Where("id = ?", id).Updates(upd).Error; err != nil {
return xerror.New(err.Error())
return xerror.NewDBError(err.Error())
}
_ = x.deleteCache(ctx, id)
return nil
......@@ -264,7 +264,7 @@ func (x *ODao[T]) updByIDsTx(ctx context.Context, tx *gorm.DB, ids []xsf.ID, upd
}
var table T
if err := tx.WithContext(ctx).Model(&table).Where("id IN (?)", ids).Updates(upd).Error; err != nil {
return xerror.New(err.Error())
return xerror.NewDBError(err.Error())
}
_ = x.deleteCaches(ctx, ids)
return nil
......@@ -272,7 +272,7 @@ func (x *ODao[T]) updByIDsTx(ctx context.Context, tx *gorm.DB, ids []xsf.ID, upd
func (x *ODao[T]) GetAll(ctx context.Context) (records []*T, err error) {
if err := x.DB().WithContext(ctx).Find(&records).Error; err != nil {
return nil, xerror.New(err.Error())
return nil, xerror.NewDBError(err.Error())
}
return records, nil
}
......@@ -306,13 +306,13 @@ func (x *ODao[T]) Page(ctx context.Context, where IPageParams) (rs []*T, total i
condition = condition.Unscoped()
}
if err = condition.Limit(-1).Offset(-1).Count(&total).Error; err != nil {
return rs, total, xerror.New(err.Error())
return rs, total, xerror.NewDBError(err.Error())
}
if total == 0 {
return rs, total, nil
}
if err = condition.Limit(where.GetLimit()).Offset(where.GetOffset()).Find(&rs).Error; err != nil {
return rs, total, xerror.New(err.Error())
return rs, total, xerror.NewDBError(err.Error())
}
return rs, total, nil
}
......@@ -323,14 +323,14 @@ func (x *ODao[T]) JPage(ctx context.Context, where IPageParams, result any, resu
condition = condition.Unscoped()
}
if err = condition.Limit(-1).Offset(-1).Count(&total).Error; err != nil {
return total, xerror.New(err.Error())
return total, xerror.NewDBError(err.Error())
}
if total == 0 {
return total, nil
}
fields := GetGormTags(resultType)
if err = condition.Select(strings.Join(fields, ",")).Limit(where.GetLimit()).Offset(where.GetOffset()).Scan(result).Error; err != nil {
return total, xerror.New(err.Error())
return total, xerror.NewDBError(err.Error())
}
return total, nil
}
......@@ -341,14 +341,14 @@ func (x *ODao[T]) JList(ctx context.Context, where IListParams, result any, resu
condition = condition.Unscoped()
}
if err = condition.Limit(-1).Offset(-1).Count(&total).Error; err != nil {
return total, xerror.New(err.Error())
return total, xerror.NewDBError(err.Error())
}
if total == 0 {
return total, nil
}
fields := GetGormTags(resultType)
if err = condition.Select(strings.Join(fields, ",")).Scan(result).Error; err != nil {
return total, xerror.New(err.Error())
return total, xerror.NewDBError(err.Error())
}
return total, nil
}
......@@ -361,7 +361,7 @@ func (x *ODao[T]) GetPageByColumns(ctx context.Context, params *query.Params) (r
if params.Sort != OrderIgnoreCount {
var tb T
if err = x.DB().WithContext(ctx).Model(&tb).Where(queryStr, args...).Count(&total).Error; err != nil {
return nil, 0, xerror.New(err.Error())
return nil, 0, xerror.NewDBError(err.Error())
}
if total == 0 {
return nil, total, nil
......@@ -369,7 +369,7 @@ func (x *ODao[T]) GetPageByColumns(ctx context.Context, params *query.Params) (r
}
order, limit, offset := params.ConvertToPage()
if err = x.DB().WithContext(ctx).Order(order).Limit(limit).Offset(offset).Where(queryStr, args...).Find(&rs).Error; err != nil {
return nil, 0, xerror.New(err.Error())
return nil, 0, xerror.NewDBError(err.Error())
}
return rs, total, err
}
......@@ -380,7 +380,7 @@ func (x *ODao[T]) GetSliceByCondition(ctx context.Context, c *query.Conditions)
return nil, err
}
if err = x.DB().WithContext(ctx).Where(queryStr, args...).Find(&rs).Error; err != nil {
return nil, xerror.New(err.Error())
return nil, xerror.NewDBError(err.Error())
}
return rs, nil
}
......@@ -391,7 +391,7 @@ func (x *ODao[T]) GetSliceByLastID(ctx context.Context, lastID xsf.ID, limit int
}
page := query.NewPage(0, limit, sort)
if err = x.DB().WithContext(ctx).Order(page.Sort()).Limit(page.Limit()).Where("id < ?", lastID).Find(&rs).Error; err != nil {
return nil, xerror.New(err.Error())
return nil, xerror.NewDBError(err.Error())
}
return rs, nil
}
......@@ -401,14 +401,14 @@ func (x *ODao[T]) GetByWhere(ctx context.Context, query any, args ...any) (recor
if xerror.Is(err, gorm.ErrRecordNotFound) {
return nil, nil
}
return nil, xerror.New(err.Error())
return nil, xerror.NewDBError(err.Error())
}
return record, nil
}
func (x *ODao[T]) QuerySliceTotal(ctx context.Context, where Query, total *int64) error {
if err := x.DB().WithContext(ctx).Table(where.TableName()).Scopes(x.MakeCondition(where)).Limit(-1).Offset(-1).Count(total).Error; err != nil {
return xerror.New(err.Error())
return xerror.NewDBError(err.Error())
}
return nil
}
......@@ -418,7 +418,7 @@ func (x *ODao[T]) GetSliceByWhere(ctx context.Context, query any, args ...any) (
if xerror.Is(err, gorm.ErrRecordNotFound) {
return nil, nil
}
return nil, xerror.New(err.Error())
return nil, xerror.NewDBError(err.Error())
}
return records, nil
}
......@@ -431,7 +431,7 @@ func (x *ODao[T]) GetOrderSliceByWhere(ctx context.Context, order string, query
if xerror.Is(err, gorm.ErrRecordNotFound) {
return nil, nil
}
return nil, xerror.New(err.Error())
return nil, xerror.NewDBError(err.Error())
}
return records, nil
}
......@@ -441,7 +441,7 @@ func (x *ODao[T]) CountByWhere(ctx context.Context, where any) (count int64, err
if xerror.Is(err, gorm.ErrRecordNotFound) {
return 0, nil
}
return 0, xerror.New(err.Error())
return 0, xerror.NewDBError(err.Error())
}
return count, nil
}
......@@ -455,7 +455,7 @@ func (x *ODao[T]) GetByID(ctx context.Context, id xsf.ID) (record *T, err error)
if xerror.Is(err, ErrRecordNotFound) {
return nil, nil
}
return nil, xerror.New(err.Error())
return nil, xerror.NewDBError(err.Error())
}
return record, nil
}
......@@ -473,7 +473,7 @@ func (x *ODao[T]) GetByID(ctx context.Context, id xsf.ID) (record *T, err error)
}
return nil, nil
}
return nil, xerror.New(err.Error())
return nil, xerror.NewDBError(err.Error())
}
if err = x.Cache.Set(ctx, id, record, x.Cache.ExpireTime); err != nil {
logger.Warn("cache.Set error", logger.Err(err), logger.Any("id", id), ctxutils.CtxTraceIDField(ctx))
......@@ -481,7 +481,7 @@ func (x *ODao[T]) GetByID(ctx context.Context, id xsf.ID) (record *T, err error)
return record, nil
})
if err != nil {
return nil, xerror.New(err.Error())
return nil, xerror.NewDBError(err.Error())
}
r, ok := val.(*T)
if !ok {
......@@ -502,7 +502,7 @@ func (x *ODao[T]) GetMapByIDs(ctx context.Context, ids []xsf.ID) (itemMap map[xs
if x.Cache == nil {
var records = make([]*T, 0, len(ids))
if err := x.DB().WithContext(ctx).Where("id IN (?)", ids).Find(&records).Error; err != nil {
return nil, xerror.New(err.Error())
return nil, xerror.NewDBError(err.Error())
}
itemMap = make(map[xsf.ID]*T)
for _, record := range records {
......@@ -523,7 +523,7 @@ func (x *ODao[T]) GetMapByIDs(ctx context.Context, ids []xsf.ID) (itemMap map[xs
if len(missedIDs) > 0 {
var records []*T
if err = x.DB().WithContext(ctx).Where("id IN (?)", missedIDs).Find(&records).Error; err != nil {
return nil, xerror.New(err.Error())
return nil, xerror.NewDBError(err.Error())
}
var recordIDMap = make(map[xsf.ID]struct{})
if len(records) > 0 {
......@@ -556,15 +556,15 @@ func (x *ODao[T]) CalcCondition(ctx context.Context, where IPageParams, columns
condition = condition.Unscoped()
}
if err := condition.Order("").Scan(ret).Error; err != nil {
return xerror.New(err.Error())
return xerror.NewDBError(err.Error())
}
return nil
}
func (x *ODao[T]) Transaction(fc func(tx *gorm.DB) error, opts ...*sql.TxOptions) error {
if err := x.DB().Transaction(fc, opts...); err != nil {
if _, ok := (err).(*xerror.Error); !ok {
err = xerror.New(err.Error())
if _, ok := (err).(*xerror.Err); !ok {
err = xerror.NewDBError(err.Error())
}
return err
}
......@@ -574,7 +574,7 @@ func (x *ODao[T]) Transaction(fc func(tx *gorm.DB) error, opts ...*sql.TxOptions
// GetTotal only total
func (x *ODao[T]) GetTotal(ctx context.Context, where Query) (total int64, err error) {
if err := x.DB().WithContext(ctx).Table(where.TableName()).Scopes(x.MakeCondition(where)).Limit(-1).Offset(-1).Count(&total).Error; err != nil {
return total, xerror.New(err.Error())
return total, xerror.NewDBError(err.Error())
}
return total, nil
}
......@@ -582,7 +582,7 @@ func (x *ODao[T]) GetTotal(ctx context.Context, where Query) (total int64, err e
// QuerySlice no page no total
func (x *ODao[T]) QuerySlice(ctx context.Context, where Query) (rs []*T, err error) {
if err := x.DB().WithContext(ctx).Table(where.TableName()).Scopes(x.MakeCondition(where)).Find(&rs).Error; err != nil {
return rs, xerror.New(err.Error())
return rs, xerror.NewDBError(err.Error())
}
return rs, nil
}
......@@ -590,7 +590,7 @@ func (x *ODao[T]) QuerySlice(ctx context.Context, where Query) (rs []*T, err err
// QueryPageSlice only page
func (x *ODao[T]) QueryPageSlice(ctx context.Context, where Query, limit, offset int) (rs []*T, err error) {
if err := x.DB().WithContext(ctx).Table(where.TableName()).Scopes(x.MakeCondition(where)).Limit(limit).Offset(offset).Find(&rs).Error; err != nil {
return rs, xerror.New(err.Error())
return rs, xerror.NewDBError(err.Error())
}
return rs, nil
}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论