Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
陈曦
sub2api
Commits
1a641392
Commit
1a641392
authored
Jan 10, 2026
by
cyhhao
Browse files
Merge up/main
parents
36b817d0
24d19a5f
Changes
174
Hide whitespace changes
Inline
Side-by-side
backend/ent/schema/promo_code.go
0 → 100644
View file @
1a641392
package
schema
import
(
"time"
"github.com/Wei-Shaw/sub2api/internal/service"
"entgo.io/ent"
"entgo.io/ent/dialect"
"entgo.io/ent/dialect/entsql"
"entgo.io/ent/schema"
"entgo.io/ent/schema/edge"
"entgo.io/ent/schema/field"
"entgo.io/ent/schema/index"
)
// PromoCode holds the schema definition for the PromoCode entity.
//
// 注册优惠码:用户注册时使用,可获得赠送余额
// 与 RedeemCode 不同,PromoCode 支持多次使用(有使用次数限制)
//
// 删除策略:硬删除
type
PromoCode
struct
{
ent
.
Schema
}
func
(
PromoCode
)
Annotations
()
[]
schema
.
Annotation
{
return
[]
schema
.
Annotation
{
entsql
.
Annotation
{
Table
:
"promo_codes"
},
}
}
func
(
PromoCode
)
Fields
()
[]
ent
.
Field
{
return
[]
ent
.
Field
{
field
.
String
(
"code"
)
.
MaxLen
(
32
)
.
NotEmpty
()
.
Unique
()
.
Comment
(
"优惠码"
),
field
.
Float
(
"bonus_amount"
)
.
SchemaType
(
map
[
string
]
string
{
dialect
.
Postgres
:
"decimal(20,8)"
})
.
Default
(
0
)
.
Comment
(
"赠送余额金额"
),
field
.
Int
(
"max_uses"
)
.
Default
(
0
)
.
Comment
(
"最大使用次数,0表示无限制"
),
field
.
Int
(
"used_count"
)
.
Default
(
0
)
.
Comment
(
"已使用次数"
),
field
.
String
(
"status"
)
.
MaxLen
(
20
)
.
Default
(
service
.
PromoCodeStatusActive
)
.
Comment
(
"状态: active, disabled"
),
field
.
Time
(
"expires_at"
)
.
Optional
()
.
Nillable
()
.
SchemaType
(
map
[
string
]
string
{
dialect
.
Postgres
:
"timestamptz"
})
.
Comment
(
"过期时间,null表示永不过期"
),
field
.
String
(
"notes"
)
.
Optional
()
.
Nillable
()
.
SchemaType
(
map
[
string
]
string
{
dialect
.
Postgres
:
"text"
})
.
Comment
(
"备注"
),
field
.
Time
(
"created_at"
)
.
Immutable
()
.
Default
(
time
.
Now
)
.
SchemaType
(
map
[
string
]
string
{
dialect
.
Postgres
:
"timestamptz"
}),
field
.
Time
(
"updated_at"
)
.
Default
(
time
.
Now
)
.
UpdateDefault
(
time
.
Now
)
.
SchemaType
(
map
[
string
]
string
{
dialect
.
Postgres
:
"timestamptz"
}),
}
}
func
(
PromoCode
)
Edges
()
[]
ent
.
Edge
{
return
[]
ent
.
Edge
{
edge
.
To
(
"usage_records"
,
PromoCodeUsage
.
Type
),
}
}
func
(
PromoCode
)
Indexes
()
[]
ent
.
Index
{
return
[]
ent
.
Index
{
// code 字段已在 Fields() 中声明 Unique(),无需重复索引
index
.
Fields
(
"status"
),
index
.
Fields
(
"expires_at"
),
}
}
backend/ent/schema/promo_code_usage.go
0 → 100644
View file @
1a641392
package
schema
import
(
"time"
"entgo.io/ent"
"entgo.io/ent/dialect"
"entgo.io/ent/dialect/entsql"
"entgo.io/ent/schema"
"entgo.io/ent/schema/edge"
"entgo.io/ent/schema/field"
"entgo.io/ent/schema/index"
)
// PromoCodeUsage holds the schema definition for the PromoCodeUsage entity.
//
// 优惠码使用记录:记录每个用户使用优惠码的情况
type
PromoCodeUsage
struct
{
ent
.
Schema
}
func
(
PromoCodeUsage
)
Annotations
()
[]
schema
.
Annotation
{
return
[]
schema
.
Annotation
{
entsql
.
Annotation
{
Table
:
"promo_code_usages"
},
}
}
func
(
PromoCodeUsage
)
Fields
()
[]
ent
.
Field
{
return
[]
ent
.
Field
{
field
.
Int64
(
"promo_code_id"
)
.
Comment
(
"优惠码ID"
),
field
.
Int64
(
"user_id"
)
.
Comment
(
"使用用户ID"
),
field
.
Float
(
"bonus_amount"
)
.
SchemaType
(
map
[
string
]
string
{
dialect
.
Postgres
:
"decimal(20,8)"
})
.
Comment
(
"实际赠送金额"
),
field
.
Time
(
"used_at"
)
.
Default
(
time
.
Now
)
.
SchemaType
(
map
[
string
]
string
{
dialect
.
Postgres
:
"timestamptz"
})
.
Comment
(
"使用时间"
),
}
}
func
(
PromoCodeUsage
)
Edges
()
[]
ent
.
Edge
{
return
[]
ent
.
Edge
{
edge
.
From
(
"promo_code"
,
PromoCode
.
Type
)
.
Ref
(
"usage_records"
)
.
Field
(
"promo_code_id"
)
.
Required
()
.
Unique
(),
edge
.
From
(
"user"
,
User
.
Type
)
.
Ref
(
"promo_code_usages"
)
.
Field
(
"user_id"
)
.
Required
()
.
Unique
(),
}
}
func
(
PromoCodeUsage
)
Indexes
()
[]
ent
.
Index
{
return
[]
ent
.
Index
{
index
.
Fields
(
"promo_code_id"
),
index
.
Fields
(
"user_id"
),
// 每个用户每个优惠码只能使用一次
index
.
Fields
(
"promo_code_id"
,
"user_id"
)
.
Unique
(),
}
}
backend/ent/schema/usage_log.go
View file @
1a641392
...
...
@@ -100,6 +100,10 @@ func (UsageLog) Fields() []ent.Field {
MaxLen
(
512
)
.
Optional
()
.
Nillable
(),
field
.
String
(
"ip_address"
)
.
MaxLen
(
45
)
.
// 支持 IPv6
Optional
()
.
Nillable
(),
// 图片生成字段(仅 gemini-3-pro-image 等图片模型使用)
field
.
Int
(
"image_count"
)
.
...
...
backend/ent/schema/user.go
View file @
1a641392
...
...
@@ -74,6 +74,7 @@ func (User) Edges() []ent.Edge {
Through
(
"user_allowed_groups"
,
UserAllowedGroup
.
Type
),
edge
.
To
(
"usage_logs"
,
UsageLog
.
Type
),
edge
.
To
(
"attribute_values"
,
UserAttributeValue
.
Type
),
edge
.
To
(
"promo_code_usages"
,
PromoCodeUsage
.
Type
),
}
}
...
...
backend/ent/setting_query.go
View file @
1a641392
...
...
@@ -8,6 +8,7 @@ import (
"math"
"entgo.io/ent"
"entgo.io/ent/dialect"
"entgo.io/ent/dialect/sql"
"entgo.io/ent/dialect/sql/sqlgraph"
"entgo.io/ent/schema/field"
...
...
@@ -22,6 +23,7 @@ type SettingQuery struct {
order
[]
setting
.
OrderOption
inters
[]
Interceptor
predicates
[]
predicate
.
Setting
modifiers
[]
func
(
*
sql
.
Selector
)
// intermediate query (i.e. traversal path).
sql
*
sql
.
Selector
path
func
(
context
.
Context
)
(
*
sql
.
Selector
,
error
)
...
...
@@ -343,6 +345,9 @@ func (_q *SettingQuery) sqlAll(ctx context.Context, hooks ...queryHook) ([]*Sett
nodes
=
append
(
nodes
,
node
)
return
node
.
assignValues
(
columns
,
values
)
}
if
len
(
_q
.
modifiers
)
>
0
{
_spec
.
Modifiers
=
_q
.
modifiers
}
for
i
:=
range
hooks
{
hooks
[
i
](
ctx
,
_spec
)
}
...
...
@@ -357,6 +362,9 @@ func (_q *SettingQuery) sqlAll(ctx context.Context, hooks ...queryHook) ([]*Sett
func
(
_q
*
SettingQuery
)
sqlCount
(
ctx
context
.
Context
)
(
int
,
error
)
{
_spec
:=
_q
.
querySpec
()
if
len
(
_q
.
modifiers
)
>
0
{
_spec
.
Modifiers
=
_q
.
modifiers
}
_spec
.
Node
.
Columns
=
_q
.
ctx
.
Fields
if
len
(
_q
.
ctx
.
Fields
)
>
0
{
_spec
.
Unique
=
_q
.
ctx
.
Unique
!=
nil
&&
*
_q
.
ctx
.
Unique
...
...
@@ -419,6 +427,9 @@ func (_q *SettingQuery) sqlQuery(ctx context.Context) *sql.Selector {
if
_q
.
ctx
.
Unique
!=
nil
&&
*
_q
.
ctx
.
Unique
{
selector
.
Distinct
()
}
for
_
,
m
:=
range
_q
.
modifiers
{
m
(
selector
)
}
for
_
,
p
:=
range
_q
.
predicates
{
p
(
selector
)
}
...
...
@@ -436,6 +447,32 @@ func (_q *SettingQuery) sqlQuery(ctx context.Context) *sql.Selector {
return
selector
}
// ForUpdate locks the selected rows against concurrent updates, and prevent them from being
// updated, deleted or "selected ... for update" by other sessions, until the transaction is
// either committed or rolled-back.
func
(
_q
*
SettingQuery
)
ForUpdate
(
opts
...
sql
.
LockOption
)
*
SettingQuery
{
if
_q
.
driver
.
Dialect
()
==
dialect
.
Postgres
{
_q
.
Unique
(
false
)
}
_q
.
modifiers
=
append
(
_q
.
modifiers
,
func
(
s
*
sql
.
Selector
)
{
s
.
ForUpdate
(
opts
...
)
})
return
_q
}
// ForShare behaves similarly to ForUpdate, except that it acquires a shared mode lock
// on any rows that are read. Other sessions can read the rows, but cannot modify them
// until your transaction commits.
func
(
_q
*
SettingQuery
)
ForShare
(
opts
...
sql
.
LockOption
)
*
SettingQuery
{
if
_q
.
driver
.
Dialect
()
==
dialect
.
Postgres
{
_q
.
Unique
(
false
)
}
_q
.
modifiers
=
append
(
_q
.
modifiers
,
func
(
s
*
sql
.
Selector
)
{
s
.
ForShare
(
opts
...
)
})
return
_q
}
// SettingGroupBy is the group-by builder for Setting entities.
type
SettingGroupBy
struct
{
selector
...
...
backend/ent/tx.go
View file @
1a641392
...
...
@@ -22,6 +22,10 @@ type Tx struct {
AccountGroup
*
AccountGroupClient
// Group is the client for interacting with the Group builders.
Group
*
GroupClient
// PromoCode is the client for interacting with the PromoCode builders.
PromoCode
*
PromoCodeClient
// PromoCodeUsage is the client for interacting with the PromoCodeUsage builders.
PromoCodeUsage
*
PromoCodeUsageClient
// Proxy is the client for interacting with the Proxy builders.
Proxy
*
ProxyClient
// RedeemCode is the client for interacting with the RedeemCode builders.
...
...
@@ -175,6 +179,8 @@ func (tx *Tx) init() {
tx
.
Account
=
NewAccountClient
(
tx
.
config
)
tx
.
AccountGroup
=
NewAccountGroupClient
(
tx
.
config
)
tx
.
Group
=
NewGroupClient
(
tx
.
config
)
tx
.
PromoCode
=
NewPromoCodeClient
(
tx
.
config
)
tx
.
PromoCodeUsage
=
NewPromoCodeUsageClient
(
tx
.
config
)
tx
.
Proxy
=
NewProxyClient
(
tx
.
config
)
tx
.
RedeemCode
=
NewRedeemCodeClient
(
tx
.
config
)
tx
.
Setting
=
NewSettingClient
(
tx
.
config
)
...
...
backend/ent/usagelog.go
View file @
1a641392
...
...
@@ -72,6 +72,8 @@ type UsageLog struct {
FirstTokenMs
*
int
`json:"first_token_ms,omitempty"`
// UserAgent holds the value of the "user_agent" field.
UserAgent
*
string
`json:"user_agent,omitempty"`
// IPAddress holds the value of the "ip_address" field.
IPAddress
*
string
`json:"ip_address,omitempty"`
// ImageCount holds the value of the "image_count" field.
ImageCount
int
`json:"image_count,omitempty"`
// ImageSize holds the value of the "image_size" field.
...
...
@@ -167,7 +169,7 @@ func (*UsageLog) scanValues(columns []string) ([]any, error) {
values
[
i
]
=
new
(
sql
.
NullFloat64
)
case
usagelog
.
FieldID
,
usagelog
.
FieldUserID
,
usagelog
.
FieldAPIKeyID
,
usagelog
.
FieldAccountID
,
usagelog
.
FieldGroupID
,
usagelog
.
FieldSubscriptionID
,
usagelog
.
FieldInputTokens
,
usagelog
.
FieldOutputTokens
,
usagelog
.
FieldCacheCreationTokens
,
usagelog
.
FieldCacheReadTokens
,
usagelog
.
FieldCacheCreation5mTokens
,
usagelog
.
FieldCacheCreation1hTokens
,
usagelog
.
FieldBillingType
,
usagelog
.
FieldDurationMs
,
usagelog
.
FieldFirstTokenMs
,
usagelog
.
FieldImageCount
:
values
[
i
]
=
new
(
sql
.
NullInt64
)
case
usagelog
.
FieldRequestID
,
usagelog
.
FieldModel
,
usagelog
.
FieldUserAgent
,
usagelog
.
FieldImageSize
:
case
usagelog
.
FieldRequestID
,
usagelog
.
FieldModel
,
usagelog
.
FieldUserAgent
,
usagelog
.
FieldIPAddress
,
usagelog
.
FieldImageSize
:
values
[
i
]
=
new
(
sql
.
NullString
)
case
usagelog
.
FieldCreatedAt
:
values
[
i
]
=
new
(
sql
.
NullTime
)
...
...
@@ -347,6 +349,13 @@ func (_m *UsageLog) assignValues(columns []string, values []any) error {
_m
.
UserAgent
=
new
(
string
)
*
_m
.
UserAgent
=
value
.
String
}
case
usagelog
.
FieldIPAddress
:
if
value
,
ok
:=
values
[
i
]
.
(
*
sql
.
NullString
);
!
ok
{
return
fmt
.
Errorf
(
"unexpected type %T for field ip_address"
,
values
[
i
])
}
else
if
value
.
Valid
{
_m
.
IPAddress
=
new
(
string
)
*
_m
.
IPAddress
=
value
.
String
}
case
usagelog
.
FieldImageCount
:
if
value
,
ok
:=
values
[
i
]
.
(
*
sql
.
NullInt64
);
!
ok
{
return
fmt
.
Errorf
(
"unexpected type %T for field image_count"
,
values
[
i
])
...
...
@@ -512,6 +521,11 @@ func (_m *UsageLog) String() string {
builder
.
WriteString
(
*
v
)
}
builder
.
WriteString
(
", "
)
if
v
:=
_m
.
IPAddress
;
v
!=
nil
{
builder
.
WriteString
(
"ip_address="
)
builder
.
WriteString
(
*
v
)
}
builder
.
WriteString
(
", "
)
builder
.
WriteString
(
"image_count="
)
builder
.
WriteString
(
fmt
.
Sprintf
(
"%v"
,
_m
.
ImageCount
))
builder
.
WriteString
(
", "
)
...
...
backend/ent/usagelog/usagelog.go
View file @
1a641392
...
...
@@ -64,6 +64,8 @@ const (
FieldFirstTokenMs
=
"first_token_ms"
// FieldUserAgent holds the string denoting the user_agent field in the database.
FieldUserAgent
=
"user_agent"
// FieldIPAddress holds the string denoting the ip_address field in the database.
FieldIPAddress
=
"ip_address"
// FieldImageCount holds the string denoting the image_count field in the database.
FieldImageCount
=
"image_count"
// FieldImageSize holds the string denoting the image_size field in the database.
...
...
@@ -147,6 +149,7 @@ var Columns = []string{
FieldDurationMs
,
FieldFirstTokenMs
,
FieldUserAgent
,
FieldIPAddress
,
FieldImageCount
,
FieldImageSize
,
FieldCreatedAt
,
...
...
@@ -199,6 +202,8 @@ var (
DefaultStream
bool
// UserAgentValidator is a validator for the "user_agent" field. It is called by the builders before save.
UserAgentValidator
func
(
string
)
error
// IPAddressValidator is a validator for the "ip_address" field. It is called by the builders before save.
IPAddressValidator
func
(
string
)
error
// DefaultImageCount holds the default value on creation for the "image_count" field.
DefaultImageCount
int
// ImageSizeValidator is a validator for the "image_size" field. It is called by the builders before save.
...
...
@@ -340,6 +345,11 @@ func ByUserAgent(opts ...sql.OrderTermOption) OrderOption {
return
sql
.
OrderByField
(
FieldUserAgent
,
opts
...
)
.
ToFunc
()
}
// ByIPAddress orders the results by the ip_address field.
func
ByIPAddress
(
opts
...
sql
.
OrderTermOption
)
OrderOption
{
return
sql
.
OrderByField
(
FieldIPAddress
,
opts
...
)
.
ToFunc
()
}
// ByImageCount orders the results by the image_count field.
func
ByImageCount
(
opts
...
sql
.
OrderTermOption
)
OrderOption
{
return
sql
.
OrderByField
(
FieldImageCount
,
opts
...
)
.
ToFunc
()
...
...
backend/ent/usagelog/where.go
View file @
1a641392
...
...
@@ -180,6 +180,11 @@ func UserAgent(v string) predicate.UsageLog {
return
predicate
.
UsageLog
(
sql
.
FieldEQ
(
FieldUserAgent
,
v
))
}
// IPAddress applies equality check predicate on the "ip_address" field. It's identical to IPAddressEQ.
func
IPAddress
(
v
string
)
predicate
.
UsageLog
{
return
predicate
.
UsageLog
(
sql
.
FieldEQ
(
FieldIPAddress
,
v
))
}
// ImageCount applies equality check predicate on the "image_count" field. It's identical to ImageCountEQ.
func
ImageCount
(
v
int
)
predicate
.
UsageLog
{
return
predicate
.
UsageLog
(
sql
.
FieldEQ
(
FieldImageCount
,
v
))
...
...
@@ -1190,6 +1195,81 @@ func UserAgentContainsFold(v string) predicate.UsageLog {
return
predicate
.
UsageLog
(
sql
.
FieldContainsFold
(
FieldUserAgent
,
v
))
}
// IPAddressEQ applies the EQ predicate on the "ip_address" field.
func
IPAddressEQ
(
v
string
)
predicate
.
UsageLog
{
return
predicate
.
UsageLog
(
sql
.
FieldEQ
(
FieldIPAddress
,
v
))
}
// IPAddressNEQ applies the NEQ predicate on the "ip_address" field.
func
IPAddressNEQ
(
v
string
)
predicate
.
UsageLog
{
return
predicate
.
UsageLog
(
sql
.
FieldNEQ
(
FieldIPAddress
,
v
))
}
// IPAddressIn applies the In predicate on the "ip_address" field.
func
IPAddressIn
(
vs
...
string
)
predicate
.
UsageLog
{
return
predicate
.
UsageLog
(
sql
.
FieldIn
(
FieldIPAddress
,
vs
...
))
}
// IPAddressNotIn applies the NotIn predicate on the "ip_address" field.
func
IPAddressNotIn
(
vs
...
string
)
predicate
.
UsageLog
{
return
predicate
.
UsageLog
(
sql
.
FieldNotIn
(
FieldIPAddress
,
vs
...
))
}
// IPAddressGT applies the GT predicate on the "ip_address" field.
func
IPAddressGT
(
v
string
)
predicate
.
UsageLog
{
return
predicate
.
UsageLog
(
sql
.
FieldGT
(
FieldIPAddress
,
v
))
}
// IPAddressGTE applies the GTE predicate on the "ip_address" field.
func
IPAddressGTE
(
v
string
)
predicate
.
UsageLog
{
return
predicate
.
UsageLog
(
sql
.
FieldGTE
(
FieldIPAddress
,
v
))
}
// IPAddressLT applies the LT predicate on the "ip_address" field.
func
IPAddressLT
(
v
string
)
predicate
.
UsageLog
{
return
predicate
.
UsageLog
(
sql
.
FieldLT
(
FieldIPAddress
,
v
))
}
// IPAddressLTE applies the LTE predicate on the "ip_address" field.
func
IPAddressLTE
(
v
string
)
predicate
.
UsageLog
{
return
predicate
.
UsageLog
(
sql
.
FieldLTE
(
FieldIPAddress
,
v
))
}
// IPAddressContains applies the Contains predicate on the "ip_address" field.
func
IPAddressContains
(
v
string
)
predicate
.
UsageLog
{
return
predicate
.
UsageLog
(
sql
.
FieldContains
(
FieldIPAddress
,
v
))
}
// IPAddressHasPrefix applies the HasPrefix predicate on the "ip_address" field.
func
IPAddressHasPrefix
(
v
string
)
predicate
.
UsageLog
{
return
predicate
.
UsageLog
(
sql
.
FieldHasPrefix
(
FieldIPAddress
,
v
))
}
// IPAddressHasSuffix applies the HasSuffix predicate on the "ip_address" field.
func
IPAddressHasSuffix
(
v
string
)
predicate
.
UsageLog
{
return
predicate
.
UsageLog
(
sql
.
FieldHasSuffix
(
FieldIPAddress
,
v
))
}
// IPAddressIsNil applies the IsNil predicate on the "ip_address" field.
func
IPAddressIsNil
()
predicate
.
UsageLog
{
return
predicate
.
UsageLog
(
sql
.
FieldIsNull
(
FieldIPAddress
))
}
// IPAddressNotNil applies the NotNil predicate on the "ip_address" field.
func
IPAddressNotNil
()
predicate
.
UsageLog
{
return
predicate
.
UsageLog
(
sql
.
FieldNotNull
(
FieldIPAddress
))
}
// IPAddressEqualFold applies the EqualFold predicate on the "ip_address" field.
func
IPAddressEqualFold
(
v
string
)
predicate
.
UsageLog
{
return
predicate
.
UsageLog
(
sql
.
FieldEqualFold
(
FieldIPAddress
,
v
))
}
// IPAddressContainsFold applies the ContainsFold predicate on the "ip_address" field.
func
IPAddressContainsFold
(
v
string
)
predicate
.
UsageLog
{
return
predicate
.
UsageLog
(
sql
.
FieldContainsFold
(
FieldIPAddress
,
v
))
}
// ImageCountEQ applies the EQ predicate on the "image_count" field.
func
ImageCountEQ
(
v
int
)
predicate
.
UsageLog
{
return
predicate
.
UsageLog
(
sql
.
FieldEQ
(
FieldImageCount
,
v
))
...
...
backend/ent/usagelog_create.go
View file @
1a641392
...
...
@@ -337,6 +337,20 @@ func (_c *UsageLogCreate) SetNillableUserAgent(v *string) *UsageLogCreate {
return
_c
}
// SetIPAddress sets the "ip_address" field.
func
(
_c
*
UsageLogCreate
)
SetIPAddress
(
v
string
)
*
UsageLogCreate
{
_c
.
mutation
.
SetIPAddress
(
v
)
return
_c
}
// SetNillableIPAddress sets the "ip_address" field if the given value is not nil.
func
(
_c
*
UsageLogCreate
)
SetNillableIPAddress
(
v
*
string
)
*
UsageLogCreate
{
if
v
!=
nil
{
_c
.
SetIPAddress
(
*
v
)
}
return
_c
}
// SetImageCount sets the "image_count" field.
func
(
_c
*
UsageLogCreate
)
SetImageCount
(
v
int
)
*
UsageLogCreate
{
_c
.
mutation
.
SetImageCount
(
v
)
...
...
@@ -586,6 +600,11 @@ func (_c *UsageLogCreate) check() error {
return
&
ValidationError
{
Name
:
"user_agent"
,
err
:
fmt
.
Errorf
(
`ent: validator failed for field "UsageLog.user_agent": %w`
,
err
)}
}
}
if
v
,
ok
:=
_c
.
mutation
.
IPAddress
();
ok
{
if
err
:=
usagelog
.
IPAddressValidator
(
v
);
err
!=
nil
{
return
&
ValidationError
{
Name
:
"ip_address"
,
err
:
fmt
.
Errorf
(
`ent: validator failed for field "UsageLog.ip_address": %w`
,
err
)}
}
}
if
_
,
ok
:=
_c
.
mutation
.
ImageCount
();
!
ok
{
return
&
ValidationError
{
Name
:
"image_count"
,
err
:
errors
.
New
(
`ent: missing required field "UsageLog.image_count"`
)}
}
...
...
@@ -713,6 +732,10 @@ func (_c *UsageLogCreate) createSpec() (*UsageLog, *sqlgraph.CreateSpec) {
_spec
.
SetField
(
usagelog
.
FieldUserAgent
,
field
.
TypeString
,
value
)
_node
.
UserAgent
=
&
value
}
if
value
,
ok
:=
_c
.
mutation
.
IPAddress
();
ok
{
_spec
.
SetField
(
usagelog
.
FieldIPAddress
,
field
.
TypeString
,
value
)
_node
.
IPAddress
=
&
value
}
if
value
,
ok
:=
_c
.
mutation
.
ImageCount
();
ok
{
_spec
.
SetField
(
usagelog
.
FieldImageCount
,
field
.
TypeInt
,
value
)
_node
.
ImageCount
=
value
...
...
@@ -1288,6 +1311,24 @@ func (u *UsageLogUpsert) ClearUserAgent() *UsageLogUpsert {
return
u
}
// SetIPAddress sets the "ip_address" field.
func
(
u
*
UsageLogUpsert
)
SetIPAddress
(
v
string
)
*
UsageLogUpsert
{
u
.
Set
(
usagelog
.
FieldIPAddress
,
v
)
return
u
}
// UpdateIPAddress sets the "ip_address" field to the value that was provided on create.
func
(
u
*
UsageLogUpsert
)
UpdateIPAddress
()
*
UsageLogUpsert
{
u
.
SetExcluded
(
usagelog
.
FieldIPAddress
)
return
u
}
// ClearIPAddress clears the value of the "ip_address" field.
func
(
u
*
UsageLogUpsert
)
ClearIPAddress
()
*
UsageLogUpsert
{
u
.
SetNull
(
usagelog
.
FieldIPAddress
)
return
u
}
// SetImageCount sets the "image_count" field.
func
(
u
*
UsageLogUpsert
)
SetImageCount
(
v
int
)
*
UsageLogUpsert
{
u
.
Set
(
usagelog
.
FieldImageCount
,
v
)
...
...
@@ -1866,6 +1907,27 @@ func (u *UsageLogUpsertOne) ClearUserAgent() *UsageLogUpsertOne {
})
}
// SetIPAddress sets the "ip_address" field.
func
(
u
*
UsageLogUpsertOne
)
SetIPAddress
(
v
string
)
*
UsageLogUpsertOne
{
return
u
.
Update
(
func
(
s
*
UsageLogUpsert
)
{
s
.
SetIPAddress
(
v
)
})
}
// UpdateIPAddress sets the "ip_address" field to the value that was provided on create.
func
(
u
*
UsageLogUpsertOne
)
UpdateIPAddress
()
*
UsageLogUpsertOne
{
return
u
.
Update
(
func
(
s
*
UsageLogUpsert
)
{
s
.
UpdateIPAddress
()
})
}
// ClearIPAddress clears the value of the "ip_address" field.
func
(
u
*
UsageLogUpsertOne
)
ClearIPAddress
()
*
UsageLogUpsertOne
{
return
u
.
Update
(
func
(
s
*
UsageLogUpsert
)
{
s
.
ClearIPAddress
()
})
}
// SetImageCount sets the "image_count" field.
func
(
u
*
UsageLogUpsertOne
)
SetImageCount
(
v
int
)
*
UsageLogUpsertOne
{
return
u
.
Update
(
func
(
s
*
UsageLogUpsert
)
{
...
...
@@ -2616,6 +2678,27 @@ func (u *UsageLogUpsertBulk) ClearUserAgent() *UsageLogUpsertBulk {
})
}
// SetIPAddress sets the "ip_address" field.
func
(
u
*
UsageLogUpsertBulk
)
SetIPAddress
(
v
string
)
*
UsageLogUpsertBulk
{
return
u
.
Update
(
func
(
s
*
UsageLogUpsert
)
{
s
.
SetIPAddress
(
v
)
})
}
// UpdateIPAddress sets the "ip_address" field to the value that was provided on create.
func
(
u
*
UsageLogUpsertBulk
)
UpdateIPAddress
()
*
UsageLogUpsertBulk
{
return
u
.
Update
(
func
(
s
*
UsageLogUpsert
)
{
s
.
UpdateIPAddress
()
})
}
// ClearIPAddress clears the value of the "ip_address" field.
func
(
u
*
UsageLogUpsertBulk
)
ClearIPAddress
()
*
UsageLogUpsertBulk
{
return
u
.
Update
(
func
(
s
*
UsageLogUpsert
)
{
s
.
ClearIPAddress
()
})
}
// SetImageCount sets the "image_count" field.
func
(
u
*
UsageLogUpsertBulk
)
SetImageCount
(
v
int
)
*
UsageLogUpsertBulk
{
return
u
.
Update
(
func
(
s
*
UsageLogUpsert
)
{
...
...
backend/ent/usagelog_query.go
View file @
1a641392
...
...
@@ -8,6 +8,7 @@ import (
"math"
"entgo.io/ent"
"entgo.io/ent/dialect"
"entgo.io/ent/dialect/sql"
"entgo.io/ent/dialect/sql/sqlgraph"
"entgo.io/ent/schema/field"
...
...
@@ -32,6 +33,7 @@ type UsageLogQuery struct {
withAccount
*
AccountQuery
withGroup
*
GroupQuery
withSubscription
*
UserSubscriptionQuery
modifiers
[]
func
(
*
sql
.
Selector
)
// intermediate query (i.e. traversal path).
sql
*
sql
.
Selector
path
func
(
context
.
Context
)
(
*
sql
.
Selector
,
error
)
...
...
@@ -531,6 +533,9 @@ func (_q *UsageLogQuery) sqlAll(ctx context.Context, hooks ...queryHook) ([]*Usa
node
.
Edges
.
loadedTypes
=
loadedTypes
return
node
.
assignValues
(
columns
,
values
)
}
if
len
(
_q
.
modifiers
)
>
0
{
_spec
.
Modifiers
=
_q
.
modifiers
}
for
i
:=
range
hooks
{
hooks
[
i
](
ctx
,
_spec
)
}
...
...
@@ -727,6 +732,9 @@ func (_q *UsageLogQuery) loadSubscription(ctx context.Context, query *UserSubscr
func
(
_q
*
UsageLogQuery
)
sqlCount
(
ctx
context
.
Context
)
(
int
,
error
)
{
_spec
:=
_q
.
querySpec
()
if
len
(
_q
.
modifiers
)
>
0
{
_spec
.
Modifiers
=
_q
.
modifiers
}
_spec
.
Node
.
Columns
=
_q
.
ctx
.
Fields
if
len
(
_q
.
ctx
.
Fields
)
>
0
{
_spec
.
Unique
=
_q
.
ctx
.
Unique
!=
nil
&&
*
_q
.
ctx
.
Unique
...
...
@@ -804,6 +812,9 @@ func (_q *UsageLogQuery) sqlQuery(ctx context.Context) *sql.Selector {
if
_q
.
ctx
.
Unique
!=
nil
&&
*
_q
.
ctx
.
Unique
{
selector
.
Distinct
()
}
for
_
,
m
:=
range
_q
.
modifiers
{
m
(
selector
)
}
for
_
,
p
:=
range
_q
.
predicates
{
p
(
selector
)
}
...
...
@@ -821,6 +832,32 @@ func (_q *UsageLogQuery) sqlQuery(ctx context.Context) *sql.Selector {
return
selector
}
// ForUpdate locks the selected rows against concurrent updates, and prevent them from being
// updated, deleted or "selected ... for update" by other sessions, until the transaction is
// either committed or rolled-back.
func
(
_q
*
UsageLogQuery
)
ForUpdate
(
opts
...
sql
.
LockOption
)
*
UsageLogQuery
{
if
_q
.
driver
.
Dialect
()
==
dialect
.
Postgres
{
_q
.
Unique
(
false
)
}
_q
.
modifiers
=
append
(
_q
.
modifiers
,
func
(
s
*
sql
.
Selector
)
{
s
.
ForUpdate
(
opts
...
)
})
return
_q
}
// ForShare behaves similarly to ForUpdate, except that it acquires a shared mode lock
// on any rows that are read. Other sessions can read the rows, but cannot modify them
// until your transaction commits.
func
(
_q
*
UsageLogQuery
)
ForShare
(
opts
...
sql
.
LockOption
)
*
UsageLogQuery
{
if
_q
.
driver
.
Dialect
()
==
dialect
.
Postgres
{
_q
.
Unique
(
false
)
}
_q
.
modifiers
=
append
(
_q
.
modifiers
,
func
(
s
*
sql
.
Selector
)
{
s
.
ForShare
(
opts
...
)
})
return
_q
}
// UsageLogGroupBy is the group-by builder for UsageLog entities.
type
UsageLogGroupBy
struct
{
selector
...
...
backend/ent/usagelog_update.go
View file @
1a641392
...
...
@@ -524,6 +524,26 @@ func (_u *UsageLogUpdate) ClearUserAgent() *UsageLogUpdate {
return
_u
}
// SetIPAddress sets the "ip_address" field.
func
(
_u
*
UsageLogUpdate
)
SetIPAddress
(
v
string
)
*
UsageLogUpdate
{
_u
.
mutation
.
SetIPAddress
(
v
)
return
_u
}
// SetNillableIPAddress sets the "ip_address" field if the given value is not nil.
func
(
_u
*
UsageLogUpdate
)
SetNillableIPAddress
(
v
*
string
)
*
UsageLogUpdate
{
if
v
!=
nil
{
_u
.
SetIPAddress
(
*
v
)
}
return
_u
}
// ClearIPAddress clears the value of the "ip_address" field.
func
(
_u
*
UsageLogUpdate
)
ClearIPAddress
()
*
UsageLogUpdate
{
_u
.
mutation
.
ClearIPAddress
()
return
_u
}
// SetImageCount sets the "image_count" field.
func
(
_u
*
UsageLogUpdate
)
SetImageCount
(
v
int
)
*
UsageLogUpdate
{
_u
.
mutation
.
ResetImageCount
()
...
...
@@ -669,6 +689,11 @@ func (_u *UsageLogUpdate) check() error {
return
&
ValidationError
{
Name
:
"user_agent"
,
err
:
fmt
.
Errorf
(
`ent: validator failed for field "UsageLog.user_agent": %w`
,
err
)}
}
}
if
v
,
ok
:=
_u
.
mutation
.
IPAddress
();
ok
{
if
err
:=
usagelog
.
IPAddressValidator
(
v
);
err
!=
nil
{
return
&
ValidationError
{
Name
:
"ip_address"
,
err
:
fmt
.
Errorf
(
`ent: validator failed for field "UsageLog.ip_address": %w`
,
err
)}
}
}
if
v
,
ok
:=
_u
.
mutation
.
ImageSize
();
ok
{
if
err
:=
usagelog
.
ImageSizeValidator
(
v
);
err
!=
nil
{
return
&
ValidationError
{
Name
:
"image_size"
,
err
:
fmt
.
Errorf
(
`ent: validator failed for field "UsageLog.image_size": %w`
,
err
)}
...
...
@@ -815,6 +840,12 @@ func (_u *UsageLogUpdate) sqlSave(ctx context.Context) (_node int, err error) {
if
_u
.
mutation
.
UserAgentCleared
()
{
_spec
.
ClearField
(
usagelog
.
FieldUserAgent
,
field
.
TypeString
)
}
if
value
,
ok
:=
_u
.
mutation
.
IPAddress
();
ok
{
_spec
.
SetField
(
usagelog
.
FieldIPAddress
,
field
.
TypeString
,
value
)
}
if
_u
.
mutation
.
IPAddressCleared
()
{
_spec
.
ClearField
(
usagelog
.
FieldIPAddress
,
field
.
TypeString
)
}
if
value
,
ok
:=
_u
.
mutation
.
ImageCount
();
ok
{
_spec
.
SetField
(
usagelog
.
FieldImageCount
,
field
.
TypeInt
,
value
)
}
...
...
@@ -1484,6 +1515,26 @@ func (_u *UsageLogUpdateOne) ClearUserAgent() *UsageLogUpdateOne {
return
_u
}
// SetIPAddress sets the "ip_address" field.
func
(
_u
*
UsageLogUpdateOne
)
SetIPAddress
(
v
string
)
*
UsageLogUpdateOne
{
_u
.
mutation
.
SetIPAddress
(
v
)
return
_u
}
// SetNillableIPAddress sets the "ip_address" field if the given value is not nil.
func
(
_u
*
UsageLogUpdateOne
)
SetNillableIPAddress
(
v
*
string
)
*
UsageLogUpdateOne
{
if
v
!=
nil
{
_u
.
SetIPAddress
(
*
v
)
}
return
_u
}
// ClearIPAddress clears the value of the "ip_address" field.
func
(
_u
*
UsageLogUpdateOne
)
ClearIPAddress
()
*
UsageLogUpdateOne
{
_u
.
mutation
.
ClearIPAddress
()
return
_u
}
// SetImageCount sets the "image_count" field.
func
(
_u
*
UsageLogUpdateOne
)
SetImageCount
(
v
int
)
*
UsageLogUpdateOne
{
_u
.
mutation
.
ResetImageCount
()
...
...
@@ -1642,6 +1693,11 @@ func (_u *UsageLogUpdateOne) check() error {
return
&
ValidationError
{
Name
:
"user_agent"
,
err
:
fmt
.
Errorf
(
`ent: validator failed for field "UsageLog.user_agent": %w`
,
err
)}
}
}
if
v
,
ok
:=
_u
.
mutation
.
IPAddress
();
ok
{
if
err
:=
usagelog
.
IPAddressValidator
(
v
);
err
!=
nil
{
return
&
ValidationError
{
Name
:
"ip_address"
,
err
:
fmt
.
Errorf
(
`ent: validator failed for field "UsageLog.ip_address": %w`
,
err
)}
}
}
if
v
,
ok
:=
_u
.
mutation
.
ImageSize
();
ok
{
if
err
:=
usagelog
.
ImageSizeValidator
(
v
);
err
!=
nil
{
return
&
ValidationError
{
Name
:
"image_size"
,
err
:
fmt
.
Errorf
(
`ent: validator failed for field "UsageLog.image_size": %w`
,
err
)}
...
...
@@ -1805,6 +1861,12 @@ func (_u *UsageLogUpdateOne) sqlSave(ctx context.Context) (_node *UsageLog, err
if
_u
.
mutation
.
UserAgentCleared
()
{
_spec
.
ClearField
(
usagelog
.
FieldUserAgent
,
field
.
TypeString
)
}
if
value
,
ok
:=
_u
.
mutation
.
IPAddress
();
ok
{
_spec
.
SetField
(
usagelog
.
FieldIPAddress
,
field
.
TypeString
,
value
)
}
if
_u
.
mutation
.
IPAddressCleared
()
{
_spec
.
ClearField
(
usagelog
.
FieldIPAddress
,
field
.
TypeString
)
}
if
value
,
ok
:=
_u
.
mutation
.
ImageCount
();
ok
{
_spec
.
SetField
(
usagelog
.
FieldImageCount
,
field
.
TypeInt
,
value
)
}
...
...
backend/ent/user.go
View file @
1a641392
...
...
@@ -61,11 +61,13 @@ type UserEdges struct {
UsageLogs
[]
*
UsageLog
`json:"usage_logs,omitempty"`
// AttributeValues holds the value of the attribute_values edge.
AttributeValues
[]
*
UserAttributeValue
`json:"attribute_values,omitempty"`
// PromoCodeUsages holds the value of the promo_code_usages edge.
PromoCodeUsages
[]
*
PromoCodeUsage
`json:"promo_code_usages,omitempty"`
// UserAllowedGroups holds the value of the user_allowed_groups edge.
UserAllowedGroups
[]
*
UserAllowedGroup
`json:"user_allowed_groups,omitempty"`
// loadedTypes holds the information for reporting if a
// type was loaded (or requested) in eager-loading or not.
loadedTypes
[
8
]
bool
loadedTypes
[
9
]
bool
}
// APIKeysOrErr returns the APIKeys value or an error if the edge
...
...
@@ -131,10 +133,19 @@ func (e UserEdges) AttributeValuesOrErr() ([]*UserAttributeValue, error) {
return
nil
,
&
NotLoadedError
{
edge
:
"attribute_values"
}
}
// PromoCodeUsagesOrErr returns the PromoCodeUsages value or an error if the edge
// was not loaded in eager-loading.
func
(
e
UserEdges
)
PromoCodeUsagesOrErr
()
([]
*
PromoCodeUsage
,
error
)
{
if
e
.
loadedTypes
[
7
]
{
return
e
.
PromoCodeUsages
,
nil
}
return
nil
,
&
NotLoadedError
{
edge
:
"promo_code_usages"
}
}
// UserAllowedGroupsOrErr returns the UserAllowedGroups value or an error if the edge
// was not loaded in eager-loading.
func
(
e
UserEdges
)
UserAllowedGroupsOrErr
()
([]
*
UserAllowedGroup
,
error
)
{
if
e
.
loadedTypes
[
7
]
{
if
e
.
loadedTypes
[
8
]
{
return
e
.
UserAllowedGroups
,
nil
}
return
nil
,
&
NotLoadedError
{
edge
:
"user_allowed_groups"
}
...
...
@@ -289,6 +300,11 @@ func (_m *User) QueryAttributeValues() *UserAttributeValueQuery {
return
NewUserClient
(
_m
.
config
)
.
QueryAttributeValues
(
_m
)
}
// QueryPromoCodeUsages queries the "promo_code_usages" edge of the User entity.
func
(
_m
*
User
)
QueryPromoCodeUsages
()
*
PromoCodeUsageQuery
{
return
NewUserClient
(
_m
.
config
)
.
QueryPromoCodeUsages
(
_m
)
}
// QueryUserAllowedGroups queries the "user_allowed_groups" edge of the User entity.
func
(
_m
*
User
)
QueryUserAllowedGroups
()
*
UserAllowedGroupQuery
{
return
NewUserClient
(
_m
.
config
)
.
QueryUserAllowedGroups
(
_m
)
...
...
backend/ent/user/user.go
View file @
1a641392
...
...
@@ -51,6 +51,8 @@ const (
EdgeUsageLogs
=
"usage_logs"
// EdgeAttributeValues holds the string denoting the attribute_values edge name in mutations.
EdgeAttributeValues
=
"attribute_values"
// EdgePromoCodeUsages holds the string denoting the promo_code_usages edge name in mutations.
EdgePromoCodeUsages
=
"promo_code_usages"
// EdgeUserAllowedGroups holds the string denoting the user_allowed_groups edge name in mutations.
EdgeUserAllowedGroups
=
"user_allowed_groups"
// Table holds the table name of the user in the database.
...
...
@@ -102,6 +104,13 @@ const (
AttributeValuesInverseTable
=
"user_attribute_values"
// AttributeValuesColumn is the table column denoting the attribute_values relation/edge.
AttributeValuesColumn
=
"user_id"
// PromoCodeUsagesTable is the table that holds the promo_code_usages relation/edge.
PromoCodeUsagesTable
=
"promo_code_usages"
// PromoCodeUsagesInverseTable is the table name for the PromoCodeUsage entity.
// It exists in this package in order to avoid circular dependency with the "promocodeusage" package.
PromoCodeUsagesInverseTable
=
"promo_code_usages"
// PromoCodeUsagesColumn is the table column denoting the promo_code_usages relation/edge.
PromoCodeUsagesColumn
=
"user_id"
// UserAllowedGroupsTable is the table that holds the user_allowed_groups relation/edge.
UserAllowedGroupsTable
=
"user_allowed_groups"
// UserAllowedGroupsInverseTable is the table name for the UserAllowedGroup entity.
...
...
@@ -342,6 +351,20 @@ func ByAttributeValues(term sql.OrderTerm, terms ...sql.OrderTerm) OrderOption {
}
}
// ByPromoCodeUsagesCount orders the results by promo_code_usages count.
func
ByPromoCodeUsagesCount
(
opts
...
sql
.
OrderTermOption
)
OrderOption
{
return
func
(
s
*
sql
.
Selector
)
{
sqlgraph
.
OrderByNeighborsCount
(
s
,
newPromoCodeUsagesStep
(),
opts
...
)
}
}
// ByPromoCodeUsages orders the results by promo_code_usages terms.
func
ByPromoCodeUsages
(
term
sql
.
OrderTerm
,
terms
...
sql
.
OrderTerm
)
OrderOption
{
return
func
(
s
*
sql
.
Selector
)
{
sqlgraph
.
OrderByNeighborTerms
(
s
,
newPromoCodeUsagesStep
(),
append
([]
sql
.
OrderTerm
{
term
},
terms
...
)
...
)
}
}
// ByUserAllowedGroupsCount orders the results by user_allowed_groups count.
func
ByUserAllowedGroupsCount
(
opts
...
sql
.
OrderTermOption
)
OrderOption
{
return
func
(
s
*
sql
.
Selector
)
{
...
...
@@ -404,6 +427,13 @@ func newAttributeValuesStep() *sqlgraph.Step {
sqlgraph
.
Edge
(
sqlgraph
.
O2M
,
false
,
AttributeValuesTable
,
AttributeValuesColumn
),
)
}
func
newPromoCodeUsagesStep
()
*
sqlgraph
.
Step
{
return
sqlgraph
.
NewStep
(
sqlgraph
.
From
(
Table
,
FieldID
),
sqlgraph
.
To
(
PromoCodeUsagesInverseTable
,
FieldID
),
sqlgraph
.
Edge
(
sqlgraph
.
O2M
,
false
,
PromoCodeUsagesTable
,
PromoCodeUsagesColumn
),
)
}
func
newUserAllowedGroupsStep
()
*
sqlgraph
.
Step
{
return
sqlgraph
.
NewStep
(
sqlgraph
.
From
(
Table
,
FieldID
),
...
...
backend/ent/user/where.go
View file @
1a641392
...
...
@@ -871,6 +871,29 @@ func HasAttributeValuesWith(preds ...predicate.UserAttributeValue) predicate.Use
})
}
// HasPromoCodeUsages applies the HasEdge predicate on the "promo_code_usages" edge.
func
HasPromoCodeUsages
()
predicate
.
User
{
return
predicate
.
User
(
func
(
s
*
sql
.
Selector
)
{
step
:=
sqlgraph
.
NewStep
(
sqlgraph
.
From
(
Table
,
FieldID
),
sqlgraph
.
Edge
(
sqlgraph
.
O2M
,
false
,
PromoCodeUsagesTable
,
PromoCodeUsagesColumn
),
)
sqlgraph
.
HasNeighbors
(
s
,
step
)
})
}
// HasPromoCodeUsagesWith applies the HasEdge predicate on the "promo_code_usages" edge with a given conditions (other predicates).
func
HasPromoCodeUsagesWith
(
preds
...
predicate
.
PromoCodeUsage
)
predicate
.
User
{
return
predicate
.
User
(
func
(
s
*
sql
.
Selector
)
{
step
:=
newPromoCodeUsagesStep
()
sqlgraph
.
HasNeighborsWith
(
s
,
step
,
func
(
s
*
sql
.
Selector
)
{
for
_
,
p
:=
range
preds
{
p
(
s
)
}
})
})
}
// HasUserAllowedGroups applies the HasEdge predicate on the "user_allowed_groups" edge.
func
HasUserAllowedGroups
()
predicate
.
User
{
return
predicate
.
User
(
func
(
s
*
sql
.
Selector
)
{
...
...
backend/ent/user_create.go
View file @
1a641392
...
...
@@ -13,6 +13,7 @@ import (
"entgo.io/ent/schema/field"
"github.com/Wei-Shaw/sub2api/ent/apikey"
"github.com/Wei-Shaw/sub2api/ent/group"
"github.com/Wei-Shaw/sub2api/ent/promocodeusage"
"github.com/Wei-Shaw/sub2api/ent/redeemcode"
"github.com/Wei-Shaw/sub2api/ent/usagelog"
"github.com/Wei-Shaw/sub2api/ent/user"
...
...
@@ -271,6 +272,21 @@ func (_c *UserCreate) AddAttributeValues(v ...*UserAttributeValue) *UserCreate {
return
_c
.
AddAttributeValueIDs
(
ids
...
)
}
// AddPromoCodeUsageIDs adds the "promo_code_usages" edge to the PromoCodeUsage entity by IDs.
func
(
_c
*
UserCreate
)
AddPromoCodeUsageIDs
(
ids
...
int64
)
*
UserCreate
{
_c
.
mutation
.
AddPromoCodeUsageIDs
(
ids
...
)
return
_c
}
// AddPromoCodeUsages adds the "promo_code_usages" edges to the PromoCodeUsage entity.
func
(
_c
*
UserCreate
)
AddPromoCodeUsages
(
v
...*
PromoCodeUsage
)
*
UserCreate
{
ids
:=
make
([]
int64
,
len
(
v
))
for
i
:=
range
v
{
ids
[
i
]
=
v
[
i
]
.
ID
}
return
_c
.
AddPromoCodeUsageIDs
(
ids
...
)
}
// Mutation returns the UserMutation object of the builder.
func
(
_c
*
UserCreate
)
Mutation
()
*
UserMutation
{
return
_c
.
mutation
...
...
@@ -593,6 +609,22 @@ func (_c *UserCreate) createSpec() (*User, *sqlgraph.CreateSpec) {
}
_spec
.
Edges
=
append
(
_spec
.
Edges
,
edge
)
}
if
nodes
:=
_c
.
mutation
.
PromoCodeUsagesIDs
();
len
(
nodes
)
>
0
{
edge
:=
&
sqlgraph
.
EdgeSpec
{
Rel
:
sqlgraph
.
O2M
,
Inverse
:
false
,
Table
:
user
.
PromoCodeUsagesTable
,
Columns
:
[]
string
{
user
.
PromoCodeUsagesColumn
},
Bidi
:
false
,
Target
:
&
sqlgraph
.
EdgeTarget
{
IDSpec
:
sqlgraph
.
NewFieldSpec
(
promocodeusage
.
FieldID
,
field
.
TypeInt64
),
},
}
for
_
,
k
:=
range
nodes
{
edge
.
Target
.
Nodes
=
append
(
edge
.
Target
.
Nodes
,
k
)
}
_spec
.
Edges
=
append
(
_spec
.
Edges
,
edge
)
}
return
_node
,
_spec
}
...
...
backend/ent/user_query.go
View file @
1a641392
...
...
@@ -9,12 +9,14 @@ import (
"math"
"entgo.io/ent"
"entgo.io/ent/dialect"
"entgo.io/ent/dialect/sql"
"entgo.io/ent/dialect/sql/sqlgraph"
"entgo.io/ent/schema/field"
"github.com/Wei-Shaw/sub2api/ent/apikey"
"github.com/Wei-Shaw/sub2api/ent/group"
"github.com/Wei-Shaw/sub2api/ent/predicate"
"github.com/Wei-Shaw/sub2api/ent/promocodeusage"
"github.com/Wei-Shaw/sub2api/ent/redeemcode"
"github.com/Wei-Shaw/sub2api/ent/usagelog"
"github.com/Wei-Shaw/sub2api/ent/user"
...
...
@@ -37,7 +39,9 @@ type UserQuery struct {
withAllowedGroups
*
GroupQuery
withUsageLogs
*
UsageLogQuery
withAttributeValues
*
UserAttributeValueQuery
withPromoCodeUsages
*
PromoCodeUsageQuery
withUserAllowedGroups
*
UserAllowedGroupQuery
modifiers
[]
func
(
*
sql
.
Selector
)
// intermediate query (i.e. traversal path).
sql
*
sql
.
Selector
path
func
(
context
.
Context
)
(
*
sql
.
Selector
,
error
)
...
...
@@ -228,6 +232,28 @@ func (_q *UserQuery) QueryAttributeValues() *UserAttributeValueQuery {
return
query
}
// QueryPromoCodeUsages chains the current query on the "promo_code_usages" edge.
func
(
_q
*
UserQuery
)
QueryPromoCodeUsages
()
*
PromoCodeUsageQuery
{
query
:=
(
&
PromoCodeUsageClient
{
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
(
user
.
Table
,
user
.
FieldID
,
selector
),
sqlgraph
.
To
(
promocodeusage
.
Table
,
promocodeusage
.
FieldID
),
sqlgraph
.
Edge
(
sqlgraph
.
O2M
,
false
,
user
.
PromoCodeUsagesTable
,
user
.
PromoCodeUsagesColumn
),
)
fromU
=
sqlgraph
.
SetNeighbors
(
_q
.
driver
.
Dialect
(),
step
)
return
fromU
,
nil
}
return
query
}
// QueryUserAllowedGroups chains the current query on the "user_allowed_groups" edge.
func
(
_q
*
UserQuery
)
QueryUserAllowedGroups
()
*
UserAllowedGroupQuery
{
query
:=
(
&
UserAllowedGroupClient
{
config
:
_q
.
config
})
.
Query
()
...
...
@@ -449,6 +475,7 @@ func (_q *UserQuery) Clone() *UserQuery {
withAllowedGroups
:
_q
.
withAllowedGroups
.
Clone
(),
withUsageLogs
:
_q
.
withUsageLogs
.
Clone
(),
withAttributeValues
:
_q
.
withAttributeValues
.
Clone
(),
withPromoCodeUsages
:
_q
.
withPromoCodeUsages
.
Clone
(),
withUserAllowedGroups
:
_q
.
withUserAllowedGroups
.
Clone
(),
// clone intermediate query.
sql
:
_q
.
sql
.
Clone
(),
...
...
@@ -533,6 +560,17 @@ func (_q *UserQuery) WithAttributeValues(opts ...func(*UserAttributeValueQuery))
return
_q
}
// WithPromoCodeUsages tells the query-builder to eager-load the nodes that are connected to
// the "promo_code_usages" edge. The optional arguments are used to configure the query builder of the edge.
func
(
_q
*
UserQuery
)
WithPromoCodeUsages
(
opts
...
func
(
*
PromoCodeUsageQuery
))
*
UserQuery
{
query
:=
(
&
PromoCodeUsageClient
{
config
:
_q
.
config
})
.
Query
()
for
_
,
opt
:=
range
opts
{
opt
(
query
)
}
_q
.
withPromoCodeUsages
=
query
return
_q
}
// WithUserAllowedGroups tells the query-builder to eager-load the nodes that are connected to
// the "user_allowed_groups" edge. The optional arguments are used to configure the query builder of the edge.
func
(
_q
*
UserQuery
)
WithUserAllowedGroups
(
opts
...
func
(
*
UserAllowedGroupQuery
))
*
UserQuery
{
...
...
@@ -622,7 +660,7 @@ func (_q *UserQuery) sqlAll(ctx context.Context, hooks ...queryHook) ([]*User, e
var
(
nodes
=
[]
*
User
{}
_spec
=
_q
.
querySpec
()
loadedTypes
=
[
8
]
bool
{
loadedTypes
=
[
9
]
bool
{
_q
.
withAPIKeys
!=
nil
,
_q
.
withRedeemCodes
!=
nil
,
_q
.
withSubscriptions
!=
nil
,
...
...
@@ -630,6 +668,7 @@ func (_q *UserQuery) sqlAll(ctx context.Context, hooks ...queryHook) ([]*User, e
_q
.
withAllowedGroups
!=
nil
,
_q
.
withUsageLogs
!=
nil
,
_q
.
withAttributeValues
!=
nil
,
_q
.
withPromoCodeUsages
!=
nil
,
_q
.
withUserAllowedGroups
!=
nil
,
}
)
...
...
@@ -642,6 +681,9 @@ func (_q *UserQuery) sqlAll(ctx context.Context, hooks ...queryHook) ([]*User, e
node
.
Edges
.
loadedTypes
=
loadedTypes
return
node
.
assignValues
(
columns
,
values
)
}
if
len
(
_q
.
modifiers
)
>
0
{
_spec
.
Modifiers
=
_q
.
modifiers
}
for
i
:=
range
hooks
{
hooks
[
i
](
ctx
,
_spec
)
}
...
...
@@ -702,6 +744,13 @@ func (_q *UserQuery) sqlAll(ctx context.Context, hooks ...queryHook) ([]*User, e
return
nil
,
err
}
}
if
query
:=
_q
.
withPromoCodeUsages
;
query
!=
nil
{
if
err
:=
_q
.
loadPromoCodeUsages
(
ctx
,
query
,
nodes
,
func
(
n
*
User
)
{
n
.
Edges
.
PromoCodeUsages
=
[]
*
PromoCodeUsage
{}
},
func
(
n
*
User
,
e
*
PromoCodeUsage
)
{
n
.
Edges
.
PromoCodeUsages
=
append
(
n
.
Edges
.
PromoCodeUsages
,
e
)
});
err
!=
nil
{
return
nil
,
err
}
}
if
query
:=
_q
.
withUserAllowedGroups
;
query
!=
nil
{
if
err
:=
_q
.
loadUserAllowedGroups
(
ctx
,
query
,
nodes
,
func
(
n
*
User
)
{
n
.
Edges
.
UserAllowedGroups
=
[]
*
UserAllowedGroup
{}
},
...
...
@@ -959,6 +1008,36 @@ func (_q *UserQuery) loadAttributeValues(ctx context.Context, query *UserAttribu
}
return
nil
}
func
(
_q
*
UserQuery
)
loadPromoCodeUsages
(
ctx
context
.
Context
,
query
*
PromoCodeUsageQuery
,
nodes
[]
*
User
,
init
func
(
*
User
),
assign
func
(
*
User
,
*
PromoCodeUsage
))
error
{
fks
:=
make
([]
driver
.
Value
,
0
,
len
(
nodes
))
nodeids
:=
make
(
map
[
int64
]
*
User
)
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
(
promocodeusage
.
FieldUserID
)
}
query
.
Where
(
predicate
.
PromoCodeUsage
(
func
(
s
*
sql
.
Selector
)
{
s
.
Where
(
sql
.
InValues
(
s
.
C
(
user
.
PromoCodeUsagesColumn
),
fks
...
))
}))
neighbors
,
err
:=
query
.
All
(
ctx
)
if
err
!=
nil
{
return
err
}
for
_
,
n
:=
range
neighbors
{
fk
:=
n
.
UserID
node
,
ok
:=
nodeids
[
fk
]
if
!
ok
{
return
fmt
.
Errorf
(
`unexpected referenced foreign-key "user_id" returned %v for node %v`
,
fk
,
n
.
ID
)
}
assign
(
node
,
n
)
}
return
nil
}
func
(
_q
*
UserQuery
)
loadUserAllowedGroups
(
ctx
context
.
Context
,
query
*
UserAllowedGroupQuery
,
nodes
[]
*
User
,
init
func
(
*
User
),
assign
func
(
*
User
,
*
UserAllowedGroup
))
error
{
fks
:=
make
([]
driver
.
Value
,
0
,
len
(
nodes
))
nodeids
:=
make
(
map
[
int64
]
*
User
)
...
...
@@ -992,6 +1071,9 @@ func (_q *UserQuery) loadUserAllowedGroups(ctx context.Context, query *UserAllow
func
(
_q
*
UserQuery
)
sqlCount
(
ctx
context
.
Context
)
(
int
,
error
)
{
_spec
:=
_q
.
querySpec
()
if
len
(
_q
.
modifiers
)
>
0
{
_spec
.
Modifiers
=
_q
.
modifiers
}
_spec
.
Node
.
Columns
=
_q
.
ctx
.
Fields
if
len
(
_q
.
ctx
.
Fields
)
>
0
{
_spec
.
Unique
=
_q
.
ctx
.
Unique
!=
nil
&&
*
_q
.
ctx
.
Unique
...
...
@@ -1054,6 +1136,9 @@ func (_q *UserQuery) sqlQuery(ctx context.Context) *sql.Selector {
if
_q
.
ctx
.
Unique
!=
nil
&&
*
_q
.
ctx
.
Unique
{
selector
.
Distinct
()
}
for
_
,
m
:=
range
_q
.
modifiers
{
m
(
selector
)
}
for
_
,
p
:=
range
_q
.
predicates
{
p
(
selector
)
}
...
...
@@ -1071,6 +1156,32 @@ func (_q *UserQuery) sqlQuery(ctx context.Context) *sql.Selector {
return
selector
}
// ForUpdate locks the selected rows against concurrent updates, and prevent them from being
// updated, deleted or "selected ... for update" by other sessions, until the transaction is
// either committed or rolled-back.
func
(
_q
*
UserQuery
)
ForUpdate
(
opts
...
sql
.
LockOption
)
*
UserQuery
{
if
_q
.
driver
.
Dialect
()
==
dialect
.
Postgres
{
_q
.
Unique
(
false
)
}
_q
.
modifiers
=
append
(
_q
.
modifiers
,
func
(
s
*
sql
.
Selector
)
{
s
.
ForUpdate
(
opts
...
)
})
return
_q
}
// ForShare behaves similarly to ForUpdate, except that it acquires a shared mode lock
// on any rows that are read. Other sessions can read the rows, but cannot modify them
// until your transaction commits.
func
(
_q
*
UserQuery
)
ForShare
(
opts
...
sql
.
LockOption
)
*
UserQuery
{
if
_q
.
driver
.
Dialect
()
==
dialect
.
Postgres
{
_q
.
Unique
(
false
)
}
_q
.
modifiers
=
append
(
_q
.
modifiers
,
func
(
s
*
sql
.
Selector
)
{
s
.
ForShare
(
opts
...
)
})
return
_q
}
// UserGroupBy is the group-by builder for User entities.
type
UserGroupBy
struct
{
selector
...
...
backend/ent/user_update.go
View file @
1a641392
...
...
@@ -14,6 +14,7 @@ import (
"github.com/Wei-Shaw/sub2api/ent/apikey"
"github.com/Wei-Shaw/sub2api/ent/group"
"github.com/Wei-Shaw/sub2api/ent/predicate"
"github.com/Wei-Shaw/sub2api/ent/promocodeusage"
"github.com/Wei-Shaw/sub2api/ent/redeemcode"
"github.com/Wei-Shaw/sub2api/ent/usagelog"
"github.com/Wei-Shaw/sub2api/ent/user"
...
...
@@ -291,6 +292,21 @@ func (_u *UserUpdate) AddAttributeValues(v ...*UserAttributeValue) *UserUpdate {
return
_u
.
AddAttributeValueIDs
(
ids
...
)
}
// AddPromoCodeUsageIDs adds the "promo_code_usages" edge to the PromoCodeUsage entity by IDs.
func
(
_u
*
UserUpdate
)
AddPromoCodeUsageIDs
(
ids
...
int64
)
*
UserUpdate
{
_u
.
mutation
.
AddPromoCodeUsageIDs
(
ids
...
)
return
_u
}
// AddPromoCodeUsages adds the "promo_code_usages" edges to the PromoCodeUsage entity.
func
(
_u
*
UserUpdate
)
AddPromoCodeUsages
(
v
...*
PromoCodeUsage
)
*
UserUpdate
{
ids
:=
make
([]
int64
,
len
(
v
))
for
i
:=
range
v
{
ids
[
i
]
=
v
[
i
]
.
ID
}
return
_u
.
AddPromoCodeUsageIDs
(
ids
...
)
}
// Mutation returns the UserMutation object of the builder.
func
(
_u
*
UserUpdate
)
Mutation
()
*
UserMutation
{
return
_u
.
mutation
...
...
@@ -443,6 +459,27 @@ func (_u *UserUpdate) RemoveAttributeValues(v ...*UserAttributeValue) *UserUpdat
return
_u
.
RemoveAttributeValueIDs
(
ids
...
)
}
// ClearPromoCodeUsages clears all "promo_code_usages" edges to the PromoCodeUsage entity.
func
(
_u
*
UserUpdate
)
ClearPromoCodeUsages
()
*
UserUpdate
{
_u
.
mutation
.
ClearPromoCodeUsages
()
return
_u
}
// RemovePromoCodeUsageIDs removes the "promo_code_usages" edge to PromoCodeUsage entities by IDs.
func
(
_u
*
UserUpdate
)
RemovePromoCodeUsageIDs
(
ids
...
int64
)
*
UserUpdate
{
_u
.
mutation
.
RemovePromoCodeUsageIDs
(
ids
...
)
return
_u
}
// RemovePromoCodeUsages removes "promo_code_usages" edges to PromoCodeUsage entities.
func
(
_u
*
UserUpdate
)
RemovePromoCodeUsages
(
v
...*
PromoCodeUsage
)
*
UserUpdate
{
ids
:=
make
([]
int64
,
len
(
v
))
for
i
:=
range
v
{
ids
[
i
]
=
v
[
i
]
.
ID
}
return
_u
.
RemovePromoCodeUsageIDs
(
ids
...
)
}
// Save executes the query and returns the number of nodes affected by the update operation.
func
(
_u
*
UserUpdate
)
Save
(
ctx
context
.
Context
)
(
int
,
error
)
{
if
err
:=
_u
.
defaults
();
err
!=
nil
{
...
...
@@ -893,6 +930,51 @@ func (_u *UserUpdate) sqlSave(ctx context.Context) (_node int, err error) {
}
_spec
.
Edges
.
Add
=
append
(
_spec
.
Edges
.
Add
,
edge
)
}
if
_u
.
mutation
.
PromoCodeUsagesCleared
()
{
edge
:=
&
sqlgraph
.
EdgeSpec
{
Rel
:
sqlgraph
.
O2M
,
Inverse
:
false
,
Table
:
user
.
PromoCodeUsagesTable
,
Columns
:
[]
string
{
user
.
PromoCodeUsagesColumn
},
Bidi
:
false
,
Target
:
&
sqlgraph
.
EdgeTarget
{
IDSpec
:
sqlgraph
.
NewFieldSpec
(
promocodeusage
.
FieldID
,
field
.
TypeInt64
),
},
}
_spec
.
Edges
.
Clear
=
append
(
_spec
.
Edges
.
Clear
,
edge
)
}
if
nodes
:=
_u
.
mutation
.
RemovedPromoCodeUsagesIDs
();
len
(
nodes
)
>
0
&&
!
_u
.
mutation
.
PromoCodeUsagesCleared
()
{
edge
:=
&
sqlgraph
.
EdgeSpec
{
Rel
:
sqlgraph
.
O2M
,
Inverse
:
false
,
Table
:
user
.
PromoCodeUsagesTable
,
Columns
:
[]
string
{
user
.
PromoCodeUsagesColumn
},
Bidi
:
false
,
Target
:
&
sqlgraph
.
EdgeTarget
{
IDSpec
:
sqlgraph
.
NewFieldSpec
(
promocodeusage
.
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
.
PromoCodeUsagesIDs
();
len
(
nodes
)
>
0
{
edge
:=
&
sqlgraph
.
EdgeSpec
{
Rel
:
sqlgraph
.
O2M
,
Inverse
:
false
,
Table
:
user
.
PromoCodeUsagesTable
,
Columns
:
[]
string
{
user
.
PromoCodeUsagesColumn
},
Bidi
:
false
,
Target
:
&
sqlgraph
.
EdgeTarget
{
IDSpec
:
sqlgraph
.
NewFieldSpec
(
promocodeusage
.
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
{
user
.
Label
}
...
...
@@ -1170,6 +1252,21 @@ func (_u *UserUpdateOne) AddAttributeValues(v ...*UserAttributeValue) *UserUpdat
return
_u
.
AddAttributeValueIDs
(
ids
...
)
}
// AddPromoCodeUsageIDs adds the "promo_code_usages" edge to the PromoCodeUsage entity by IDs.
func
(
_u
*
UserUpdateOne
)
AddPromoCodeUsageIDs
(
ids
...
int64
)
*
UserUpdateOne
{
_u
.
mutation
.
AddPromoCodeUsageIDs
(
ids
...
)
return
_u
}
// AddPromoCodeUsages adds the "promo_code_usages" edges to the PromoCodeUsage entity.
func
(
_u
*
UserUpdateOne
)
AddPromoCodeUsages
(
v
...*
PromoCodeUsage
)
*
UserUpdateOne
{
ids
:=
make
([]
int64
,
len
(
v
))
for
i
:=
range
v
{
ids
[
i
]
=
v
[
i
]
.
ID
}
return
_u
.
AddPromoCodeUsageIDs
(
ids
...
)
}
// Mutation returns the UserMutation object of the builder.
func
(
_u
*
UserUpdateOne
)
Mutation
()
*
UserMutation
{
return
_u
.
mutation
...
...
@@ -1322,6 +1419,27 @@ func (_u *UserUpdateOne) RemoveAttributeValues(v ...*UserAttributeValue) *UserUp
return
_u
.
RemoveAttributeValueIDs
(
ids
...
)
}
// ClearPromoCodeUsages clears all "promo_code_usages" edges to the PromoCodeUsage entity.
func
(
_u
*
UserUpdateOne
)
ClearPromoCodeUsages
()
*
UserUpdateOne
{
_u
.
mutation
.
ClearPromoCodeUsages
()
return
_u
}
// RemovePromoCodeUsageIDs removes the "promo_code_usages" edge to PromoCodeUsage entities by IDs.
func
(
_u
*
UserUpdateOne
)
RemovePromoCodeUsageIDs
(
ids
...
int64
)
*
UserUpdateOne
{
_u
.
mutation
.
RemovePromoCodeUsageIDs
(
ids
...
)
return
_u
}
// RemovePromoCodeUsages removes "promo_code_usages" edges to PromoCodeUsage entities.
func
(
_u
*
UserUpdateOne
)
RemovePromoCodeUsages
(
v
...*
PromoCodeUsage
)
*
UserUpdateOne
{
ids
:=
make
([]
int64
,
len
(
v
))
for
i
:=
range
v
{
ids
[
i
]
=
v
[
i
]
.
ID
}
return
_u
.
RemovePromoCodeUsageIDs
(
ids
...
)
}
// Where appends a list predicates to the UserUpdate builder.
func
(
_u
*
UserUpdateOne
)
Where
(
ps
...
predicate
.
User
)
*
UserUpdateOne
{
_u
.
mutation
.
Where
(
ps
...
)
...
...
@@ -1802,6 +1920,51 @@ func (_u *UserUpdateOne) sqlSave(ctx context.Context) (_node *User, err error) {
}
_spec
.
Edges
.
Add
=
append
(
_spec
.
Edges
.
Add
,
edge
)
}
if
_u
.
mutation
.
PromoCodeUsagesCleared
()
{
edge
:=
&
sqlgraph
.
EdgeSpec
{
Rel
:
sqlgraph
.
O2M
,
Inverse
:
false
,
Table
:
user
.
PromoCodeUsagesTable
,
Columns
:
[]
string
{
user
.
PromoCodeUsagesColumn
},
Bidi
:
false
,
Target
:
&
sqlgraph
.
EdgeTarget
{
IDSpec
:
sqlgraph
.
NewFieldSpec
(
promocodeusage
.
FieldID
,
field
.
TypeInt64
),
},
}
_spec
.
Edges
.
Clear
=
append
(
_spec
.
Edges
.
Clear
,
edge
)
}
if
nodes
:=
_u
.
mutation
.
RemovedPromoCodeUsagesIDs
();
len
(
nodes
)
>
0
&&
!
_u
.
mutation
.
PromoCodeUsagesCleared
()
{
edge
:=
&
sqlgraph
.
EdgeSpec
{
Rel
:
sqlgraph
.
O2M
,
Inverse
:
false
,
Table
:
user
.
PromoCodeUsagesTable
,
Columns
:
[]
string
{
user
.
PromoCodeUsagesColumn
},
Bidi
:
false
,
Target
:
&
sqlgraph
.
EdgeTarget
{
IDSpec
:
sqlgraph
.
NewFieldSpec
(
promocodeusage
.
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
.
PromoCodeUsagesIDs
();
len
(
nodes
)
>
0
{
edge
:=
&
sqlgraph
.
EdgeSpec
{
Rel
:
sqlgraph
.
O2M
,
Inverse
:
false
,
Table
:
user
.
PromoCodeUsagesTable
,
Columns
:
[]
string
{
user
.
PromoCodeUsagesColumn
},
Bidi
:
false
,
Target
:
&
sqlgraph
.
EdgeTarget
{
IDSpec
:
sqlgraph
.
NewFieldSpec
(
promocodeusage
.
FieldID
,
field
.
TypeInt64
),
},
}
for
_
,
k
:=
range
nodes
{
edge
.
Target
.
Nodes
=
append
(
edge
.
Target
.
Nodes
,
k
)
}
_spec
.
Edges
.
Add
=
append
(
_spec
.
Edges
.
Add
,
edge
)
}
_node
=
&
User
{
config
:
_u
.
config
}
_spec
.
Assign
=
_node
.
assignValues
_spec
.
ScanValues
=
_node
.
scanValues
...
...
backend/ent/userallowedgroup_query.go
View file @
1a641392
...
...
@@ -8,6 +8,7 @@ import (
"math"
"entgo.io/ent"
"entgo.io/ent/dialect"
"entgo.io/ent/dialect/sql"
"entgo.io/ent/dialect/sql/sqlgraph"
"github.com/Wei-Shaw/sub2api/ent/group"
...
...
@@ -25,6 +26,7 @@ type UserAllowedGroupQuery struct {
predicates
[]
predicate
.
UserAllowedGroup
withUser
*
UserQuery
withGroup
*
GroupQuery
modifiers
[]
func
(
*
sql
.
Selector
)
// intermediate query (i.e. traversal path).
sql
*
sql
.
Selector
path
func
(
context
.
Context
)
(
*
sql
.
Selector
,
error
)
...
...
@@ -347,6 +349,9 @@ func (_q *UserAllowedGroupQuery) sqlAll(ctx context.Context, hooks ...queryHook)
node
.
Edges
.
loadedTypes
=
loadedTypes
return
node
.
assignValues
(
columns
,
values
)
}
if
len
(
_q
.
modifiers
)
>
0
{
_spec
.
Modifiers
=
_q
.
modifiers
}
for
i
:=
range
hooks
{
hooks
[
i
](
ctx
,
_spec
)
}
...
...
@@ -432,6 +437,9 @@ func (_q *UserAllowedGroupQuery) loadGroup(ctx context.Context, query *GroupQuer
func
(
_q
*
UserAllowedGroupQuery
)
sqlCount
(
ctx
context
.
Context
)
(
int
,
error
)
{
_spec
:=
_q
.
querySpec
()
if
len
(
_q
.
modifiers
)
>
0
{
_spec
.
Modifiers
=
_q
.
modifiers
}
_spec
.
Unique
=
false
_spec
.
Node
.
Columns
=
nil
return
sqlgraph
.
CountNodes
(
ctx
,
_q
.
driver
,
_spec
)
...
...
@@ -495,6 +503,9 @@ func (_q *UserAllowedGroupQuery) sqlQuery(ctx context.Context) *sql.Selector {
if
_q
.
ctx
.
Unique
!=
nil
&&
*
_q
.
ctx
.
Unique
{
selector
.
Distinct
()
}
for
_
,
m
:=
range
_q
.
modifiers
{
m
(
selector
)
}
for
_
,
p
:=
range
_q
.
predicates
{
p
(
selector
)
}
...
...
@@ -512,6 +523,32 @@ func (_q *UserAllowedGroupQuery) sqlQuery(ctx context.Context) *sql.Selector {
return
selector
}
// ForUpdate locks the selected rows against concurrent updates, and prevent them from being
// updated, deleted or "selected ... for update" by other sessions, until the transaction is
// either committed or rolled-back.
func
(
_q
*
UserAllowedGroupQuery
)
ForUpdate
(
opts
...
sql
.
LockOption
)
*
UserAllowedGroupQuery
{
if
_q
.
driver
.
Dialect
()
==
dialect
.
Postgres
{
_q
.
Unique
(
false
)
}
_q
.
modifiers
=
append
(
_q
.
modifiers
,
func
(
s
*
sql
.
Selector
)
{
s
.
ForUpdate
(
opts
...
)
})
return
_q
}
// ForShare behaves similarly to ForUpdate, except that it acquires a shared mode lock
// on any rows that are read. Other sessions can read the rows, but cannot modify them
// until your transaction commits.
func
(
_q
*
UserAllowedGroupQuery
)
ForShare
(
opts
...
sql
.
LockOption
)
*
UserAllowedGroupQuery
{
if
_q
.
driver
.
Dialect
()
==
dialect
.
Postgres
{
_q
.
Unique
(
false
)
}
_q
.
modifiers
=
append
(
_q
.
modifiers
,
func
(
s
*
sql
.
Selector
)
{
s
.
ForShare
(
opts
...
)
})
return
_q
}
// UserAllowedGroupGroupBy is the group-by builder for UserAllowedGroup entities.
type
UserAllowedGroupGroupBy
struct
{
selector
...
...
backend/ent/userattributedefinition_query.go
View file @
1a641392
...
...
@@ -9,6 +9,7 @@ import (
"math"
"entgo.io/ent"
"entgo.io/ent/dialect"
"entgo.io/ent/dialect/sql"
"entgo.io/ent/dialect/sql/sqlgraph"
"entgo.io/ent/schema/field"
...
...
@@ -25,6 +26,7 @@ type UserAttributeDefinitionQuery struct {
inters
[]
Interceptor
predicates
[]
predicate
.
UserAttributeDefinition
withValues
*
UserAttributeValueQuery
modifiers
[]
func
(
*
sql
.
Selector
)
// intermediate query (i.e. traversal path).
sql
*
sql
.
Selector
path
func
(
context
.
Context
)
(
*
sql
.
Selector
,
error
)
...
...
@@ -384,6 +386,9 @@ func (_q *UserAttributeDefinitionQuery) sqlAll(ctx context.Context, hooks ...que
node
.
Edges
.
loadedTypes
=
loadedTypes
return
node
.
assignValues
(
columns
,
values
)
}
if
len
(
_q
.
modifiers
)
>
0
{
_spec
.
Modifiers
=
_q
.
modifiers
}
for
i
:=
range
hooks
{
hooks
[
i
](
ctx
,
_spec
)
}
...
...
@@ -436,6 +441,9 @@ func (_q *UserAttributeDefinitionQuery) loadValues(ctx context.Context, query *U
func
(
_q
*
UserAttributeDefinitionQuery
)
sqlCount
(
ctx
context
.
Context
)
(
int
,
error
)
{
_spec
:=
_q
.
querySpec
()
if
len
(
_q
.
modifiers
)
>
0
{
_spec
.
Modifiers
=
_q
.
modifiers
}
_spec
.
Node
.
Columns
=
_q
.
ctx
.
Fields
if
len
(
_q
.
ctx
.
Fields
)
>
0
{
_spec
.
Unique
=
_q
.
ctx
.
Unique
!=
nil
&&
*
_q
.
ctx
.
Unique
...
...
@@ -498,6 +506,9 @@ func (_q *UserAttributeDefinitionQuery) sqlQuery(ctx context.Context) *sql.Selec
if
_q
.
ctx
.
Unique
!=
nil
&&
*
_q
.
ctx
.
Unique
{
selector
.
Distinct
()
}
for
_
,
m
:=
range
_q
.
modifiers
{
m
(
selector
)
}
for
_
,
p
:=
range
_q
.
predicates
{
p
(
selector
)
}
...
...
@@ -515,6 +526,32 @@ func (_q *UserAttributeDefinitionQuery) sqlQuery(ctx context.Context) *sql.Selec
return
selector
}
// ForUpdate locks the selected rows against concurrent updates, and prevent them from being
// updated, deleted or "selected ... for update" by other sessions, until the transaction is
// either committed or rolled-back.
func
(
_q
*
UserAttributeDefinitionQuery
)
ForUpdate
(
opts
...
sql
.
LockOption
)
*
UserAttributeDefinitionQuery
{
if
_q
.
driver
.
Dialect
()
==
dialect
.
Postgres
{
_q
.
Unique
(
false
)
}
_q
.
modifiers
=
append
(
_q
.
modifiers
,
func
(
s
*
sql
.
Selector
)
{
s
.
ForUpdate
(
opts
...
)
})
return
_q
}
// ForShare behaves similarly to ForUpdate, except that it acquires a shared mode lock
// on any rows that are read. Other sessions can read the rows, but cannot modify them
// until your transaction commits.
func
(
_q
*
UserAttributeDefinitionQuery
)
ForShare
(
opts
...
sql
.
LockOption
)
*
UserAttributeDefinitionQuery
{
if
_q
.
driver
.
Dialect
()
==
dialect
.
Postgres
{
_q
.
Unique
(
false
)
}
_q
.
modifiers
=
append
(
_q
.
modifiers
,
func
(
s
*
sql
.
Selector
)
{
s
.
ForShare
(
opts
...
)
})
return
_q
}
// UserAttributeDefinitionGroupBy is the group-by builder for UserAttributeDefinition entities.
type
UserAttributeDefinitionGroupBy
struct
{
selector
...
...
Prev
1
2
3
4
5
6
7
…
9
Next
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment