feat: 用户注册部分开发
This commit is contained in:
+4
-3
@@ -10,6 +10,7 @@ port = 8090
|
||||
url = "https://devocr.likedream.xyz"
|
||||
openapiPath= "/api.json"
|
||||
swaggerPath= "/swagger"
|
||||
emailConfirmBaseUrl = "https://dev.likedream.xyz/confirm/"
|
||||
|
||||
[env]
|
||||
# 可选值: dev, prod
|
||||
@@ -22,11 +23,11 @@ url = "redis://:jhkdjhkjdhsIUTYURTU_pEGmFP@database.out:56379"
|
||||
|
||||
[email]
|
||||
# SMTP服务器配置
|
||||
smtpHost = "smtp.qq.com"
|
||||
smtpHost = "smtp-mail.outlook.com"
|
||||
smtpPort = 587
|
||||
# 发件人邮箱和密码(需要使用授权码,不是登录密码)
|
||||
smtpUsername = ""
|
||||
smtpPassword = ""
|
||||
smtpUsername = "demo@likedream.xyz"
|
||||
smtpPassword = "T#740951958979uh"
|
||||
# 发件人邮箱和显示名称
|
||||
fromEmail = ""
|
||||
fromName = "今日校园系统"
|
||||
@@ -15,15 +15,15 @@ import (
|
||||
_ "github.com/gogf/gf/contrib/nosql/redis/v2"
|
||||
"github.com/gogf/gf/v2/frame/g"
|
||||
"github.com/gogf/gf/v2/net/ghttp"
|
||||
"github.com/gogf/gf/v2/os/gctx"
|
||||
"github.com/samber/oops"
|
||||
)
|
||||
|
||||
func StartServer(ctx context.Context) {
|
||||
s := g.Server()
|
||||
// 设置端口
|
||||
port, err := g.Cfg().Get(gctx.New(), cst.ConfigServerPort)
|
||||
port, err := g.Cfg().Get(ctx, cst.ConfigServerPort)
|
||||
utils.OkOrPanic(err)
|
||||
s.SetNameToUriType(3)
|
||||
// 设置中间件
|
||||
s.Use(
|
||||
middleware.ExceptionHandler,
|
||||
|
||||
@@ -2,3 +2,8 @@ package v1
|
||||
|
||||
type CommonReq struct {
|
||||
}
|
||||
|
||||
type CommonPageReq struct {
|
||||
Page int `json:"page" d:"1"`
|
||||
Size int `json:"Size" d:"10"`
|
||||
}
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
package v1
|
||||
|
||||
import (
|
||||
"github.com/gogf/gf/v2/frame/g"
|
||||
)
|
||||
|
||||
type ResetPasswordReq struct {
|
||||
g.Meta `path:"/resetPassword" method:"POST" tags:"UserInfo" summary:"重置密码"`
|
||||
OldPassword string `json:"OldPassword"`
|
||||
NewPassword string `json:"newPassword"`
|
||||
ConfirmPassword string `json:"confirmPassword"`
|
||||
}
|
||||
|
||||
type CardRechargeReq struct {
|
||||
g.Meta `path:"/card/recharge" method:"POST" tags:"UserInfo" summary:"卡密充值"`
|
||||
Card string `json:"card"`
|
||||
}
|
||||
@@ -1,5 +1,7 @@
|
||||
package v1
|
||||
|
||||
import "github.com/shopspring/decimal"
|
||||
|
||||
type UserMenuRes struct {
|
||||
ID int64 `json:"id"`
|
||||
Label string `json:"label"`
|
||||
@@ -19,3 +21,18 @@ type UserPermissionRes struct {
|
||||
Menus []*UserMenuRes `json:"menus"`
|
||||
Permissions []string `json:"permissions"`
|
||||
}
|
||||
|
||||
type UserProfileRes struct {
|
||||
ID int64 `json:"id"`
|
||||
Username string `json:"username"`
|
||||
Email string `json:"email"`
|
||||
Avatar string `json:"avatar"`
|
||||
ParentUsername string `json:"parent_username"`
|
||||
ParentEmail string `json:"parent_email"`
|
||||
Level int `json:"level"`
|
||||
Rate decimal.Decimal `json:"rate"`
|
||||
Balance decimal.Decimal `json:"balance"`
|
||||
InviteCode string `json:"invite_code"`
|
||||
InviteCount int `json:"invite_count"`
|
||||
InviteCashback decimal.Decimal `json:"invite_cashback"`
|
||||
}
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
package v1
|
||||
|
||||
import (
|
||||
"github.com/gogf/gf/v2/frame/g"
|
||||
"likedream-goframe/internal/framework/captcha"
|
||||
|
||||
"github.com/gogf/gf/v2/frame/g"
|
||||
)
|
||||
|
||||
type CaptchaReq struct {
|
||||
@@ -18,9 +19,15 @@ type UserLoginReq struct {
|
||||
}
|
||||
|
||||
type UserRegisterReq struct {
|
||||
g.Meta `path:"/user/register" method:"POST" tags:"UserLogin" summary:"用户注册"`
|
||||
Username string `json:"username"`
|
||||
Password string `json:"password"`
|
||||
Email string `json:"email"`
|
||||
InviteCode string `json:"inviteCode"`
|
||||
g.Meta `path:"/user/register" method:"POST" tags:"UserLogin" summary:"用户注册"`
|
||||
Email string `json:"email" v:"required|email|regex:^.*@qq\\.com$#邮箱不能为空|邮箱格式不正确|必须是QQ邮箱"`
|
||||
Username string `json:"username" v:"required|length:2,20#用户名不能为空|用户名长度应在2-20之间" `
|
||||
Password string `json:"password" v:"required|length:6,20#密码不能为空|密码长度应在6-20之间" `
|
||||
ConfirmPassword string `json:"confirmPassword" v:"required|same:password#确认密码不能为空|两次输入的密码不一致"`
|
||||
InviteCode string `json:"inviteCode"`
|
||||
}
|
||||
|
||||
type UserConfirmReq struct {
|
||||
g.Meta `path:"/user/confirm" method:"POST" tags:"UserLogin" summary:"用户确认"`
|
||||
Token string `json:"token" v:"required"`
|
||||
}
|
||||
|
||||
@@ -7,6 +7,13 @@ import (
|
||||
"likedream-goframe/internal/utils"
|
||||
)
|
||||
|
||||
type AgentCtrlV1 struct {
|
||||
}
|
||||
|
||||
func NewV1() IAgentCtrl {
|
||||
return &AgentCtrlV1{}
|
||||
}
|
||||
|
||||
// List 获取代理列表
|
||||
func (a AgentCtrlV1) List(ctx context.Context, req *v1.AgentListReq) (res *utils.Response[[]v1.AgentListRes], err error) {
|
||||
defer utils.Pass(&err)
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
package agent
|
||||
|
||||
type AgentCtrlV1 struct {
|
||||
}
|
||||
|
||||
func NewV1() IAgentCtrl {
|
||||
return &AgentCtrlV1{}
|
||||
}
|
||||
@@ -3,10 +3,20 @@ package user_login
|
||||
import (
|
||||
"context"
|
||||
v1 "likedream-goframe/internal/api/v1"
|
||||
"likedream-goframe/internal/ent"
|
||||
"likedream-goframe/internal/utils"
|
||||
)
|
||||
|
||||
type IUserInfoV1 interface {
|
||||
PermissionList(ctx context.Context, _ *v1.CommonReq) (*utils.Response[*v1.UserPermissionRes], error)
|
||||
//用户基础信息
|
||||
UserInfo(ctx context.Context, _ *v1.CommonReq) (*utils.Response[any], error)
|
||||
// 个人中心
|
||||
Profile(ctx context.Context, req *v1.CommonReq) (*utils.Response[any], error)
|
||||
// 重置密码
|
||||
ResetPassword(ctx context.Context, req *v1.ResetPasswordReq) (*utils.Response[any], error)
|
||||
// 已使用卡密记录
|
||||
UsedCardList(ctx context.Context, req *v1.CommonPageReq) (*utils.Response[[]*ent.SysCard], error)
|
||||
// 卡密充值
|
||||
CardRecharge(ctx context.Context, req *v1.CardRechargeReq) (*utils.Response[any], error)
|
||||
}
|
||||
|
||||
@@ -12,4 +12,5 @@ type IUserLoginV1 interface {
|
||||
Captcha(ctx context.Context, req *v1.CaptchaReq) (*utils.Response[captcha.SlideCaptchaResp], error)
|
||||
Login(ctx context.Context, req *v1.UserLoginReq) (*utils.Response[any], error)
|
||||
Register(ctx context.Context, req *v1.UserRegisterReq) (*utils.Response[any], error)
|
||||
Confirm(ctx context.Context, req *v1.UserConfirmReq) (*utils.Response[any], error)
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ package user_login
|
||||
import (
|
||||
"context"
|
||||
v1 "likedream-goframe/internal/api/v1"
|
||||
"likedream-goframe/internal/ent"
|
||||
"likedream-goframe/internal/service"
|
||||
"likedream-goframe/internal/utils"
|
||||
)
|
||||
@@ -25,3 +26,25 @@ func (c *UserInfoV1) UserInfo(ctx context.Context, _ *v1.CommonReq) (res *utils.
|
||||
defer utils.Pass(&err)
|
||||
return service.Global.UserInfo.UserInfo(ctx), nil
|
||||
}
|
||||
|
||||
// 获取用户详细信息(个人中心)
|
||||
func (c *UserInfoV1) Profile(ctx context.Context, req *v1.CommonReq) (res *utils.Response[any], err error) {
|
||||
defer utils.Pass(&err)
|
||||
return service.Global.UserInfo.Profile(ctx, req), nil
|
||||
}
|
||||
|
||||
// 重置密码(个人中心)
|
||||
func (c *UserInfoV1) ResetPassword(ctx context.Context, req *v1.ResetPasswordReq) (res *utils.Response[any], err error) {
|
||||
defer utils.Pass(&err)
|
||||
return service.Global.UserInfo.ResetPassword(ctx, req), nil
|
||||
}
|
||||
|
||||
func (c *UserInfoV1) UsedCardList(ctx context.Context, req *v1.CommonPageReq) (res *utils.Response[[]*ent.SysCard], err error) {
|
||||
defer utils.Pass(&err)
|
||||
return service.Global.UserInfo.UsedCardList(ctx, req), nil
|
||||
}
|
||||
|
||||
func (c *UserInfoV1) CardRecharge(ctx context.Context, req *v1.CardRechargeReq) (res *utils.Response[any], err error) {
|
||||
defer utils.Pass(&err)
|
||||
return service.Global.UserInfo.CardRecharge(ctx, req), nil
|
||||
}
|
||||
|
||||
@@ -51,3 +51,8 @@ func (c *UserLoginV1) Register(ctx context.Context, req *v1.UserRegisterReq) (re
|
||||
defer utils.Pass(&err)
|
||||
return service.Global.UserLogin.Register(ctx, req), nil
|
||||
}
|
||||
|
||||
func (c *UserLoginV1) Confirm(ctx context.Context, req *v1.UserConfirmReq) (*utils.Response[any], error) {
|
||||
//TODO implement me
|
||||
panic("implement me")
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@ const (
|
||||
ConfigDatabaseType = "database.type"
|
||||
ConfigDatabaseDsn = "database.dsn"
|
||||
ConfigServerPort = "server.port"
|
||||
ConfigEmailConfirmBaseUrl = "server.emailConfirmBaseUrl"
|
||||
ConfigAuthorizationKey = "server.authorization"
|
||||
ConfigJwtKey = "server.jwt"
|
||||
ConfigRuoliCaptchaBaseUrl = "ruoliCaptcha.baseUrl"
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
package cst
|
||||
|
||||
const (
|
||||
RedisUserInfo = "userinfo:"
|
||||
RedisUserInfo = "userinfo:"
|
||||
RedisVerifyCode = "verifycode:"
|
||||
)
|
||||
|
||||
var (
|
||||
RedisUserInfoExpire = int64(86400)
|
||||
RedisUserInfoExpire = int64(86400)
|
||||
RedisVerifyCodeExpire = int64(86400)
|
||||
)
|
||||
|
||||
+213
-8
@@ -16,6 +16,7 @@ import (
|
||||
"likedream-goframe/internal/ent/cptasklog"
|
||||
"likedream-goframe/internal/ent/cpuser"
|
||||
"likedream-goframe/internal/ent/sysagent"
|
||||
"likedream-goframe/internal/ent/syscard"
|
||||
"likedream-goframe/internal/ent/sysmenu"
|
||||
"likedream-goframe/internal/ent/sysrole"
|
||||
"likedream-goframe/internal/ent/sysuser"
|
||||
@@ -42,6 +43,8 @@ type Client struct {
|
||||
CpUser *CpUserClient
|
||||
// SysAgent is the client for interacting with the SysAgent builders.
|
||||
SysAgent *SysAgentClient
|
||||
// SysCard is the client for interacting with the SysCard builders.
|
||||
SysCard *SysCardClient
|
||||
// SysMenu is the client for interacting with the SysMenu builders.
|
||||
SysMenu *SysMenuClient
|
||||
// SysRole is the client for interacting with the SysRole builders.
|
||||
@@ -66,6 +69,7 @@ func (c *Client) init() {
|
||||
c.CpTaskLog = NewCpTaskLogClient(c.config)
|
||||
c.CpUser = NewCpUserClient(c.config)
|
||||
c.SysAgent = NewSysAgentClient(c.config)
|
||||
c.SysCard = NewSysCardClient(c.config)
|
||||
c.SysMenu = NewSysMenuClient(c.config)
|
||||
c.SysRole = NewSysRoleClient(c.config)
|
||||
c.SysUser = NewSysUserClient(c.config)
|
||||
@@ -167,6 +171,7 @@ func (c *Client) Tx(ctx context.Context) (*Tx, error) {
|
||||
CpTaskLog: NewCpTaskLogClient(cfg),
|
||||
CpUser: NewCpUserClient(cfg),
|
||||
SysAgent: NewSysAgentClient(cfg),
|
||||
SysCard: NewSysCardClient(cfg),
|
||||
SysMenu: NewSysMenuClient(cfg),
|
||||
SysRole: NewSysRoleClient(cfg),
|
||||
SysUser: NewSysUserClient(cfg),
|
||||
@@ -195,6 +200,7 @@ func (c *Client) BeginTx(ctx context.Context, opts *sql.TxOptions) (*Tx, error)
|
||||
CpTaskLog: NewCpTaskLogClient(cfg),
|
||||
CpUser: NewCpUserClient(cfg),
|
||||
SysAgent: NewSysAgentClient(cfg),
|
||||
SysCard: NewSysCardClient(cfg),
|
||||
SysMenu: NewSysMenuClient(cfg),
|
||||
SysRole: NewSysRoleClient(cfg),
|
||||
SysUser: NewSysUserClient(cfg),
|
||||
@@ -228,8 +234,8 @@ func (c *Client) Close() error {
|
||||
// In order to add hooks to a specific client, call: `client.Node.Use(...)`.
|
||||
func (c *Client) Use(hooks ...Hook) {
|
||||
for _, n := range []interface{ Use(...Hook) }{
|
||||
c.CpImage, c.CpTask, c.CpTaskLog, c.CpUser, c.SysAgent, c.SysMenu, c.SysRole,
|
||||
c.SysUser, c.SysUserLog,
|
||||
c.CpImage, c.CpTask, c.CpTaskLog, c.CpUser, c.SysAgent, c.SysCard, c.SysMenu,
|
||||
c.SysRole, c.SysUser, c.SysUserLog,
|
||||
} {
|
||||
n.Use(hooks...)
|
||||
}
|
||||
@@ -239,8 +245,8 @@ func (c *Client) Use(hooks ...Hook) {
|
||||
// In order to add interceptors to a specific client, call: `client.Node.Intercept(...)`.
|
||||
func (c *Client) Intercept(interceptors ...Interceptor) {
|
||||
for _, n := range []interface{ Intercept(...Interceptor) }{
|
||||
c.CpImage, c.CpTask, c.CpTaskLog, c.CpUser, c.SysAgent, c.SysMenu, c.SysRole,
|
||||
c.SysUser, c.SysUserLog,
|
||||
c.CpImage, c.CpTask, c.CpTaskLog, c.CpUser, c.SysAgent, c.SysCard, c.SysMenu,
|
||||
c.SysRole, c.SysUser, c.SysUserLog,
|
||||
} {
|
||||
n.Intercept(interceptors...)
|
||||
}
|
||||
@@ -259,6 +265,8 @@ func (c *Client) Mutate(ctx context.Context, m Mutation) (Value, error) {
|
||||
return c.CpUser.mutate(ctx, m)
|
||||
case *SysAgentMutation:
|
||||
return c.SysAgent.mutate(ctx, m)
|
||||
case *SysCardMutation:
|
||||
return c.SysCard.mutate(ctx, m)
|
||||
case *SysMenuMutation:
|
||||
return c.SysMenu.mutate(ctx, m)
|
||||
case *SysRoleMutation:
|
||||
@@ -1099,6 +1107,171 @@ func (c *SysAgentClient) mutate(ctx context.Context, m *SysAgentMutation) (Value
|
||||
}
|
||||
}
|
||||
|
||||
// SysCardClient is a client for the SysCard schema.
|
||||
type SysCardClient struct {
|
||||
config
|
||||
}
|
||||
|
||||
// NewSysCardClient returns a client for the SysCard from the given config.
|
||||
func NewSysCardClient(c config) *SysCardClient {
|
||||
return &SysCardClient{config: c}
|
||||
}
|
||||
|
||||
// Use adds a list of mutation hooks to the hooks stack.
|
||||
// A call to `Use(f, g, h)` equals to `syscard.Hooks(f(g(h())))`.
|
||||
func (c *SysCardClient) Use(hooks ...Hook) {
|
||||
c.hooks.SysCard = append(c.hooks.SysCard, hooks...)
|
||||
}
|
||||
|
||||
// Intercept adds a list of query interceptors to the interceptors stack.
|
||||
// A call to `Intercept(f, g, h)` equals to `syscard.Intercept(f(g(h())))`.
|
||||
func (c *SysCardClient) Intercept(interceptors ...Interceptor) {
|
||||
c.inters.SysCard = append(c.inters.SysCard, interceptors...)
|
||||
}
|
||||
|
||||
// Create returns a builder for creating a SysCard entity.
|
||||
func (c *SysCardClient) Create() *SysCardCreate {
|
||||
mutation := newSysCardMutation(c.config, OpCreate)
|
||||
return &SysCardCreate{config: c.config, hooks: c.Hooks(), mutation: mutation}
|
||||
}
|
||||
|
||||
// CreateBulk returns a builder for creating a bulk of SysCard entities.
|
||||
func (c *SysCardClient) CreateBulk(builders ...*SysCardCreate) *SysCardCreateBulk {
|
||||
return &SysCardCreateBulk{config: c.config, builders: builders}
|
||||
}
|
||||
|
||||
// MapCreateBulk creates a bulk creation builder from the given slice. For each item in the slice, the function creates
|
||||
// a builder and applies setFunc on it.
|
||||
func (c *SysCardClient) MapCreateBulk(slice any, setFunc func(*SysCardCreate, int)) *SysCardCreateBulk {
|
||||
rv := reflect.ValueOf(slice)
|
||||
if rv.Kind() != reflect.Slice {
|
||||
return &SysCardCreateBulk{err: fmt.Errorf("calling to SysCardClient.MapCreateBulk with wrong type %T, need slice", slice)}
|
||||
}
|
||||
builders := make([]*SysCardCreate, rv.Len())
|
||||
for i := 0; i < rv.Len(); i++ {
|
||||
builders[i] = c.Create()
|
||||
setFunc(builders[i], i)
|
||||
}
|
||||
return &SysCardCreateBulk{config: c.config, builders: builders}
|
||||
}
|
||||
|
||||
// Update returns an update builder for SysCard.
|
||||
func (c *SysCardClient) Update() *SysCardUpdate {
|
||||
mutation := newSysCardMutation(c.config, OpUpdate)
|
||||
return &SysCardUpdate{config: c.config, hooks: c.Hooks(), mutation: mutation}
|
||||
}
|
||||
|
||||
// UpdateOne returns an update builder for the given entity.
|
||||
func (c *SysCardClient) UpdateOne(_m *SysCard) *SysCardUpdateOne {
|
||||
mutation := newSysCardMutation(c.config, OpUpdateOne, withSysCard(_m))
|
||||
return &SysCardUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
|
||||
}
|
||||
|
||||
// UpdateOneID returns an update builder for the given id.
|
||||
func (c *SysCardClient) UpdateOneID(id int64) *SysCardUpdateOne {
|
||||
mutation := newSysCardMutation(c.config, OpUpdateOne, withSysCardID(id))
|
||||
return &SysCardUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
|
||||
}
|
||||
|
||||
// Delete returns a delete builder for SysCard.
|
||||
func (c *SysCardClient) Delete() *SysCardDelete {
|
||||
mutation := newSysCardMutation(c.config, OpDelete)
|
||||
return &SysCardDelete{config: c.config, hooks: c.Hooks(), mutation: mutation}
|
||||
}
|
||||
|
||||
// DeleteOne returns a builder for deleting the given entity.
|
||||
func (c *SysCardClient) DeleteOne(_m *SysCard) *SysCardDeleteOne {
|
||||
return c.DeleteOneID(_m.ID)
|
||||
}
|
||||
|
||||
// DeleteOneID returns a builder for deleting the given entity by its id.
|
||||
func (c *SysCardClient) DeleteOneID(id int64) *SysCardDeleteOne {
|
||||
builder := c.Delete().Where(syscard.ID(id))
|
||||
builder.mutation.id = &id
|
||||
builder.mutation.op = OpDeleteOne
|
||||
return &SysCardDeleteOne{builder}
|
||||
}
|
||||
|
||||
// Query returns a query builder for SysCard.
|
||||
func (c *SysCardClient) Query() *SysCardQuery {
|
||||
return &SysCardQuery{
|
||||
config: c.config,
|
||||
ctx: &QueryContext{Type: TypeSysCard},
|
||||
inters: c.Interceptors(),
|
||||
}
|
||||
}
|
||||
|
||||
// Get returns a SysCard entity by its id.
|
||||
func (c *SysCardClient) Get(ctx context.Context, id int64) (*SysCard, error) {
|
||||
return c.Query().Where(syscard.ID(id)).Only(ctx)
|
||||
}
|
||||
|
||||
// GetX is like Get, but panics if an error occurs.
|
||||
func (c *SysCardClient) GetX(ctx context.Context, id int64) *SysCard {
|
||||
obj, err := c.Get(ctx, id)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return obj
|
||||
}
|
||||
|
||||
// QueryCreator queries the creator edge of a SysCard.
|
||||
func (c *SysCardClient) QueryCreator(_m *SysCard) *SysUserQuery {
|
||||
query := (&SysUserClient{config: c.config}).Query()
|
||||
query.path = func(context.Context) (fromV *sql.Selector, _ error) {
|
||||
id := _m.ID
|
||||
step := sqlgraph.NewStep(
|
||||
sqlgraph.From(syscard.Table, syscard.FieldID, id),
|
||||
sqlgraph.To(sysuser.Table, sysuser.FieldID),
|
||||
sqlgraph.Edge(sqlgraph.M2O, true, syscard.CreatorTable, syscard.CreatorColumn),
|
||||
)
|
||||
fromV = sqlgraph.Neighbors(_m.driver.Dialect(), step)
|
||||
return fromV, nil
|
||||
}
|
||||
return query
|
||||
}
|
||||
|
||||
// QueryUser queries the user edge of a SysCard.
|
||||
func (c *SysCardClient) QueryUser(_m *SysCard) *SysUserQuery {
|
||||
query := (&SysUserClient{config: c.config}).Query()
|
||||
query.path = func(context.Context) (fromV *sql.Selector, _ error) {
|
||||
id := _m.ID
|
||||
step := sqlgraph.NewStep(
|
||||
sqlgraph.From(syscard.Table, syscard.FieldID, id),
|
||||
sqlgraph.To(sysuser.Table, sysuser.FieldID),
|
||||
sqlgraph.Edge(sqlgraph.M2O, true, syscard.UserTable, syscard.UserColumn),
|
||||
)
|
||||
fromV = sqlgraph.Neighbors(_m.driver.Dialect(), step)
|
||||
return fromV, nil
|
||||
}
|
||||
return query
|
||||
}
|
||||
|
||||
// Hooks returns the client hooks.
|
||||
func (c *SysCardClient) Hooks() []Hook {
|
||||
return c.hooks.SysCard
|
||||
}
|
||||
|
||||
// Interceptors returns the client interceptors.
|
||||
func (c *SysCardClient) Interceptors() []Interceptor {
|
||||
return c.inters.SysCard
|
||||
}
|
||||
|
||||
func (c *SysCardClient) mutate(ctx context.Context, m *SysCardMutation) (Value, error) {
|
||||
switch m.Op() {
|
||||
case OpCreate:
|
||||
return (&SysCardCreate{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
|
||||
case OpUpdate:
|
||||
return (&SysCardUpdate{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
|
||||
case OpUpdateOne:
|
||||
return (&SysCardUpdateOne{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
|
||||
case OpDelete, OpDeleteOne:
|
||||
return (&SysCardDelete{config: c.config, hooks: c.Hooks(), mutation: m}).Exec(ctx)
|
||||
default:
|
||||
return nil, fmt.Errorf("ent: unknown SysCard mutation op: %q", m.Op())
|
||||
}
|
||||
}
|
||||
|
||||
// SysMenuClient is a client for the SysMenu schema.
|
||||
type SysMenuClient struct {
|
||||
config
|
||||
@@ -1667,6 +1840,38 @@ func (c *SysUserClient) QueryCpTaskLogs(_m *SysUser) *CpTaskLogQuery {
|
||||
return query
|
||||
}
|
||||
|
||||
// QueryCreatedCards queries the created_cards edge of a SysUser.
|
||||
func (c *SysUserClient) QueryCreatedCards(_m *SysUser) *SysCardQuery {
|
||||
query := (&SysCardClient{config: c.config}).Query()
|
||||
query.path = func(context.Context) (fromV *sql.Selector, _ error) {
|
||||
id := _m.ID
|
||||
step := sqlgraph.NewStep(
|
||||
sqlgraph.From(sysuser.Table, sysuser.FieldID, id),
|
||||
sqlgraph.To(syscard.Table, syscard.FieldID),
|
||||
sqlgraph.Edge(sqlgraph.O2M, false, sysuser.CreatedCardsTable, sysuser.CreatedCardsColumn),
|
||||
)
|
||||
fromV = sqlgraph.Neighbors(_m.driver.Dialect(), step)
|
||||
return fromV, nil
|
||||
}
|
||||
return query
|
||||
}
|
||||
|
||||
// QueryUsedCards queries the used_cards edge of a SysUser.
|
||||
func (c *SysUserClient) QueryUsedCards(_m *SysUser) *SysCardQuery {
|
||||
query := (&SysCardClient{config: c.config}).Query()
|
||||
query.path = func(context.Context) (fromV *sql.Selector, _ error) {
|
||||
id := _m.ID
|
||||
step := sqlgraph.NewStep(
|
||||
sqlgraph.From(sysuser.Table, sysuser.FieldID, id),
|
||||
sqlgraph.To(syscard.Table, syscard.FieldID),
|
||||
sqlgraph.Edge(sqlgraph.O2M, false, sysuser.UsedCardsTable, sysuser.UsedCardsColumn),
|
||||
)
|
||||
fromV = sqlgraph.Neighbors(_m.driver.Dialect(), step)
|
||||
return fromV, nil
|
||||
}
|
||||
return query
|
||||
}
|
||||
|
||||
// Hooks returns the client hooks.
|
||||
func (c *SysUserClient) Hooks() []Hook {
|
||||
hooks := c.hooks.SysUser
|
||||
@@ -1829,11 +2034,11 @@ func (c *SysUserLogClient) mutate(ctx context.Context, m *SysUserLogMutation) (V
|
||||
// hooks and interceptors per client, for fast access.
|
||||
type (
|
||||
hooks struct {
|
||||
CpImage, CpTask, CpTaskLog, CpUser, SysAgent, SysMenu, SysRole, SysUser,
|
||||
SysUserLog []ent.Hook
|
||||
CpImage, CpTask, CpTaskLog, CpUser, SysAgent, SysCard, SysMenu, SysRole,
|
||||
SysUser, SysUserLog []ent.Hook
|
||||
}
|
||||
inters struct {
|
||||
CpImage, CpTask, CpTaskLog, CpUser, SysAgent, SysMenu, SysRole, SysUser,
|
||||
SysUserLog []ent.Interceptor
|
||||
CpImage, CpTask, CpTaskLog, CpUser, SysAgent, SysCard, SysMenu, SysRole,
|
||||
SysUser, SysUserLog []ent.Interceptor
|
||||
}
|
||||
)
|
||||
|
||||
@@ -11,6 +11,7 @@ import (
|
||||
"likedream-goframe/internal/ent/cptasklog"
|
||||
"likedream-goframe/internal/ent/cpuser"
|
||||
"likedream-goframe/internal/ent/sysagent"
|
||||
"likedream-goframe/internal/ent/syscard"
|
||||
"likedream-goframe/internal/ent/sysmenu"
|
||||
"likedream-goframe/internal/ent/sysrole"
|
||||
"likedream-goframe/internal/ent/sysuser"
|
||||
@@ -86,6 +87,7 @@ func checkColumn(t, c string) error {
|
||||
cptasklog.Table: cptasklog.ValidColumn,
|
||||
cpuser.Table: cpuser.ValidColumn,
|
||||
sysagent.Table: sysagent.ValidColumn,
|
||||
syscard.Table: syscard.ValidColumn,
|
||||
sysmenu.Table: sysmenu.ValidColumn,
|
||||
sysrole.Table: sysrole.ValidColumn,
|
||||
sysuser.Table: sysuser.ValidColumn,
|
||||
|
||||
@@ -68,6 +68,18 @@ func (f SysAgentFunc) Mutate(ctx context.Context, m ent.Mutation) (ent.Value, er
|
||||
return nil, fmt.Errorf("unexpected mutation type %T. expect *ent.SysAgentMutation", m)
|
||||
}
|
||||
|
||||
// The SysCardFunc type is an adapter to allow the use of ordinary
|
||||
// function as SysCard mutator.
|
||||
type SysCardFunc func(context.Context, *ent.SysCardMutation) (ent.Value, error)
|
||||
|
||||
// Mutate calls f(ctx, m).
|
||||
func (f SysCardFunc) Mutate(ctx context.Context, m ent.Mutation) (ent.Value, error) {
|
||||
if mv, ok := m.(*ent.SysCardMutation); ok {
|
||||
return f(ctx, mv)
|
||||
}
|
||||
return nil, fmt.Errorf("unexpected mutation type %T. expect *ent.SysCardMutation", m)
|
||||
}
|
||||
|
||||
// The SysMenuFunc type is an adapter to allow the use of ordinary
|
||||
// function as SysMenu mutator.
|
||||
type SysMenuFunc func(context.Context, *ent.SysMenuMutation) (ent.Value, error)
|
||||
|
||||
@@ -150,6 +150,35 @@ var (
|
||||
},
|
||||
},
|
||||
}
|
||||
// SysCardColumns holds the columns for the "sys_card" table.
|
||||
SysCardColumns = []*schema.Column{
|
||||
{Name: "id", Type: field.TypeInt64, Increment: true},
|
||||
{Name: "content", Type: field.TypeString, Unique: true},
|
||||
{Name: "status", Type: field.TypeInt, Default: 1},
|
||||
{Name: "value", Type: field.TypeUint64},
|
||||
{Name: "creator_id", Type: field.TypeInt64},
|
||||
{Name: "used_id", Type: field.TypeInt64, Nullable: true},
|
||||
}
|
||||
// SysCardTable holds the schema information for the "sys_card" table.
|
||||
SysCardTable = &schema.Table{
|
||||
Name: "sys_card",
|
||||
Columns: SysCardColumns,
|
||||
PrimaryKey: []*schema.Column{SysCardColumns[0]},
|
||||
ForeignKeys: []*schema.ForeignKey{
|
||||
{
|
||||
Symbol: "sys_card_sys_user_created_cards",
|
||||
Columns: []*schema.Column{SysCardColumns[4]},
|
||||
RefColumns: []*schema.Column{SysUserColumns[0]},
|
||||
OnDelete: schema.NoAction,
|
||||
},
|
||||
{
|
||||
Symbol: "sys_card_sys_user_used_cards",
|
||||
Columns: []*schema.Column{SysCardColumns[5]},
|
||||
RefColumns: []*schema.Column{SysUserColumns[0]},
|
||||
OnDelete: schema.SetNull,
|
||||
},
|
||||
},
|
||||
}
|
||||
// SysMenuColumns holds the columns for the "sys_menu" table.
|
||||
SysMenuColumns = []*schema.Column{
|
||||
{Name: "id", Type: field.TypeInt64, Increment: true},
|
||||
@@ -209,6 +238,7 @@ var (
|
||||
{Name: "balance", Type: field.TypeString, SchemaType: map[string]string{"mysql": "decimal(10,2)", "postgres": "numeric(10,2)"}},
|
||||
{Name: "block", Type: field.TypeBool, Default: false},
|
||||
{Name: "verify", Type: field.TypeBool, Default: false},
|
||||
{Name: "invite_cashback", Type: field.TypeString, SchemaType: map[string]string{"mysql": "decimal(10,2)", "postgres": "numeric(10,2)"}},
|
||||
{Name: "sys_user_children", Type: field.TypeInt64, Nullable: true},
|
||||
}
|
||||
// SysUserTable holds the schema information for the "sys_user" table.
|
||||
@@ -219,7 +249,7 @@ var (
|
||||
ForeignKeys: []*schema.ForeignKey{
|
||||
{
|
||||
Symbol: "sys_user_sys_user_children",
|
||||
Columns: []*schema.Column{SysUserColumns[10]},
|
||||
Columns: []*schema.Column{SysUserColumns[11]},
|
||||
RefColumns: []*schema.Column{SysUserColumns[0]},
|
||||
OnDelete: schema.SetNull,
|
||||
},
|
||||
@@ -292,6 +322,7 @@ var (
|
||||
CpTaskLogsTable,
|
||||
CpUsersTable,
|
||||
SysAgentTable,
|
||||
SysCardTable,
|
||||
SysMenuTable,
|
||||
SysRoleTable,
|
||||
SysUserTable,
|
||||
@@ -315,6 +346,11 @@ func init() {
|
||||
SysAgentTable.Annotation = &entsql.Annotation{
|
||||
Table: "sys_agent",
|
||||
}
|
||||
SysCardTable.ForeignKeys[0].RefTable = SysUserTable
|
||||
SysCardTable.ForeignKeys[1].RefTable = SysUserTable
|
||||
SysCardTable.Annotation = &entsql.Annotation{
|
||||
Table: "sys_card",
|
||||
}
|
||||
SysMenuTable.ForeignKeys[0].RefTable = SysMenuTable
|
||||
SysMenuTable.Annotation = &entsql.Annotation{
|
||||
Table: "sys_menu",
|
||||
|
||||
+1007
-39
File diff suppressed because it is too large
Load Diff
@@ -21,6 +21,9 @@ type CpUser func(*sql.Selector)
|
||||
// SysAgent is the predicate function for sysagent builders.
|
||||
type SysAgent func(*sql.Selector)
|
||||
|
||||
// SysCard is the predicate function for syscard builders.
|
||||
type SysCard func(*sql.Selector)
|
||||
|
||||
// SysMenu is the predicate function for sysmenu builders.
|
||||
type SysMenu func(*sql.Selector)
|
||||
|
||||
|
||||
@@ -8,6 +8,7 @@ import (
|
||||
"likedream-goframe/internal/ent/cpuser"
|
||||
"likedream-goframe/internal/ent/schema"
|
||||
"likedream-goframe/internal/ent/sysagent"
|
||||
"likedream-goframe/internal/ent/syscard"
|
||||
"likedream-goframe/internal/ent/sysmenu"
|
||||
"likedream-goframe/internal/ent/sysrole"
|
||||
"likedream-goframe/internal/ent/sysuser"
|
||||
@@ -90,6 +91,12 @@ func init() {
|
||||
sysagentDescUpdateTime := sysagentMixinFields0[1].Descriptor()
|
||||
// sysagent.DefaultUpdateTime holds the default value on creation for the update_time field.
|
||||
sysagent.DefaultUpdateTime = sysagentDescUpdateTime.Default.(func() *ent2.CustomTime)
|
||||
syscardFields := schema.SysCard{}.Fields()
|
||||
_ = syscardFields
|
||||
// syscardDescStatus is the schema descriptor for status field.
|
||||
syscardDescStatus := syscardFields[1].Descriptor()
|
||||
// syscard.DefaultStatus holds the default value on creation for the status field.
|
||||
syscard.DefaultStatus = syscardDescStatus.Default.(int)
|
||||
sysmenuMixin := schema.SysMenu{}.Mixin()
|
||||
sysmenuMixinHooks0 := sysmenuMixin[0].Hooks()
|
||||
sysmenu.Hooks[0] = sysmenuMixinHooks0[0]
|
||||
@@ -155,6 +162,10 @@ func init() {
|
||||
sysuserDescVerify := sysuserFields[6].Descriptor()
|
||||
// sysuser.DefaultVerify holds the default value on creation for the verify field.
|
||||
sysuser.DefaultVerify = sysuserDescVerify.Default.(bool)
|
||||
// sysuserDescInviteCashback is the schema descriptor for invite_cashback field.
|
||||
sysuserDescInviteCashback := sysuserFields[7].Descriptor()
|
||||
// sysuser.DefaultInviteCashback holds the default value on creation for the invite_cashback field.
|
||||
sysuser.DefaultInviteCashback = sysuserDescInviteCashback.Default.(func() decimal.Decimal)
|
||||
}
|
||||
|
||||
const (
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package schema
|
||||
|
||||
import (
|
||||
"likedream-goframe/internal/ent/schema/mix"
|
||||
|
||||
"entgo.io/ent"
|
||||
"entgo.io/ent/dialect"
|
||||
"entgo.io/ent/dialect/entsql"
|
||||
@@ -8,7 +10,6 @@ import (
|
||||
"entgo.io/ent/schema/edge"
|
||||
"entgo.io/ent/schema/field"
|
||||
"github.com/shopspring/decimal"
|
||||
"likedream-goframe/internal/ent/schema/mix"
|
||||
)
|
||||
|
||||
// SysAgent holds the schema definition for the SysAgent entity.
|
||||
@@ -0,0 +1,37 @@
|
||||
package schema
|
||||
|
||||
import (
|
||||
"entgo.io/ent"
|
||||
"entgo.io/ent/dialect/entsql"
|
||||
"entgo.io/ent/schema"
|
||||
"entgo.io/ent/schema/edge"
|
||||
"entgo.io/ent/schema/field"
|
||||
)
|
||||
|
||||
// SysCard holds the schema definition for the SysCard entity.
|
||||
type SysCard struct {
|
||||
ent.Schema
|
||||
}
|
||||
|
||||
func (SysCard) Fields() []ent.Field {
|
||||
return []ent.Field{
|
||||
field.String("content").Unique(), // 充值卡密
|
||||
field.Int("status").Default(1), //1:未使用 2:使用 3:禁用
|
||||
field.Uint64("value"), // 充值金额
|
||||
field.Int64("creator_id"),
|
||||
field.Int64("used_id").Optional(),
|
||||
}
|
||||
}
|
||||
|
||||
func (SysCard) Edges() []ent.Edge {
|
||||
return []ent.Edge{
|
||||
edge.From("creator", SysUser.Type).Ref("created_cards").Field("creator_id").Unique().Required(), // 创建人
|
||||
edge.From("user", SysUser.Type).Ref("used_cards").Field("used_id").Unique(), // 使用人
|
||||
}
|
||||
}
|
||||
|
||||
func (SysCard) Annotations() []schema.Annotation {
|
||||
return []schema.Annotation{
|
||||
entsql.Annotation{Table: "sys_card"},
|
||||
}
|
||||
}
|
||||
@@ -23,7 +23,7 @@ type SysUser struct {
|
||||
func (SysUser) Fields() []ent.Field {
|
||||
return []ent.Field{
|
||||
field.String("username").Unique(),
|
||||
field.String("password"),
|
||||
field.String("password").Sensitive(),
|
||||
field.String("email").Unique().Match(regexp.MustCompile("@qq.com$")),
|
||||
field.String("invite_code").Unique().Optional(),
|
||||
field.String("balance").GoType(decimal.Decimal{}).SchemaType(map[string]string{
|
||||
@@ -32,6 +32,11 @@ func (SysUser) Fields() []ent.Field {
|
||||
}).DefaultFunc(ent2.DecimalDefaultFunc),
|
||||
field.Bool("block").Default(false),
|
||||
field.Bool("verify").Default(false),
|
||||
// 邀请返现字段
|
||||
field.String("invite_cashback").GoType(decimal.Decimal{}).SchemaType(map[string]string{
|
||||
dialect.MySQL: "decimal(10,2)",
|
||||
dialect.Postgres: "numeric(10,2)",
|
||||
}).DefaultFunc(ent2.DecimalDefaultFunc),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -46,6 +51,8 @@ func (SysUser) Edges() []ent.Edge {
|
||||
edge.To("images", CpImage.Type), // 用户拥有的图片
|
||||
edge.To("cpuser", CpUser.Type), // 用户拥有的cp用户
|
||||
edge.To("cp_task_logs", CpTaskLog.Type), // 用户拥有的cp任务日志
|
||||
edge.To("created_cards", SysCard.Type), // 用户创建的卡
|
||||
edge.To("used_cards", SysCard.Type), // 用户使用的卡
|
||||
}
|
||||
}
|
||||
|
||||
+47
-5
@@ -26,7 +26,7 @@ type SysUser struct {
|
||||
// Username holds the value of the "username" field.
|
||||
Username string `json:"username,omitempty"`
|
||||
// Password holds the value of the "password" field.
|
||||
Password string `json:"password,omitempty"`
|
||||
Password string `json:"-"`
|
||||
// Email holds the value of the "email" field.
|
||||
Email string `json:"email,omitempty"`
|
||||
// InviteCode holds the value of the "invite_code" field.
|
||||
@@ -37,6 +37,8 @@ type SysUser struct {
|
||||
Block bool `json:"block,omitempty"`
|
||||
// Verify holds the value of the "verify" field.
|
||||
Verify bool `json:"verify,omitempty"`
|
||||
// InviteCashback holds the value of the "invite_cashback" field.
|
||||
InviteCashback decimal.Decimal `json:"invite_cashback,omitempty"`
|
||||
// Edges holds the relations/edges for other nodes in the graph.
|
||||
// The values are being populated by the SysUserQuery when eager-loading is set.
|
||||
Edges SysUserEdges `json:"edges"`
|
||||
@@ -60,9 +62,13 @@ type SysUserEdges struct {
|
||||
Cpuser []*CpUser `json:"cpuser,omitempty"`
|
||||
// CpTaskLogs holds the value of the cp_task_logs edge.
|
||||
CpTaskLogs []*CpTaskLog `json:"cp_task_logs,omitempty"`
|
||||
// CreatedCards holds the value of the created_cards edge.
|
||||
CreatedCards []*SysCard `json:"created_cards,omitempty"`
|
||||
// UsedCards holds the value of the used_cards edge.
|
||||
UsedCards []*SysCard `json:"used_cards,omitempty"`
|
||||
// loadedTypes holds the information for reporting if a
|
||||
// type was loaded (or requested) in eager-loading or not.
|
||||
loadedTypes [7]bool
|
||||
loadedTypes [9]bool
|
||||
}
|
||||
|
||||
// ParentOrErr returns the Parent value or an error if the edge
|
||||
@@ -132,12 +138,30 @@ func (e SysUserEdges) CpTaskLogsOrErr() ([]*CpTaskLog, error) {
|
||||
return nil, &NotLoadedError{edge: "cp_task_logs"}
|
||||
}
|
||||
|
||||
// CreatedCardsOrErr returns the CreatedCards value or an error if the edge
|
||||
// was not loaded in eager-loading.
|
||||
func (e SysUserEdges) CreatedCardsOrErr() ([]*SysCard, error) {
|
||||
if e.loadedTypes[7] {
|
||||
return e.CreatedCards, nil
|
||||
}
|
||||
return nil, &NotLoadedError{edge: "created_cards"}
|
||||
}
|
||||
|
||||
// UsedCardsOrErr returns the UsedCards value or an error if the edge
|
||||
// was not loaded in eager-loading.
|
||||
func (e SysUserEdges) UsedCardsOrErr() ([]*SysCard, error) {
|
||||
if e.loadedTypes[8] {
|
||||
return e.UsedCards, nil
|
||||
}
|
||||
return nil, &NotLoadedError{edge: "used_cards"}
|
||||
}
|
||||
|
||||
// scanValues returns the types for scanning values from sql.Rows.
|
||||
func (*SysUser) scanValues(columns []string) ([]any, error) {
|
||||
values := make([]any, len(columns))
|
||||
for i := range columns {
|
||||
switch columns[i] {
|
||||
case sysuser.FieldBalance:
|
||||
case sysuser.FieldBalance, sysuser.FieldInviteCashback:
|
||||
values[i] = new(decimal.Decimal)
|
||||
case sysuser.FieldCreateTime, sysuser.FieldUpdateTime:
|
||||
values[i] = new(ent2.CustomTime)
|
||||
@@ -224,6 +248,12 @@ func (_m *SysUser) assignValues(columns []string, values []any) error {
|
||||
} else if value.Valid {
|
||||
_m.Verify = value.Bool
|
||||
}
|
||||
case sysuser.FieldInviteCashback:
|
||||
if value, ok := values[i].(*decimal.Decimal); !ok {
|
||||
return fmt.Errorf("unexpected type %T for field invite_cashback", values[i])
|
||||
} else if value != nil {
|
||||
_m.InviteCashback = *value
|
||||
}
|
||||
case sysuser.ForeignKeys[0]:
|
||||
if value, ok := values[i].(*sql.NullInt64); !ok {
|
||||
return fmt.Errorf("unexpected type %T for edge-field sys_user_children", value)
|
||||
@@ -279,6 +309,16 @@ func (_m *SysUser) QueryCpTaskLogs() *CpTaskLogQuery {
|
||||
return NewSysUserClient(_m.config).QueryCpTaskLogs(_m)
|
||||
}
|
||||
|
||||
// QueryCreatedCards queries the "created_cards" edge of the SysUser entity.
|
||||
func (_m *SysUser) QueryCreatedCards() *SysCardQuery {
|
||||
return NewSysUserClient(_m.config).QueryCreatedCards(_m)
|
||||
}
|
||||
|
||||
// QueryUsedCards queries the "used_cards" edge of the SysUser entity.
|
||||
func (_m *SysUser) QueryUsedCards() *SysCardQuery {
|
||||
return NewSysUserClient(_m.config).QueryUsedCards(_m)
|
||||
}
|
||||
|
||||
// Update returns a builder for updating this SysUser.
|
||||
// Note that you need to call SysUser.Unwrap() before calling this method if this SysUser
|
||||
// was returned from a transaction, and the transaction was committed or rolled back.
|
||||
@@ -311,8 +351,7 @@ func (_m *SysUser) String() string {
|
||||
builder.WriteString("username=")
|
||||
builder.WriteString(_m.Username)
|
||||
builder.WriteString(", ")
|
||||
builder.WriteString("password=")
|
||||
builder.WriteString(_m.Password)
|
||||
builder.WriteString("password=<sensitive>")
|
||||
builder.WriteString(", ")
|
||||
builder.WriteString("email=")
|
||||
builder.WriteString(_m.Email)
|
||||
@@ -328,6 +367,9 @@ func (_m *SysUser) String() string {
|
||||
builder.WriteString(", ")
|
||||
builder.WriteString("verify=")
|
||||
builder.WriteString(fmt.Sprintf("%v", _m.Verify))
|
||||
builder.WriteString(", ")
|
||||
builder.WriteString("invite_cashback=")
|
||||
builder.WriteString(fmt.Sprintf("%v", _m.InviteCashback))
|
||||
builder.WriteByte(')')
|
||||
return builder.String()
|
||||
}
|
||||
|
||||
@@ -34,6 +34,8 @@ const (
|
||||
FieldBlock = "block"
|
||||
// FieldVerify holds the string denoting the verify field in the database.
|
||||
FieldVerify = "verify"
|
||||
// FieldInviteCashback holds the string denoting the invite_cashback field in the database.
|
||||
FieldInviteCashback = "invite_cashback"
|
||||
// EdgeParent holds the string denoting the parent edge name in mutations.
|
||||
EdgeParent = "parent"
|
||||
// EdgeChildren holds the string denoting the children edge name in mutations.
|
||||
@@ -48,6 +50,10 @@ const (
|
||||
EdgeCpuser = "cpuser"
|
||||
// EdgeCpTaskLogs holds the string denoting the cp_task_logs edge name in mutations.
|
||||
EdgeCpTaskLogs = "cp_task_logs"
|
||||
// EdgeCreatedCards holds the string denoting the created_cards edge name in mutations.
|
||||
EdgeCreatedCards = "created_cards"
|
||||
// EdgeUsedCards holds the string denoting the used_cards edge name in mutations.
|
||||
EdgeUsedCards = "used_cards"
|
||||
// Table holds the table name of the sysuser in the database.
|
||||
Table = "sys_user"
|
||||
// ParentTable is the table that holds the parent relation/edge.
|
||||
@@ -91,6 +97,20 @@ const (
|
||||
CpTaskLogsInverseTable = "cp_task_logs"
|
||||
// CpTaskLogsColumn is the table column denoting the cp_task_logs relation/edge.
|
||||
CpTaskLogsColumn = "system_user_id"
|
||||
// CreatedCardsTable is the table that holds the created_cards relation/edge.
|
||||
CreatedCardsTable = "sys_card"
|
||||
// CreatedCardsInverseTable is the table name for the SysCard entity.
|
||||
// It exists in this package in order to avoid circular dependency with the "syscard" package.
|
||||
CreatedCardsInverseTable = "sys_card"
|
||||
// CreatedCardsColumn is the table column denoting the created_cards relation/edge.
|
||||
CreatedCardsColumn = "creator_id"
|
||||
// UsedCardsTable is the table that holds the used_cards relation/edge.
|
||||
UsedCardsTable = "sys_card"
|
||||
// UsedCardsInverseTable is the table name for the SysCard entity.
|
||||
// It exists in this package in order to avoid circular dependency with the "syscard" package.
|
||||
UsedCardsInverseTable = "sys_card"
|
||||
// UsedCardsColumn is the table column denoting the used_cards relation/edge.
|
||||
UsedCardsColumn = "used_id"
|
||||
)
|
||||
|
||||
// Columns holds all SQL columns for sysuser fields.
|
||||
@@ -105,6 +125,7 @@ var Columns = []string{
|
||||
FieldBalance,
|
||||
FieldBlock,
|
||||
FieldVerify,
|
||||
FieldInviteCashback,
|
||||
}
|
||||
|
||||
// ForeignKeys holds the SQL foreign-keys that are owned by the "sys_user"
|
||||
@@ -153,6 +174,8 @@ var (
|
||||
DefaultBlock bool
|
||||
// DefaultVerify holds the default value on creation for the "verify" field.
|
||||
DefaultVerify bool
|
||||
// DefaultInviteCashback holds the default value on creation for the "invite_cashback" field.
|
||||
DefaultInviteCashback func() decimal.Decimal
|
||||
)
|
||||
|
||||
// OrderOption defines the ordering options for the SysUser queries.
|
||||
@@ -208,6 +231,11 @@ func ByVerify(opts ...sql.OrderTermOption) OrderOption {
|
||||
return sql.OrderByField(FieldVerify, opts...).ToFunc()
|
||||
}
|
||||
|
||||
// ByInviteCashback orders the results by the invite_cashback field.
|
||||
func ByInviteCashback(opts ...sql.OrderTermOption) OrderOption {
|
||||
return sql.OrderByField(FieldInviteCashback, opts...).ToFunc()
|
||||
}
|
||||
|
||||
// ByParentField orders the results by parent field.
|
||||
func ByParentField(field string, opts ...sql.OrderTermOption) OrderOption {
|
||||
return func(s *sql.Selector) {
|
||||
@@ -291,6 +319,34 @@ func ByCpTaskLogs(term sql.OrderTerm, terms ...sql.OrderTerm) OrderOption {
|
||||
sqlgraph.OrderByNeighborTerms(s, newCpTaskLogsStep(), append([]sql.OrderTerm{term}, terms...)...)
|
||||
}
|
||||
}
|
||||
|
||||
// ByCreatedCardsCount orders the results by created_cards count.
|
||||
func ByCreatedCardsCount(opts ...sql.OrderTermOption) OrderOption {
|
||||
return func(s *sql.Selector) {
|
||||
sqlgraph.OrderByNeighborsCount(s, newCreatedCardsStep(), opts...)
|
||||
}
|
||||
}
|
||||
|
||||
// ByCreatedCards orders the results by created_cards terms.
|
||||
func ByCreatedCards(term sql.OrderTerm, terms ...sql.OrderTerm) OrderOption {
|
||||
return func(s *sql.Selector) {
|
||||
sqlgraph.OrderByNeighborTerms(s, newCreatedCardsStep(), append([]sql.OrderTerm{term}, terms...)...)
|
||||
}
|
||||
}
|
||||
|
||||
// ByUsedCardsCount orders the results by used_cards count.
|
||||
func ByUsedCardsCount(opts ...sql.OrderTermOption) OrderOption {
|
||||
return func(s *sql.Selector) {
|
||||
sqlgraph.OrderByNeighborsCount(s, newUsedCardsStep(), opts...)
|
||||
}
|
||||
}
|
||||
|
||||
// ByUsedCards orders the results by used_cards terms.
|
||||
func ByUsedCards(term sql.OrderTerm, terms ...sql.OrderTerm) OrderOption {
|
||||
return func(s *sql.Selector) {
|
||||
sqlgraph.OrderByNeighborTerms(s, newUsedCardsStep(), append([]sql.OrderTerm{term}, terms...)...)
|
||||
}
|
||||
}
|
||||
func newParentStep() *sqlgraph.Step {
|
||||
return sqlgraph.NewStep(
|
||||
sqlgraph.From(Table, FieldID),
|
||||
@@ -340,3 +396,17 @@ func newCpTaskLogsStep() *sqlgraph.Step {
|
||||
sqlgraph.Edge(sqlgraph.O2M, false, CpTaskLogsTable, CpTaskLogsColumn),
|
||||
)
|
||||
}
|
||||
func newCreatedCardsStep() *sqlgraph.Step {
|
||||
return sqlgraph.NewStep(
|
||||
sqlgraph.From(Table, FieldID),
|
||||
sqlgraph.To(CreatedCardsInverseTable, FieldID),
|
||||
sqlgraph.Edge(sqlgraph.O2M, false, CreatedCardsTable, CreatedCardsColumn),
|
||||
)
|
||||
}
|
||||
func newUsedCardsStep() *sqlgraph.Step {
|
||||
return sqlgraph.NewStep(
|
||||
sqlgraph.From(Table, FieldID),
|
||||
sqlgraph.To(UsedCardsInverseTable, FieldID),
|
||||
sqlgraph.Edge(sqlgraph.O2M, false, UsedCardsTable, UsedCardsColumn),
|
||||
)
|
||||
}
|
||||
|
||||
@@ -101,6 +101,11 @@ func Verify(v bool) predicate.SysUser {
|
||||
return predicate.SysUser(sql.FieldEQ(FieldVerify, v))
|
||||
}
|
||||
|
||||
// InviteCashback applies equality check predicate on the "invite_cashback" field. It's identical to InviteCashbackEQ.
|
||||
func InviteCashback(v decimal.Decimal) predicate.SysUser {
|
||||
return predicate.SysUser(sql.FieldEQ(FieldInviteCashback, v))
|
||||
}
|
||||
|
||||
// CreateTimeEQ applies the EQ predicate on the "create_time" field.
|
||||
func CreateTimeEQ(v *ent2.CustomTime) predicate.SysUser {
|
||||
return predicate.SysUser(sql.FieldEQ(FieldCreateTime, v))
|
||||
@@ -601,6 +606,76 @@ func VerifyNEQ(v bool) predicate.SysUser {
|
||||
return predicate.SysUser(sql.FieldNEQ(FieldVerify, v))
|
||||
}
|
||||
|
||||
// InviteCashbackEQ applies the EQ predicate on the "invite_cashback" field.
|
||||
func InviteCashbackEQ(v decimal.Decimal) predicate.SysUser {
|
||||
return predicate.SysUser(sql.FieldEQ(FieldInviteCashback, v))
|
||||
}
|
||||
|
||||
// InviteCashbackNEQ applies the NEQ predicate on the "invite_cashback" field.
|
||||
func InviteCashbackNEQ(v decimal.Decimal) predicate.SysUser {
|
||||
return predicate.SysUser(sql.FieldNEQ(FieldInviteCashback, v))
|
||||
}
|
||||
|
||||
// InviteCashbackIn applies the In predicate on the "invite_cashback" field.
|
||||
func InviteCashbackIn(vs ...decimal.Decimal) predicate.SysUser {
|
||||
return predicate.SysUser(sql.FieldIn(FieldInviteCashback, vs...))
|
||||
}
|
||||
|
||||
// InviteCashbackNotIn applies the NotIn predicate on the "invite_cashback" field.
|
||||
func InviteCashbackNotIn(vs ...decimal.Decimal) predicate.SysUser {
|
||||
return predicate.SysUser(sql.FieldNotIn(FieldInviteCashback, vs...))
|
||||
}
|
||||
|
||||
// InviteCashbackGT applies the GT predicate on the "invite_cashback" field.
|
||||
func InviteCashbackGT(v decimal.Decimal) predicate.SysUser {
|
||||
return predicate.SysUser(sql.FieldGT(FieldInviteCashback, v))
|
||||
}
|
||||
|
||||
// InviteCashbackGTE applies the GTE predicate on the "invite_cashback" field.
|
||||
func InviteCashbackGTE(v decimal.Decimal) predicate.SysUser {
|
||||
return predicate.SysUser(sql.FieldGTE(FieldInviteCashback, v))
|
||||
}
|
||||
|
||||
// InviteCashbackLT applies the LT predicate on the "invite_cashback" field.
|
||||
func InviteCashbackLT(v decimal.Decimal) predicate.SysUser {
|
||||
return predicate.SysUser(sql.FieldLT(FieldInviteCashback, v))
|
||||
}
|
||||
|
||||
// InviteCashbackLTE applies the LTE predicate on the "invite_cashback" field.
|
||||
func InviteCashbackLTE(v decimal.Decimal) predicate.SysUser {
|
||||
return predicate.SysUser(sql.FieldLTE(FieldInviteCashback, v))
|
||||
}
|
||||
|
||||
// InviteCashbackContains applies the Contains predicate on the "invite_cashback" field.
|
||||
func InviteCashbackContains(v decimal.Decimal) predicate.SysUser {
|
||||
vc := v.String()
|
||||
return predicate.SysUser(sql.FieldContains(FieldInviteCashback, vc))
|
||||
}
|
||||
|
||||
// InviteCashbackHasPrefix applies the HasPrefix predicate on the "invite_cashback" field.
|
||||
func InviteCashbackHasPrefix(v decimal.Decimal) predicate.SysUser {
|
||||
vc := v.String()
|
||||
return predicate.SysUser(sql.FieldHasPrefix(FieldInviteCashback, vc))
|
||||
}
|
||||
|
||||
// InviteCashbackHasSuffix applies the HasSuffix predicate on the "invite_cashback" field.
|
||||
func InviteCashbackHasSuffix(v decimal.Decimal) predicate.SysUser {
|
||||
vc := v.String()
|
||||
return predicate.SysUser(sql.FieldHasSuffix(FieldInviteCashback, vc))
|
||||
}
|
||||
|
||||
// InviteCashbackEqualFold applies the EqualFold predicate on the "invite_cashback" field.
|
||||
func InviteCashbackEqualFold(v decimal.Decimal) predicate.SysUser {
|
||||
vc := v.String()
|
||||
return predicate.SysUser(sql.FieldEqualFold(FieldInviteCashback, vc))
|
||||
}
|
||||
|
||||
// InviteCashbackContainsFold applies the ContainsFold predicate on the "invite_cashback" field.
|
||||
func InviteCashbackContainsFold(v decimal.Decimal) predicate.SysUser {
|
||||
vc := v.String()
|
||||
return predicate.SysUser(sql.FieldContainsFold(FieldInviteCashback, vc))
|
||||
}
|
||||
|
||||
// HasParent applies the HasEdge predicate on the "parent" edge.
|
||||
func HasParent() predicate.SysUser {
|
||||
return predicate.SysUser(func(s *sql.Selector) {
|
||||
@@ -762,6 +837,52 @@ func HasCpTaskLogsWith(preds ...predicate.CpTaskLog) predicate.SysUser {
|
||||
})
|
||||
}
|
||||
|
||||
// HasCreatedCards applies the HasEdge predicate on the "created_cards" edge.
|
||||
func HasCreatedCards() predicate.SysUser {
|
||||
return predicate.SysUser(func(s *sql.Selector) {
|
||||
step := sqlgraph.NewStep(
|
||||
sqlgraph.From(Table, FieldID),
|
||||
sqlgraph.Edge(sqlgraph.O2M, false, CreatedCardsTable, CreatedCardsColumn),
|
||||
)
|
||||
sqlgraph.HasNeighbors(s, step)
|
||||
})
|
||||
}
|
||||
|
||||
// HasCreatedCardsWith applies the HasEdge predicate on the "created_cards" edge with a given conditions (other predicates).
|
||||
func HasCreatedCardsWith(preds ...predicate.SysCard) predicate.SysUser {
|
||||
return predicate.SysUser(func(s *sql.Selector) {
|
||||
step := newCreatedCardsStep()
|
||||
sqlgraph.HasNeighborsWith(s, step, func(s *sql.Selector) {
|
||||
for _, p := range preds {
|
||||
p(s)
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
// HasUsedCards applies the HasEdge predicate on the "used_cards" edge.
|
||||
func HasUsedCards() predicate.SysUser {
|
||||
return predicate.SysUser(func(s *sql.Selector) {
|
||||
step := sqlgraph.NewStep(
|
||||
sqlgraph.From(Table, FieldID),
|
||||
sqlgraph.Edge(sqlgraph.O2M, false, UsedCardsTable, UsedCardsColumn),
|
||||
)
|
||||
sqlgraph.HasNeighbors(s, step)
|
||||
})
|
||||
}
|
||||
|
||||
// HasUsedCardsWith applies the HasEdge predicate on the "used_cards" edge with a given conditions (other predicates).
|
||||
func HasUsedCardsWith(preds ...predicate.SysCard) predicate.SysUser {
|
||||
return predicate.SysUser(func(s *sql.Selector) {
|
||||
step := newUsedCardsStep()
|
||||
sqlgraph.HasNeighborsWith(s, step, func(s *sql.Selector) {
|
||||
for _, p := range preds {
|
||||
p(s)
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
// And groups predicates with the AND operator between them.
|
||||
func And(predicates ...predicate.SysUser) predicate.SysUser {
|
||||
return predicate.SysUser(sql.AndPredicates(predicates...))
|
||||
|
||||
@@ -10,6 +10,7 @@ import (
|
||||
"likedream-goframe/internal/ent/cptasklog"
|
||||
"likedream-goframe/internal/ent/cpuser"
|
||||
"likedream-goframe/internal/ent/sysagent"
|
||||
"likedream-goframe/internal/ent/syscard"
|
||||
"likedream-goframe/internal/ent/sysrole"
|
||||
"likedream-goframe/internal/ent/sysuser"
|
||||
"likedream-goframe/internal/framework/ent2"
|
||||
@@ -114,6 +115,20 @@ func (_c *SysUserCreate) SetNillableVerify(v *bool) *SysUserCreate {
|
||||
return _c
|
||||
}
|
||||
|
||||
// SetInviteCashback sets the "invite_cashback" field.
|
||||
func (_c *SysUserCreate) SetInviteCashback(v decimal.Decimal) *SysUserCreate {
|
||||
_c.mutation.SetInviteCashback(v)
|
||||
return _c
|
||||
}
|
||||
|
||||
// SetNillableInviteCashback sets the "invite_cashback" field if the given value is not nil.
|
||||
func (_c *SysUserCreate) SetNillableInviteCashback(v *decimal.Decimal) *SysUserCreate {
|
||||
if v != nil {
|
||||
_c.SetInviteCashback(*v)
|
||||
}
|
||||
return _c
|
||||
}
|
||||
|
||||
// SetParentID sets the "parent" edge to the SysUser entity by ID.
|
||||
func (_c *SysUserCreate) SetParentID(id int64) *SysUserCreate {
|
||||
_c.mutation.SetParentID(id)
|
||||
@@ -227,6 +242,36 @@ func (_c *SysUserCreate) AddCpTaskLogs(v ...*CpTaskLog) *SysUserCreate {
|
||||
return _c.AddCpTaskLogIDs(ids...)
|
||||
}
|
||||
|
||||
// AddCreatedCardIDs adds the "created_cards" edge to the SysCard entity by IDs.
|
||||
func (_c *SysUserCreate) AddCreatedCardIDs(ids ...int64) *SysUserCreate {
|
||||
_c.mutation.AddCreatedCardIDs(ids...)
|
||||
return _c
|
||||
}
|
||||
|
||||
// AddCreatedCards adds the "created_cards" edges to the SysCard entity.
|
||||
func (_c *SysUserCreate) AddCreatedCards(v ...*SysCard) *SysUserCreate {
|
||||
ids := make([]int64, len(v))
|
||||
for i := range v {
|
||||
ids[i] = v[i].ID
|
||||
}
|
||||
return _c.AddCreatedCardIDs(ids...)
|
||||
}
|
||||
|
||||
// AddUsedCardIDs adds the "used_cards" edge to the SysCard entity by IDs.
|
||||
func (_c *SysUserCreate) AddUsedCardIDs(ids ...int64) *SysUserCreate {
|
||||
_c.mutation.AddUsedCardIDs(ids...)
|
||||
return _c
|
||||
}
|
||||
|
||||
// AddUsedCards adds the "used_cards" edges to the SysCard entity.
|
||||
func (_c *SysUserCreate) AddUsedCards(v ...*SysCard) *SysUserCreate {
|
||||
ids := make([]int64, len(v))
|
||||
for i := range v {
|
||||
ids[i] = v[i].ID
|
||||
}
|
||||
return _c.AddUsedCardIDs(ids...)
|
||||
}
|
||||
|
||||
// Mutation returns the SysUserMutation object of the builder.
|
||||
func (_c *SysUserCreate) Mutation() *SysUserMutation {
|
||||
return _c.mutation
|
||||
@@ -293,6 +338,13 @@ func (_c *SysUserCreate) defaults() error {
|
||||
v := sysuser.DefaultVerify
|
||||
_c.mutation.SetVerify(v)
|
||||
}
|
||||
if _, ok := _c.mutation.InviteCashback(); !ok {
|
||||
if sysuser.DefaultInviteCashback == nil {
|
||||
return fmt.Errorf("ent: uninitialized sysuser.DefaultInviteCashback (forgotten import ent/runtime?)")
|
||||
}
|
||||
v := sysuser.DefaultInviteCashback()
|
||||
_c.mutation.SetInviteCashback(v)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -327,6 +379,9 @@ func (_c *SysUserCreate) check() error {
|
||||
if _, ok := _c.mutation.Verify(); !ok {
|
||||
return &ValidationError{Name: "verify", err: errors.New(`ent: missing required field "SysUser.verify"`)}
|
||||
}
|
||||
if _, ok := _c.mutation.InviteCashback(); !ok {
|
||||
return &ValidationError{Name: "invite_cashback", err: errors.New(`ent: missing required field "SysUser.invite_cashback"`)}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -390,6 +445,10 @@ func (_c *SysUserCreate) createSpec() (*SysUser, *sqlgraph.CreateSpec) {
|
||||
_spec.SetField(sysuser.FieldVerify, field.TypeBool, value)
|
||||
_node.Verify = value
|
||||
}
|
||||
if value, ok := _c.mutation.InviteCashback(); ok {
|
||||
_spec.SetField(sysuser.FieldInviteCashback, field.TypeString, value)
|
||||
_node.InviteCashback = value
|
||||
}
|
||||
if nodes := _c.mutation.ParentIDs(); len(nodes) > 0 {
|
||||
edge := &sqlgraph.EdgeSpec{
|
||||
Rel: sqlgraph.M2O,
|
||||
@@ -503,6 +562,38 @@ func (_c *SysUserCreate) createSpec() (*SysUser, *sqlgraph.CreateSpec) {
|
||||
}
|
||||
_spec.Edges = append(_spec.Edges, edge)
|
||||
}
|
||||
if nodes := _c.mutation.CreatedCardsIDs(); len(nodes) > 0 {
|
||||
edge := &sqlgraph.EdgeSpec{
|
||||
Rel: sqlgraph.O2M,
|
||||
Inverse: false,
|
||||
Table: sysuser.CreatedCardsTable,
|
||||
Columns: []string{sysuser.CreatedCardsColumn},
|
||||
Bidi: false,
|
||||
Target: &sqlgraph.EdgeTarget{
|
||||
IDSpec: sqlgraph.NewFieldSpec(syscard.FieldID, field.TypeInt64),
|
||||
},
|
||||
}
|
||||
for _, k := range nodes {
|
||||
edge.Target.Nodes = append(edge.Target.Nodes, k)
|
||||
}
|
||||
_spec.Edges = append(_spec.Edges, edge)
|
||||
}
|
||||
if nodes := _c.mutation.UsedCardsIDs(); len(nodes) > 0 {
|
||||
edge := &sqlgraph.EdgeSpec{
|
||||
Rel: sqlgraph.O2M,
|
||||
Inverse: false,
|
||||
Table: sysuser.UsedCardsTable,
|
||||
Columns: []string{sysuser.UsedCardsColumn},
|
||||
Bidi: false,
|
||||
Target: &sqlgraph.EdgeTarget{
|
||||
IDSpec: sqlgraph.NewFieldSpec(syscard.FieldID, field.TypeInt64),
|
||||
},
|
||||
}
|
||||
for _, k := range nodes {
|
||||
edge.Target.Nodes = append(edge.Target.Nodes, k)
|
||||
}
|
||||
_spec.Edges = append(_spec.Edges, edge)
|
||||
}
|
||||
return _node, _spec
|
||||
}
|
||||
|
||||
@@ -657,6 +748,18 @@ func (u *SysUserUpsert) UpdateVerify() *SysUserUpsert {
|
||||
return u
|
||||
}
|
||||
|
||||
// SetInviteCashback sets the "invite_cashback" field.
|
||||
func (u *SysUserUpsert) SetInviteCashback(v decimal.Decimal) *SysUserUpsert {
|
||||
u.Set(sysuser.FieldInviteCashback, v)
|
||||
return u
|
||||
}
|
||||
|
||||
// UpdateInviteCashback sets the "invite_cashback" field to the value that was provided on create.
|
||||
func (u *SysUserUpsert) UpdateInviteCashback() *SysUserUpsert {
|
||||
u.SetExcluded(sysuser.FieldInviteCashback)
|
||||
return u
|
||||
}
|
||||
|
||||
// UpdateNewValues updates the mutable fields using the new values that were set on create.
|
||||
// Using this option is equivalent to using:
|
||||
//
|
||||
@@ -821,6 +924,20 @@ func (u *SysUserUpsertOne) UpdateVerify() *SysUserUpsertOne {
|
||||
})
|
||||
}
|
||||
|
||||
// SetInviteCashback sets the "invite_cashback" field.
|
||||
func (u *SysUserUpsertOne) SetInviteCashback(v decimal.Decimal) *SysUserUpsertOne {
|
||||
return u.Update(func(s *SysUserUpsert) {
|
||||
s.SetInviteCashback(v)
|
||||
})
|
||||
}
|
||||
|
||||
// UpdateInviteCashback sets the "invite_cashback" field to the value that was provided on create.
|
||||
func (u *SysUserUpsertOne) UpdateInviteCashback() *SysUserUpsertOne {
|
||||
return u.Update(func(s *SysUserUpsert) {
|
||||
s.UpdateInviteCashback()
|
||||
})
|
||||
}
|
||||
|
||||
// Exec executes the query.
|
||||
func (u *SysUserUpsertOne) Exec(ctx context.Context) error {
|
||||
if len(u.create.conflict) == 0 {
|
||||
@@ -1151,6 +1268,20 @@ func (u *SysUserUpsertBulk) UpdateVerify() *SysUserUpsertBulk {
|
||||
})
|
||||
}
|
||||
|
||||
// SetInviteCashback sets the "invite_cashback" field.
|
||||
func (u *SysUserUpsertBulk) SetInviteCashback(v decimal.Decimal) *SysUserUpsertBulk {
|
||||
return u.Update(func(s *SysUserUpsert) {
|
||||
s.SetInviteCashback(v)
|
||||
})
|
||||
}
|
||||
|
||||
// UpdateInviteCashback sets the "invite_cashback" field to the value that was provided on create.
|
||||
func (u *SysUserUpsertBulk) UpdateInviteCashback() *SysUserUpsertBulk {
|
||||
return u.Update(func(s *SysUserUpsert) {
|
||||
s.UpdateInviteCashback()
|
||||
})
|
||||
}
|
||||
|
||||
// Exec executes the query.
|
||||
func (u *SysUserUpsertBulk) Exec(ctx context.Context) error {
|
||||
if u.create.err != nil {
|
||||
|
||||
+172
-25
@@ -11,6 +11,7 @@ import (
|
||||
"likedream-goframe/internal/ent/cpuser"
|
||||
"likedream-goframe/internal/ent/predicate"
|
||||
"likedream-goframe/internal/ent/sysagent"
|
||||
"likedream-goframe/internal/ent/syscard"
|
||||
"likedream-goframe/internal/ent/sysrole"
|
||||
"likedream-goframe/internal/ent/sysuser"
|
||||
"math"
|
||||
@@ -24,18 +25,20 @@ import (
|
||||
// SysUserQuery is the builder for querying SysUser entities.
|
||||
type SysUserQuery struct {
|
||||
config
|
||||
ctx *QueryContext
|
||||
order []sysuser.OrderOption
|
||||
inters []Interceptor
|
||||
predicates []predicate.SysUser
|
||||
withParent *SysUserQuery
|
||||
withChildren *SysUserQuery
|
||||
withRoles *SysRoleQuery
|
||||
withAgent *SysAgentQuery
|
||||
withImages *CpImageQuery
|
||||
withCpuser *CpUserQuery
|
||||
withCpTaskLogs *CpTaskLogQuery
|
||||
withFKs bool
|
||||
ctx *QueryContext
|
||||
order []sysuser.OrderOption
|
||||
inters []Interceptor
|
||||
predicates []predicate.SysUser
|
||||
withParent *SysUserQuery
|
||||
withChildren *SysUserQuery
|
||||
withRoles *SysRoleQuery
|
||||
withAgent *SysAgentQuery
|
||||
withImages *CpImageQuery
|
||||
withCpuser *CpUserQuery
|
||||
withCpTaskLogs *CpTaskLogQuery
|
||||
withCreatedCards *SysCardQuery
|
||||
withUsedCards *SysCardQuery
|
||||
withFKs bool
|
||||
// intermediate query (i.e. traversal path).
|
||||
sql *sql.Selector
|
||||
path func(context.Context) (*sql.Selector, error)
|
||||
@@ -226,6 +229,50 @@ func (_q *SysUserQuery) QueryCpTaskLogs() *CpTaskLogQuery {
|
||||
return query
|
||||
}
|
||||
|
||||
// QueryCreatedCards chains the current query on the "created_cards" edge.
|
||||
func (_q *SysUserQuery) QueryCreatedCards() *SysCardQuery {
|
||||
query := (&SysCardClient{config: _q.config}).Query()
|
||||
query.path = func(ctx context.Context) (fromU *sql.Selector, err error) {
|
||||
if err := _q.prepareQuery(ctx); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
selector := _q.sqlQuery(ctx)
|
||||
if err := selector.Err(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
step := sqlgraph.NewStep(
|
||||
sqlgraph.From(sysuser.Table, sysuser.FieldID, selector),
|
||||
sqlgraph.To(syscard.Table, syscard.FieldID),
|
||||
sqlgraph.Edge(sqlgraph.O2M, false, sysuser.CreatedCardsTable, sysuser.CreatedCardsColumn),
|
||||
)
|
||||
fromU = sqlgraph.SetNeighbors(_q.driver.Dialect(), step)
|
||||
return fromU, nil
|
||||
}
|
||||
return query
|
||||
}
|
||||
|
||||
// QueryUsedCards chains the current query on the "used_cards" edge.
|
||||
func (_q *SysUserQuery) QueryUsedCards() *SysCardQuery {
|
||||
query := (&SysCardClient{config: _q.config}).Query()
|
||||
query.path = func(ctx context.Context) (fromU *sql.Selector, err error) {
|
||||
if err := _q.prepareQuery(ctx); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
selector := _q.sqlQuery(ctx)
|
||||
if err := selector.Err(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
step := sqlgraph.NewStep(
|
||||
sqlgraph.From(sysuser.Table, sysuser.FieldID, selector),
|
||||
sqlgraph.To(syscard.Table, syscard.FieldID),
|
||||
sqlgraph.Edge(sqlgraph.O2M, false, sysuser.UsedCardsTable, sysuser.UsedCardsColumn),
|
||||
)
|
||||
fromU = sqlgraph.SetNeighbors(_q.driver.Dialect(), step)
|
||||
return fromU, nil
|
||||
}
|
||||
return query
|
||||
}
|
||||
|
||||
// First returns the first SysUser entity from the query.
|
||||
// Returns a *NotFoundError when no SysUser was found.
|
||||
func (_q *SysUserQuery) First(ctx context.Context) (*SysUser, error) {
|
||||
@@ -413,18 +460,20 @@ func (_q *SysUserQuery) Clone() *SysUserQuery {
|
||||
return nil
|
||||
}
|
||||
return &SysUserQuery{
|
||||
config: _q.config,
|
||||
ctx: _q.ctx.Clone(),
|
||||
order: append([]sysuser.OrderOption{}, _q.order...),
|
||||
inters: append([]Interceptor{}, _q.inters...),
|
||||
predicates: append([]predicate.SysUser{}, _q.predicates...),
|
||||
withParent: _q.withParent.Clone(),
|
||||
withChildren: _q.withChildren.Clone(),
|
||||
withRoles: _q.withRoles.Clone(),
|
||||
withAgent: _q.withAgent.Clone(),
|
||||
withImages: _q.withImages.Clone(),
|
||||
withCpuser: _q.withCpuser.Clone(),
|
||||
withCpTaskLogs: _q.withCpTaskLogs.Clone(),
|
||||
config: _q.config,
|
||||
ctx: _q.ctx.Clone(),
|
||||
order: append([]sysuser.OrderOption{}, _q.order...),
|
||||
inters: append([]Interceptor{}, _q.inters...),
|
||||
predicates: append([]predicate.SysUser{}, _q.predicates...),
|
||||
withParent: _q.withParent.Clone(),
|
||||
withChildren: _q.withChildren.Clone(),
|
||||
withRoles: _q.withRoles.Clone(),
|
||||
withAgent: _q.withAgent.Clone(),
|
||||
withImages: _q.withImages.Clone(),
|
||||
withCpuser: _q.withCpuser.Clone(),
|
||||
withCpTaskLogs: _q.withCpTaskLogs.Clone(),
|
||||
withCreatedCards: _q.withCreatedCards.Clone(),
|
||||
withUsedCards: _q.withUsedCards.Clone(),
|
||||
// clone intermediate query.
|
||||
sql: _q.sql.Clone(),
|
||||
path: _q.path,
|
||||
@@ -508,6 +557,28 @@ func (_q *SysUserQuery) WithCpTaskLogs(opts ...func(*CpTaskLogQuery)) *SysUserQu
|
||||
return _q
|
||||
}
|
||||
|
||||
// WithCreatedCards tells the query-builder to eager-load the nodes that are connected to
|
||||
// the "created_cards" edge. The optional arguments are used to configure the query builder of the edge.
|
||||
func (_q *SysUserQuery) WithCreatedCards(opts ...func(*SysCardQuery)) *SysUserQuery {
|
||||
query := (&SysCardClient{config: _q.config}).Query()
|
||||
for _, opt := range opts {
|
||||
opt(query)
|
||||
}
|
||||
_q.withCreatedCards = query
|
||||
return _q
|
||||
}
|
||||
|
||||
// WithUsedCards tells the query-builder to eager-load the nodes that are connected to
|
||||
// the "used_cards" edge. The optional arguments are used to configure the query builder of the edge.
|
||||
func (_q *SysUserQuery) WithUsedCards(opts ...func(*SysCardQuery)) *SysUserQuery {
|
||||
query := (&SysCardClient{config: _q.config}).Query()
|
||||
for _, opt := range opts {
|
||||
opt(query)
|
||||
}
|
||||
_q.withUsedCards = query
|
||||
return _q
|
||||
}
|
||||
|
||||
// GroupBy is used to group vertices by one or more fields/columns.
|
||||
// It is often used with aggregate functions, like: count, max, mean, min, sum.
|
||||
//
|
||||
@@ -587,7 +658,7 @@ func (_q *SysUserQuery) sqlAll(ctx context.Context, hooks ...queryHook) ([]*SysU
|
||||
nodes = []*SysUser{}
|
||||
withFKs = _q.withFKs
|
||||
_spec = _q.querySpec()
|
||||
loadedTypes = [7]bool{
|
||||
loadedTypes = [9]bool{
|
||||
_q.withParent != nil,
|
||||
_q.withChildren != nil,
|
||||
_q.withRoles != nil,
|
||||
@@ -595,6 +666,8 @@ func (_q *SysUserQuery) sqlAll(ctx context.Context, hooks ...queryHook) ([]*SysU
|
||||
_q.withImages != nil,
|
||||
_q.withCpuser != nil,
|
||||
_q.withCpTaskLogs != nil,
|
||||
_q.withCreatedCards != nil,
|
||||
_q.withUsedCards != nil,
|
||||
}
|
||||
)
|
||||
if _q.withParent != nil {
|
||||
@@ -668,6 +741,20 @@ func (_q *SysUserQuery) sqlAll(ctx context.Context, hooks ...queryHook) ([]*SysU
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
if query := _q.withCreatedCards; query != nil {
|
||||
if err := _q.loadCreatedCards(ctx, query, nodes,
|
||||
func(n *SysUser) { n.Edges.CreatedCards = []*SysCard{} },
|
||||
func(n *SysUser, e *SysCard) { n.Edges.CreatedCards = append(n.Edges.CreatedCards, e) }); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
if query := _q.withUsedCards; query != nil {
|
||||
if err := _q.loadUsedCards(ctx, query, nodes,
|
||||
func(n *SysUser) { n.Edges.UsedCards = []*SysCard{} },
|
||||
func(n *SysUser, e *SysCard) { n.Edges.UsedCards = append(n.Edges.UsedCards, e) }); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
return nodes, nil
|
||||
}
|
||||
|
||||
@@ -913,6 +1000,66 @@ func (_q *SysUserQuery) loadCpTaskLogs(ctx context.Context, query *CpTaskLogQuer
|
||||
}
|
||||
return nil
|
||||
}
|
||||
func (_q *SysUserQuery) loadCreatedCards(ctx context.Context, query *SysCardQuery, nodes []*SysUser, init func(*SysUser), assign func(*SysUser, *SysCard)) error {
|
||||
fks := make([]driver.Value, 0, len(nodes))
|
||||
nodeids := make(map[int64]*SysUser)
|
||||
for i := range nodes {
|
||||
fks = append(fks, nodes[i].ID)
|
||||
nodeids[nodes[i].ID] = nodes[i]
|
||||
if init != nil {
|
||||
init(nodes[i])
|
||||
}
|
||||
}
|
||||
if len(query.ctx.Fields) > 0 {
|
||||
query.ctx.AppendFieldOnce(syscard.FieldCreatorID)
|
||||
}
|
||||
query.Where(predicate.SysCard(func(s *sql.Selector) {
|
||||
s.Where(sql.InValues(s.C(sysuser.CreatedCardsColumn), fks...))
|
||||
}))
|
||||
neighbors, err := query.All(ctx)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
for _, n := range neighbors {
|
||||
fk := n.CreatorID
|
||||
node, ok := nodeids[fk]
|
||||
if !ok {
|
||||
return fmt.Errorf(`unexpected referenced foreign-key "creator_id" returned %v for node %v`, fk, n.ID)
|
||||
}
|
||||
assign(node, n)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
func (_q *SysUserQuery) loadUsedCards(ctx context.Context, query *SysCardQuery, nodes []*SysUser, init func(*SysUser), assign func(*SysUser, *SysCard)) error {
|
||||
fks := make([]driver.Value, 0, len(nodes))
|
||||
nodeids := make(map[int64]*SysUser)
|
||||
for i := range nodes {
|
||||
fks = append(fks, nodes[i].ID)
|
||||
nodeids[nodes[i].ID] = nodes[i]
|
||||
if init != nil {
|
||||
init(nodes[i])
|
||||
}
|
||||
}
|
||||
if len(query.ctx.Fields) > 0 {
|
||||
query.ctx.AppendFieldOnce(syscard.FieldUsedID)
|
||||
}
|
||||
query.Where(predicate.SysCard(func(s *sql.Selector) {
|
||||
s.Where(sql.InValues(s.C(sysuser.UsedCardsColumn), fks...))
|
||||
}))
|
||||
neighbors, err := query.All(ctx)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
for _, n := range neighbors {
|
||||
fk := n.UsedID
|
||||
node, ok := nodeids[fk]
|
||||
if !ok {
|
||||
return fmt.Errorf(`unexpected referenced foreign-key "used_id" returned %v for node %v`, fk, n.ID)
|
||||
}
|
||||
assign(node, n)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (_q *SysUserQuery) sqlCount(ctx context.Context) (int, error) {
|
||||
_spec := _q.querySpec()
|
||||
|
||||
@@ -11,6 +11,7 @@ import (
|
||||
"likedream-goframe/internal/ent/cpuser"
|
||||
"likedream-goframe/internal/ent/predicate"
|
||||
"likedream-goframe/internal/ent/sysagent"
|
||||
"likedream-goframe/internal/ent/syscard"
|
||||
"likedream-goframe/internal/ent/sysrole"
|
||||
"likedream-goframe/internal/ent/sysuser"
|
||||
"likedream-goframe/internal/framework/ent2"
|
||||
@@ -144,6 +145,20 @@ func (_u *SysUserUpdate) SetNillableVerify(v *bool) *SysUserUpdate {
|
||||
return _u
|
||||
}
|
||||
|
||||
// SetInviteCashback sets the "invite_cashback" field.
|
||||
func (_u *SysUserUpdate) SetInviteCashback(v decimal.Decimal) *SysUserUpdate {
|
||||
_u.mutation.SetInviteCashback(v)
|
||||
return _u
|
||||
}
|
||||
|
||||
// SetNillableInviteCashback sets the "invite_cashback" field if the given value is not nil.
|
||||
func (_u *SysUserUpdate) SetNillableInviteCashback(v *decimal.Decimal) *SysUserUpdate {
|
||||
if v != nil {
|
||||
_u.SetInviteCashback(*v)
|
||||
}
|
||||
return _u
|
||||
}
|
||||
|
||||
// SetParentID sets the "parent" edge to the SysUser entity by ID.
|
||||
func (_u *SysUserUpdate) SetParentID(id int64) *SysUserUpdate {
|
||||
_u.mutation.SetParentID(id)
|
||||
@@ -257,6 +272,36 @@ func (_u *SysUserUpdate) AddCpTaskLogs(v ...*CpTaskLog) *SysUserUpdate {
|
||||
return _u.AddCpTaskLogIDs(ids...)
|
||||
}
|
||||
|
||||
// AddCreatedCardIDs adds the "created_cards" edge to the SysCard entity by IDs.
|
||||
func (_u *SysUserUpdate) AddCreatedCardIDs(ids ...int64) *SysUserUpdate {
|
||||
_u.mutation.AddCreatedCardIDs(ids...)
|
||||
return _u
|
||||
}
|
||||
|
||||
// AddCreatedCards adds the "created_cards" edges to the SysCard entity.
|
||||
func (_u *SysUserUpdate) AddCreatedCards(v ...*SysCard) *SysUserUpdate {
|
||||
ids := make([]int64, len(v))
|
||||
for i := range v {
|
||||
ids[i] = v[i].ID
|
||||
}
|
||||
return _u.AddCreatedCardIDs(ids...)
|
||||
}
|
||||
|
||||
// AddUsedCardIDs adds the "used_cards" edge to the SysCard entity by IDs.
|
||||
func (_u *SysUserUpdate) AddUsedCardIDs(ids ...int64) *SysUserUpdate {
|
||||
_u.mutation.AddUsedCardIDs(ids...)
|
||||
return _u
|
||||
}
|
||||
|
||||
// AddUsedCards adds the "used_cards" edges to the SysCard entity.
|
||||
func (_u *SysUserUpdate) AddUsedCards(v ...*SysCard) *SysUserUpdate {
|
||||
ids := make([]int64, len(v))
|
||||
for i := range v {
|
||||
ids[i] = v[i].ID
|
||||
}
|
||||
return _u.AddUsedCardIDs(ids...)
|
||||
}
|
||||
|
||||
// Mutation returns the SysUserMutation object of the builder.
|
||||
func (_u *SysUserUpdate) Mutation() *SysUserMutation {
|
||||
return _u.mutation
|
||||
@@ -379,6 +424,48 @@ func (_u *SysUserUpdate) RemoveCpTaskLogs(v ...*CpTaskLog) *SysUserUpdate {
|
||||
return _u.RemoveCpTaskLogIDs(ids...)
|
||||
}
|
||||
|
||||
// ClearCreatedCards clears all "created_cards" edges to the SysCard entity.
|
||||
func (_u *SysUserUpdate) ClearCreatedCards() *SysUserUpdate {
|
||||
_u.mutation.ClearCreatedCards()
|
||||
return _u
|
||||
}
|
||||
|
||||
// RemoveCreatedCardIDs removes the "created_cards" edge to SysCard entities by IDs.
|
||||
func (_u *SysUserUpdate) RemoveCreatedCardIDs(ids ...int64) *SysUserUpdate {
|
||||
_u.mutation.RemoveCreatedCardIDs(ids...)
|
||||
return _u
|
||||
}
|
||||
|
||||
// RemoveCreatedCards removes "created_cards" edges to SysCard entities.
|
||||
func (_u *SysUserUpdate) RemoveCreatedCards(v ...*SysCard) *SysUserUpdate {
|
||||
ids := make([]int64, len(v))
|
||||
for i := range v {
|
||||
ids[i] = v[i].ID
|
||||
}
|
||||
return _u.RemoveCreatedCardIDs(ids...)
|
||||
}
|
||||
|
||||
// ClearUsedCards clears all "used_cards" edges to the SysCard entity.
|
||||
func (_u *SysUserUpdate) ClearUsedCards() *SysUserUpdate {
|
||||
_u.mutation.ClearUsedCards()
|
||||
return _u
|
||||
}
|
||||
|
||||
// RemoveUsedCardIDs removes the "used_cards" edge to SysCard entities by IDs.
|
||||
func (_u *SysUserUpdate) RemoveUsedCardIDs(ids ...int64) *SysUserUpdate {
|
||||
_u.mutation.RemoveUsedCardIDs(ids...)
|
||||
return _u
|
||||
}
|
||||
|
||||
// RemoveUsedCards removes "used_cards" edges to SysCard entities.
|
||||
func (_u *SysUserUpdate) RemoveUsedCards(v ...*SysCard) *SysUserUpdate {
|
||||
ids := make([]int64, len(v))
|
||||
for i := range v {
|
||||
ids[i] = v[i].ID
|
||||
}
|
||||
return _u.RemoveUsedCardIDs(ids...)
|
||||
}
|
||||
|
||||
// Save executes the query and returns the number of nodes affected by the update operation.
|
||||
func (_u *SysUserUpdate) Save(ctx context.Context) (int, error) {
|
||||
return withHooks(ctx, _u.sqlSave, _u.mutation, _u.hooks)
|
||||
@@ -455,6 +542,9 @@ func (_u *SysUserUpdate) sqlSave(ctx context.Context) (_node int, err error) {
|
||||
if value, ok := _u.mutation.Verify(); ok {
|
||||
_spec.SetField(sysuser.FieldVerify, field.TypeBool, value)
|
||||
}
|
||||
if value, ok := _u.mutation.InviteCashback(); ok {
|
||||
_spec.SetField(sysuser.FieldInviteCashback, field.TypeString, value)
|
||||
}
|
||||
if _u.mutation.ParentCleared() {
|
||||
edge := &sqlgraph.EdgeSpec{
|
||||
Rel: sqlgraph.M2O,
|
||||
@@ -738,6 +828,96 @@ func (_u *SysUserUpdate) sqlSave(ctx context.Context) (_node int, err error) {
|
||||
}
|
||||
_spec.Edges.Add = append(_spec.Edges.Add, edge)
|
||||
}
|
||||
if _u.mutation.CreatedCardsCleared() {
|
||||
edge := &sqlgraph.EdgeSpec{
|
||||
Rel: sqlgraph.O2M,
|
||||
Inverse: false,
|
||||
Table: sysuser.CreatedCardsTable,
|
||||
Columns: []string{sysuser.CreatedCardsColumn},
|
||||
Bidi: false,
|
||||
Target: &sqlgraph.EdgeTarget{
|
||||
IDSpec: sqlgraph.NewFieldSpec(syscard.FieldID, field.TypeInt64),
|
||||
},
|
||||
}
|
||||
_spec.Edges.Clear = append(_spec.Edges.Clear, edge)
|
||||
}
|
||||
if nodes := _u.mutation.RemovedCreatedCardsIDs(); len(nodes) > 0 && !_u.mutation.CreatedCardsCleared() {
|
||||
edge := &sqlgraph.EdgeSpec{
|
||||
Rel: sqlgraph.O2M,
|
||||
Inverse: false,
|
||||
Table: sysuser.CreatedCardsTable,
|
||||
Columns: []string{sysuser.CreatedCardsColumn},
|
||||
Bidi: false,
|
||||
Target: &sqlgraph.EdgeTarget{
|
||||
IDSpec: sqlgraph.NewFieldSpec(syscard.FieldID, field.TypeInt64),
|
||||
},
|
||||
}
|
||||
for _, k := range nodes {
|
||||
edge.Target.Nodes = append(edge.Target.Nodes, k)
|
||||
}
|
||||
_spec.Edges.Clear = append(_spec.Edges.Clear, edge)
|
||||
}
|
||||
if nodes := _u.mutation.CreatedCardsIDs(); len(nodes) > 0 {
|
||||
edge := &sqlgraph.EdgeSpec{
|
||||
Rel: sqlgraph.O2M,
|
||||
Inverse: false,
|
||||
Table: sysuser.CreatedCardsTable,
|
||||
Columns: []string{sysuser.CreatedCardsColumn},
|
||||
Bidi: false,
|
||||
Target: &sqlgraph.EdgeTarget{
|
||||
IDSpec: sqlgraph.NewFieldSpec(syscard.FieldID, field.TypeInt64),
|
||||
},
|
||||
}
|
||||
for _, k := range nodes {
|
||||
edge.Target.Nodes = append(edge.Target.Nodes, k)
|
||||
}
|
||||
_spec.Edges.Add = append(_spec.Edges.Add, edge)
|
||||
}
|
||||
if _u.mutation.UsedCardsCleared() {
|
||||
edge := &sqlgraph.EdgeSpec{
|
||||
Rel: sqlgraph.O2M,
|
||||
Inverse: false,
|
||||
Table: sysuser.UsedCardsTable,
|
||||
Columns: []string{sysuser.UsedCardsColumn},
|
||||
Bidi: false,
|
||||
Target: &sqlgraph.EdgeTarget{
|
||||
IDSpec: sqlgraph.NewFieldSpec(syscard.FieldID, field.TypeInt64),
|
||||
},
|
||||
}
|
||||
_spec.Edges.Clear = append(_spec.Edges.Clear, edge)
|
||||
}
|
||||
if nodes := _u.mutation.RemovedUsedCardsIDs(); len(nodes) > 0 && !_u.mutation.UsedCardsCleared() {
|
||||
edge := &sqlgraph.EdgeSpec{
|
||||
Rel: sqlgraph.O2M,
|
||||
Inverse: false,
|
||||
Table: sysuser.UsedCardsTable,
|
||||
Columns: []string{sysuser.UsedCardsColumn},
|
||||
Bidi: false,
|
||||
Target: &sqlgraph.EdgeTarget{
|
||||
IDSpec: sqlgraph.NewFieldSpec(syscard.FieldID, field.TypeInt64),
|
||||
},
|
||||
}
|
||||
for _, k := range nodes {
|
||||
edge.Target.Nodes = append(edge.Target.Nodes, k)
|
||||
}
|
||||
_spec.Edges.Clear = append(_spec.Edges.Clear, edge)
|
||||
}
|
||||
if nodes := _u.mutation.UsedCardsIDs(); len(nodes) > 0 {
|
||||
edge := &sqlgraph.EdgeSpec{
|
||||
Rel: sqlgraph.O2M,
|
||||
Inverse: false,
|
||||
Table: sysuser.UsedCardsTable,
|
||||
Columns: []string{sysuser.UsedCardsColumn},
|
||||
Bidi: false,
|
||||
Target: &sqlgraph.EdgeTarget{
|
||||
IDSpec: sqlgraph.NewFieldSpec(syscard.FieldID, field.TypeInt64),
|
||||
},
|
||||
}
|
||||
for _, k := range nodes {
|
||||
edge.Target.Nodes = append(edge.Target.Nodes, k)
|
||||
}
|
||||
_spec.Edges.Add = append(_spec.Edges.Add, edge)
|
||||
}
|
||||
if _node, err = sqlgraph.UpdateNodes(ctx, _u.driver, _spec); err != nil {
|
||||
if _, ok := err.(*sqlgraph.NotFoundError); ok {
|
||||
err = &NotFoundError{sysuser.Label}
|
||||
@@ -868,6 +1048,20 @@ func (_u *SysUserUpdateOne) SetNillableVerify(v *bool) *SysUserUpdateOne {
|
||||
return _u
|
||||
}
|
||||
|
||||
// SetInviteCashback sets the "invite_cashback" field.
|
||||
func (_u *SysUserUpdateOne) SetInviteCashback(v decimal.Decimal) *SysUserUpdateOne {
|
||||
_u.mutation.SetInviteCashback(v)
|
||||
return _u
|
||||
}
|
||||
|
||||
// SetNillableInviteCashback sets the "invite_cashback" field if the given value is not nil.
|
||||
func (_u *SysUserUpdateOne) SetNillableInviteCashback(v *decimal.Decimal) *SysUserUpdateOne {
|
||||
if v != nil {
|
||||
_u.SetInviteCashback(*v)
|
||||
}
|
||||
return _u
|
||||
}
|
||||
|
||||
// SetParentID sets the "parent" edge to the SysUser entity by ID.
|
||||
func (_u *SysUserUpdateOne) SetParentID(id int64) *SysUserUpdateOne {
|
||||
_u.mutation.SetParentID(id)
|
||||
@@ -981,6 +1175,36 @@ func (_u *SysUserUpdateOne) AddCpTaskLogs(v ...*CpTaskLog) *SysUserUpdateOne {
|
||||
return _u.AddCpTaskLogIDs(ids...)
|
||||
}
|
||||
|
||||
// AddCreatedCardIDs adds the "created_cards" edge to the SysCard entity by IDs.
|
||||
func (_u *SysUserUpdateOne) AddCreatedCardIDs(ids ...int64) *SysUserUpdateOne {
|
||||
_u.mutation.AddCreatedCardIDs(ids...)
|
||||
return _u
|
||||
}
|
||||
|
||||
// AddCreatedCards adds the "created_cards" edges to the SysCard entity.
|
||||
func (_u *SysUserUpdateOne) AddCreatedCards(v ...*SysCard) *SysUserUpdateOne {
|
||||
ids := make([]int64, len(v))
|
||||
for i := range v {
|
||||
ids[i] = v[i].ID
|
||||
}
|
||||
return _u.AddCreatedCardIDs(ids...)
|
||||
}
|
||||
|
||||
// AddUsedCardIDs adds the "used_cards" edge to the SysCard entity by IDs.
|
||||
func (_u *SysUserUpdateOne) AddUsedCardIDs(ids ...int64) *SysUserUpdateOne {
|
||||
_u.mutation.AddUsedCardIDs(ids...)
|
||||
return _u
|
||||
}
|
||||
|
||||
// AddUsedCards adds the "used_cards" edges to the SysCard entity.
|
||||
func (_u *SysUserUpdateOne) AddUsedCards(v ...*SysCard) *SysUserUpdateOne {
|
||||
ids := make([]int64, len(v))
|
||||
for i := range v {
|
||||
ids[i] = v[i].ID
|
||||
}
|
||||
return _u.AddUsedCardIDs(ids...)
|
||||
}
|
||||
|
||||
// Mutation returns the SysUserMutation object of the builder.
|
||||
func (_u *SysUserUpdateOne) Mutation() *SysUserMutation {
|
||||
return _u.mutation
|
||||
@@ -1103,6 +1327,48 @@ func (_u *SysUserUpdateOne) RemoveCpTaskLogs(v ...*CpTaskLog) *SysUserUpdateOne
|
||||
return _u.RemoveCpTaskLogIDs(ids...)
|
||||
}
|
||||
|
||||
// ClearCreatedCards clears all "created_cards" edges to the SysCard entity.
|
||||
func (_u *SysUserUpdateOne) ClearCreatedCards() *SysUserUpdateOne {
|
||||
_u.mutation.ClearCreatedCards()
|
||||
return _u
|
||||
}
|
||||
|
||||
// RemoveCreatedCardIDs removes the "created_cards" edge to SysCard entities by IDs.
|
||||
func (_u *SysUserUpdateOne) RemoveCreatedCardIDs(ids ...int64) *SysUserUpdateOne {
|
||||
_u.mutation.RemoveCreatedCardIDs(ids...)
|
||||
return _u
|
||||
}
|
||||
|
||||
// RemoveCreatedCards removes "created_cards" edges to SysCard entities.
|
||||
func (_u *SysUserUpdateOne) RemoveCreatedCards(v ...*SysCard) *SysUserUpdateOne {
|
||||
ids := make([]int64, len(v))
|
||||
for i := range v {
|
||||
ids[i] = v[i].ID
|
||||
}
|
||||
return _u.RemoveCreatedCardIDs(ids...)
|
||||
}
|
||||
|
||||
// ClearUsedCards clears all "used_cards" edges to the SysCard entity.
|
||||
func (_u *SysUserUpdateOne) ClearUsedCards() *SysUserUpdateOne {
|
||||
_u.mutation.ClearUsedCards()
|
||||
return _u
|
||||
}
|
||||
|
||||
// RemoveUsedCardIDs removes the "used_cards" edge to SysCard entities by IDs.
|
||||
func (_u *SysUserUpdateOne) RemoveUsedCardIDs(ids ...int64) *SysUserUpdateOne {
|
||||
_u.mutation.RemoveUsedCardIDs(ids...)
|
||||
return _u
|
||||
}
|
||||
|
||||
// RemoveUsedCards removes "used_cards" edges to SysCard entities.
|
||||
func (_u *SysUserUpdateOne) RemoveUsedCards(v ...*SysCard) *SysUserUpdateOne {
|
||||
ids := make([]int64, len(v))
|
||||
for i := range v {
|
||||
ids[i] = v[i].ID
|
||||
}
|
||||
return _u.RemoveUsedCardIDs(ids...)
|
||||
}
|
||||
|
||||
// Where appends a list predicates to the SysUserUpdate builder.
|
||||
func (_u *SysUserUpdateOne) Where(ps ...predicate.SysUser) *SysUserUpdateOne {
|
||||
_u.mutation.Where(ps...)
|
||||
@@ -1209,6 +1475,9 @@ func (_u *SysUserUpdateOne) sqlSave(ctx context.Context) (_node *SysUser, err er
|
||||
if value, ok := _u.mutation.Verify(); ok {
|
||||
_spec.SetField(sysuser.FieldVerify, field.TypeBool, value)
|
||||
}
|
||||
if value, ok := _u.mutation.InviteCashback(); ok {
|
||||
_spec.SetField(sysuser.FieldInviteCashback, field.TypeString, value)
|
||||
}
|
||||
if _u.mutation.ParentCleared() {
|
||||
edge := &sqlgraph.EdgeSpec{
|
||||
Rel: sqlgraph.M2O,
|
||||
@@ -1492,6 +1761,96 @@ func (_u *SysUserUpdateOne) sqlSave(ctx context.Context) (_node *SysUser, err er
|
||||
}
|
||||
_spec.Edges.Add = append(_spec.Edges.Add, edge)
|
||||
}
|
||||
if _u.mutation.CreatedCardsCleared() {
|
||||
edge := &sqlgraph.EdgeSpec{
|
||||
Rel: sqlgraph.O2M,
|
||||
Inverse: false,
|
||||
Table: sysuser.CreatedCardsTable,
|
||||
Columns: []string{sysuser.CreatedCardsColumn},
|
||||
Bidi: false,
|
||||
Target: &sqlgraph.EdgeTarget{
|
||||
IDSpec: sqlgraph.NewFieldSpec(syscard.FieldID, field.TypeInt64),
|
||||
},
|
||||
}
|
||||
_spec.Edges.Clear = append(_spec.Edges.Clear, edge)
|
||||
}
|
||||
if nodes := _u.mutation.RemovedCreatedCardsIDs(); len(nodes) > 0 && !_u.mutation.CreatedCardsCleared() {
|
||||
edge := &sqlgraph.EdgeSpec{
|
||||
Rel: sqlgraph.O2M,
|
||||
Inverse: false,
|
||||
Table: sysuser.CreatedCardsTable,
|
||||
Columns: []string{sysuser.CreatedCardsColumn},
|
||||
Bidi: false,
|
||||
Target: &sqlgraph.EdgeTarget{
|
||||
IDSpec: sqlgraph.NewFieldSpec(syscard.FieldID, field.TypeInt64),
|
||||
},
|
||||
}
|
||||
for _, k := range nodes {
|
||||
edge.Target.Nodes = append(edge.Target.Nodes, k)
|
||||
}
|
||||
_spec.Edges.Clear = append(_spec.Edges.Clear, edge)
|
||||
}
|
||||
if nodes := _u.mutation.CreatedCardsIDs(); len(nodes) > 0 {
|
||||
edge := &sqlgraph.EdgeSpec{
|
||||
Rel: sqlgraph.O2M,
|
||||
Inverse: false,
|
||||
Table: sysuser.CreatedCardsTable,
|
||||
Columns: []string{sysuser.CreatedCardsColumn},
|
||||
Bidi: false,
|
||||
Target: &sqlgraph.EdgeTarget{
|
||||
IDSpec: sqlgraph.NewFieldSpec(syscard.FieldID, field.TypeInt64),
|
||||
},
|
||||
}
|
||||
for _, k := range nodes {
|
||||
edge.Target.Nodes = append(edge.Target.Nodes, k)
|
||||
}
|
||||
_spec.Edges.Add = append(_spec.Edges.Add, edge)
|
||||
}
|
||||
if _u.mutation.UsedCardsCleared() {
|
||||
edge := &sqlgraph.EdgeSpec{
|
||||
Rel: sqlgraph.O2M,
|
||||
Inverse: false,
|
||||
Table: sysuser.UsedCardsTable,
|
||||
Columns: []string{sysuser.UsedCardsColumn},
|
||||
Bidi: false,
|
||||
Target: &sqlgraph.EdgeTarget{
|
||||
IDSpec: sqlgraph.NewFieldSpec(syscard.FieldID, field.TypeInt64),
|
||||
},
|
||||
}
|
||||
_spec.Edges.Clear = append(_spec.Edges.Clear, edge)
|
||||
}
|
||||
if nodes := _u.mutation.RemovedUsedCardsIDs(); len(nodes) > 0 && !_u.mutation.UsedCardsCleared() {
|
||||
edge := &sqlgraph.EdgeSpec{
|
||||
Rel: sqlgraph.O2M,
|
||||
Inverse: false,
|
||||
Table: sysuser.UsedCardsTable,
|
||||
Columns: []string{sysuser.UsedCardsColumn},
|
||||
Bidi: false,
|
||||
Target: &sqlgraph.EdgeTarget{
|
||||
IDSpec: sqlgraph.NewFieldSpec(syscard.FieldID, field.TypeInt64),
|
||||
},
|
||||
}
|
||||
for _, k := range nodes {
|
||||
edge.Target.Nodes = append(edge.Target.Nodes, k)
|
||||
}
|
||||
_spec.Edges.Clear = append(_spec.Edges.Clear, edge)
|
||||
}
|
||||
if nodes := _u.mutation.UsedCardsIDs(); len(nodes) > 0 {
|
||||
edge := &sqlgraph.EdgeSpec{
|
||||
Rel: sqlgraph.O2M,
|
||||
Inverse: false,
|
||||
Table: sysuser.UsedCardsTable,
|
||||
Columns: []string{sysuser.UsedCardsColumn},
|
||||
Bidi: false,
|
||||
Target: &sqlgraph.EdgeTarget{
|
||||
IDSpec: sqlgraph.NewFieldSpec(syscard.FieldID, field.TypeInt64),
|
||||
},
|
||||
}
|
||||
for _, k := range nodes {
|
||||
edge.Target.Nodes = append(edge.Target.Nodes, k)
|
||||
}
|
||||
_spec.Edges.Add = append(_spec.Edges.Add, edge)
|
||||
}
|
||||
_node = &SysUser{config: _u.config}
|
||||
_spec.Assign = _node.assignValues
|
||||
_spec.ScanValues = _node.scanValues
|
||||
|
||||
@@ -22,6 +22,8 @@ type Tx struct {
|
||||
CpUser *CpUserClient
|
||||
// SysAgent is the client for interacting with the SysAgent builders.
|
||||
SysAgent *SysAgentClient
|
||||
// SysCard is the client for interacting with the SysCard builders.
|
||||
SysCard *SysCardClient
|
||||
// SysMenu is the client for interacting with the SysMenu builders.
|
||||
SysMenu *SysMenuClient
|
||||
// SysRole is the client for interacting with the SysRole builders.
|
||||
@@ -166,6 +168,7 @@ func (tx *Tx) init() {
|
||||
tx.CpTaskLog = NewCpTaskLogClient(tx.config)
|
||||
tx.CpUser = NewCpUserClient(tx.config)
|
||||
tx.SysAgent = NewSysAgentClient(tx.config)
|
||||
tx.SysCard = NewSysCardClient(tx.config)
|
||||
tx.SysMenu = NewSysMenuClient(tx.config)
|
||||
tx.SysRole = NewSysRoleClient(tx.config)
|
||||
tx.SysUser = NewSysUserClient(tx.config)
|
||||
|
||||
@@ -8,6 +8,7 @@ import (
|
||||
"fmt"
|
||||
"html/template"
|
||||
"likedream-goframe/internal/cst"
|
||||
"likedream-goframe/internal/framework/logger"
|
||||
"likedream-goframe/internal/model/email"
|
||||
"likedream-goframe/internal/queue"
|
||||
"likedream-goframe/internal/utils"
|
||||
@@ -57,19 +58,22 @@ func NewV1() *EmailServiceV1 {
|
||||
}
|
||||
|
||||
// SendSignupEmail 发送注册成功邮件
|
||||
func (s *EmailServiceV1) SendSignupEmail(ctx context.Context, toEmail, username string) *utils.Response[any] {
|
||||
func (s *EmailServiceV1) SendSignupEmail(ctx context.Context, toEmail, username string, token string) *utils.Response[any] {
|
||||
if s.config.SMTPUsername == "" || s.config.SMTPPassword == "" {
|
||||
logger.Logger.Error("邮件服务未配置")
|
||||
return utils.FailBusiness("邮件服务未配置")
|
||||
}
|
||||
|
||||
subject := fmt.Sprintf("欢迎注册%s", cst.AppName)
|
||||
body, err := s.renderSignupEmailTemplate(username)
|
||||
body, err := s.renderSignupEmailTemplate(username, token)
|
||||
if err != nil {
|
||||
logger.Logger.Error("邮件模板渲染失败")
|
||||
return utils.FailBusiness(fmt.Sprintf("邮件模板渲染失败: %v", err))
|
||||
}
|
||||
|
||||
err = s.sendEmail(ctx, toEmail, subject, body)
|
||||
if err != nil {
|
||||
logger.Logger.Error("邮件发送失败")
|
||||
return utils.FailBusiness(fmt.Sprintf("邮件发送失败: %v", err))
|
||||
}
|
||||
|
||||
@@ -145,16 +149,19 @@ func (s *EmailServiceV1) getTemplates() (*template.Template, error) {
|
||||
}
|
||||
|
||||
// renderSignupEmailTemplate 渲染注册邮件模板
|
||||
func (s *EmailServiceV1) renderSignupEmailTemplate(username string) (string, error) {
|
||||
func (s *EmailServiceV1) renderSignupEmailTemplate(username string, token string) (string, error) {
|
||||
tmpl, err := s.getTemplates()
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
data := NewSignupTemplateData(username, cst.AppName, cst.AppCopyright)
|
||||
get, err := g.Cfg().Get(gctx.New(), cst.ConfigEmailConfirmBaseUrl)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
data := NewSignupTemplateData(username, cst.AppName, cst.AppCopyright, get.String()+token)
|
||||
|
||||
var buf bytes.Buffer
|
||||
err = tmpl.ExecuteTemplate(&buf, "signup.gohtml", data)
|
||||
err = tmpl.ExecuteTemplate(&buf, "signup_confirm.gohtml", data)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("渲染注册邮件模板失败: %v", err)
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@ func TestEmailTemplates(t *testing.T) {
|
||||
|
||||
// 测试注册邮件模板
|
||||
t.Run("signup_email_template", func(t *testing.T) {
|
||||
body, err := service.renderSignupEmailTemplate("测试用户")
|
||||
body, err := service.renderSignupEmailTemplate("测试用户", "")
|
||||
if err != nil {
|
||||
t.Fatalf("渲染注册邮件模板失败: %v", err)
|
||||
}
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package email
|
||||
|
||||
import "likedream-goframe/internal/model/email"
|
||||
import (
|
||||
"likedream-goframe/internal/model/email"
|
||||
)
|
||||
|
||||
// BaseTemplateData 基础模板数据
|
||||
type BaseTemplateData struct {
|
||||
@@ -15,11 +17,12 @@ type BaseTemplateData struct {
|
||||
// SignupTemplateData 注册邮件模板数据
|
||||
type SignupTemplateData struct {
|
||||
BaseTemplateData
|
||||
Username string `json:"username"` // 用户名
|
||||
Username string `json:"username"` // 用户名
|
||||
VerificationURL string `json:"verification_url"`
|
||||
}
|
||||
|
||||
// NewSignupTemplateData 创建注册邮件模板数据
|
||||
func NewSignupTemplateData(username, appName, copyright string) *SignupTemplateData {
|
||||
func NewSignupTemplateData(username, appName, copyright string, verificationURL string) *SignupTemplateData {
|
||||
return &SignupTemplateData{
|
||||
BaseTemplateData: BaseTemplateData{
|
||||
Title: "欢迎注册" + appName,
|
||||
@@ -29,7 +32,8 @@ func NewSignupTemplateData(username, appName, copyright string) *SignupTemplateD
|
||||
AppName: appName,
|
||||
AppCopyright: copyright,
|
||||
},
|
||||
Username: username,
|
||||
Username: username,
|
||||
VerificationURL: verificationURL,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,57 @@
|
||||
{{template "layout" .}}
|
||||
|
||||
{{define "extra-styles"}}
|
||||
<style>
|
||||
.feature-list {
|
||||
background: linear-gradient(135deg, #f8faff 0%, #f1f5f9 100%);
|
||||
border-radius: 12px;
|
||||
padding: 25px;
|
||||
margin: 25px 0;
|
||||
border-left: 4px solid #667eea;
|
||||
}
|
||||
|
||||
.feature-list ul {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.feature-list li {
|
||||
padding: 8px 0;
|
||||
position: relative;
|
||||
padding-left: 30px;
|
||||
font-size: 15px;
|
||||
}
|
||||
|
||||
.feature-list li::before {
|
||||
content: '✓';
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 8px;
|
||||
color: #667eea;
|
||||
font-weight: bold;
|
||||
font-size: 16px;
|
||||
}
|
||||
</style>
|
||||
{{end}}
|
||||
|
||||
{{define "content"}}
|
||||
<h2>亲爱的 <span class="highlight-text">{{.Username}}</span>,您好!</h2>
|
||||
<p>感谢您注册<strong>{{.AppName}}</strong>账户!请点击下面的链接完成邮箱验证:</p>
|
||||
|
||||
<div style="text-align: center; margin: 30px 0;">
|
||||
<a href="{{.VerificationURL}}"
|
||||
style="background-color: #007bff; color: white; padding: 12px 24px;
|
||||
text-decoration: none; border-radius: 4px; display: inline-block;">
|
||||
验证邮箱地址
|
||||
</a>
|
||||
</div>
|
||||
<p>如果按钮无法点击,请复制以下链接到浏览器地址栏:</p>
|
||||
<p style="word-break: break-all; color: #666;">{{.VerificationURL}}</p>
|
||||
|
||||
<p><strong>链接有效期:24小时</strong></p>
|
||||
|
||||
<hr>
|
||||
|
||||
<p>如果您在使用过程中遇到任何问题,请随时联系我们的技术支持团队。我们将竭诚为您服务!</p>
|
||||
<p><strong>祝您使用愉快!</strong> 🌟</p>
|
||||
{{end}}
|
||||
@@ -32,7 +32,7 @@
|
||||
background: #f8faff;
|
||||
border-radius: 12px;
|
||||
padding: 20px;
|
||||
border-left: 3px solid {{.StatusColor}};
|
||||
{{/*border-left: 3px solid {{.StatusColor}};*/}}
|
||||
}
|
||||
|
||||
.details-list ul {
|
||||
|
||||
@@ -77,6 +77,7 @@ func (s *MenuServiceV1) Update(ctx context.Context, req *v1.MenuUpdateReq) *util
|
||||
SetType(req.Type).
|
||||
SetLink(req.Link).
|
||||
SetPermission(req.Permission).
|
||||
SetComponent(req.Component).
|
||||
SetRoute(req.Route).
|
||||
SetHidden(req.Hidden).
|
||||
SetIcon(req.Icon).
|
||||
|
||||
@@ -2,13 +2,19 @@ package user_login
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
v1 "likedream-goframe/internal/api/v1"
|
||||
"likedream-goframe/internal/db"
|
||||
"likedream-goframe/internal/ent"
|
||||
"likedream-goframe/internal/ent/syscard"
|
||||
"likedream-goframe/internal/ent/sysmenu"
|
||||
"likedream-goframe/internal/ent/sysrole"
|
||||
"likedream-goframe/internal/ent/sysuser"
|
||||
"likedream-goframe/internal/utils"
|
||||
"strings"
|
||||
|
||||
"github.com/samber/oops"
|
||||
"github.com/shopspring/decimal"
|
||||
)
|
||||
|
||||
// UserInfoServiceV1 用户登录实现service
|
||||
@@ -50,6 +56,83 @@ func (s *UserInfoServiceV1) UserInfo(ctx context.Context) *utils.Response[any] {
|
||||
return utils.SuccessWithData[any](userInfo)
|
||||
}
|
||||
|
||||
func (s *UserInfoServiceV1) Profile(ctx context.Context, req *v1.CommonReq) *utils.Response[any] {
|
||||
user := utils.GetUserInfoFromCtx(ctx)
|
||||
userInfo := db.Global.SysUser.Query().Where(sysuser.ID(user.ID)).WithParent().WithAgent().WithRoles().FirstX(ctx)
|
||||
inviteCount := db.Global.SysUser.Query().Where(sysuser.HasParentWith(sysuser.ID(user.ID))).CountX(ctx)
|
||||
profileInfo := &v1.UserProfileRes{
|
||||
ID: userInfo.ID,
|
||||
Username: userInfo.Username,
|
||||
Email: userInfo.Email,
|
||||
Avatar: fmt.Sprintf("https://q1.qlogo.cn/g?b=qq&nk=%s&s=100", strings.Split(userInfo.Email, "@qq.com")[0]),
|
||||
InviteCode: userInfo.InviteCode,
|
||||
InviteCount: inviteCount,
|
||||
InviteCashback: userInfo.InviteCashback,
|
||||
Balance: userInfo.Balance,
|
||||
}
|
||||
if userInfo.Edges.Parent != nil {
|
||||
profileInfo.ParentUsername = userInfo.Edges.Parent.Username
|
||||
profileInfo.ParentEmail = userInfo.Edges.Parent.Email
|
||||
}
|
||||
if userInfo.Edges.Agent != nil {
|
||||
profileInfo.Rate = userInfo.Edges.Agent.Rate
|
||||
profileInfo.Level = userInfo.Edges.Agent.Level
|
||||
}
|
||||
return utils.SuccessWithData[any](profileInfo)
|
||||
}
|
||||
|
||||
func (s *UserInfoServiceV1) ResetPassword(ctx context.Context, req *v1.ResetPasswordReq) *utils.Response[any] {
|
||||
user := utils.GetUserInfoFromCtx(ctx)
|
||||
var pwd []string
|
||||
db.Global.SysUser.Query().Where(sysuser.ID(user.ID)).Select(sysuser.FieldPassword).ScanX(ctx, &pwd)
|
||||
if utils.PasswordCompare(req.OldPassword, pwd[0]) {
|
||||
if req.OldPassword == pwd[0] {
|
||||
return utils.FailParam("新密码不能与旧密码相同")
|
||||
}
|
||||
if req.ConfirmPassword == req.NewPassword {
|
||||
db.Global.SysUser.UpdateOneID(user.ID).SetPassword(utils.PasswordBcryptHash(req.NewPassword)).ExecX(ctx)
|
||||
return utils.SuccessWithMsg("密码修改成功")
|
||||
}
|
||||
return utils.FailParam("两次密码不一致")
|
||||
|
||||
}
|
||||
return utils.FailParam("密码错误")
|
||||
|
||||
}
|
||||
|
||||
func (s *UserInfoServiceV1) UsedCardList(ctx context.Context, req *v1.CommonPageReq) *utils.Response[[]*ent.SysCard] {
|
||||
user := utils.GetUserInfoFromCtx(ctx)
|
||||
query := db.Global.SysCard.Query().Where(syscard.UsedID(user.ID))
|
||||
//查询总数
|
||||
total := query.CountX(ctx)
|
||||
query.Limit(req.Size).Offset(req.Page * req.Size)
|
||||
list := query.AllX(ctx)
|
||||
return utils.SuccessWithTotal[[]*ent.SysCard](list, total)
|
||||
}
|
||||
|
||||
func (s *UserInfoServiceV1) CardRecharge(ctx context.Context, req *v1.CardRechargeReq) *utils.Response[any] {
|
||||
user := utils.GetUserInfoFromCtx(ctx)
|
||||
card, err := db.Global.SysCard.Query().Where(syscard.Content(req.Card)).First(ctx)
|
||||
if ent.IsNotFound(err) {
|
||||
return utils.FailParam("卡密错误")
|
||||
}
|
||||
if card.Status != 1 {
|
||||
return utils.FailParam("卡密错误")
|
||||
}
|
||||
tx, err := db.Global.Tx(ctx)
|
||||
utils.OkOrPanic(err)
|
||||
tx.SysCard.UpdateOneID(card.ID).SetStatus(2).SetUsedID(user.ID).ExecX(ctx)
|
||||
tx.SysUser.UpdateOneID(user.ID).SetBalance(user.Balance.Add(decimal.NewFromUint64(card.Value))).ExecX(ctx)
|
||||
err = tx.Commit()
|
||||
utils.OkOrPanic(err, func(err error) error {
|
||||
return oops.
|
||||
WithContext(ctx).
|
||||
With("更新用户余额失败").
|
||||
Wrap(err)
|
||||
})
|
||||
return utils.SuccessWithMsg("充值成功")
|
||||
}
|
||||
|
||||
func buildTreeMenu(list []*ent.SysMenu, parentId int64) []*v1.UserMenuRes {
|
||||
var menuList []*v1.UserMenuRes
|
||||
for _, menu := range list {
|
||||
|
||||
@@ -2,14 +2,18 @@ package user_login
|
||||
|
||||
import (
|
||||
"context"
|
||||
"crypto/rand"
|
||||
"encoding/base64"
|
||||
"likedream-goframe/internal/api/v1"
|
||||
"likedream-goframe/internal/cst"
|
||||
"likedream-goframe/internal/db"
|
||||
"likedream-goframe/internal/ent"
|
||||
"likedream-goframe/internal/ent/sysrole"
|
||||
"likedream-goframe/internal/ent/sysuser"
|
||||
"likedream-goframe/internal/redis"
|
||||
"likedream-goframe/internal/service/email"
|
||||
"likedream-goframe/internal/utils"
|
||||
"time"
|
||||
|
||||
"github.com/gogf/gf/v2/net/ghttp"
|
||||
"github.com/samber/oops"
|
||||
@@ -32,7 +36,10 @@ func (s *UserLoginServiceV1) Login(ctx context.Context, req *v1.UserLoginReq) *u
|
||||
return utils.FailParam("用户名或密码错误")
|
||||
}
|
||||
if !user.Verify {
|
||||
return utils.FailParam("用户未激活")
|
||||
return utils.FailParam("当前用户未验证")
|
||||
}
|
||||
if user.Block {
|
||||
return utils.FailParam("当前用户被封禁")
|
||||
}
|
||||
r := ghttp.RequestFromCtx(ctx)
|
||||
r.Response.Header().Set(cst.AuthorizationKey, utils.GenerateToken(user.ID))
|
||||
@@ -41,6 +48,10 @@ func (s *UserLoginServiceV1) Login(ctx context.Context, req *v1.UserLoginReq) *u
|
||||
|
||||
func (s *UserLoginServiceV1) Register(ctx context.Context, req *v1.UserRegisterReq) *utils.Response[any] {
|
||||
//邀请码查询
|
||||
var parent *ent.SysUser
|
||||
if req.InviteCode != "" {
|
||||
parent = db.Global.SysUser.Query().Where(sysuser.InviteCodeEQ(req.InviteCode)).OnlyX(ctx)
|
||||
}
|
||||
tx, err := db.Global.Tx(ctx)
|
||||
utils.OkOrPanic(err, func(err error) error {
|
||||
return oops.
|
||||
@@ -48,10 +59,6 @@ func (s *UserLoginServiceV1) Register(ctx context.Context, req *v1.UserRegisterR
|
||||
With("创建事务失败").
|
||||
Wrap(err)
|
||||
})
|
||||
var parent *ent.SysUser
|
||||
if req.InviteCode != "" {
|
||||
parent = tx.SysUser.Query().Where(sysuser.InviteCodeEQ(req.InviteCode)).OnlyX(ctx)
|
||||
}
|
||||
// 查询用户名或邮箱是否存在
|
||||
if tx.SysUser.Query().Where(sysuser.Or(sysuser.UsernameEQ(req.Username), sysuser.EmailEQ(req.Email))).ExistX(ctx) {
|
||||
return utils.FailParam("用户名或邮箱已存在")
|
||||
@@ -77,10 +84,14 @@ func (s *UserLoginServiceV1) Register(ctx context.Context, req *v1.UserRegisterR
|
||||
|
||||
// 注册成功后发送欢迎邮件(异步发送,不影响注册结果)
|
||||
go func() {
|
||||
token := make([]byte, 32)
|
||||
_, _ = rand.Read(token)
|
||||
tokenStr := base64.URLEncoding.EncodeToString(token)
|
||||
redis.GetClient().Set(ctx, cst.RedisVerifyCode+tokenStr, req.Email, time.Duration(cst.RedisVerifyCodeExpire))
|
||||
// 创建新的context避免原context被取消
|
||||
emailCtx := context.Background()
|
||||
emailService := email.NewV1()
|
||||
emailService.SendSignupEmail(emailCtx, req.Email, req.Username)
|
||||
emailService.SendSignupEmail(emailCtx, req.Email, req.Username, tokenStr)
|
||||
}()
|
||||
|
||||
return utils.SuccessWithMsg("注册成功")
|
||||
|
||||
@@ -8,6 +8,7 @@ func PasswordBcryptHash(password string) string {
|
||||
return string(hash)
|
||||
}
|
||||
|
||||
// hash比较密码 相同为true不同为false
|
||||
func PasswordCompare(password, hash string) bool {
|
||||
return bcrypt.CompareHashAndPassword([]byte(hash), []byte(password)) == nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user