// Code generated by hertz generator. package auth import ( auth "cn/oneao/base-go/biz/model/auth" "cn/oneao/base-go/db" "cn/oneao/base-go/db/repo" "cn/oneao/base-go/utils" "cn/oneao/base-go/utils/errorx" "cn/oneao/base-go/utils/idgen" "cn/oneao/base-go/utils/pgtypex" "cn/oneao/base-go/utils/response" "context" "github.com/cloudwego/hertz/pkg/app" "github.com/cloudwego/hertz/pkg/protocol/consts" "github.com/jackc/pgx/v5" ) // RegisterDefault . // @router /auth/register/default [POST] func RegisterDefault(ctx context.Context, c *app.RequestContext) { var err error var req auth.RegisterDefaultReq err = c.BindAndValidate(&req) if err != nil { c.String(consts.StatusBadRequest, err.Error()) return } account := req.Account password := req.Password _, err = db.Queries.GetUserByAccount(ctx, account) if err != nil { if errorx.IsNotFound(err) { // 忽略 } else { errorx.AddError(c, err) return } } else { response.Fail(c).Message("该账号已被注册").Send() return } // 开启事务 tx, err := db.DB.BeginTx(ctx, pgx.TxOptions{}) if err != nil { errorx.AddError(c, err) return } defer func() { if err != nil { err := tx.Rollback(ctx) if err != nil { return } } else { err := tx.Commit(ctx) if err != nil { return } } }() generateCode, err := utils.GenerateCode(8) if err != nil { errorx.AddError(c, err) return } // 插入用户 params := repo.InsertUserParams{ ID: idgen.NextId(), Account: account, Password: password, Username: pgtypex.StringToText("a_" + generateCode), } insert, err := db.Queries.WithTx(tx).InsertUser(ctx, params) if err != nil || insert == 0 { errorx.AddError(c, err) return } // 初始化用户分类 err = initMoneyCategoryTx(ctx, tx, params.ID) if err != nil { errorx.AddError(c, err) return } // 注册成功 response.Success(c).Message("注册成功").Send() } func initMoneyCategoryTx(ctx context.Context, tx pgx.Tx, userId int64) error { sysCategories, err := db.Queries.ListMoneySysCategory(ctx) if err != nil { return err } if len(sysCategories) == 0 { return nil } userCategories := make([]repo.BatchInsertMoneyUserCategoriesParams, 0, len(sysCategories)) for _, sysCat := range sysCategories { userCategories = append(userCategories, repo.BatchInsertMoneyUserCategoriesParams{ ID: idgen.NextId(), UserID: userId, Name: sysCat.Name, Icon: sysCat.Icon, Type: sysCat.Type, SortNumber: sysCat.SortNumber, }) } _, err = db.Queries.WithTx(tx).BatchInsertMoneyUserCategories(ctx, userCategories) if err != nil { return err } return nil }