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
377bffe2
Commit
377bffe2
authored
Feb 03, 2026
by
yangjianbo
Browse files
Merge branch 'main' into test
parents
99250ec5
31fe0178
Changes
235
Show whitespace changes
Inline
Side-by-side
backend/ent/announcementread_create.go
0 → 100644
View file @
377bffe2
// Code generated by ent, DO NOT EDIT.
package
ent
import
(
"context"
"errors"
"fmt"
"time"
"entgo.io/ent/dialect/sql"
"entgo.io/ent/dialect/sql/sqlgraph"
"entgo.io/ent/schema/field"
"github.com/Wei-Shaw/sub2api/ent/announcement"
"github.com/Wei-Shaw/sub2api/ent/announcementread"
"github.com/Wei-Shaw/sub2api/ent/user"
)
// AnnouncementReadCreate is the builder for creating a AnnouncementRead entity.
type
AnnouncementReadCreate
struct
{
config
mutation
*
AnnouncementReadMutation
hooks
[]
Hook
conflict
[]
sql
.
ConflictOption
}
// SetAnnouncementID sets the "announcement_id" field.
func
(
_c
*
AnnouncementReadCreate
)
SetAnnouncementID
(
v
int64
)
*
AnnouncementReadCreate
{
_c
.
mutation
.
SetAnnouncementID
(
v
)
return
_c
}
// SetUserID sets the "user_id" field.
func
(
_c
*
AnnouncementReadCreate
)
SetUserID
(
v
int64
)
*
AnnouncementReadCreate
{
_c
.
mutation
.
SetUserID
(
v
)
return
_c
}
// SetReadAt sets the "read_at" field.
func
(
_c
*
AnnouncementReadCreate
)
SetReadAt
(
v
time
.
Time
)
*
AnnouncementReadCreate
{
_c
.
mutation
.
SetReadAt
(
v
)
return
_c
}
// SetNillableReadAt sets the "read_at" field if the given value is not nil.
func
(
_c
*
AnnouncementReadCreate
)
SetNillableReadAt
(
v
*
time
.
Time
)
*
AnnouncementReadCreate
{
if
v
!=
nil
{
_c
.
SetReadAt
(
*
v
)
}
return
_c
}
// SetCreatedAt sets the "created_at" field.
func
(
_c
*
AnnouncementReadCreate
)
SetCreatedAt
(
v
time
.
Time
)
*
AnnouncementReadCreate
{
_c
.
mutation
.
SetCreatedAt
(
v
)
return
_c
}
// SetNillableCreatedAt sets the "created_at" field if the given value is not nil.
func
(
_c
*
AnnouncementReadCreate
)
SetNillableCreatedAt
(
v
*
time
.
Time
)
*
AnnouncementReadCreate
{
if
v
!=
nil
{
_c
.
SetCreatedAt
(
*
v
)
}
return
_c
}
// SetAnnouncement sets the "announcement" edge to the Announcement entity.
func
(
_c
*
AnnouncementReadCreate
)
SetAnnouncement
(
v
*
Announcement
)
*
AnnouncementReadCreate
{
return
_c
.
SetAnnouncementID
(
v
.
ID
)
}
// SetUser sets the "user" edge to the User entity.
func
(
_c
*
AnnouncementReadCreate
)
SetUser
(
v
*
User
)
*
AnnouncementReadCreate
{
return
_c
.
SetUserID
(
v
.
ID
)
}
// Mutation returns the AnnouncementReadMutation object of the builder.
func
(
_c
*
AnnouncementReadCreate
)
Mutation
()
*
AnnouncementReadMutation
{
return
_c
.
mutation
}
// Save creates the AnnouncementRead in the database.
func
(
_c
*
AnnouncementReadCreate
)
Save
(
ctx
context
.
Context
)
(
*
AnnouncementRead
,
error
)
{
_c
.
defaults
()
return
withHooks
(
ctx
,
_c
.
sqlSave
,
_c
.
mutation
,
_c
.
hooks
)
}
// SaveX calls Save and panics if Save returns an error.
func
(
_c
*
AnnouncementReadCreate
)
SaveX
(
ctx
context
.
Context
)
*
AnnouncementRead
{
v
,
err
:=
_c
.
Save
(
ctx
)
if
err
!=
nil
{
panic
(
err
)
}
return
v
}
// Exec executes the query.
func
(
_c
*
AnnouncementReadCreate
)
Exec
(
ctx
context
.
Context
)
error
{
_
,
err
:=
_c
.
Save
(
ctx
)
return
err
}
// ExecX is like Exec, but panics if an error occurs.
func
(
_c
*
AnnouncementReadCreate
)
ExecX
(
ctx
context
.
Context
)
{
if
err
:=
_c
.
Exec
(
ctx
);
err
!=
nil
{
panic
(
err
)
}
}
// defaults sets the default values of the builder before save.
func
(
_c
*
AnnouncementReadCreate
)
defaults
()
{
if
_
,
ok
:=
_c
.
mutation
.
ReadAt
();
!
ok
{
v
:=
announcementread
.
DefaultReadAt
()
_c
.
mutation
.
SetReadAt
(
v
)
}
if
_
,
ok
:=
_c
.
mutation
.
CreatedAt
();
!
ok
{
v
:=
announcementread
.
DefaultCreatedAt
()
_c
.
mutation
.
SetCreatedAt
(
v
)
}
}
// check runs all checks and user-defined validators on the builder.
func
(
_c
*
AnnouncementReadCreate
)
check
()
error
{
if
_
,
ok
:=
_c
.
mutation
.
AnnouncementID
();
!
ok
{
return
&
ValidationError
{
Name
:
"announcement_id"
,
err
:
errors
.
New
(
`ent: missing required field "AnnouncementRead.announcement_id"`
)}
}
if
_
,
ok
:=
_c
.
mutation
.
UserID
();
!
ok
{
return
&
ValidationError
{
Name
:
"user_id"
,
err
:
errors
.
New
(
`ent: missing required field "AnnouncementRead.user_id"`
)}
}
if
_
,
ok
:=
_c
.
mutation
.
ReadAt
();
!
ok
{
return
&
ValidationError
{
Name
:
"read_at"
,
err
:
errors
.
New
(
`ent: missing required field "AnnouncementRead.read_at"`
)}
}
if
_
,
ok
:=
_c
.
mutation
.
CreatedAt
();
!
ok
{
return
&
ValidationError
{
Name
:
"created_at"
,
err
:
errors
.
New
(
`ent: missing required field "AnnouncementRead.created_at"`
)}
}
if
len
(
_c
.
mutation
.
AnnouncementIDs
())
==
0
{
return
&
ValidationError
{
Name
:
"announcement"
,
err
:
errors
.
New
(
`ent: missing required edge "AnnouncementRead.announcement"`
)}
}
if
len
(
_c
.
mutation
.
UserIDs
())
==
0
{
return
&
ValidationError
{
Name
:
"user"
,
err
:
errors
.
New
(
`ent: missing required edge "AnnouncementRead.user"`
)}
}
return
nil
}
func
(
_c
*
AnnouncementReadCreate
)
sqlSave
(
ctx
context
.
Context
)
(
*
AnnouncementRead
,
error
)
{
if
err
:=
_c
.
check
();
err
!=
nil
{
return
nil
,
err
}
_node
,
_spec
:=
_c
.
createSpec
()
if
err
:=
sqlgraph
.
CreateNode
(
ctx
,
_c
.
driver
,
_spec
);
err
!=
nil
{
if
sqlgraph
.
IsConstraintError
(
err
)
{
err
=
&
ConstraintError
{
msg
:
err
.
Error
(),
wrap
:
err
}
}
return
nil
,
err
}
id
:=
_spec
.
ID
.
Value
.
(
int64
)
_node
.
ID
=
int64
(
id
)
_c
.
mutation
.
id
=
&
_node
.
ID
_c
.
mutation
.
done
=
true
return
_node
,
nil
}
func
(
_c
*
AnnouncementReadCreate
)
createSpec
()
(
*
AnnouncementRead
,
*
sqlgraph
.
CreateSpec
)
{
var
(
_node
=
&
AnnouncementRead
{
config
:
_c
.
config
}
_spec
=
sqlgraph
.
NewCreateSpec
(
announcementread
.
Table
,
sqlgraph
.
NewFieldSpec
(
announcementread
.
FieldID
,
field
.
TypeInt64
))
)
_spec
.
OnConflict
=
_c
.
conflict
if
value
,
ok
:=
_c
.
mutation
.
ReadAt
();
ok
{
_spec
.
SetField
(
announcementread
.
FieldReadAt
,
field
.
TypeTime
,
value
)
_node
.
ReadAt
=
value
}
if
value
,
ok
:=
_c
.
mutation
.
CreatedAt
();
ok
{
_spec
.
SetField
(
announcementread
.
FieldCreatedAt
,
field
.
TypeTime
,
value
)
_node
.
CreatedAt
=
value
}
if
nodes
:=
_c
.
mutation
.
AnnouncementIDs
();
len
(
nodes
)
>
0
{
edge
:=
&
sqlgraph
.
EdgeSpec
{
Rel
:
sqlgraph
.
M2O
,
Inverse
:
true
,
Table
:
announcementread
.
AnnouncementTable
,
Columns
:
[]
string
{
announcementread
.
AnnouncementColumn
},
Bidi
:
false
,
Target
:
&
sqlgraph
.
EdgeTarget
{
IDSpec
:
sqlgraph
.
NewFieldSpec
(
announcement
.
FieldID
,
field
.
TypeInt64
),
},
}
for
_
,
k
:=
range
nodes
{
edge
.
Target
.
Nodes
=
append
(
edge
.
Target
.
Nodes
,
k
)
}
_node
.
AnnouncementID
=
nodes
[
0
]
_spec
.
Edges
=
append
(
_spec
.
Edges
,
edge
)
}
if
nodes
:=
_c
.
mutation
.
UserIDs
();
len
(
nodes
)
>
0
{
edge
:=
&
sqlgraph
.
EdgeSpec
{
Rel
:
sqlgraph
.
M2O
,
Inverse
:
true
,
Table
:
announcementread
.
UserTable
,
Columns
:
[]
string
{
announcementread
.
UserColumn
},
Bidi
:
false
,
Target
:
&
sqlgraph
.
EdgeTarget
{
IDSpec
:
sqlgraph
.
NewFieldSpec
(
user
.
FieldID
,
field
.
TypeInt64
),
},
}
for
_
,
k
:=
range
nodes
{
edge
.
Target
.
Nodes
=
append
(
edge
.
Target
.
Nodes
,
k
)
}
_node
.
UserID
=
nodes
[
0
]
_spec
.
Edges
=
append
(
_spec
.
Edges
,
edge
)
}
return
_node
,
_spec
}
// OnConflict allows configuring the `ON CONFLICT` / `ON DUPLICATE KEY` clause
// of the `INSERT` statement. For example:
//
// client.AnnouncementRead.Create().
// SetAnnouncementID(v).
// OnConflict(
// // Update the row with the new values
// // the was proposed for insertion.
// sql.ResolveWithNewValues(),
// ).
// // Override some of the fields with custom
// // update values.
// Update(func(u *ent.AnnouncementReadUpsert) {
// SetAnnouncementID(v+v).
// }).
// Exec(ctx)
func
(
_c
*
AnnouncementReadCreate
)
OnConflict
(
opts
...
sql
.
ConflictOption
)
*
AnnouncementReadUpsertOne
{
_c
.
conflict
=
opts
return
&
AnnouncementReadUpsertOne
{
create
:
_c
,
}
}
// OnConflictColumns calls `OnConflict` and configures the columns
// as conflict target. Using this option is equivalent to using:
//
// client.AnnouncementRead.Create().
// OnConflict(sql.ConflictColumns(columns...)).
// Exec(ctx)
func
(
_c
*
AnnouncementReadCreate
)
OnConflictColumns
(
columns
...
string
)
*
AnnouncementReadUpsertOne
{
_c
.
conflict
=
append
(
_c
.
conflict
,
sql
.
ConflictColumns
(
columns
...
))
return
&
AnnouncementReadUpsertOne
{
create
:
_c
,
}
}
type
(
// AnnouncementReadUpsertOne is the builder for "upsert"-ing
// one AnnouncementRead node.
AnnouncementReadUpsertOne
struct
{
create
*
AnnouncementReadCreate
}
// AnnouncementReadUpsert is the "OnConflict" setter.
AnnouncementReadUpsert
struct
{
*
sql
.
UpdateSet
}
)
// SetAnnouncementID sets the "announcement_id" field.
func
(
u
*
AnnouncementReadUpsert
)
SetAnnouncementID
(
v
int64
)
*
AnnouncementReadUpsert
{
u
.
Set
(
announcementread
.
FieldAnnouncementID
,
v
)
return
u
}
// UpdateAnnouncementID sets the "announcement_id" field to the value that was provided on create.
func
(
u
*
AnnouncementReadUpsert
)
UpdateAnnouncementID
()
*
AnnouncementReadUpsert
{
u
.
SetExcluded
(
announcementread
.
FieldAnnouncementID
)
return
u
}
// SetUserID sets the "user_id" field.
func
(
u
*
AnnouncementReadUpsert
)
SetUserID
(
v
int64
)
*
AnnouncementReadUpsert
{
u
.
Set
(
announcementread
.
FieldUserID
,
v
)
return
u
}
// UpdateUserID sets the "user_id" field to the value that was provided on create.
func
(
u
*
AnnouncementReadUpsert
)
UpdateUserID
()
*
AnnouncementReadUpsert
{
u
.
SetExcluded
(
announcementread
.
FieldUserID
)
return
u
}
// SetReadAt sets the "read_at" field.
func
(
u
*
AnnouncementReadUpsert
)
SetReadAt
(
v
time
.
Time
)
*
AnnouncementReadUpsert
{
u
.
Set
(
announcementread
.
FieldReadAt
,
v
)
return
u
}
// UpdateReadAt sets the "read_at" field to the value that was provided on create.
func
(
u
*
AnnouncementReadUpsert
)
UpdateReadAt
()
*
AnnouncementReadUpsert
{
u
.
SetExcluded
(
announcementread
.
FieldReadAt
)
return
u
}
// UpdateNewValues updates the mutable fields using the new values that were set on create.
// Using this option is equivalent to using:
//
// client.AnnouncementRead.Create().
// OnConflict(
// sql.ResolveWithNewValues(),
// ).
// Exec(ctx)
func
(
u
*
AnnouncementReadUpsertOne
)
UpdateNewValues
()
*
AnnouncementReadUpsertOne
{
u
.
create
.
conflict
=
append
(
u
.
create
.
conflict
,
sql
.
ResolveWithNewValues
())
u
.
create
.
conflict
=
append
(
u
.
create
.
conflict
,
sql
.
ResolveWith
(
func
(
s
*
sql
.
UpdateSet
)
{
if
_
,
exists
:=
u
.
create
.
mutation
.
CreatedAt
();
exists
{
s
.
SetIgnore
(
announcementread
.
FieldCreatedAt
)
}
}))
return
u
}
// Ignore sets each column to itself in case of conflict.
// Using this option is equivalent to using:
//
// client.AnnouncementRead.Create().
// OnConflict(sql.ResolveWithIgnore()).
// Exec(ctx)
func
(
u
*
AnnouncementReadUpsertOne
)
Ignore
()
*
AnnouncementReadUpsertOne
{
u
.
create
.
conflict
=
append
(
u
.
create
.
conflict
,
sql
.
ResolveWithIgnore
())
return
u
}
// DoNothing configures the conflict_action to `DO NOTHING`.
// Supported only by SQLite and PostgreSQL.
func
(
u
*
AnnouncementReadUpsertOne
)
DoNothing
()
*
AnnouncementReadUpsertOne
{
u
.
create
.
conflict
=
append
(
u
.
create
.
conflict
,
sql
.
DoNothing
())
return
u
}
// Update allows overriding fields `UPDATE` values. See the AnnouncementReadCreate.OnConflict
// documentation for more info.
func
(
u
*
AnnouncementReadUpsertOne
)
Update
(
set
func
(
*
AnnouncementReadUpsert
))
*
AnnouncementReadUpsertOne
{
u
.
create
.
conflict
=
append
(
u
.
create
.
conflict
,
sql
.
ResolveWith
(
func
(
update
*
sql
.
UpdateSet
)
{
set
(
&
AnnouncementReadUpsert
{
UpdateSet
:
update
})
}))
return
u
}
// SetAnnouncementID sets the "announcement_id" field.
func
(
u
*
AnnouncementReadUpsertOne
)
SetAnnouncementID
(
v
int64
)
*
AnnouncementReadUpsertOne
{
return
u
.
Update
(
func
(
s
*
AnnouncementReadUpsert
)
{
s
.
SetAnnouncementID
(
v
)
})
}
// UpdateAnnouncementID sets the "announcement_id" field to the value that was provided on create.
func
(
u
*
AnnouncementReadUpsertOne
)
UpdateAnnouncementID
()
*
AnnouncementReadUpsertOne
{
return
u
.
Update
(
func
(
s
*
AnnouncementReadUpsert
)
{
s
.
UpdateAnnouncementID
()
})
}
// SetUserID sets the "user_id" field.
func
(
u
*
AnnouncementReadUpsertOne
)
SetUserID
(
v
int64
)
*
AnnouncementReadUpsertOne
{
return
u
.
Update
(
func
(
s
*
AnnouncementReadUpsert
)
{
s
.
SetUserID
(
v
)
})
}
// UpdateUserID sets the "user_id" field to the value that was provided on create.
func
(
u
*
AnnouncementReadUpsertOne
)
UpdateUserID
()
*
AnnouncementReadUpsertOne
{
return
u
.
Update
(
func
(
s
*
AnnouncementReadUpsert
)
{
s
.
UpdateUserID
()
})
}
// SetReadAt sets the "read_at" field.
func
(
u
*
AnnouncementReadUpsertOne
)
SetReadAt
(
v
time
.
Time
)
*
AnnouncementReadUpsertOne
{
return
u
.
Update
(
func
(
s
*
AnnouncementReadUpsert
)
{
s
.
SetReadAt
(
v
)
})
}
// UpdateReadAt sets the "read_at" field to the value that was provided on create.
func
(
u
*
AnnouncementReadUpsertOne
)
UpdateReadAt
()
*
AnnouncementReadUpsertOne
{
return
u
.
Update
(
func
(
s
*
AnnouncementReadUpsert
)
{
s
.
UpdateReadAt
()
})
}
// Exec executes the query.
func
(
u
*
AnnouncementReadUpsertOne
)
Exec
(
ctx
context
.
Context
)
error
{
if
len
(
u
.
create
.
conflict
)
==
0
{
return
errors
.
New
(
"ent: missing options for AnnouncementReadCreate.OnConflict"
)
}
return
u
.
create
.
Exec
(
ctx
)
}
// ExecX is like Exec, but panics if an error occurs.
func
(
u
*
AnnouncementReadUpsertOne
)
ExecX
(
ctx
context
.
Context
)
{
if
err
:=
u
.
create
.
Exec
(
ctx
);
err
!=
nil
{
panic
(
err
)
}
}
// Exec executes the UPSERT query and returns the inserted/updated ID.
func
(
u
*
AnnouncementReadUpsertOne
)
ID
(
ctx
context
.
Context
)
(
id
int64
,
err
error
)
{
node
,
err
:=
u
.
create
.
Save
(
ctx
)
if
err
!=
nil
{
return
id
,
err
}
return
node
.
ID
,
nil
}
// IDX is like ID, but panics if an error occurs.
func
(
u
*
AnnouncementReadUpsertOne
)
IDX
(
ctx
context
.
Context
)
int64
{
id
,
err
:=
u
.
ID
(
ctx
)
if
err
!=
nil
{
panic
(
err
)
}
return
id
}
// AnnouncementReadCreateBulk is the builder for creating many AnnouncementRead entities in bulk.
type
AnnouncementReadCreateBulk
struct
{
config
err
error
builders
[]
*
AnnouncementReadCreate
conflict
[]
sql
.
ConflictOption
}
// Save creates the AnnouncementRead entities in the database.
func
(
_c
*
AnnouncementReadCreateBulk
)
Save
(
ctx
context
.
Context
)
([]
*
AnnouncementRead
,
error
)
{
if
_c
.
err
!=
nil
{
return
nil
,
_c
.
err
}
specs
:=
make
([]
*
sqlgraph
.
CreateSpec
,
len
(
_c
.
builders
))
nodes
:=
make
([]
*
AnnouncementRead
,
len
(
_c
.
builders
))
mutators
:=
make
([]
Mutator
,
len
(
_c
.
builders
))
for
i
:=
range
_c
.
builders
{
func
(
i
int
,
root
context
.
Context
)
{
builder
:=
_c
.
builders
[
i
]
builder
.
defaults
()
var
mut
Mutator
=
MutateFunc
(
func
(
ctx
context
.
Context
,
m
Mutation
)
(
Value
,
error
)
{
mutation
,
ok
:=
m
.
(
*
AnnouncementReadMutation
)
if
!
ok
{
return
nil
,
fmt
.
Errorf
(
"unexpected mutation type %T"
,
m
)
}
if
err
:=
builder
.
check
();
err
!=
nil
{
return
nil
,
err
}
builder
.
mutation
=
mutation
var
err
error
nodes
[
i
],
specs
[
i
]
=
builder
.
createSpec
()
if
i
<
len
(
mutators
)
-
1
{
_
,
err
=
mutators
[
i
+
1
]
.
Mutate
(
root
,
_c
.
builders
[
i
+
1
]
.
mutation
)
}
else
{
spec
:=
&
sqlgraph
.
BatchCreateSpec
{
Nodes
:
specs
}
spec
.
OnConflict
=
_c
.
conflict
// Invoke the actual operation on the latest mutation in the chain.
if
err
=
sqlgraph
.
BatchCreate
(
ctx
,
_c
.
driver
,
spec
);
err
!=
nil
{
if
sqlgraph
.
IsConstraintError
(
err
)
{
err
=
&
ConstraintError
{
msg
:
err
.
Error
(),
wrap
:
err
}
}
}
}
if
err
!=
nil
{
return
nil
,
err
}
mutation
.
id
=
&
nodes
[
i
]
.
ID
if
specs
[
i
]
.
ID
.
Value
!=
nil
{
id
:=
specs
[
i
]
.
ID
.
Value
.
(
int64
)
nodes
[
i
]
.
ID
=
int64
(
id
)
}
mutation
.
done
=
true
return
nodes
[
i
],
nil
})
for
i
:=
len
(
builder
.
hooks
)
-
1
;
i
>=
0
;
i
--
{
mut
=
builder
.
hooks
[
i
](
mut
)
}
mutators
[
i
]
=
mut
}(
i
,
ctx
)
}
if
len
(
mutators
)
>
0
{
if
_
,
err
:=
mutators
[
0
]
.
Mutate
(
ctx
,
_c
.
builders
[
0
]
.
mutation
);
err
!=
nil
{
return
nil
,
err
}
}
return
nodes
,
nil
}
// SaveX is like Save, but panics if an error occurs.
func
(
_c
*
AnnouncementReadCreateBulk
)
SaveX
(
ctx
context
.
Context
)
[]
*
AnnouncementRead
{
v
,
err
:=
_c
.
Save
(
ctx
)
if
err
!=
nil
{
panic
(
err
)
}
return
v
}
// Exec executes the query.
func
(
_c
*
AnnouncementReadCreateBulk
)
Exec
(
ctx
context
.
Context
)
error
{
_
,
err
:=
_c
.
Save
(
ctx
)
return
err
}
// ExecX is like Exec, but panics if an error occurs.
func
(
_c
*
AnnouncementReadCreateBulk
)
ExecX
(
ctx
context
.
Context
)
{
if
err
:=
_c
.
Exec
(
ctx
);
err
!=
nil
{
panic
(
err
)
}
}
// OnConflict allows configuring the `ON CONFLICT` / `ON DUPLICATE KEY` clause
// of the `INSERT` statement. For example:
//
// client.AnnouncementRead.CreateBulk(builders...).
// OnConflict(
// // Update the row with the new values
// // the was proposed for insertion.
// sql.ResolveWithNewValues(),
// ).
// // Override some of the fields with custom
// // update values.
// Update(func(u *ent.AnnouncementReadUpsert) {
// SetAnnouncementID(v+v).
// }).
// Exec(ctx)
func
(
_c
*
AnnouncementReadCreateBulk
)
OnConflict
(
opts
...
sql
.
ConflictOption
)
*
AnnouncementReadUpsertBulk
{
_c
.
conflict
=
opts
return
&
AnnouncementReadUpsertBulk
{
create
:
_c
,
}
}
// OnConflictColumns calls `OnConflict` and configures the columns
// as conflict target. Using this option is equivalent to using:
//
// client.AnnouncementRead.Create().
// OnConflict(sql.ConflictColumns(columns...)).
// Exec(ctx)
func
(
_c
*
AnnouncementReadCreateBulk
)
OnConflictColumns
(
columns
...
string
)
*
AnnouncementReadUpsertBulk
{
_c
.
conflict
=
append
(
_c
.
conflict
,
sql
.
ConflictColumns
(
columns
...
))
return
&
AnnouncementReadUpsertBulk
{
create
:
_c
,
}
}
// AnnouncementReadUpsertBulk is the builder for "upsert"-ing
// a bulk of AnnouncementRead nodes.
type
AnnouncementReadUpsertBulk
struct
{
create
*
AnnouncementReadCreateBulk
}
// UpdateNewValues updates the mutable fields using the new values that
// were set on create. Using this option is equivalent to using:
//
// client.AnnouncementRead.Create().
// OnConflict(
// sql.ResolveWithNewValues(),
// ).
// Exec(ctx)
func
(
u
*
AnnouncementReadUpsertBulk
)
UpdateNewValues
()
*
AnnouncementReadUpsertBulk
{
u
.
create
.
conflict
=
append
(
u
.
create
.
conflict
,
sql
.
ResolveWithNewValues
())
u
.
create
.
conflict
=
append
(
u
.
create
.
conflict
,
sql
.
ResolveWith
(
func
(
s
*
sql
.
UpdateSet
)
{
for
_
,
b
:=
range
u
.
create
.
builders
{
if
_
,
exists
:=
b
.
mutation
.
CreatedAt
();
exists
{
s
.
SetIgnore
(
announcementread
.
FieldCreatedAt
)
}
}
}))
return
u
}
// Ignore sets each column to itself in case of conflict.
// Using this option is equivalent to using:
//
// client.AnnouncementRead.Create().
// OnConflict(sql.ResolveWithIgnore()).
// Exec(ctx)
func
(
u
*
AnnouncementReadUpsertBulk
)
Ignore
()
*
AnnouncementReadUpsertBulk
{
u
.
create
.
conflict
=
append
(
u
.
create
.
conflict
,
sql
.
ResolveWithIgnore
())
return
u
}
// DoNothing configures the conflict_action to `DO NOTHING`.
// Supported only by SQLite and PostgreSQL.
func
(
u
*
AnnouncementReadUpsertBulk
)
DoNothing
()
*
AnnouncementReadUpsertBulk
{
u
.
create
.
conflict
=
append
(
u
.
create
.
conflict
,
sql
.
DoNothing
())
return
u
}
// Update allows overriding fields `UPDATE` values. See the AnnouncementReadCreateBulk.OnConflict
// documentation for more info.
func
(
u
*
AnnouncementReadUpsertBulk
)
Update
(
set
func
(
*
AnnouncementReadUpsert
))
*
AnnouncementReadUpsertBulk
{
u
.
create
.
conflict
=
append
(
u
.
create
.
conflict
,
sql
.
ResolveWith
(
func
(
update
*
sql
.
UpdateSet
)
{
set
(
&
AnnouncementReadUpsert
{
UpdateSet
:
update
})
}))
return
u
}
// SetAnnouncementID sets the "announcement_id" field.
func
(
u
*
AnnouncementReadUpsertBulk
)
SetAnnouncementID
(
v
int64
)
*
AnnouncementReadUpsertBulk
{
return
u
.
Update
(
func
(
s
*
AnnouncementReadUpsert
)
{
s
.
SetAnnouncementID
(
v
)
})
}
// UpdateAnnouncementID sets the "announcement_id" field to the value that was provided on create.
func
(
u
*
AnnouncementReadUpsertBulk
)
UpdateAnnouncementID
()
*
AnnouncementReadUpsertBulk
{
return
u
.
Update
(
func
(
s
*
AnnouncementReadUpsert
)
{
s
.
UpdateAnnouncementID
()
})
}
// SetUserID sets the "user_id" field.
func
(
u
*
AnnouncementReadUpsertBulk
)
SetUserID
(
v
int64
)
*
AnnouncementReadUpsertBulk
{
return
u
.
Update
(
func
(
s
*
AnnouncementReadUpsert
)
{
s
.
SetUserID
(
v
)
})
}
// UpdateUserID sets the "user_id" field to the value that was provided on create.
func
(
u
*
AnnouncementReadUpsertBulk
)
UpdateUserID
()
*
AnnouncementReadUpsertBulk
{
return
u
.
Update
(
func
(
s
*
AnnouncementReadUpsert
)
{
s
.
UpdateUserID
()
})
}
// SetReadAt sets the "read_at" field.
func
(
u
*
AnnouncementReadUpsertBulk
)
SetReadAt
(
v
time
.
Time
)
*
AnnouncementReadUpsertBulk
{
return
u
.
Update
(
func
(
s
*
AnnouncementReadUpsert
)
{
s
.
SetReadAt
(
v
)
})
}
// UpdateReadAt sets the "read_at" field to the value that was provided on create.
func
(
u
*
AnnouncementReadUpsertBulk
)
UpdateReadAt
()
*
AnnouncementReadUpsertBulk
{
return
u
.
Update
(
func
(
s
*
AnnouncementReadUpsert
)
{
s
.
UpdateReadAt
()
})
}
// Exec executes the query.
func
(
u
*
AnnouncementReadUpsertBulk
)
Exec
(
ctx
context
.
Context
)
error
{
if
u
.
create
.
err
!=
nil
{
return
u
.
create
.
err
}
for
i
,
b
:=
range
u
.
create
.
builders
{
if
len
(
b
.
conflict
)
!=
0
{
return
fmt
.
Errorf
(
"ent: OnConflict was set for builder %d. Set it on the AnnouncementReadCreateBulk instead"
,
i
)
}
}
if
len
(
u
.
create
.
conflict
)
==
0
{
return
errors
.
New
(
"ent: missing options for AnnouncementReadCreateBulk.OnConflict"
)
}
return
u
.
create
.
Exec
(
ctx
)
}
// ExecX is like Exec, but panics if an error occurs.
func
(
u
*
AnnouncementReadUpsertBulk
)
ExecX
(
ctx
context
.
Context
)
{
if
err
:=
u
.
create
.
Exec
(
ctx
);
err
!=
nil
{
panic
(
err
)
}
}
backend/ent/announcementread_delete.go
0 → 100644
View file @
377bffe2
// Code generated by ent, DO NOT EDIT.
package
ent
import
(
"context"
"entgo.io/ent/dialect/sql"
"entgo.io/ent/dialect/sql/sqlgraph"
"entgo.io/ent/schema/field"
"github.com/Wei-Shaw/sub2api/ent/announcementread"
"github.com/Wei-Shaw/sub2api/ent/predicate"
)
// AnnouncementReadDelete is the builder for deleting a AnnouncementRead entity.
type
AnnouncementReadDelete
struct
{
config
hooks
[]
Hook
mutation
*
AnnouncementReadMutation
}
// Where appends a list predicates to the AnnouncementReadDelete builder.
func
(
_d
*
AnnouncementReadDelete
)
Where
(
ps
...
predicate
.
AnnouncementRead
)
*
AnnouncementReadDelete
{
_d
.
mutation
.
Where
(
ps
...
)
return
_d
}
// Exec executes the deletion query and returns how many vertices were deleted.
func
(
_d
*
AnnouncementReadDelete
)
Exec
(
ctx
context
.
Context
)
(
int
,
error
)
{
return
withHooks
(
ctx
,
_d
.
sqlExec
,
_d
.
mutation
,
_d
.
hooks
)
}
// ExecX is like Exec, but panics if an error occurs.
func
(
_d
*
AnnouncementReadDelete
)
ExecX
(
ctx
context
.
Context
)
int
{
n
,
err
:=
_d
.
Exec
(
ctx
)
if
err
!=
nil
{
panic
(
err
)
}
return
n
}
func
(
_d
*
AnnouncementReadDelete
)
sqlExec
(
ctx
context
.
Context
)
(
int
,
error
)
{
_spec
:=
sqlgraph
.
NewDeleteSpec
(
announcementread
.
Table
,
sqlgraph
.
NewFieldSpec
(
announcementread
.
FieldID
,
field
.
TypeInt64
))
if
ps
:=
_d
.
mutation
.
predicates
;
len
(
ps
)
>
0
{
_spec
.
Predicate
=
func
(
selector
*
sql
.
Selector
)
{
for
i
:=
range
ps
{
ps
[
i
](
selector
)
}
}
}
affected
,
err
:=
sqlgraph
.
DeleteNodes
(
ctx
,
_d
.
driver
,
_spec
)
if
err
!=
nil
&&
sqlgraph
.
IsConstraintError
(
err
)
{
err
=
&
ConstraintError
{
msg
:
err
.
Error
(),
wrap
:
err
}
}
_d
.
mutation
.
done
=
true
return
affected
,
err
}
// AnnouncementReadDeleteOne is the builder for deleting a single AnnouncementRead entity.
type
AnnouncementReadDeleteOne
struct
{
_d
*
AnnouncementReadDelete
}
// Where appends a list predicates to the AnnouncementReadDelete builder.
func
(
_d
*
AnnouncementReadDeleteOne
)
Where
(
ps
...
predicate
.
AnnouncementRead
)
*
AnnouncementReadDeleteOne
{
_d
.
_d
.
mutation
.
Where
(
ps
...
)
return
_d
}
// Exec executes the deletion query.
func
(
_d
*
AnnouncementReadDeleteOne
)
Exec
(
ctx
context
.
Context
)
error
{
n
,
err
:=
_d
.
_d
.
Exec
(
ctx
)
switch
{
case
err
!=
nil
:
return
err
case
n
==
0
:
return
&
NotFoundError
{
announcementread
.
Label
}
default
:
return
nil
}
}
// ExecX is like Exec, but panics if an error occurs.
func
(
_d
*
AnnouncementReadDeleteOne
)
ExecX
(
ctx
context
.
Context
)
{
if
err
:=
_d
.
Exec
(
ctx
);
err
!=
nil
{
panic
(
err
)
}
}
backend/ent/announcementread_query.go
0 → 100644
View file @
377bffe2
// Code generated by ent, DO NOT EDIT.
package
ent
import
(
"context"
"fmt"
"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/announcement"
"github.com/Wei-Shaw/sub2api/ent/announcementread"
"github.com/Wei-Shaw/sub2api/ent/predicate"
"github.com/Wei-Shaw/sub2api/ent/user"
)
// AnnouncementReadQuery is the builder for querying AnnouncementRead entities.
type
AnnouncementReadQuery
struct
{
config
ctx
*
QueryContext
order
[]
announcementread
.
OrderOption
inters
[]
Interceptor
predicates
[]
predicate
.
AnnouncementRead
withAnnouncement
*
AnnouncementQuery
withUser
*
UserQuery
modifiers
[]
func
(
*
sql
.
Selector
)
// intermediate query (i.e. traversal path).
sql
*
sql
.
Selector
path
func
(
context
.
Context
)
(
*
sql
.
Selector
,
error
)
}
// Where adds a new predicate for the AnnouncementReadQuery builder.
func
(
_q
*
AnnouncementReadQuery
)
Where
(
ps
...
predicate
.
AnnouncementRead
)
*
AnnouncementReadQuery
{
_q
.
predicates
=
append
(
_q
.
predicates
,
ps
...
)
return
_q
}
// Limit the number of records to be returned by this query.
func
(
_q
*
AnnouncementReadQuery
)
Limit
(
limit
int
)
*
AnnouncementReadQuery
{
_q
.
ctx
.
Limit
=
&
limit
return
_q
}
// Offset to start from.
func
(
_q
*
AnnouncementReadQuery
)
Offset
(
offset
int
)
*
AnnouncementReadQuery
{
_q
.
ctx
.
Offset
=
&
offset
return
_q
}
// Unique configures the query builder to filter duplicate records on query.
// By default, unique is set to true, and can be disabled using this method.
func
(
_q
*
AnnouncementReadQuery
)
Unique
(
unique
bool
)
*
AnnouncementReadQuery
{
_q
.
ctx
.
Unique
=
&
unique
return
_q
}
// Order specifies how the records should be ordered.
func
(
_q
*
AnnouncementReadQuery
)
Order
(
o
...
announcementread
.
OrderOption
)
*
AnnouncementReadQuery
{
_q
.
order
=
append
(
_q
.
order
,
o
...
)
return
_q
}
// QueryAnnouncement chains the current query on the "announcement" edge.
func
(
_q
*
AnnouncementReadQuery
)
QueryAnnouncement
()
*
AnnouncementQuery
{
query
:=
(
&
AnnouncementClient
{
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
(
announcementread
.
Table
,
announcementread
.
FieldID
,
selector
),
sqlgraph
.
To
(
announcement
.
Table
,
announcement
.
FieldID
),
sqlgraph
.
Edge
(
sqlgraph
.
M2O
,
true
,
announcementread
.
AnnouncementTable
,
announcementread
.
AnnouncementColumn
),
)
fromU
=
sqlgraph
.
SetNeighbors
(
_q
.
driver
.
Dialect
(),
step
)
return
fromU
,
nil
}
return
query
}
// QueryUser chains the current query on the "user" edge.
func
(
_q
*
AnnouncementReadQuery
)
QueryUser
()
*
UserQuery
{
query
:=
(
&
UserClient
{
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
(
announcementread
.
Table
,
announcementread
.
FieldID
,
selector
),
sqlgraph
.
To
(
user
.
Table
,
user
.
FieldID
),
sqlgraph
.
Edge
(
sqlgraph
.
M2O
,
true
,
announcementread
.
UserTable
,
announcementread
.
UserColumn
),
)
fromU
=
sqlgraph
.
SetNeighbors
(
_q
.
driver
.
Dialect
(),
step
)
return
fromU
,
nil
}
return
query
}
// First returns the first AnnouncementRead entity from the query.
// Returns a *NotFoundError when no AnnouncementRead was found.
func
(
_q
*
AnnouncementReadQuery
)
First
(
ctx
context
.
Context
)
(
*
AnnouncementRead
,
error
)
{
nodes
,
err
:=
_q
.
Limit
(
1
)
.
All
(
setContextOp
(
ctx
,
_q
.
ctx
,
ent
.
OpQueryFirst
))
if
err
!=
nil
{
return
nil
,
err
}
if
len
(
nodes
)
==
0
{
return
nil
,
&
NotFoundError
{
announcementread
.
Label
}
}
return
nodes
[
0
],
nil
}
// FirstX is like First, but panics if an error occurs.
func
(
_q
*
AnnouncementReadQuery
)
FirstX
(
ctx
context
.
Context
)
*
AnnouncementRead
{
node
,
err
:=
_q
.
First
(
ctx
)
if
err
!=
nil
&&
!
IsNotFound
(
err
)
{
panic
(
err
)
}
return
node
}
// FirstID returns the first AnnouncementRead ID from the query.
// Returns a *NotFoundError when no AnnouncementRead ID was found.
func
(
_q
*
AnnouncementReadQuery
)
FirstID
(
ctx
context
.
Context
)
(
id
int64
,
err
error
)
{
var
ids
[]
int64
if
ids
,
err
=
_q
.
Limit
(
1
)
.
IDs
(
setContextOp
(
ctx
,
_q
.
ctx
,
ent
.
OpQueryFirstID
));
err
!=
nil
{
return
}
if
len
(
ids
)
==
0
{
err
=
&
NotFoundError
{
announcementread
.
Label
}
return
}
return
ids
[
0
],
nil
}
// FirstIDX is like FirstID, but panics if an error occurs.
func
(
_q
*
AnnouncementReadQuery
)
FirstIDX
(
ctx
context
.
Context
)
int64
{
id
,
err
:=
_q
.
FirstID
(
ctx
)
if
err
!=
nil
&&
!
IsNotFound
(
err
)
{
panic
(
err
)
}
return
id
}
// Only returns a single AnnouncementRead entity found by the query, ensuring it only returns one.
// Returns a *NotSingularError when more than one AnnouncementRead entity is found.
// Returns a *NotFoundError when no AnnouncementRead entities are found.
func
(
_q
*
AnnouncementReadQuery
)
Only
(
ctx
context
.
Context
)
(
*
AnnouncementRead
,
error
)
{
nodes
,
err
:=
_q
.
Limit
(
2
)
.
All
(
setContextOp
(
ctx
,
_q
.
ctx
,
ent
.
OpQueryOnly
))
if
err
!=
nil
{
return
nil
,
err
}
switch
len
(
nodes
)
{
case
1
:
return
nodes
[
0
],
nil
case
0
:
return
nil
,
&
NotFoundError
{
announcementread
.
Label
}
default
:
return
nil
,
&
NotSingularError
{
announcementread
.
Label
}
}
}
// OnlyX is like Only, but panics if an error occurs.
func
(
_q
*
AnnouncementReadQuery
)
OnlyX
(
ctx
context
.
Context
)
*
AnnouncementRead
{
node
,
err
:=
_q
.
Only
(
ctx
)
if
err
!=
nil
{
panic
(
err
)
}
return
node
}
// OnlyID is like Only, but returns the only AnnouncementRead ID in the query.
// Returns a *NotSingularError when more than one AnnouncementRead ID is found.
// Returns a *NotFoundError when no entities are found.
func
(
_q
*
AnnouncementReadQuery
)
OnlyID
(
ctx
context
.
Context
)
(
id
int64
,
err
error
)
{
var
ids
[]
int64
if
ids
,
err
=
_q
.
Limit
(
2
)
.
IDs
(
setContextOp
(
ctx
,
_q
.
ctx
,
ent
.
OpQueryOnlyID
));
err
!=
nil
{
return
}
switch
len
(
ids
)
{
case
1
:
id
=
ids
[
0
]
case
0
:
err
=
&
NotFoundError
{
announcementread
.
Label
}
default
:
err
=
&
NotSingularError
{
announcementread
.
Label
}
}
return
}
// OnlyIDX is like OnlyID, but panics if an error occurs.
func
(
_q
*
AnnouncementReadQuery
)
OnlyIDX
(
ctx
context
.
Context
)
int64
{
id
,
err
:=
_q
.
OnlyID
(
ctx
)
if
err
!=
nil
{
panic
(
err
)
}
return
id
}
// All executes the query and returns a list of AnnouncementReads.
func
(
_q
*
AnnouncementReadQuery
)
All
(
ctx
context
.
Context
)
([]
*
AnnouncementRead
,
error
)
{
ctx
=
setContextOp
(
ctx
,
_q
.
ctx
,
ent
.
OpQueryAll
)
if
err
:=
_q
.
prepareQuery
(
ctx
);
err
!=
nil
{
return
nil
,
err
}
qr
:=
querierAll
[[]
*
AnnouncementRead
,
*
AnnouncementReadQuery
]()
return
withInterceptors
[[]
*
AnnouncementRead
](
ctx
,
_q
,
qr
,
_q
.
inters
)
}
// AllX is like All, but panics if an error occurs.
func
(
_q
*
AnnouncementReadQuery
)
AllX
(
ctx
context
.
Context
)
[]
*
AnnouncementRead
{
nodes
,
err
:=
_q
.
All
(
ctx
)
if
err
!=
nil
{
panic
(
err
)
}
return
nodes
}
// IDs executes the query and returns a list of AnnouncementRead IDs.
func
(
_q
*
AnnouncementReadQuery
)
IDs
(
ctx
context
.
Context
)
(
ids
[]
int64
,
err
error
)
{
if
_q
.
ctx
.
Unique
==
nil
&&
_q
.
path
!=
nil
{
_q
.
Unique
(
true
)
}
ctx
=
setContextOp
(
ctx
,
_q
.
ctx
,
ent
.
OpQueryIDs
)
if
err
=
_q
.
Select
(
announcementread
.
FieldID
)
.
Scan
(
ctx
,
&
ids
);
err
!=
nil
{
return
nil
,
err
}
return
ids
,
nil
}
// IDsX is like IDs, but panics if an error occurs.
func
(
_q
*
AnnouncementReadQuery
)
IDsX
(
ctx
context
.
Context
)
[]
int64
{
ids
,
err
:=
_q
.
IDs
(
ctx
)
if
err
!=
nil
{
panic
(
err
)
}
return
ids
}
// Count returns the count of the given query.
func
(
_q
*
AnnouncementReadQuery
)
Count
(
ctx
context
.
Context
)
(
int
,
error
)
{
ctx
=
setContextOp
(
ctx
,
_q
.
ctx
,
ent
.
OpQueryCount
)
if
err
:=
_q
.
prepareQuery
(
ctx
);
err
!=
nil
{
return
0
,
err
}
return
withInterceptors
[
int
](
ctx
,
_q
,
querierCount
[
*
AnnouncementReadQuery
](),
_q
.
inters
)
}
// CountX is like Count, but panics if an error occurs.
func
(
_q
*
AnnouncementReadQuery
)
CountX
(
ctx
context
.
Context
)
int
{
count
,
err
:=
_q
.
Count
(
ctx
)
if
err
!=
nil
{
panic
(
err
)
}
return
count
}
// Exist returns true if the query has elements in the graph.
func
(
_q
*
AnnouncementReadQuery
)
Exist
(
ctx
context
.
Context
)
(
bool
,
error
)
{
ctx
=
setContextOp
(
ctx
,
_q
.
ctx
,
ent
.
OpQueryExist
)
switch
_
,
err
:=
_q
.
FirstID
(
ctx
);
{
case
IsNotFound
(
err
)
:
return
false
,
nil
case
err
!=
nil
:
return
false
,
fmt
.
Errorf
(
"ent: check existence: %w"
,
err
)
default
:
return
true
,
nil
}
}
// ExistX is like Exist, but panics if an error occurs.
func
(
_q
*
AnnouncementReadQuery
)
ExistX
(
ctx
context
.
Context
)
bool
{
exist
,
err
:=
_q
.
Exist
(
ctx
)
if
err
!=
nil
{
panic
(
err
)
}
return
exist
}
// Clone returns a duplicate of the AnnouncementReadQuery builder, including all associated steps. It can be
// used to prepare common query builders and use them differently after the clone is made.
func
(
_q
*
AnnouncementReadQuery
)
Clone
()
*
AnnouncementReadQuery
{
if
_q
==
nil
{
return
nil
}
return
&
AnnouncementReadQuery
{
config
:
_q
.
config
,
ctx
:
_q
.
ctx
.
Clone
(),
order
:
append
([]
announcementread
.
OrderOption
{},
_q
.
order
...
),
inters
:
append
([]
Interceptor
{},
_q
.
inters
...
),
predicates
:
append
([]
predicate
.
AnnouncementRead
{},
_q
.
predicates
...
),
withAnnouncement
:
_q
.
withAnnouncement
.
Clone
(),
withUser
:
_q
.
withUser
.
Clone
(),
// clone intermediate query.
sql
:
_q
.
sql
.
Clone
(),
path
:
_q
.
path
,
}
}
// WithAnnouncement tells the query-builder to eager-load the nodes that are connected to
// the "announcement" edge. The optional arguments are used to configure the query builder of the edge.
func
(
_q
*
AnnouncementReadQuery
)
WithAnnouncement
(
opts
...
func
(
*
AnnouncementQuery
))
*
AnnouncementReadQuery
{
query
:=
(
&
AnnouncementClient
{
config
:
_q
.
config
})
.
Query
()
for
_
,
opt
:=
range
opts
{
opt
(
query
)
}
_q
.
withAnnouncement
=
query
return
_q
}
// WithUser tells the query-builder to eager-load the nodes that are connected to
// the "user" edge. The optional arguments are used to configure the query builder of the edge.
func
(
_q
*
AnnouncementReadQuery
)
WithUser
(
opts
...
func
(
*
UserQuery
))
*
AnnouncementReadQuery
{
query
:=
(
&
UserClient
{
config
:
_q
.
config
})
.
Query
()
for
_
,
opt
:=
range
opts
{
opt
(
query
)
}
_q
.
withUser
=
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.
//
// Example:
//
// var v []struct {
// AnnouncementID int64 `json:"announcement_id,omitempty"`
// Count int `json:"count,omitempty"`
// }
//
// client.AnnouncementRead.Query().
// GroupBy(announcementread.FieldAnnouncementID).
// Aggregate(ent.Count()).
// Scan(ctx, &v)
func
(
_q
*
AnnouncementReadQuery
)
GroupBy
(
field
string
,
fields
...
string
)
*
AnnouncementReadGroupBy
{
_q
.
ctx
.
Fields
=
append
([]
string
{
field
},
fields
...
)
grbuild
:=
&
AnnouncementReadGroupBy
{
build
:
_q
}
grbuild
.
flds
=
&
_q
.
ctx
.
Fields
grbuild
.
label
=
announcementread
.
Label
grbuild
.
scan
=
grbuild
.
Scan
return
grbuild
}
// Select allows the selection one or more fields/columns for the given query,
// instead of selecting all fields in the entity.
//
// Example:
//
// var v []struct {
// AnnouncementID int64 `json:"announcement_id,omitempty"`
// }
//
// client.AnnouncementRead.Query().
// Select(announcementread.FieldAnnouncementID).
// Scan(ctx, &v)
func
(
_q
*
AnnouncementReadQuery
)
Select
(
fields
...
string
)
*
AnnouncementReadSelect
{
_q
.
ctx
.
Fields
=
append
(
_q
.
ctx
.
Fields
,
fields
...
)
sbuild
:=
&
AnnouncementReadSelect
{
AnnouncementReadQuery
:
_q
}
sbuild
.
label
=
announcementread
.
Label
sbuild
.
flds
,
sbuild
.
scan
=
&
_q
.
ctx
.
Fields
,
sbuild
.
Scan
return
sbuild
}
// Aggregate returns a AnnouncementReadSelect configured with the given aggregations.
func
(
_q
*
AnnouncementReadQuery
)
Aggregate
(
fns
...
AggregateFunc
)
*
AnnouncementReadSelect
{
return
_q
.
Select
()
.
Aggregate
(
fns
...
)
}
func
(
_q
*
AnnouncementReadQuery
)
prepareQuery
(
ctx
context
.
Context
)
error
{
for
_
,
inter
:=
range
_q
.
inters
{
if
inter
==
nil
{
return
fmt
.
Errorf
(
"ent: uninitialized interceptor (forgotten import ent/runtime?)"
)
}
if
trv
,
ok
:=
inter
.
(
Traverser
);
ok
{
if
err
:=
trv
.
Traverse
(
ctx
,
_q
);
err
!=
nil
{
return
err
}
}
}
for
_
,
f
:=
range
_q
.
ctx
.
Fields
{
if
!
announcementread
.
ValidColumn
(
f
)
{
return
&
ValidationError
{
Name
:
f
,
err
:
fmt
.
Errorf
(
"ent: invalid field %q for query"
,
f
)}
}
}
if
_q
.
path
!=
nil
{
prev
,
err
:=
_q
.
path
(
ctx
)
if
err
!=
nil
{
return
err
}
_q
.
sql
=
prev
}
return
nil
}
func
(
_q
*
AnnouncementReadQuery
)
sqlAll
(
ctx
context
.
Context
,
hooks
...
queryHook
)
([]
*
AnnouncementRead
,
error
)
{
var
(
nodes
=
[]
*
AnnouncementRead
{}
_spec
=
_q
.
querySpec
()
loadedTypes
=
[
2
]
bool
{
_q
.
withAnnouncement
!=
nil
,
_q
.
withUser
!=
nil
,
}
)
_spec
.
ScanValues
=
func
(
columns
[]
string
)
([]
any
,
error
)
{
return
(
*
AnnouncementRead
)
.
scanValues
(
nil
,
columns
)
}
_spec
.
Assign
=
func
(
columns
[]
string
,
values
[]
any
)
error
{
node
:=
&
AnnouncementRead
{
config
:
_q
.
config
}
nodes
=
append
(
nodes
,
node
)
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
)
}
if
err
:=
sqlgraph
.
QueryNodes
(
ctx
,
_q
.
driver
,
_spec
);
err
!=
nil
{
return
nil
,
err
}
if
len
(
nodes
)
==
0
{
return
nodes
,
nil
}
if
query
:=
_q
.
withAnnouncement
;
query
!=
nil
{
if
err
:=
_q
.
loadAnnouncement
(
ctx
,
query
,
nodes
,
nil
,
func
(
n
*
AnnouncementRead
,
e
*
Announcement
)
{
n
.
Edges
.
Announcement
=
e
});
err
!=
nil
{
return
nil
,
err
}
}
if
query
:=
_q
.
withUser
;
query
!=
nil
{
if
err
:=
_q
.
loadUser
(
ctx
,
query
,
nodes
,
nil
,
func
(
n
*
AnnouncementRead
,
e
*
User
)
{
n
.
Edges
.
User
=
e
});
err
!=
nil
{
return
nil
,
err
}
}
return
nodes
,
nil
}
func
(
_q
*
AnnouncementReadQuery
)
loadAnnouncement
(
ctx
context
.
Context
,
query
*
AnnouncementQuery
,
nodes
[]
*
AnnouncementRead
,
init
func
(
*
AnnouncementRead
),
assign
func
(
*
AnnouncementRead
,
*
Announcement
))
error
{
ids
:=
make
([]
int64
,
0
,
len
(
nodes
))
nodeids
:=
make
(
map
[
int64
][]
*
AnnouncementRead
)
for
i
:=
range
nodes
{
fk
:=
nodes
[
i
]
.
AnnouncementID
if
_
,
ok
:=
nodeids
[
fk
];
!
ok
{
ids
=
append
(
ids
,
fk
)
}
nodeids
[
fk
]
=
append
(
nodeids
[
fk
],
nodes
[
i
])
}
if
len
(
ids
)
==
0
{
return
nil
}
query
.
Where
(
announcement
.
IDIn
(
ids
...
))
neighbors
,
err
:=
query
.
All
(
ctx
)
if
err
!=
nil
{
return
err
}
for
_
,
n
:=
range
neighbors
{
nodes
,
ok
:=
nodeids
[
n
.
ID
]
if
!
ok
{
return
fmt
.
Errorf
(
`unexpected foreign-key "announcement_id" returned %v`
,
n
.
ID
)
}
for
i
:=
range
nodes
{
assign
(
nodes
[
i
],
n
)
}
}
return
nil
}
func
(
_q
*
AnnouncementReadQuery
)
loadUser
(
ctx
context
.
Context
,
query
*
UserQuery
,
nodes
[]
*
AnnouncementRead
,
init
func
(
*
AnnouncementRead
),
assign
func
(
*
AnnouncementRead
,
*
User
))
error
{
ids
:=
make
([]
int64
,
0
,
len
(
nodes
))
nodeids
:=
make
(
map
[
int64
][]
*
AnnouncementRead
)
for
i
:=
range
nodes
{
fk
:=
nodes
[
i
]
.
UserID
if
_
,
ok
:=
nodeids
[
fk
];
!
ok
{
ids
=
append
(
ids
,
fk
)
}
nodeids
[
fk
]
=
append
(
nodeids
[
fk
],
nodes
[
i
])
}
if
len
(
ids
)
==
0
{
return
nil
}
query
.
Where
(
user
.
IDIn
(
ids
...
))
neighbors
,
err
:=
query
.
All
(
ctx
)
if
err
!=
nil
{
return
err
}
for
_
,
n
:=
range
neighbors
{
nodes
,
ok
:=
nodeids
[
n
.
ID
]
if
!
ok
{
return
fmt
.
Errorf
(
`unexpected foreign-key "user_id" returned %v`
,
n
.
ID
)
}
for
i
:=
range
nodes
{
assign
(
nodes
[
i
],
n
)
}
}
return
nil
}
func
(
_q
*
AnnouncementReadQuery
)
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
}
return
sqlgraph
.
CountNodes
(
ctx
,
_q
.
driver
,
_spec
)
}
func
(
_q
*
AnnouncementReadQuery
)
querySpec
()
*
sqlgraph
.
QuerySpec
{
_spec
:=
sqlgraph
.
NewQuerySpec
(
announcementread
.
Table
,
announcementread
.
Columns
,
sqlgraph
.
NewFieldSpec
(
announcementread
.
FieldID
,
field
.
TypeInt64
))
_spec
.
From
=
_q
.
sql
if
unique
:=
_q
.
ctx
.
Unique
;
unique
!=
nil
{
_spec
.
Unique
=
*
unique
}
else
if
_q
.
path
!=
nil
{
_spec
.
Unique
=
true
}
if
fields
:=
_q
.
ctx
.
Fields
;
len
(
fields
)
>
0
{
_spec
.
Node
.
Columns
=
make
([]
string
,
0
,
len
(
fields
))
_spec
.
Node
.
Columns
=
append
(
_spec
.
Node
.
Columns
,
announcementread
.
FieldID
)
for
i
:=
range
fields
{
if
fields
[
i
]
!=
announcementread
.
FieldID
{
_spec
.
Node
.
Columns
=
append
(
_spec
.
Node
.
Columns
,
fields
[
i
])
}
}
if
_q
.
withAnnouncement
!=
nil
{
_spec
.
Node
.
AddColumnOnce
(
announcementread
.
FieldAnnouncementID
)
}
if
_q
.
withUser
!=
nil
{
_spec
.
Node
.
AddColumnOnce
(
announcementread
.
FieldUserID
)
}
}
if
ps
:=
_q
.
predicates
;
len
(
ps
)
>
0
{
_spec
.
Predicate
=
func
(
selector
*
sql
.
Selector
)
{
for
i
:=
range
ps
{
ps
[
i
](
selector
)
}
}
}
if
limit
:=
_q
.
ctx
.
Limit
;
limit
!=
nil
{
_spec
.
Limit
=
*
limit
}
if
offset
:=
_q
.
ctx
.
Offset
;
offset
!=
nil
{
_spec
.
Offset
=
*
offset
}
if
ps
:=
_q
.
order
;
len
(
ps
)
>
0
{
_spec
.
Order
=
func
(
selector
*
sql
.
Selector
)
{
for
i
:=
range
ps
{
ps
[
i
](
selector
)
}
}
}
return
_spec
}
func
(
_q
*
AnnouncementReadQuery
)
sqlQuery
(
ctx
context
.
Context
)
*
sql
.
Selector
{
builder
:=
sql
.
Dialect
(
_q
.
driver
.
Dialect
())
t1
:=
builder
.
Table
(
announcementread
.
Table
)
columns
:=
_q
.
ctx
.
Fields
if
len
(
columns
)
==
0
{
columns
=
announcementread
.
Columns
}
selector
:=
builder
.
Select
(
t1
.
Columns
(
columns
...
)
...
)
.
From
(
t1
)
if
_q
.
sql
!=
nil
{
selector
=
_q
.
sql
selector
.
Select
(
selector
.
Columns
(
columns
...
)
...
)
}
if
_q
.
ctx
.
Unique
!=
nil
&&
*
_q
.
ctx
.
Unique
{
selector
.
Distinct
()
}
for
_
,
m
:=
range
_q
.
modifiers
{
m
(
selector
)
}
for
_
,
p
:=
range
_q
.
predicates
{
p
(
selector
)
}
for
_
,
p
:=
range
_q
.
order
{
p
(
selector
)
}
if
offset
:=
_q
.
ctx
.
Offset
;
offset
!=
nil
{
// limit is mandatory for offset clause. We start
// with default value, and override it below if needed.
selector
.
Offset
(
*
offset
)
.
Limit
(
math
.
MaxInt32
)
}
if
limit
:=
_q
.
ctx
.
Limit
;
limit
!=
nil
{
selector
.
Limit
(
*
limit
)
}
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
*
AnnouncementReadQuery
)
ForUpdate
(
opts
...
sql
.
LockOption
)
*
AnnouncementReadQuery
{
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
*
AnnouncementReadQuery
)
ForShare
(
opts
...
sql
.
LockOption
)
*
AnnouncementReadQuery
{
if
_q
.
driver
.
Dialect
()
==
dialect
.
Postgres
{
_q
.
Unique
(
false
)
}
_q
.
modifiers
=
append
(
_q
.
modifiers
,
func
(
s
*
sql
.
Selector
)
{
s
.
ForShare
(
opts
...
)
})
return
_q
}
// AnnouncementReadGroupBy is the group-by builder for AnnouncementRead entities.
type
AnnouncementReadGroupBy
struct
{
selector
build
*
AnnouncementReadQuery
}
// Aggregate adds the given aggregation functions to the group-by query.
func
(
_g
*
AnnouncementReadGroupBy
)
Aggregate
(
fns
...
AggregateFunc
)
*
AnnouncementReadGroupBy
{
_g
.
fns
=
append
(
_g
.
fns
,
fns
...
)
return
_g
}
// Scan applies the selector query and scans the result into the given value.
func
(
_g
*
AnnouncementReadGroupBy
)
Scan
(
ctx
context
.
Context
,
v
any
)
error
{
ctx
=
setContextOp
(
ctx
,
_g
.
build
.
ctx
,
ent
.
OpQueryGroupBy
)
if
err
:=
_g
.
build
.
prepareQuery
(
ctx
);
err
!=
nil
{
return
err
}
return
scanWithInterceptors
[
*
AnnouncementReadQuery
,
*
AnnouncementReadGroupBy
](
ctx
,
_g
.
build
,
_g
,
_g
.
build
.
inters
,
v
)
}
func
(
_g
*
AnnouncementReadGroupBy
)
sqlScan
(
ctx
context
.
Context
,
root
*
AnnouncementReadQuery
,
v
any
)
error
{
selector
:=
root
.
sqlQuery
(
ctx
)
.
Select
()
aggregation
:=
make
([]
string
,
0
,
len
(
_g
.
fns
))
for
_
,
fn
:=
range
_g
.
fns
{
aggregation
=
append
(
aggregation
,
fn
(
selector
))
}
if
len
(
selector
.
SelectedColumns
())
==
0
{
columns
:=
make
([]
string
,
0
,
len
(
*
_g
.
flds
)
+
len
(
_g
.
fns
))
for
_
,
f
:=
range
*
_g
.
flds
{
columns
=
append
(
columns
,
selector
.
C
(
f
))
}
columns
=
append
(
columns
,
aggregation
...
)
selector
.
Select
(
columns
...
)
}
selector
.
GroupBy
(
selector
.
Columns
(
*
_g
.
flds
...
)
...
)
if
err
:=
selector
.
Err
();
err
!=
nil
{
return
err
}
rows
:=
&
sql
.
Rows
{}
query
,
args
:=
selector
.
Query
()
if
err
:=
_g
.
build
.
driver
.
Query
(
ctx
,
query
,
args
,
rows
);
err
!=
nil
{
return
err
}
defer
rows
.
Close
()
return
sql
.
ScanSlice
(
rows
,
v
)
}
// AnnouncementReadSelect is the builder for selecting fields of AnnouncementRead entities.
type
AnnouncementReadSelect
struct
{
*
AnnouncementReadQuery
selector
}
// Aggregate adds the given aggregation functions to the selector query.
func
(
_s
*
AnnouncementReadSelect
)
Aggregate
(
fns
...
AggregateFunc
)
*
AnnouncementReadSelect
{
_s
.
fns
=
append
(
_s
.
fns
,
fns
...
)
return
_s
}
// Scan applies the selector query and scans the result into the given value.
func
(
_s
*
AnnouncementReadSelect
)
Scan
(
ctx
context
.
Context
,
v
any
)
error
{
ctx
=
setContextOp
(
ctx
,
_s
.
ctx
,
ent
.
OpQuerySelect
)
if
err
:=
_s
.
prepareQuery
(
ctx
);
err
!=
nil
{
return
err
}
return
scanWithInterceptors
[
*
AnnouncementReadQuery
,
*
AnnouncementReadSelect
](
ctx
,
_s
.
AnnouncementReadQuery
,
_s
,
_s
.
inters
,
v
)
}
func
(
_s
*
AnnouncementReadSelect
)
sqlScan
(
ctx
context
.
Context
,
root
*
AnnouncementReadQuery
,
v
any
)
error
{
selector
:=
root
.
sqlQuery
(
ctx
)
aggregation
:=
make
([]
string
,
0
,
len
(
_s
.
fns
))
for
_
,
fn
:=
range
_s
.
fns
{
aggregation
=
append
(
aggregation
,
fn
(
selector
))
}
switch
n
:=
len
(
*
_s
.
selector
.
flds
);
{
case
n
==
0
&&
len
(
aggregation
)
>
0
:
selector
.
Select
(
aggregation
...
)
case
n
!=
0
&&
len
(
aggregation
)
>
0
:
selector
.
AppendSelect
(
aggregation
...
)
}
rows
:=
&
sql
.
Rows
{}
query
,
args
:=
selector
.
Query
()
if
err
:=
_s
.
driver
.
Query
(
ctx
,
query
,
args
,
rows
);
err
!=
nil
{
return
err
}
defer
rows
.
Close
()
return
sql
.
ScanSlice
(
rows
,
v
)
}
backend/ent/announcementread_update.go
0 → 100644
View file @
377bffe2
// Code generated by ent, DO NOT EDIT.
package
ent
import
(
"context"
"errors"
"fmt"
"time"
"entgo.io/ent/dialect/sql"
"entgo.io/ent/dialect/sql/sqlgraph"
"entgo.io/ent/schema/field"
"github.com/Wei-Shaw/sub2api/ent/announcement"
"github.com/Wei-Shaw/sub2api/ent/announcementread"
"github.com/Wei-Shaw/sub2api/ent/predicate"
"github.com/Wei-Shaw/sub2api/ent/user"
)
// AnnouncementReadUpdate is the builder for updating AnnouncementRead entities.
type
AnnouncementReadUpdate
struct
{
config
hooks
[]
Hook
mutation
*
AnnouncementReadMutation
}
// Where appends a list predicates to the AnnouncementReadUpdate builder.
func
(
_u
*
AnnouncementReadUpdate
)
Where
(
ps
...
predicate
.
AnnouncementRead
)
*
AnnouncementReadUpdate
{
_u
.
mutation
.
Where
(
ps
...
)
return
_u
}
// SetAnnouncementID sets the "announcement_id" field.
func
(
_u
*
AnnouncementReadUpdate
)
SetAnnouncementID
(
v
int64
)
*
AnnouncementReadUpdate
{
_u
.
mutation
.
SetAnnouncementID
(
v
)
return
_u
}
// SetNillableAnnouncementID sets the "announcement_id" field if the given value is not nil.
func
(
_u
*
AnnouncementReadUpdate
)
SetNillableAnnouncementID
(
v
*
int64
)
*
AnnouncementReadUpdate
{
if
v
!=
nil
{
_u
.
SetAnnouncementID
(
*
v
)
}
return
_u
}
// SetUserID sets the "user_id" field.
func
(
_u
*
AnnouncementReadUpdate
)
SetUserID
(
v
int64
)
*
AnnouncementReadUpdate
{
_u
.
mutation
.
SetUserID
(
v
)
return
_u
}
// SetNillableUserID sets the "user_id" field if the given value is not nil.
func
(
_u
*
AnnouncementReadUpdate
)
SetNillableUserID
(
v
*
int64
)
*
AnnouncementReadUpdate
{
if
v
!=
nil
{
_u
.
SetUserID
(
*
v
)
}
return
_u
}
// SetReadAt sets the "read_at" field.
func
(
_u
*
AnnouncementReadUpdate
)
SetReadAt
(
v
time
.
Time
)
*
AnnouncementReadUpdate
{
_u
.
mutation
.
SetReadAt
(
v
)
return
_u
}
// SetNillableReadAt sets the "read_at" field if the given value is not nil.
func
(
_u
*
AnnouncementReadUpdate
)
SetNillableReadAt
(
v
*
time
.
Time
)
*
AnnouncementReadUpdate
{
if
v
!=
nil
{
_u
.
SetReadAt
(
*
v
)
}
return
_u
}
// SetAnnouncement sets the "announcement" edge to the Announcement entity.
func
(
_u
*
AnnouncementReadUpdate
)
SetAnnouncement
(
v
*
Announcement
)
*
AnnouncementReadUpdate
{
return
_u
.
SetAnnouncementID
(
v
.
ID
)
}
// SetUser sets the "user" edge to the User entity.
func
(
_u
*
AnnouncementReadUpdate
)
SetUser
(
v
*
User
)
*
AnnouncementReadUpdate
{
return
_u
.
SetUserID
(
v
.
ID
)
}
// Mutation returns the AnnouncementReadMutation object of the builder.
func
(
_u
*
AnnouncementReadUpdate
)
Mutation
()
*
AnnouncementReadMutation
{
return
_u
.
mutation
}
// ClearAnnouncement clears the "announcement" edge to the Announcement entity.
func
(
_u
*
AnnouncementReadUpdate
)
ClearAnnouncement
()
*
AnnouncementReadUpdate
{
_u
.
mutation
.
ClearAnnouncement
()
return
_u
}
// ClearUser clears the "user" edge to the User entity.
func
(
_u
*
AnnouncementReadUpdate
)
ClearUser
()
*
AnnouncementReadUpdate
{
_u
.
mutation
.
ClearUser
()
return
_u
}
// Save executes the query and returns the number of nodes affected by the update operation.
func
(
_u
*
AnnouncementReadUpdate
)
Save
(
ctx
context
.
Context
)
(
int
,
error
)
{
return
withHooks
(
ctx
,
_u
.
sqlSave
,
_u
.
mutation
,
_u
.
hooks
)
}
// SaveX is like Save, but panics if an error occurs.
func
(
_u
*
AnnouncementReadUpdate
)
SaveX
(
ctx
context
.
Context
)
int
{
affected
,
err
:=
_u
.
Save
(
ctx
)
if
err
!=
nil
{
panic
(
err
)
}
return
affected
}
// Exec executes the query.
func
(
_u
*
AnnouncementReadUpdate
)
Exec
(
ctx
context
.
Context
)
error
{
_
,
err
:=
_u
.
Save
(
ctx
)
return
err
}
// ExecX is like Exec, but panics if an error occurs.
func
(
_u
*
AnnouncementReadUpdate
)
ExecX
(
ctx
context
.
Context
)
{
if
err
:=
_u
.
Exec
(
ctx
);
err
!=
nil
{
panic
(
err
)
}
}
// check runs all checks and user-defined validators on the builder.
func
(
_u
*
AnnouncementReadUpdate
)
check
()
error
{
if
_u
.
mutation
.
AnnouncementCleared
()
&&
len
(
_u
.
mutation
.
AnnouncementIDs
())
>
0
{
return
errors
.
New
(
`ent: clearing a required unique edge "AnnouncementRead.announcement"`
)
}
if
_u
.
mutation
.
UserCleared
()
&&
len
(
_u
.
mutation
.
UserIDs
())
>
0
{
return
errors
.
New
(
`ent: clearing a required unique edge "AnnouncementRead.user"`
)
}
return
nil
}
func
(
_u
*
AnnouncementReadUpdate
)
sqlSave
(
ctx
context
.
Context
)
(
_node
int
,
err
error
)
{
if
err
:=
_u
.
check
();
err
!=
nil
{
return
_node
,
err
}
_spec
:=
sqlgraph
.
NewUpdateSpec
(
announcementread
.
Table
,
announcementread
.
Columns
,
sqlgraph
.
NewFieldSpec
(
announcementread
.
FieldID
,
field
.
TypeInt64
))
if
ps
:=
_u
.
mutation
.
predicates
;
len
(
ps
)
>
0
{
_spec
.
Predicate
=
func
(
selector
*
sql
.
Selector
)
{
for
i
:=
range
ps
{
ps
[
i
](
selector
)
}
}
}
if
value
,
ok
:=
_u
.
mutation
.
ReadAt
();
ok
{
_spec
.
SetField
(
announcementread
.
FieldReadAt
,
field
.
TypeTime
,
value
)
}
if
_u
.
mutation
.
AnnouncementCleared
()
{
edge
:=
&
sqlgraph
.
EdgeSpec
{
Rel
:
sqlgraph
.
M2O
,
Inverse
:
true
,
Table
:
announcementread
.
AnnouncementTable
,
Columns
:
[]
string
{
announcementread
.
AnnouncementColumn
},
Bidi
:
false
,
Target
:
&
sqlgraph
.
EdgeTarget
{
IDSpec
:
sqlgraph
.
NewFieldSpec
(
announcement
.
FieldID
,
field
.
TypeInt64
),
},
}
_spec
.
Edges
.
Clear
=
append
(
_spec
.
Edges
.
Clear
,
edge
)
}
if
nodes
:=
_u
.
mutation
.
AnnouncementIDs
();
len
(
nodes
)
>
0
{
edge
:=
&
sqlgraph
.
EdgeSpec
{
Rel
:
sqlgraph
.
M2O
,
Inverse
:
true
,
Table
:
announcementread
.
AnnouncementTable
,
Columns
:
[]
string
{
announcementread
.
AnnouncementColumn
},
Bidi
:
false
,
Target
:
&
sqlgraph
.
EdgeTarget
{
IDSpec
:
sqlgraph
.
NewFieldSpec
(
announcement
.
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
.
UserCleared
()
{
edge
:=
&
sqlgraph
.
EdgeSpec
{
Rel
:
sqlgraph
.
M2O
,
Inverse
:
true
,
Table
:
announcementread
.
UserTable
,
Columns
:
[]
string
{
announcementread
.
UserColumn
},
Bidi
:
false
,
Target
:
&
sqlgraph
.
EdgeTarget
{
IDSpec
:
sqlgraph
.
NewFieldSpec
(
user
.
FieldID
,
field
.
TypeInt64
),
},
}
_spec
.
Edges
.
Clear
=
append
(
_spec
.
Edges
.
Clear
,
edge
)
}
if
nodes
:=
_u
.
mutation
.
UserIDs
();
len
(
nodes
)
>
0
{
edge
:=
&
sqlgraph
.
EdgeSpec
{
Rel
:
sqlgraph
.
M2O
,
Inverse
:
true
,
Table
:
announcementread
.
UserTable
,
Columns
:
[]
string
{
announcementread
.
UserColumn
},
Bidi
:
false
,
Target
:
&
sqlgraph
.
EdgeTarget
{
IDSpec
:
sqlgraph
.
NewFieldSpec
(
user
.
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
{
announcementread
.
Label
}
}
else
if
sqlgraph
.
IsConstraintError
(
err
)
{
err
=
&
ConstraintError
{
msg
:
err
.
Error
(),
wrap
:
err
}
}
return
0
,
err
}
_u
.
mutation
.
done
=
true
return
_node
,
nil
}
// AnnouncementReadUpdateOne is the builder for updating a single AnnouncementRead entity.
type
AnnouncementReadUpdateOne
struct
{
config
fields
[]
string
hooks
[]
Hook
mutation
*
AnnouncementReadMutation
}
// SetAnnouncementID sets the "announcement_id" field.
func
(
_u
*
AnnouncementReadUpdateOne
)
SetAnnouncementID
(
v
int64
)
*
AnnouncementReadUpdateOne
{
_u
.
mutation
.
SetAnnouncementID
(
v
)
return
_u
}
// SetNillableAnnouncementID sets the "announcement_id" field if the given value is not nil.
func
(
_u
*
AnnouncementReadUpdateOne
)
SetNillableAnnouncementID
(
v
*
int64
)
*
AnnouncementReadUpdateOne
{
if
v
!=
nil
{
_u
.
SetAnnouncementID
(
*
v
)
}
return
_u
}
// SetUserID sets the "user_id" field.
func
(
_u
*
AnnouncementReadUpdateOne
)
SetUserID
(
v
int64
)
*
AnnouncementReadUpdateOne
{
_u
.
mutation
.
SetUserID
(
v
)
return
_u
}
// SetNillableUserID sets the "user_id" field if the given value is not nil.
func
(
_u
*
AnnouncementReadUpdateOne
)
SetNillableUserID
(
v
*
int64
)
*
AnnouncementReadUpdateOne
{
if
v
!=
nil
{
_u
.
SetUserID
(
*
v
)
}
return
_u
}
// SetReadAt sets the "read_at" field.
func
(
_u
*
AnnouncementReadUpdateOne
)
SetReadAt
(
v
time
.
Time
)
*
AnnouncementReadUpdateOne
{
_u
.
mutation
.
SetReadAt
(
v
)
return
_u
}
// SetNillableReadAt sets the "read_at" field if the given value is not nil.
func
(
_u
*
AnnouncementReadUpdateOne
)
SetNillableReadAt
(
v
*
time
.
Time
)
*
AnnouncementReadUpdateOne
{
if
v
!=
nil
{
_u
.
SetReadAt
(
*
v
)
}
return
_u
}
// SetAnnouncement sets the "announcement" edge to the Announcement entity.
func
(
_u
*
AnnouncementReadUpdateOne
)
SetAnnouncement
(
v
*
Announcement
)
*
AnnouncementReadUpdateOne
{
return
_u
.
SetAnnouncementID
(
v
.
ID
)
}
// SetUser sets the "user" edge to the User entity.
func
(
_u
*
AnnouncementReadUpdateOne
)
SetUser
(
v
*
User
)
*
AnnouncementReadUpdateOne
{
return
_u
.
SetUserID
(
v
.
ID
)
}
// Mutation returns the AnnouncementReadMutation object of the builder.
func
(
_u
*
AnnouncementReadUpdateOne
)
Mutation
()
*
AnnouncementReadMutation
{
return
_u
.
mutation
}
// ClearAnnouncement clears the "announcement" edge to the Announcement entity.
func
(
_u
*
AnnouncementReadUpdateOne
)
ClearAnnouncement
()
*
AnnouncementReadUpdateOne
{
_u
.
mutation
.
ClearAnnouncement
()
return
_u
}
// ClearUser clears the "user" edge to the User entity.
func
(
_u
*
AnnouncementReadUpdateOne
)
ClearUser
()
*
AnnouncementReadUpdateOne
{
_u
.
mutation
.
ClearUser
()
return
_u
}
// Where appends a list predicates to the AnnouncementReadUpdate builder.
func
(
_u
*
AnnouncementReadUpdateOne
)
Where
(
ps
...
predicate
.
AnnouncementRead
)
*
AnnouncementReadUpdateOne
{
_u
.
mutation
.
Where
(
ps
...
)
return
_u
}
// Select allows selecting one or more fields (columns) of the returned entity.
// The default is selecting all fields defined in the entity schema.
func
(
_u
*
AnnouncementReadUpdateOne
)
Select
(
field
string
,
fields
...
string
)
*
AnnouncementReadUpdateOne
{
_u
.
fields
=
append
([]
string
{
field
},
fields
...
)
return
_u
}
// Save executes the query and returns the updated AnnouncementRead entity.
func
(
_u
*
AnnouncementReadUpdateOne
)
Save
(
ctx
context
.
Context
)
(
*
AnnouncementRead
,
error
)
{
return
withHooks
(
ctx
,
_u
.
sqlSave
,
_u
.
mutation
,
_u
.
hooks
)
}
// SaveX is like Save, but panics if an error occurs.
func
(
_u
*
AnnouncementReadUpdateOne
)
SaveX
(
ctx
context
.
Context
)
*
AnnouncementRead
{
node
,
err
:=
_u
.
Save
(
ctx
)
if
err
!=
nil
{
panic
(
err
)
}
return
node
}
// Exec executes the query on the entity.
func
(
_u
*
AnnouncementReadUpdateOne
)
Exec
(
ctx
context
.
Context
)
error
{
_
,
err
:=
_u
.
Save
(
ctx
)
return
err
}
// ExecX is like Exec, but panics if an error occurs.
func
(
_u
*
AnnouncementReadUpdateOne
)
ExecX
(
ctx
context
.
Context
)
{
if
err
:=
_u
.
Exec
(
ctx
);
err
!=
nil
{
panic
(
err
)
}
}
// check runs all checks and user-defined validators on the builder.
func
(
_u
*
AnnouncementReadUpdateOne
)
check
()
error
{
if
_u
.
mutation
.
AnnouncementCleared
()
&&
len
(
_u
.
mutation
.
AnnouncementIDs
())
>
0
{
return
errors
.
New
(
`ent: clearing a required unique edge "AnnouncementRead.announcement"`
)
}
if
_u
.
mutation
.
UserCleared
()
&&
len
(
_u
.
mutation
.
UserIDs
())
>
0
{
return
errors
.
New
(
`ent: clearing a required unique edge "AnnouncementRead.user"`
)
}
return
nil
}
func
(
_u
*
AnnouncementReadUpdateOne
)
sqlSave
(
ctx
context
.
Context
)
(
_node
*
AnnouncementRead
,
err
error
)
{
if
err
:=
_u
.
check
();
err
!=
nil
{
return
_node
,
err
}
_spec
:=
sqlgraph
.
NewUpdateSpec
(
announcementread
.
Table
,
announcementread
.
Columns
,
sqlgraph
.
NewFieldSpec
(
announcementread
.
FieldID
,
field
.
TypeInt64
))
id
,
ok
:=
_u
.
mutation
.
ID
()
if
!
ok
{
return
nil
,
&
ValidationError
{
Name
:
"id"
,
err
:
errors
.
New
(
`ent: missing "AnnouncementRead.id" for update`
)}
}
_spec
.
Node
.
ID
.
Value
=
id
if
fields
:=
_u
.
fields
;
len
(
fields
)
>
0
{
_spec
.
Node
.
Columns
=
make
([]
string
,
0
,
len
(
fields
))
_spec
.
Node
.
Columns
=
append
(
_spec
.
Node
.
Columns
,
announcementread
.
FieldID
)
for
_
,
f
:=
range
fields
{
if
!
announcementread
.
ValidColumn
(
f
)
{
return
nil
,
&
ValidationError
{
Name
:
f
,
err
:
fmt
.
Errorf
(
"ent: invalid field %q for query"
,
f
)}
}
if
f
!=
announcementread
.
FieldID
{
_spec
.
Node
.
Columns
=
append
(
_spec
.
Node
.
Columns
,
f
)
}
}
}
if
ps
:=
_u
.
mutation
.
predicates
;
len
(
ps
)
>
0
{
_spec
.
Predicate
=
func
(
selector
*
sql
.
Selector
)
{
for
i
:=
range
ps
{
ps
[
i
](
selector
)
}
}
}
if
value
,
ok
:=
_u
.
mutation
.
ReadAt
();
ok
{
_spec
.
SetField
(
announcementread
.
FieldReadAt
,
field
.
TypeTime
,
value
)
}
if
_u
.
mutation
.
AnnouncementCleared
()
{
edge
:=
&
sqlgraph
.
EdgeSpec
{
Rel
:
sqlgraph
.
M2O
,
Inverse
:
true
,
Table
:
announcementread
.
AnnouncementTable
,
Columns
:
[]
string
{
announcementread
.
AnnouncementColumn
},
Bidi
:
false
,
Target
:
&
sqlgraph
.
EdgeTarget
{
IDSpec
:
sqlgraph
.
NewFieldSpec
(
announcement
.
FieldID
,
field
.
TypeInt64
),
},
}
_spec
.
Edges
.
Clear
=
append
(
_spec
.
Edges
.
Clear
,
edge
)
}
if
nodes
:=
_u
.
mutation
.
AnnouncementIDs
();
len
(
nodes
)
>
0
{
edge
:=
&
sqlgraph
.
EdgeSpec
{
Rel
:
sqlgraph
.
M2O
,
Inverse
:
true
,
Table
:
announcementread
.
AnnouncementTable
,
Columns
:
[]
string
{
announcementread
.
AnnouncementColumn
},
Bidi
:
false
,
Target
:
&
sqlgraph
.
EdgeTarget
{
IDSpec
:
sqlgraph
.
NewFieldSpec
(
announcement
.
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
.
UserCleared
()
{
edge
:=
&
sqlgraph
.
EdgeSpec
{
Rel
:
sqlgraph
.
M2O
,
Inverse
:
true
,
Table
:
announcementread
.
UserTable
,
Columns
:
[]
string
{
announcementread
.
UserColumn
},
Bidi
:
false
,
Target
:
&
sqlgraph
.
EdgeTarget
{
IDSpec
:
sqlgraph
.
NewFieldSpec
(
user
.
FieldID
,
field
.
TypeInt64
),
},
}
_spec
.
Edges
.
Clear
=
append
(
_spec
.
Edges
.
Clear
,
edge
)
}
if
nodes
:=
_u
.
mutation
.
UserIDs
();
len
(
nodes
)
>
0
{
edge
:=
&
sqlgraph
.
EdgeSpec
{
Rel
:
sqlgraph
.
M2O
,
Inverse
:
true
,
Table
:
announcementread
.
UserTable
,
Columns
:
[]
string
{
announcementread
.
UserColumn
},
Bidi
:
false
,
Target
:
&
sqlgraph
.
EdgeTarget
{
IDSpec
:
sqlgraph
.
NewFieldSpec
(
user
.
FieldID
,
field
.
TypeInt64
),
},
}
for
_
,
k
:=
range
nodes
{
edge
.
Target
.
Nodes
=
append
(
edge
.
Target
.
Nodes
,
k
)
}
_spec
.
Edges
.
Add
=
append
(
_spec
.
Edges
.
Add
,
edge
)
}
_node
=
&
AnnouncementRead
{
config
:
_u
.
config
}
_spec
.
Assign
=
_node
.
assignValues
_spec
.
ScanValues
=
_node
.
scanValues
if
err
=
sqlgraph
.
UpdateNode
(
ctx
,
_u
.
driver
,
_spec
);
err
!=
nil
{
if
_
,
ok
:=
err
.
(
*
sqlgraph
.
NotFoundError
);
ok
{
err
=
&
NotFoundError
{
announcementread
.
Label
}
}
else
if
sqlgraph
.
IsConstraintError
(
err
)
{
err
=
&
ConstraintError
{
msg
:
err
.
Error
(),
wrap
:
err
}
}
return
nil
,
err
}
_u
.
mutation
.
done
=
true
return
_node
,
nil
}
backend/ent/client.go
View file @
377bffe2
...
...
@@ -17,6 +17,8 @@ import (
"entgo.io/ent/dialect/sql/sqlgraph"
"github.com/Wei-Shaw/sub2api/ent/account"
"github.com/Wei-Shaw/sub2api/ent/accountgroup"
"github.com/Wei-Shaw/sub2api/ent/announcement"
"github.com/Wei-Shaw/sub2api/ent/announcementread"
"github.com/Wei-Shaw/sub2api/ent/apikey"
"github.com/Wei-Shaw/sub2api/ent/group"
"github.com/Wei-Shaw/sub2api/ent/promocode"
...
...
@@ -46,6 +48,10 @@ type Client struct {
Account
*
AccountClient
// AccountGroup is the client for interacting with the AccountGroup builders.
AccountGroup
*
AccountGroupClient
// Announcement is the client for interacting with the Announcement builders.
Announcement
*
AnnouncementClient
// AnnouncementRead is the client for interacting with the AnnouncementRead builders.
AnnouncementRead
*
AnnouncementReadClient
// Group is the client for interacting with the Group builders.
Group
*
GroupClient
// PromoCode is the client for interacting with the PromoCode builders.
...
...
@@ -86,6 +92,8 @@ func (c *Client) init() {
c
.
APIKey
=
NewAPIKeyClient
(
c
.
config
)
c
.
Account
=
NewAccountClient
(
c
.
config
)
c
.
AccountGroup
=
NewAccountGroupClient
(
c
.
config
)
c
.
Announcement
=
NewAnnouncementClient
(
c
.
config
)
c
.
AnnouncementRead
=
NewAnnouncementReadClient
(
c
.
config
)
c
.
Group
=
NewGroupClient
(
c
.
config
)
c
.
PromoCode
=
NewPromoCodeClient
(
c
.
config
)
c
.
PromoCodeUsage
=
NewPromoCodeUsageClient
(
c
.
config
)
...
...
@@ -194,6 +202,8 @@ func (c *Client) Tx(ctx context.Context) (*Tx, error) {
APIKey
:
NewAPIKeyClient
(
cfg
),
Account
:
NewAccountClient
(
cfg
),
AccountGroup
:
NewAccountGroupClient
(
cfg
),
Announcement
:
NewAnnouncementClient
(
cfg
),
AnnouncementRead
:
NewAnnouncementReadClient
(
cfg
),
Group
:
NewGroupClient
(
cfg
),
PromoCode
:
NewPromoCodeClient
(
cfg
),
PromoCodeUsage
:
NewPromoCodeUsageClient
(
cfg
),
...
...
@@ -229,6 +239,8 @@ func (c *Client) BeginTx(ctx context.Context, opts *sql.TxOptions) (*Tx, error)
APIKey
:
NewAPIKeyClient
(
cfg
),
Account
:
NewAccountClient
(
cfg
),
AccountGroup
:
NewAccountGroupClient
(
cfg
),
Announcement
:
NewAnnouncementClient
(
cfg
),
AnnouncementRead
:
NewAnnouncementReadClient
(
cfg
),
Group
:
NewGroupClient
(
cfg
),
PromoCode
:
NewPromoCodeClient
(
cfg
),
PromoCodeUsage
:
NewPromoCodeUsageClient
(
cfg
),
...
...
@@ -271,10 +283,10 @@ 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
.
APIKey
,
c
.
Account
,
c
.
AccountGroup
,
c
.
Group
,
c
.
PromoCode
,
c
.
PromoCodeUsage
,
c
.
P
ro
xy
,
c
.
Redeem
Code
,
c
.
Setting
,
c
.
UsageCleanupTask
,
c
.
UsageLog
,
c
.
User
,
c
.
Us
erAllowedGroup
,
c
.
UserAttributeDefinition
,
c
.
UserAttributeValue
,
c
.
UserSubscription
,
c
.
APIKey
,
c
.
Account
,
c
.
AccountGroup
,
c
.
Announcement
,
c
.
AnnouncementRead
,
c
.
G
ro
up
,
c
.
Promo
Code
,
c
.
PromoCodeUsage
,
c
.
Proxy
,
c
.
RedeemCode
,
c
.
Setting
,
c
.
Us
ageCleanupTask
,
c
.
UsageLog
,
c
.
User
,
c
.
UserAllowedGroup
,
c
.
UserAttributeDefinition
,
c
.
UserAttributeValue
,
c
.
UserSubscription
,
}
{
n
.
Use
(
hooks
...
)
}
...
...
@@ -284,10 +296,10 @@ 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
.
APIKey
,
c
.
Account
,
c
.
AccountGroup
,
c
.
Group
,
c
.
PromoCode
,
c
.
PromoCodeUsage
,
c
.
P
ro
xy
,
c
.
Redeem
Code
,
c
.
Setting
,
c
.
UsageCleanupTask
,
c
.
UsageLog
,
c
.
User
,
c
.
Us
erAllowedGroup
,
c
.
UserAttributeDefinition
,
c
.
UserAttributeValue
,
c
.
UserSubscription
,
c
.
APIKey
,
c
.
Account
,
c
.
AccountGroup
,
c
.
Announcement
,
c
.
AnnouncementRead
,
c
.
G
ro
up
,
c
.
Promo
Code
,
c
.
PromoCodeUsage
,
c
.
Proxy
,
c
.
RedeemCode
,
c
.
Setting
,
c
.
Us
ageCleanupTask
,
c
.
UsageLog
,
c
.
User
,
c
.
UserAllowedGroup
,
c
.
UserAttributeDefinition
,
c
.
UserAttributeValue
,
c
.
UserSubscription
,
}
{
n
.
Intercept
(
interceptors
...
)
}
...
...
@@ -302,6 +314,10 @@ func (c *Client) Mutate(ctx context.Context, m Mutation) (Value, error) {
return
c
.
Account
.
mutate
(
ctx
,
m
)
case
*
AccountGroupMutation
:
return
c
.
AccountGroup
.
mutate
(
ctx
,
m
)
case
*
AnnouncementMutation
:
return
c
.
Announcement
.
mutate
(
ctx
,
m
)
case
*
AnnouncementReadMutation
:
return
c
.
AnnouncementRead
.
mutate
(
ctx
,
m
)
case
*
GroupMutation
:
return
c
.
Group
.
mutate
(
ctx
,
m
)
case
*
PromoCodeMutation
:
...
...
@@ -831,6 +847,320 @@ func (c *AccountGroupClient) mutate(ctx context.Context, m *AccountGroupMutation
}
}
// AnnouncementClient is a client for the Announcement schema.
type
AnnouncementClient
struct
{
config
}
// NewAnnouncementClient returns a client for the Announcement from the given config.
func
NewAnnouncementClient
(
c
config
)
*
AnnouncementClient
{
return
&
AnnouncementClient
{
config
:
c
}
}
// Use adds a list of mutation hooks to the hooks stack.
// A call to `Use(f, g, h)` equals to `announcement.Hooks(f(g(h())))`.
func
(
c
*
AnnouncementClient
)
Use
(
hooks
...
Hook
)
{
c
.
hooks
.
Announcement
=
append
(
c
.
hooks
.
Announcement
,
hooks
...
)
}
// Intercept adds a list of query interceptors to the interceptors stack.
// A call to `Intercept(f, g, h)` equals to `announcement.Intercept(f(g(h())))`.
func
(
c
*
AnnouncementClient
)
Intercept
(
interceptors
...
Interceptor
)
{
c
.
inters
.
Announcement
=
append
(
c
.
inters
.
Announcement
,
interceptors
...
)
}
// Create returns a builder for creating a Announcement entity.
func
(
c
*
AnnouncementClient
)
Create
()
*
AnnouncementCreate
{
mutation
:=
newAnnouncementMutation
(
c
.
config
,
OpCreate
)
return
&
AnnouncementCreate
{
config
:
c
.
config
,
hooks
:
c
.
Hooks
(),
mutation
:
mutation
}
}
// CreateBulk returns a builder for creating a bulk of Announcement entities.
func
(
c
*
AnnouncementClient
)
CreateBulk
(
builders
...*
AnnouncementCreate
)
*
AnnouncementCreateBulk
{
return
&
AnnouncementCreateBulk
{
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
*
AnnouncementClient
)
MapCreateBulk
(
slice
any
,
setFunc
func
(
*
AnnouncementCreate
,
int
))
*
AnnouncementCreateBulk
{
rv
:=
reflect
.
ValueOf
(
slice
)
if
rv
.
Kind
()
!=
reflect
.
Slice
{
return
&
AnnouncementCreateBulk
{
err
:
fmt
.
Errorf
(
"calling to AnnouncementClient.MapCreateBulk with wrong type %T, need slice"
,
slice
)}
}
builders
:=
make
([]
*
AnnouncementCreate
,
rv
.
Len
())
for
i
:=
0
;
i
<
rv
.
Len
();
i
++
{
builders
[
i
]
=
c
.
Create
()
setFunc
(
builders
[
i
],
i
)
}
return
&
AnnouncementCreateBulk
{
config
:
c
.
config
,
builders
:
builders
}
}
// Update returns an update builder for Announcement.
func
(
c
*
AnnouncementClient
)
Update
()
*
AnnouncementUpdate
{
mutation
:=
newAnnouncementMutation
(
c
.
config
,
OpUpdate
)
return
&
AnnouncementUpdate
{
config
:
c
.
config
,
hooks
:
c
.
Hooks
(),
mutation
:
mutation
}
}
// UpdateOne returns an update builder for the given entity.
func
(
c
*
AnnouncementClient
)
UpdateOne
(
_m
*
Announcement
)
*
AnnouncementUpdateOne
{
mutation
:=
newAnnouncementMutation
(
c
.
config
,
OpUpdateOne
,
withAnnouncement
(
_m
))
return
&
AnnouncementUpdateOne
{
config
:
c
.
config
,
hooks
:
c
.
Hooks
(),
mutation
:
mutation
}
}
// UpdateOneID returns an update builder for the given id.
func
(
c
*
AnnouncementClient
)
UpdateOneID
(
id
int64
)
*
AnnouncementUpdateOne
{
mutation
:=
newAnnouncementMutation
(
c
.
config
,
OpUpdateOne
,
withAnnouncementID
(
id
))
return
&
AnnouncementUpdateOne
{
config
:
c
.
config
,
hooks
:
c
.
Hooks
(),
mutation
:
mutation
}
}
// Delete returns a delete builder for Announcement.
func
(
c
*
AnnouncementClient
)
Delete
()
*
AnnouncementDelete
{
mutation
:=
newAnnouncementMutation
(
c
.
config
,
OpDelete
)
return
&
AnnouncementDelete
{
config
:
c
.
config
,
hooks
:
c
.
Hooks
(),
mutation
:
mutation
}
}
// DeleteOne returns a builder for deleting the given entity.
func
(
c
*
AnnouncementClient
)
DeleteOne
(
_m
*
Announcement
)
*
AnnouncementDeleteOne
{
return
c
.
DeleteOneID
(
_m
.
ID
)
}
// DeleteOneID returns a builder for deleting the given entity by its id.
func
(
c
*
AnnouncementClient
)
DeleteOneID
(
id
int64
)
*
AnnouncementDeleteOne
{
builder
:=
c
.
Delete
()
.
Where
(
announcement
.
ID
(
id
))
builder
.
mutation
.
id
=
&
id
builder
.
mutation
.
op
=
OpDeleteOne
return
&
AnnouncementDeleteOne
{
builder
}
}
// Query returns a query builder for Announcement.
func
(
c
*
AnnouncementClient
)
Query
()
*
AnnouncementQuery
{
return
&
AnnouncementQuery
{
config
:
c
.
config
,
ctx
:
&
QueryContext
{
Type
:
TypeAnnouncement
},
inters
:
c
.
Interceptors
(),
}
}
// Get returns a Announcement entity by its id.
func
(
c
*
AnnouncementClient
)
Get
(
ctx
context
.
Context
,
id
int64
)
(
*
Announcement
,
error
)
{
return
c
.
Query
()
.
Where
(
announcement
.
ID
(
id
))
.
Only
(
ctx
)
}
// GetX is like Get, but panics if an error occurs.
func
(
c
*
AnnouncementClient
)
GetX
(
ctx
context
.
Context
,
id
int64
)
*
Announcement
{
obj
,
err
:=
c
.
Get
(
ctx
,
id
)
if
err
!=
nil
{
panic
(
err
)
}
return
obj
}
// QueryReads queries the reads edge of a Announcement.
func
(
c
*
AnnouncementClient
)
QueryReads
(
_m
*
Announcement
)
*
AnnouncementReadQuery
{
query
:=
(
&
AnnouncementReadClient
{
config
:
c
.
config
})
.
Query
()
query
.
path
=
func
(
context
.
Context
)
(
fromV
*
sql
.
Selector
,
_
error
)
{
id
:=
_m
.
ID
step
:=
sqlgraph
.
NewStep
(
sqlgraph
.
From
(
announcement
.
Table
,
announcement
.
FieldID
,
id
),
sqlgraph
.
To
(
announcementread
.
Table
,
announcementread
.
FieldID
),
sqlgraph
.
Edge
(
sqlgraph
.
O2M
,
false
,
announcement
.
ReadsTable
,
announcement
.
ReadsColumn
),
)
fromV
=
sqlgraph
.
Neighbors
(
_m
.
driver
.
Dialect
(),
step
)
return
fromV
,
nil
}
return
query
}
// Hooks returns the client hooks.
func
(
c
*
AnnouncementClient
)
Hooks
()
[]
Hook
{
return
c
.
hooks
.
Announcement
}
// Interceptors returns the client interceptors.
func
(
c
*
AnnouncementClient
)
Interceptors
()
[]
Interceptor
{
return
c
.
inters
.
Announcement
}
func
(
c
*
AnnouncementClient
)
mutate
(
ctx
context
.
Context
,
m
*
AnnouncementMutation
)
(
Value
,
error
)
{
switch
m
.
Op
()
{
case
OpCreate
:
return
(
&
AnnouncementCreate
{
config
:
c
.
config
,
hooks
:
c
.
Hooks
(),
mutation
:
m
})
.
Save
(
ctx
)
case
OpUpdate
:
return
(
&
AnnouncementUpdate
{
config
:
c
.
config
,
hooks
:
c
.
Hooks
(),
mutation
:
m
})
.
Save
(
ctx
)
case
OpUpdateOne
:
return
(
&
AnnouncementUpdateOne
{
config
:
c
.
config
,
hooks
:
c
.
Hooks
(),
mutation
:
m
})
.
Save
(
ctx
)
case
OpDelete
,
OpDeleteOne
:
return
(
&
AnnouncementDelete
{
config
:
c
.
config
,
hooks
:
c
.
Hooks
(),
mutation
:
m
})
.
Exec
(
ctx
)
default
:
return
nil
,
fmt
.
Errorf
(
"ent: unknown Announcement mutation op: %q"
,
m
.
Op
())
}
}
// AnnouncementReadClient is a client for the AnnouncementRead schema.
type
AnnouncementReadClient
struct
{
config
}
// NewAnnouncementReadClient returns a client for the AnnouncementRead from the given config.
func
NewAnnouncementReadClient
(
c
config
)
*
AnnouncementReadClient
{
return
&
AnnouncementReadClient
{
config
:
c
}
}
// Use adds a list of mutation hooks to the hooks stack.
// A call to `Use(f, g, h)` equals to `announcementread.Hooks(f(g(h())))`.
func
(
c
*
AnnouncementReadClient
)
Use
(
hooks
...
Hook
)
{
c
.
hooks
.
AnnouncementRead
=
append
(
c
.
hooks
.
AnnouncementRead
,
hooks
...
)
}
// Intercept adds a list of query interceptors to the interceptors stack.
// A call to `Intercept(f, g, h)` equals to `announcementread.Intercept(f(g(h())))`.
func
(
c
*
AnnouncementReadClient
)
Intercept
(
interceptors
...
Interceptor
)
{
c
.
inters
.
AnnouncementRead
=
append
(
c
.
inters
.
AnnouncementRead
,
interceptors
...
)
}
// Create returns a builder for creating a AnnouncementRead entity.
func
(
c
*
AnnouncementReadClient
)
Create
()
*
AnnouncementReadCreate
{
mutation
:=
newAnnouncementReadMutation
(
c
.
config
,
OpCreate
)
return
&
AnnouncementReadCreate
{
config
:
c
.
config
,
hooks
:
c
.
Hooks
(),
mutation
:
mutation
}
}
// CreateBulk returns a builder for creating a bulk of AnnouncementRead entities.
func
(
c
*
AnnouncementReadClient
)
CreateBulk
(
builders
...*
AnnouncementReadCreate
)
*
AnnouncementReadCreateBulk
{
return
&
AnnouncementReadCreateBulk
{
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
*
AnnouncementReadClient
)
MapCreateBulk
(
slice
any
,
setFunc
func
(
*
AnnouncementReadCreate
,
int
))
*
AnnouncementReadCreateBulk
{
rv
:=
reflect
.
ValueOf
(
slice
)
if
rv
.
Kind
()
!=
reflect
.
Slice
{
return
&
AnnouncementReadCreateBulk
{
err
:
fmt
.
Errorf
(
"calling to AnnouncementReadClient.MapCreateBulk with wrong type %T, need slice"
,
slice
)}
}
builders
:=
make
([]
*
AnnouncementReadCreate
,
rv
.
Len
())
for
i
:=
0
;
i
<
rv
.
Len
();
i
++
{
builders
[
i
]
=
c
.
Create
()
setFunc
(
builders
[
i
],
i
)
}
return
&
AnnouncementReadCreateBulk
{
config
:
c
.
config
,
builders
:
builders
}
}
// Update returns an update builder for AnnouncementRead.
func
(
c
*
AnnouncementReadClient
)
Update
()
*
AnnouncementReadUpdate
{
mutation
:=
newAnnouncementReadMutation
(
c
.
config
,
OpUpdate
)
return
&
AnnouncementReadUpdate
{
config
:
c
.
config
,
hooks
:
c
.
Hooks
(),
mutation
:
mutation
}
}
// UpdateOne returns an update builder for the given entity.
func
(
c
*
AnnouncementReadClient
)
UpdateOne
(
_m
*
AnnouncementRead
)
*
AnnouncementReadUpdateOne
{
mutation
:=
newAnnouncementReadMutation
(
c
.
config
,
OpUpdateOne
,
withAnnouncementRead
(
_m
))
return
&
AnnouncementReadUpdateOne
{
config
:
c
.
config
,
hooks
:
c
.
Hooks
(),
mutation
:
mutation
}
}
// UpdateOneID returns an update builder for the given id.
func
(
c
*
AnnouncementReadClient
)
UpdateOneID
(
id
int64
)
*
AnnouncementReadUpdateOne
{
mutation
:=
newAnnouncementReadMutation
(
c
.
config
,
OpUpdateOne
,
withAnnouncementReadID
(
id
))
return
&
AnnouncementReadUpdateOne
{
config
:
c
.
config
,
hooks
:
c
.
Hooks
(),
mutation
:
mutation
}
}
// Delete returns a delete builder for AnnouncementRead.
func
(
c
*
AnnouncementReadClient
)
Delete
()
*
AnnouncementReadDelete
{
mutation
:=
newAnnouncementReadMutation
(
c
.
config
,
OpDelete
)
return
&
AnnouncementReadDelete
{
config
:
c
.
config
,
hooks
:
c
.
Hooks
(),
mutation
:
mutation
}
}
// DeleteOne returns a builder for deleting the given entity.
func
(
c
*
AnnouncementReadClient
)
DeleteOne
(
_m
*
AnnouncementRead
)
*
AnnouncementReadDeleteOne
{
return
c
.
DeleteOneID
(
_m
.
ID
)
}
// DeleteOneID returns a builder for deleting the given entity by its id.
func
(
c
*
AnnouncementReadClient
)
DeleteOneID
(
id
int64
)
*
AnnouncementReadDeleteOne
{
builder
:=
c
.
Delete
()
.
Where
(
announcementread
.
ID
(
id
))
builder
.
mutation
.
id
=
&
id
builder
.
mutation
.
op
=
OpDeleteOne
return
&
AnnouncementReadDeleteOne
{
builder
}
}
// Query returns a query builder for AnnouncementRead.
func
(
c
*
AnnouncementReadClient
)
Query
()
*
AnnouncementReadQuery
{
return
&
AnnouncementReadQuery
{
config
:
c
.
config
,
ctx
:
&
QueryContext
{
Type
:
TypeAnnouncementRead
},
inters
:
c
.
Interceptors
(),
}
}
// Get returns a AnnouncementRead entity by its id.
func
(
c
*
AnnouncementReadClient
)
Get
(
ctx
context
.
Context
,
id
int64
)
(
*
AnnouncementRead
,
error
)
{
return
c
.
Query
()
.
Where
(
announcementread
.
ID
(
id
))
.
Only
(
ctx
)
}
// GetX is like Get, but panics if an error occurs.
func
(
c
*
AnnouncementReadClient
)
GetX
(
ctx
context
.
Context
,
id
int64
)
*
AnnouncementRead
{
obj
,
err
:=
c
.
Get
(
ctx
,
id
)
if
err
!=
nil
{
panic
(
err
)
}
return
obj
}
// QueryAnnouncement queries the announcement edge of a AnnouncementRead.
func
(
c
*
AnnouncementReadClient
)
QueryAnnouncement
(
_m
*
AnnouncementRead
)
*
AnnouncementQuery
{
query
:=
(
&
AnnouncementClient
{
config
:
c
.
config
})
.
Query
()
query
.
path
=
func
(
context
.
Context
)
(
fromV
*
sql
.
Selector
,
_
error
)
{
id
:=
_m
.
ID
step
:=
sqlgraph
.
NewStep
(
sqlgraph
.
From
(
announcementread
.
Table
,
announcementread
.
FieldID
,
id
),
sqlgraph
.
To
(
announcement
.
Table
,
announcement
.
FieldID
),
sqlgraph
.
Edge
(
sqlgraph
.
M2O
,
true
,
announcementread
.
AnnouncementTable
,
announcementread
.
AnnouncementColumn
),
)
fromV
=
sqlgraph
.
Neighbors
(
_m
.
driver
.
Dialect
(),
step
)
return
fromV
,
nil
}
return
query
}
// QueryUser queries the user edge of a AnnouncementRead.
func
(
c
*
AnnouncementReadClient
)
QueryUser
(
_m
*
AnnouncementRead
)
*
UserQuery
{
query
:=
(
&
UserClient
{
config
:
c
.
config
})
.
Query
()
query
.
path
=
func
(
context
.
Context
)
(
fromV
*
sql
.
Selector
,
_
error
)
{
id
:=
_m
.
ID
step
:=
sqlgraph
.
NewStep
(
sqlgraph
.
From
(
announcementread
.
Table
,
announcementread
.
FieldID
,
id
),
sqlgraph
.
To
(
user
.
Table
,
user
.
FieldID
),
sqlgraph
.
Edge
(
sqlgraph
.
M2O
,
true
,
announcementread
.
UserTable
,
announcementread
.
UserColumn
),
)
fromV
=
sqlgraph
.
Neighbors
(
_m
.
driver
.
Dialect
(),
step
)
return
fromV
,
nil
}
return
query
}
// Hooks returns the client hooks.
func
(
c
*
AnnouncementReadClient
)
Hooks
()
[]
Hook
{
return
c
.
hooks
.
AnnouncementRead
}
// Interceptors returns the client interceptors.
func
(
c
*
AnnouncementReadClient
)
Interceptors
()
[]
Interceptor
{
return
c
.
inters
.
AnnouncementRead
}
func
(
c
*
AnnouncementReadClient
)
mutate
(
ctx
context
.
Context
,
m
*
AnnouncementReadMutation
)
(
Value
,
error
)
{
switch
m
.
Op
()
{
case
OpCreate
:
return
(
&
AnnouncementReadCreate
{
config
:
c
.
config
,
hooks
:
c
.
Hooks
(),
mutation
:
m
})
.
Save
(
ctx
)
case
OpUpdate
:
return
(
&
AnnouncementReadUpdate
{
config
:
c
.
config
,
hooks
:
c
.
Hooks
(),
mutation
:
m
})
.
Save
(
ctx
)
case
OpUpdateOne
:
return
(
&
AnnouncementReadUpdateOne
{
config
:
c
.
config
,
hooks
:
c
.
Hooks
(),
mutation
:
m
})
.
Save
(
ctx
)
case
OpDelete
,
OpDeleteOne
:
return
(
&
AnnouncementReadDelete
{
config
:
c
.
config
,
hooks
:
c
.
Hooks
(),
mutation
:
m
})
.
Exec
(
ctx
)
default
:
return
nil
,
fmt
.
Errorf
(
"ent: unknown AnnouncementRead mutation op: %q"
,
m
.
Op
())
}
}
// GroupClient is a client for the Group schema.
type
GroupClient
struct
{
config
...
...
@@ -2375,6 +2705,22 @@ func (c *UserClient) QueryAssignedSubscriptions(_m *User) *UserSubscriptionQuery
return
query
}
// QueryAnnouncementReads queries the announcement_reads edge of a User.
func
(
c
*
UserClient
)
QueryAnnouncementReads
(
_m
*
User
)
*
AnnouncementReadQuery
{
query
:=
(
&
AnnouncementReadClient
{
config
:
c
.
config
})
.
Query
()
query
.
path
=
func
(
context
.
Context
)
(
fromV
*
sql
.
Selector
,
_
error
)
{
id
:=
_m
.
ID
step
:=
sqlgraph
.
NewStep
(
sqlgraph
.
From
(
user
.
Table
,
user
.
FieldID
,
id
),
sqlgraph
.
To
(
announcementread
.
Table
,
announcementread
.
FieldID
),
sqlgraph
.
Edge
(
sqlgraph
.
O2M
,
false
,
user
.
AnnouncementReadsTable
,
user
.
AnnouncementReadsColumn
),
)
fromV
=
sqlgraph
.
Neighbors
(
_m
.
driver
.
Dialect
(),
step
)
return
fromV
,
nil
}
return
query
}
// QueryAllowedGroups queries the allowed_groups edge of a User.
func
(
c
*
UserClient
)
QueryAllowedGroups
(
_m
*
User
)
*
GroupQuery
{
query
:=
(
&
GroupClient
{
config
:
c
.
config
})
.
Query
()
...
...
@@ -3116,14 +3462,16 @@ func (c *UserSubscriptionClient) mutate(ctx context.Context, m *UserSubscription
// hooks and interceptors per client, for fast access.
type
(
hooks
struct
{
APIKey
,
Account
,
AccountGroup
,
Group
,
PromoCode
,
PromoCodeUsage
,
Proxy
,
RedeemCode
,
Setting
,
UsageCleanupTask
,
UsageLog
,
User
,
UserAllowedGroup
,
UserAttributeDefinition
,
UserAttributeValue
,
UserSubscription
[]
ent
.
Hook
APIKey
,
Account
,
AccountGroup
,
Announcement
,
AnnouncementRead
,
Group
,
PromoCode
,
PromoCodeUsage
,
Proxy
,
RedeemCode
,
Setting
,
UsageCleanupTask
,
UsageLog
,
User
,
UserAllowedGroup
,
UserAttributeDefinition
,
UserAttributeValue
,
UserSubscription
[]
ent
.
Hook
}
inters
struct
{
APIKey
,
Account
,
AccountGroup
,
Group
,
PromoCode
,
PromoCodeUsage
,
Proxy
,
RedeemCode
,
Setting
,
UsageCleanupTask
,
UsageLog
,
User
,
UserAllowedGroup
,
UserAttributeDefinition
,
UserAttributeValue
,
UserSubscription
[]
ent
.
Interceptor
APIKey
,
Account
,
AccountGroup
,
Announcement
,
AnnouncementRead
,
Group
,
PromoCode
,
PromoCodeUsage
,
Proxy
,
RedeemCode
,
Setting
,
UsageCleanupTask
,
UsageLog
,
User
,
UserAllowedGroup
,
UserAttributeDefinition
,
UserAttributeValue
,
UserSubscription
[]
ent
.
Interceptor
}
)
...
...
backend/ent/ent.go
View file @
377bffe2
...
...
@@ -14,6 +14,8 @@ import (
"entgo.io/ent/dialect/sql/sqlgraph"
"github.com/Wei-Shaw/sub2api/ent/account"
"github.com/Wei-Shaw/sub2api/ent/accountgroup"
"github.com/Wei-Shaw/sub2api/ent/announcement"
"github.com/Wei-Shaw/sub2api/ent/announcementread"
"github.com/Wei-Shaw/sub2api/ent/apikey"
"github.com/Wei-Shaw/sub2api/ent/group"
"github.com/Wei-Shaw/sub2api/ent/promocode"
...
...
@@ -91,6 +93,8 @@ func checkColumn(t, c string) error {
apikey
.
Table
:
apikey
.
ValidColumn
,
account
.
Table
:
account
.
ValidColumn
,
accountgroup
.
Table
:
accountgroup
.
ValidColumn
,
announcement
.
Table
:
announcement
.
ValidColumn
,
announcementread
.
Table
:
announcementread
.
ValidColumn
,
group
.
Table
:
group
.
ValidColumn
,
promocode
.
Table
:
promocode
.
ValidColumn
,
promocodeusage
.
Table
:
promocodeusage
.
ValidColumn
,
...
...
backend/ent/hook/hook.go
View file @
377bffe2
...
...
@@ -45,6 +45,30 @@ func (f AccountGroupFunc) Mutate(ctx context.Context, m ent.Mutation) (ent.Value
return
nil
,
fmt
.
Errorf
(
"unexpected mutation type %T. expect *ent.AccountGroupMutation"
,
m
)
}
// The AnnouncementFunc type is an adapter to allow the use of ordinary
// function as Announcement mutator.
type
AnnouncementFunc
func
(
context
.
Context
,
*
ent
.
AnnouncementMutation
)
(
ent
.
Value
,
error
)
// Mutate calls f(ctx, m).
func
(
f
AnnouncementFunc
)
Mutate
(
ctx
context
.
Context
,
m
ent
.
Mutation
)
(
ent
.
Value
,
error
)
{
if
mv
,
ok
:=
m
.
(
*
ent
.
AnnouncementMutation
);
ok
{
return
f
(
ctx
,
mv
)
}
return
nil
,
fmt
.
Errorf
(
"unexpected mutation type %T. expect *ent.AnnouncementMutation"
,
m
)
}
// The AnnouncementReadFunc type is an adapter to allow the use of ordinary
// function as AnnouncementRead mutator.
type
AnnouncementReadFunc
func
(
context
.
Context
,
*
ent
.
AnnouncementReadMutation
)
(
ent
.
Value
,
error
)
// Mutate calls f(ctx, m).
func
(
f
AnnouncementReadFunc
)
Mutate
(
ctx
context
.
Context
,
m
ent
.
Mutation
)
(
ent
.
Value
,
error
)
{
if
mv
,
ok
:=
m
.
(
*
ent
.
AnnouncementReadMutation
);
ok
{
return
f
(
ctx
,
mv
)
}
return
nil
,
fmt
.
Errorf
(
"unexpected mutation type %T. expect *ent.AnnouncementReadMutation"
,
m
)
}
// The GroupFunc type is an adapter to allow the use of ordinary
// function as Group mutator.
type
GroupFunc
func
(
context
.
Context
,
*
ent
.
GroupMutation
)
(
ent
.
Value
,
error
)
...
...
backend/ent/intercept/intercept.go
View file @
377bffe2
...
...
@@ -10,6 +10,8 @@ import (
"github.com/Wei-Shaw/sub2api/ent"
"github.com/Wei-Shaw/sub2api/ent/account"
"github.com/Wei-Shaw/sub2api/ent/accountgroup"
"github.com/Wei-Shaw/sub2api/ent/announcement"
"github.com/Wei-Shaw/sub2api/ent/announcementread"
"github.com/Wei-Shaw/sub2api/ent/apikey"
"github.com/Wei-Shaw/sub2api/ent/group"
"github.com/Wei-Shaw/sub2api/ent/predicate"
...
...
@@ -164,6 +166,60 @@ func (f TraverseAccountGroup) Traverse(ctx context.Context, q ent.Query) error {
return
fmt
.
Errorf
(
"unexpected query type %T. expect *ent.AccountGroupQuery"
,
q
)
}
// The AnnouncementFunc type is an adapter to allow the use of ordinary function as a Querier.
type
AnnouncementFunc
func
(
context
.
Context
,
*
ent
.
AnnouncementQuery
)
(
ent
.
Value
,
error
)
// Query calls f(ctx, q).
func
(
f
AnnouncementFunc
)
Query
(
ctx
context
.
Context
,
q
ent
.
Query
)
(
ent
.
Value
,
error
)
{
if
q
,
ok
:=
q
.
(
*
ent
.
AnnouncementQuery
);
ok
{
return
f
(
ctx
,
q
)
}
return
nil
,
fmt
.
Errorf
(
"unexpected query type %T. expect *ent.AnnouncementQuery"
,
q
)
}
// The TraverseAnnouncement type is an adapter to allow the use of ordinary function as Traverser.
type
TraverseAnnouncement
func
(
context
.
Context
,
*
ent
.
AnnouncementQuery
)
error
// Intercept is a dummy implementation of Intercept that returns the next Querier in the pipeline.
func
(
f
TraverseAnnouncement
)
Intercept
(
next
ent
.
Querier
)
ent
.
Querier
{
return
next
}
// Traverse calls f(ctx, q).
func
(
f
TraverseAnnouncement
)
Traverse
(
ctx
context
.
Context
,
q
ent
.
Query
)
error
{
if
q
,
ok
:=
q
.
(
*
ent
.
AnnouncementQuery
);
ok
{
return
f
(
ctx
,
q
)
}
return
fmt
.
Errorf
(
"unexpected query type %T. expect *ent.AnnouncementQuery"
,
q
)
}
// The AnnouncementReadFunc type is an adapter to allow the use of ordinary function as a Querier.
type
AnnouncementReadFunc
func
(
context
.
Context
,
*
ent
.
AnnouncementReadQuery
)
(
ent
.
Value
,
error
)
// Query calls f(ctx, q).
func
(
f
AnnouncementReadFunc
)
Query
(
ctx
context
.
Context
,
q
ent
.
Query
)
(
ent
.
Value
,
error
)
{
if
q
,
ok
:=
q
.
(
*
ent
.
AnnouncementReadQuery
);
ok
{
return
f
(
ctx
,
q
)
}
return
nil
,
fmt
.
Errorf
(
"unexpected query type %T. expect *ent.AnnouncementReadQuery"
,
q
)
}
// The TraverseAnnouncementRead type is an adapter to allow the use of ordinary function as Traverser.
type
TraverseAnnouncementRead
func
(
context
.
Context
,
*
ent
.
AnnouncementReadQuery
)
error
// Intercept is a dummy implementation of Intercept that returns the next Querier in the pipeline.
func
(
f
TraverseAnnouncementRead
)
Intercept
(
next
ent
.
Querier
)
ent
.
Querier
{
return
next
}
// Traverse calls f(ctx, q).
func
(
f
TraverseAnnouncementRead
)
Traverse
(
ctx
context
.
Context
,
q
ent
.
Query
)
error
{
if
q
,
ok
:=
q
.
(
*
ent
.
AnnouncementReadQuery
);
ok
{
return
f
(
ctx
,
q
)
}
return
fmt
.
Errorf
(
"unexpected query type %T. expect *ent.AnnouncementReadQuery"
,
q
)
}
// The GroupFunc type is an adapter to allow the use of ordinary function as a Querier.
type
GroupFunc
func
(
context
.
Context
,
*
ent
.
GroupQuery
)
(
ent
.
Value
,
error
)
...
...
@@ -524,6 +580,10 @@ func NewQuery(q ent.Query) (Query, error) {
return
&
query
[
*
ent
.
AccountQuery
,
predicate
.
Account
,
account
.
OrderOption
]{
typ
:
ent
.
TypeAccount
,
tq
:
q
},
nil
case
*
ent
.
AccountGroupQuery
:
return
&
query
[
*
ent
.
AccountGroupQuery
,
predicate
.
AccountGroup
,
accountgroup
.
OrderOption
]{
typ
:
ent
.
TypeAccountGroup
,
tq
:
q
},
nil
case
*
ent
.
AnnouncementQuery
:
return
&
query
[
*
ent
.
AnnouncementQuery
,
predicate
.
Announcement
,
announcement
.
OrderOption
]{
typ
:
ent
.
TypeAnnouncement
,
tq
:
q
},
nil
case
*
ent
.
AnnouncementReadQuery
:
return
&
query
[
*
ent
.
AnnouncementReadQuery
,
predicate
.
AnnouncementRead
,
announcementread
.
OrderOption
]{
typ
:
ent
.
TypeAnnouncementRead
,
tq
:
q
},
nil
case
*
ent
.
GroupQuery
:
return
&
query
[
*
ent
.
GroupQuery
,
predicate
.
Group
,
group
.
OrderOption
]{
typ
:
ent
.
TypeGroup
,
tq
:
q
},
nil
case
*
ent
.
PromoCodeQuery
:
...
...
backend/ent/migrate/schema.go
View file @
377bffe2
...
...
@@ -204,6 +204,98 @@ var (
},
},
}
// AnnouncementsColumns holds the columns for the "announcements" table.
AnnouncementsColumns
=
[]
*
schema
.
Column
{
{
Name
:
"id"
,
Type
:
field
.
TypeInt64
,
Increment
:
true
},
{
Name
:
"title"
,
Type
:
field
.
TypeString
,
Size
:
200
},
{
Name
:
"content"
,
Type
:
field
.
TypeString
,
SchemaType
:
map
[
string
]
string
{
"postgres"
:
"text"
}},
{
Name
:
"status"
,
Type
:
field
.
TypeString
,
Size
:
20
,
Default
:
"draft"
},
{
Name
:
"targeting"
,
Type
:
field
.
TypeJSON
,
Nullable
:
true
,
SchemaType
:
map
[
string
]
string
{
"postgres"
:
"jsonb"
}},
{
Name
:
"starts_at"
,
Type
:
field
.
TypeTime
,
Nullable
:
true
,
SchemaType
:
map
[
string
]
string
{
"postgres"
:
"timestamptz"
}},
{
Name
:
"ends_at"
,
Type
:
field
.
TypeTime
,
Nullable
:
true
,
SchemaType
:
map
[
string
]
string
{
"postgres"
:
"timestamptz"
}},
{
Name
:
"created_by"
,
Type
:
field
.
TypeInt64
,
Nullable
:
true
},
{
Name
:
"updated_by"
,
Type
:
field
.
TypeInt64
,
Nullable
:
true
},
{
Name
:
"created_at"
,
Type
:
field
.
TypeTime
,
SchemaType
:
map
[
string
]
string
{
"postgres"
:
"timestamptz"
}},
{
Name
:
"updated_at"
,
Type
:
field
.
TypeTime
,
SchemaType
:
map
[
string
]
string
{
"postgres"
:
"timestamptz"
}},
}
// AnnouncementsTable holds the schema information for the "announcements" table.
AnnouncementsTable
=
&
schema
.
Table
{
Name
:
"announcements"
,
Columns
:
AnnouncementsColumns
,
PrimaryKey
:
[]
*
schema
.
Column
{
AnnouncementsColumns
[
0
]},
Indexes
:
[]
*
schema
.
Index
{
{
Name
:
"announcement_status"
,
Unique
:
false
,
Columns
:
[]
*
schema
.
Column
{
AnnouncementsColumns
[
3
]},
},
{
Name
:
"announcement_created_at"
,
Unique
:
false
,
Columns
:
[]
*
schema
.
Column
{
AnnouncementsColumns
[
9
]},
},
{
Name
:
"announcement_starts_at"
,
Unique
:
false
,
Columns
:
[]
*
schema
.
Column
{
AnnouncementsColumns
[
5
]},
},
{
Name
:
"announcement_ends_at"
,
Unique
:
false
,
Columns
:
[]
*
schema
.
Column
{
AnnouncementsColumns
[
6
]},
},
},
}
// AnnouncementReadsColumns holds the columns for the "announcement_reads" table.
AnnouncementReadsColumns
=
[]
*
schema
.
Column
{
{
Name
:
"id"
,
Type
:
field
.
TypeInt64
,
Increment
:
true
},
{
Name
:
"read_at"
,
Type
:
field
.
TypeTime
,
SchemaType
:
map
[
string
]
string
{
"postgres"
:
"timestamptz"
}},
{
Name
:
"created_at"
,
Type
:
field
.
TypeTime
,
SchemaType
:
map
[
string
]
string
{
"postgres"
:
"timestamptz"
}},
{
Name
:
"announcement_id"
,
Type
:
field
.
TypeInt64
},
{
Name
:
"user_id"
,
Type
:
field
.
TypeInt64
},
}
// AnnouncementReadsTable holds the schema information for the "announcement_reads" table.
AnnouncementReadsTable
=
&
schema
.
Table
{
Name
:
"announcement_reads"
,
Columns
:
AnnouncementReadsColumns
,
PrimaryKey
:
[]
*
schema
.
Column
{
AnnouncementReadsColumns
[
0
]},
ForeignKeys
:
[]
*
schema
.
ForeignKey
{
{
Symbol
:
"announcement_reads_announcements_reads"
,
Columns
:
[]
*
schema
.
Column
{
AnnouncementReadsColumns
[
3
]},
RefColumns
:
[]
*
schema
.
Column
{
AnnouncementsColumns
[
0
]},
OnDelete
:
schema
.
NoAction
,
},
{
Symbol
:
"announcement_reads_users_announcement_reads"
,
Columns
:
[]
*
schema
.
Column
{
AnnouncementReadsColumns
[
4
]},
RefColumns
:
[]
*
schema
.
Column
{
UsersColumns
[
0
]},
OnDelete
:
schema
.
NoAction
,
},
},
Indexes
:
[]
*
schema
.
Index
{
{
Name
:
"announcementread_announcement_id"
,
Unique
:
false
,
Columns
:
[]
*
schema
.
Column
{
AnnouncementReadsColumns
[
3
]},
},
{
Name
:
"announcementread_user_id"
,
Unique
:
false
,
Columns
:
[]
*
schema
.
Column
{
AnnouncementReadsColumns
[
4
]},
},
{
Name
:
"announcementread_read_at"
,
Unique
:
false
,
Columns
:
[]
*
schema
.
Column
{
AnnouncementReadsColumns
[
1
]},
},
{
Name
:
"announcementread_announcement_id_user_id"
,
Unique
:
true
,
Columns
:
[]
*
schema
.
Column
{
AnnouncementReadsColumns
[
3
],
AnnouncementReadsColumns
[
4
]},
},
},
}
// GroupsColumns holds the columns for the "groups" table.
GroupsColumns
=
[]
*
schema
.
Column
{
{
Name
:
"id"
,
Type
:
field
.
TypeInt64
,
Increment
:
true
},
...
...
@@ -615,6 +707,9 @@ var (
{
Name
:
"status"
,
Type
:
field
.
TypeString
,
Size
:
20
,
Default
:
"active"
},
{
Name
:
"username"
,
Type
:
field
.
TypeString
,
Size
:
100
,
Default
:
""
},
{
Name
:
"notes"
,
Type
:
field
.
TypeString
,
Default
:
""
,
SchemaType
:
map
[
string
]
string
{
"postgres"
:
"text"
}},
{
Name
:
"totp_secret_encrypted"
,
Type
:
field
.
TypeString
,
Nullable
:
true
,
SchemaType
:
map
[
string
]
string
{
"postgres"
:
"text"
}},
{
Name
:
"totp_enabled"
,
Type
:
field
.
TypeBool
,
Default
:
false
},
{
Name
:
"totp_enabled_at"
,
Type
:
field
.
TypeTime
,
Nullable
:
true
},
}
// UsersTable holds the schema information for the "users" table.
UsersTable
=
&
schema
.
Table
{
...
...
@@ -842,6 +937,8 @@ var (
APIKeysTable
,
AccountsTable
,
AccountGroupsTable
,
AnnouncementsTable
,
AnnouncementReadsTable
,
GroupsTable
,
PromoCodesTable
,
PromoCodeUsagesTable
,
...
...
@@ -873,6 +970,14 @@ func init() {
AccountGroupsTable
.
Annotation
=
&
entsql
.
Annotation
{
Table
:
"account_groups"
,
}
AnnouncementsTable
.
Annotation
=
&
entsql
.
Annotation
{
Table
:
"announcements"
,
}
AnnouncementReadsTable
.
ForeignKeys
[
0
]
.
RefTable
=
AnnouncementsTable
AnnouncementReadsTable
.
ForeignKeys
[
1
]
.
RefTable
=
UsersTable
AnnouncementReadsTable
.
Annotation
=
&
entsql
.
Annotation
{
Table
:
"announcement_reads"
,
}
GroupsTable
.
Annotation
=
&
entsql
.
Annotation
{
Table
:
"groups"
,
}
...
...
backend/ent/mutation.go
View file @
377bffe2
...
...
@@ -14,6 +14,8 @@ import (
"entgo.io/ent/dialect/sql"
"github.com/Wei-Shaw/sub2api/ent/account"
"github.com/Wei-Shaw/sub2api/ent/accountgroup"
"github.com/Wei-Shaw/sub2api/ent/announcement"
"github.com/Wei-Shaw/sub2api/ent/announcementread"
"github.com/Wei-Shaw/sub2api/ent/apikey"
"github.com/Wei-Shaw/sub2api/ent/group"
"github.com/Wei-Shaw/sub2api/ent/predicate"
...
...
@@ -29,6 +31,7 @@ import (
"github.com/Wei-Shaw/sub2api/ent/userattributedefinition"
"github.com/Wei-Shaw/sub2api/ent/userattributevalue"
"github.com/Wei-Shaw/sub2api/ent/usersubscription"
"github.com/Wei-Shaw/sub2api/internal/domain"
)
const (
...
...
@@ -43,6 +46,8 @@ const (
TypeAPIKey = "APIKey"
TypeAccount = "Account"
TypeAccountGroup = "AccountGroup"
TypeAnnouncement = "Announcement"
TypeAnnouncementRead = "AnnouncementRead"
TypeGroup = "Group"
TypePromoCode = "PromoCode"
TypePromoCodeUsage = "PromoCodeUsage"
...
...
@@ -3833,6 +3838,1671 @@ func (m *AccountGroupMutation) ResetEdge(name string) error {
return fmt.Errorf("unknown AccountGroup edge %s", name)
}
// AnnouncementMutation represents an operation that mutates the Announcement nodes in the graph.
type AnnouncementMutation struct {
config
op Op
typ string
id *int64
title *string
content *string
status *string
targeting *domain.AnnouncementTargeting
starts_at *time.Time
ends_at *time.Time
created_by *int64
addcreated_by *int64
updated_by *int64
addupdated_by *int64
created_at *time.Time
updated_at *time.Time
clearedFields map[string]struct{}
reads map[int64]struct{}
removedreads map[int64]struct{}
clearedreads bool
done bool
oldValue func(context.Context) (*Announcement, error)
predicates []predicate.Announcement
}
var _ ent.Mutation = (*AnnouncementMutation)(nil)
// announcementOption allows management of the mutation configuration using functional options.
type announcementOption func(*AnnouncementMutation)
// newAnnouncementMutation creates new mutation for the Announcement entity.
func newAnnouncementMutation(c config, op Op, opts ...announcementOption) *AnnouncementMutation {
m := &AnnouncementMutation{
config: c,
op: op,
typ: TypeAnnouncement,
clearedFields: make(map[string]struct{}),
}
for _, opt := range opts {
opt(m)
}
return m
}
// withAnnouncementID sets the ID field of the mutation.
func withAnnouncementID(id int64) announcementOption {
return func(m *AnnouncementMutation) {
var (
err error
once sync.Once
value *Announcement
)
m.oldValue = func(ctx context.Context) (*Announcement, error) {
once.Do(func() {
if m.done {
err = errors.New("querying old values post mutation is not allowed")
} else {
value, err = m.Client().Announcement.Get(ctx, id)
}
})
return value, err
}
m.id = &id
}
}
// withAnnouncement sets the old Announcement of the mutation.
func withAnnouncement(node *Announcement) announcementOption {
return func(m *AnnouncementMutation) {
m.oldValue = func(context.Context) (*Announcement, error) {
return node, nil
}
m.id = &node.ID
}
}
// Client returns a new `ent.Client` from the mutation. If the mutation was
// executed in a transaction (ent.Tx), a transactional client is returned.
func (m AnnouncementMutation) Client() *Client {
client := &Client{config: m.config}
client.init()
return client
}
// Tx returns an `ent.Tx` for mutations that were executed in transactions;
// it returns an error otherwise.
func (m AnnouncementMutation) Tx() (*Tx, error) {
if _, ok := m.driver.(*txDriver); !ok {
return nil, errors.New("ent: mutation is not running in a transaction")
}
tx := &Tx{config: m.config}
tx.init()
return tx, nil
}
// ID returns the ID value in the mutation. Note that the ID is only available
// if it was provided to the builder or after it was returned from the database.
func (m *AnnouncementMutation) ID() (id int64, exists bool) {
if m.id == nil {
return
}
return *m.id, true
}
// IDs queries the database and returns the entity ids that match the mutation's predicate.
// That means, if the mutation is applied within a transaction with an isolation level such
// as sql.LevelSerializable, the returned ids match the ids of the rows that will be updated
// or updated by the mutation.
func (m *AnnouncementMutation) IDs(ctx context.Context) ([]int64, error) {
switch {
case m.op.Is(OpUpdateOne | OpDeleteOne):
id, exists := m.ID()
if exists {
return []int64{id}, nil
}
fallthrough
case m.op.Is(OpUpdate | OpDelete):
return m.Client().Announcement.Query().Where(m.predicates...).IDs(ctx)
default:
return nil, fmt.Errorf("IDs is not allowed on %s operations", m.op)
}
}
// SetTitle sets the "title" field.
func (m *AnnouncementMutation) SetTitle(s string) {
m.title = &s
}
// Title returns the value of the "title" field in the mutation.
func (m *AnnouncementMutation) Title() (r string, exists bool) {
v := m.title
if v == nil {
return
}
return *v, true
}
// OldTitle returns the old "title" field's value of the Announcement entity.
// If the Announcement object wasn't provided to the builder, the object is fetched from the database.
// An error is returned if the mutation operation is not UpdateOne, or the database query fails.
func (m *AnnouncementMutation) OldTitle(ctx context.Context) (v string, err error) {
if !m.op.Is(OpUpdateOne) {
return v, errors.New("OldTitle is only allowed on UpdateOne operations")
}
if m.id == nil || m.oldValue == nil {
return v, errors.New("OldTitle requires an ID field in the mutation")
}
oldValue, err := m.oldValue(ctx)
if err != nil {
return v, fmt.Errorf("querying old value for OldTitle: %w", err)
}
return oldValue.Title, nil
}
// ResetTitle resets all changes to the "title" field.
func (m *AnnouncementMutation) ResetTitle() {
m.title = nil
}
// SetContent sets the "content" field.
func (m *AnnouncementMutation) SetContent(s string) {
m.content = &s
}
// Content returns the value of the "content" field in the mutation.
func (m *AnnouncementMutation) Content() (r string, exists bool) {
v := m.content
if v == nil {
return
}
return *v, true
}
// OldContent returns the old "content" field's value of the Announcement entity.
// If the Announcement object wasn't provided to the builder, the object is fetched from the database.
// An error is returned if the mutation operation is not UpdateOne, or the database query fails.
func (m *AnnouncementMutation) OldContent(ctx context.Context) (v string, err error) {
if !m.op.Is(OpUpdateOne) {
return v, errors.New("OldContent is only allowed on UpdateOne operations")
}
if m.id == nil || m.oldValue == nil {
return v, errors.New("OldContent requires an ID field in the mutation")
}
oldValue, err := m.oldValue(ctx)
if err != nil {
return v, fmt.Errorf("querying old value for OldContent: %w", err)
}
return oldValue.Content, nil
}
// ResetContent resets all changes to the "content" field.
func (m *AnnouncementMutation) ResetContent() {
m.content = nil
}
// SetStatus sets the "status" field.
func (m *AnnouncementMutation) SetStatus(s string) {
m.status = &s
}
// Status returns the value of the "status" field in the mutation.
func (m *AnnouncementMutation) Status() (r string, exists bool) {
v := m.status
if v == nil {
return
}
return *v, true
}
// OldStatus returns the old "status" field's value of the Announcement entity.
// If the Announcement object wasn't provided to the builder, the object is fetched from the database.
// An error is returned if the mutation operation is not UpdateOne, or the database query fails.
func (m *AnnouncementMutation) OldStatus(ctx context.Context) (v string, err error) {
if !m.op.Is(OpUpdateOne) {
return v, errors.New("OldStatus is only allowed on UpdateOne operations")
}
if m.id == nil || m.oldValue == nil {
return v, errors.New("OldStatus requires an ID field in the mutation")
}
oldValue, err := m.oldValue(ctx)
if err != nil {
return v, fmt.Errorf("querying old value for OldStatus: %w", err)
}
return oldValue.Status, nil
}
// ResetStatus resets all changes to the "status" field.
func (m *AnnouncementMutation) ResetStatus() {
m.status = nil
}
// SetTargeting sets the "targeting" field.
func (m *AnnouncementMutation) SetTargeting(dt domain.AnnouncementTargeting) {
m.targeting = &dt
}
// Targeting returns the value of the "targeting" field in the mutation.
func (m *AnnouncementMutation) Targeting() (r domain.AnnouncementTargeting, exists bool) {
v := m.targeting
if v == nil {
return
}
return *v, true
}
// OldTargeting returns the old "targeting" field's value of the Announcement entity.
// If the Announcement object wasn't provided to the builder, the object is fetched from the database.
// An error is returned if the mutation operation is not UpdateOne, or the database query fails.
func (m *AnnouncementMutation) OldTargeting(ctx context.Context) (v domain.AnnouncementTargeting, err error) {
if !m.op.Is(OpUpdateOne) {
return v, errors.New("OldTargeting is only allowed on UpdateOne operations")
}
if m.id == nil || m.oldValue == nil {
return v, errors.New("OldTargeting requires an ID field in the mutation")
}
oldValue, err := m.oldValue(ctx)
if err != nil {
return v, fmt.Errorf("querying old value for OldTargeting: %w", err)
}
return oldValue.Targeting, nil
}
// ClearTargeting clears the value of the "targeting" field.
func (m *AnnouncementMutation) ClearTargeting() {
m.targeting = nil
m.clearedFields[announcement.FieldTargeting] = struct{}{}
}
// TargetingCleared returns if the "targeting" field was cleared in this mutation.
func (m *AnnouncementMutation) TargetingCleared() bool {
_, ok := m.clearedFields[announcement.FieldTargeting]
return ok
}
// ResetTargeting resets all changes to the "targeting" field.
func (m *AnnouncementMutation) ResetTargeting() {
m.targeting = nil
delete(m.clearedFields, announcement.FieldTargeting)
}
// SetStartsAt sets the "starts_at" field.
func (m *AnnouncementMutation) SetStartsAt(t time.Time) {
m.starts_at = &t
}
// StartsAt returns the value of the "starts_at" field in the mutation.
func (m *AnnouncementMutation) StartsAt() (r time.Time, exists bool) {
v := m.starts_at
if v == nil {
return
}
return *v, true
}
// OldStartsAt returns the old "starts_at" field's value of the Announcement entity.
// If the Announcement object wasn't provided to the builder, the object is fetched from the database.
// An error is returned if the mutation operation is not UpdateOne, or the database query fails.
func (m *AnnouncementMutation) OldStartsAt(ctx context.Context) (v *time.Time, err error) {
if !m.op.Is(OpUpdateOne) {
return v, errors.New("OldStartsAt is only allowed on UpdateOne operations")
}
if m.id == nil || m.oldValue == nil {
return v, errors.New("OldStartsAt requires an ID field in the mutation")
}
oldValue, err := m.oldValue(ctx)
if err != nil {
return v, fmt.Errorf("querying old value for OldStartsAt: %w", err)
}
return oldValue.StartsAt, nil
}
// ClearStartsAt clears the value of the "starts_at" field.
func (m *AnnouncementMutation) ClearStartsAt() {
m.starts_at = nil
m.clearedFields[announcement.FieldStartsAt] = struct{}{}
}
// StartsAtCleared returns if the "starts_at" field was cleared in this mutation.
func (m *AnnouncementMutation) StartsAtCleared() bool {
_, ok := m.clearedFields[announcement.FieldStartsAt]
return ok
}
// ResetStartsAt resets all changes to the "starts_at" field.
func (m *AnnouncementMutation) ResetStartsAt() {
m.starts_at = nil
delete(m.clearedFields, announcement.FieldStartsAt)
}
// SetEndsAt sets the "ends_at" field.
func (m *AnnouncementMutation) SetEndsAt(t time.Time) {
m.ends_at = &t
}
// EndsAt returns the value of the "ends_at" field in the mutation.
func (m *AnnouncementMutation) EndsAt() (r time.Time, exists bool) {
v := m.ends_at
if v == nil {
return
}
return *v, true
}
// OldEndsAt returns the old "ends_at" field's value of the Announcement entity.
// If the Announcement object wasn't provided to the builder, the object is fetched from the database.
// An error is returned if the mutation operation is not UpdateOne, or the database query fails.
func (m *AnnouncementMutation) OldEndsAt(ctx context.Context) (v *time.Time, err error) {
if !m.op.Is(OpUpdateOne) {
return v, errors.New("OldEndsAt is only allowed on UpdateOne operations")
}
if m.id == nil || m.oldValue == nil {
return v, errors.New("OldEndsAt requires an ID field in the mutation")
}
oldValue, err := m.oldValue(ctx)
if err != nil {
return v, fmt.Errorf("querying old value for OldEndsAt: %w", err)
}
return oldValue.EndsAt, nil
}
// ClearEndsAt clears the value of the "ends_at" field.
func (m *AnnouncementMutation) ClearEndsAt() {
m.ends_at = nil
m.clearedFields[announcement.FieldEndsAt] = struct{}{}
}
// EndsAtCleared returns if the "ends_at" field was cleared in this mutation.
func (m *AnnouncementMutation) EndsAtCleared() bool {
_, ok := m.clearedFields[announcement.FieldEndsAt]
return ok
}
// ResetEndsAt resets all changes to the "ends_at" field.
func (m *AnnouncementMutation) ResetEndsAt() {
m.ends_at = nil
delete(m.clearedFields, announcement.FieldEndsAt)
}
// SetCreatedBy sets the "created_by" field.
func (m *AnnouncementMutation) SetCreatedBy(i int64) {
m.created_by = &i
m.addcreated_by = nil
}
// CreatedBy returns the value of the "created_by" field in the mutation.
func (m *AnnouncementMutation) CreatedBy() (r int64, exists bool) {
v := m.created_by
if v == nil {
return
}
return *v, true
}
// OldCreatedBy returns the old "created_by" field's value of the Announcement entity.
// If the Announcement object wasn't provided to the builder, the object is fetched from the database.
// An error is returned if the mutation operation is not UpdateOne, or the database query fails.
func (m *AnnouncementMutation) OldCreatedBy(ctx context.Context) (v *int64, err error) {
if !m.op.Is(OpUpdateOne) {
return v, errors.New("OldCreatedBy is only allowed on UpdateOne operations")
}
if m.id == nil || m.oldValue == nil {
return v, errors.New("OldCreatedBy requires an ID field in the mutation")
}
oldValue, err := m.oldValue(ctx)
if err != nil {
return v, fmt.Errorf("querying old value for OldCreatedBy: %w", err)
}
return oldValue.CreatedBy, nil
}
// AddCreatedBy adds i to the "created_by" field.
func (m *AnnouncementMutation) AddCreatedBy(i int64) {
if m.addcreated_by != nil {
*m.addcreated_by += i
} else {
m.addcreated_by = &i
}
}
// AddedCreatedBy returns the value that was added to the "created_by" field in this mutation.
func (m *AnnouncementMutation) AddedCreatedBy() (r int64, exists bool) {
v := m.addcreated_by
if v == nil {
return
}
return *v, true
}
// ClearCreatedBy clears the value of the "created_by" field.
func (m *AnnouncementMutation) ClearCreatedBy() {
m.created_by = nil
m.addcreated_by = nil
m.clearedFields[announcement.FieldCreatedBy] = struct{}{}
}
// CreatedByCleared returns if the "created_by" field was cleared in this mutation.
func (m *AnnouncementMutation) CreatedByCleared() bool {
_, ok := m.clearedFields[announcement.FieldCreatedBy]
return ok
}
// ResetCreatedBy resets all changes to the "created_by" field.
func (m *AnnouncementMutation) ResetCreatedBy() {
m.created_by = nil
m.addcreated_by = nil
delete(m.clearedFields, announcement.FieldCreatedBy)
}
// SetUpdatedBy sets the "updated_by" field.
func (m *AnnouncementMutation) SetUpdatedBy(i int64) {
m.updated_by = &i
m.addupdated_by = nil
}
// UpdatedBy returns the value of the "updated_by" field in the mutation.
func (m *AnnouncementMutation) UpdatedBy() (r int64, exists bool) {
v := m.updated_by
if v == nil {
return
}
return *v, true
}
// OldUpdatedBy returns the old "updated_by" field's value of the Announcement entity.
// If the Announcement object wasn't provided to the builder, the object is fetched from the database.
// An error is returned if the mutation operation is not UpdateOne, or the database query fails.
func (m *AnnouncementMutation) OldUpdatedBy(ctx context.Context) (v *int64, err error) {
if !m.op.Is(OpUpdateOne) {
return v, errors.New("OldUpdatedBy is only allowed on UpdateOne operations")
}
if m.id == nil || m.oldValue == nil {
return v, errors.New("OldUpdatedBy requires an ID field in the mutation")
}
oldValue, err := m.oldValue(ctx)
if err != nil {
return v, fmt.Errorf("querying old value for OldUpdatedBy: %w", err)
}
return oldValue.UpdatedBy, nil
}
// AddUpdatedBy adds i to the "updated_by" field.
func (m *AnnouncementMutation) AddUpdatedBy(i int64) {
if m.addupdated_by != nil {
*m.addupdated_by += i
} else {
m.addupdated_by = &i
}
}
// AddedUpdatedBy returns the value that was added to the "updated_by" field in this mutation.
func (m *AnnouncementMutation) AddedUpdatedBy() (r int64, exists bool) {
v := m.addupdated_by
if v == nil {
return
}
return *v, true
}
// ClearUpdatedBy clears the value of the "updated_by" field.
func (m *AnnouncementMutation) ClearUpdatedBy() {
m.updated_by = nil
m.addupdated_by = nil
m.clearedFields[announcement.FieldUpdatedBy] = struct{}{}
}
// UpdatedByCleared returns if the "updated_by" field was cleared in this mutation.
func (m *AnnouncementMutation) UpdatedByCleared() bool {
_, ok := m.clearedFields[announcement.FieldUpdatedBy]
return ok
}
// ResetUpdatedBy resets all changes to the "updated_by" field.
func (m *AnnouncementMutation) ResetUpdatedBy() {
m.updated_by = nil
m.addupdated_by = nil
delete(m.clearedFields, announcement.FieldUpdatedBy)
}
// SetCreatedAt sets the "created_at" field.
func (m *AnnouncementMutation) SetCreatedAt(t time.Time) {
m.created_at = &t
}
// CreatedAt returns the value of the "created_at" field in the mutation.
func (m *AnnouncementMutation) CreatedAt() (r time.Time, exists bool) {
v := m.created_at
if v == nil {
return
}
return *v, true
}
// OldCreatedAt returns the old "created_at" field's value of the Announcement entity.
// If the Announcement object wasn't provided to the builder, the object is fetched from the database.
// An error is returned if the mutation operation is not UpdateOne, or the database query fails.
func (m *AnnouncementMutation) OldCreatedAt(ctx context.Context) (v time.Time, err error) {
if !m.op.Is(OpUpdateOne) {
return v, errors.New("OldCreatedAt is only allowed on UpdateOne operations")
}
if m.id == nil || m.oldValue == nil {
return v, errors.New("OldCreatedAt requires an ID field in the mutation")
}
oldValue, err := m.oldValue(ctx)
if err != nil {
return v, fmt.Errorf("querying old value for OldCreatedAt: %w", err)
}
return oldValue.CreatedAt, nil
}
// ResetCreatedAt resets all changes to the "created_at" field.
func (m *AnnouncementMutation) ResetCreatedAt() {
m.created_at = nil
}
// SetUpdatedAt sets the "updated_at" field.
func (m *AnnouncementMutation) SetUpdatedAt(t time.Time) {
m.updated_at = &t
}
// UpdatedAt returns the value of the "updated_at" field in the mutation.
func (m *AnnouncementMutation) UpdatedAt() (r time.Time, exists bool) {
v := m.updated_at
if v == nil {
return
}
return *v, true
}
// OldUpdatedAt returns the old "updated_at" field's value of the Announcement entity.
// If the Announcement object wasn't provided to the builder, the object is fetched from the database.
// An error is returned if the mutation operation is not UpdateOne, or the database query fails.
func (m *AnnouncementMutation) OldUpdatedAt(ctx context.Context) (v time.Time, err error) {
if !m.op.Is(OpUpdateOne) {
return v, errors.New("OldUpdatedAt is only allowed on UpdateOne operations")
}
if m.id == nil || m.oldValue == nil {
return v, errors.New("OldUpdatedAt requires an ID field in the mutation")
}
oldValue, err := m.oldValue(ctx)
if err != nil {
return v, fmt.Errorf("querying old value for OldUpdatedAt: %w", err)
}
return oldValue.UpdatedAt, nil
}
// ResetUpdatedAt resets all changes to the "updated_at" field.
func (m *AnnouncementMutation) ResetUpdatedAt() {
m.updated_at = nil
}
// AddReadIDs adds the "reads" edge to the AnnouncementRead entity by ids.
func (m *AnnouncementMutation) AddReadIDs(ids ...int64) {
if m.reads == nil {
m.reads = make(map[int64]struct{})
}
for i := range ids {
m.reads[ids[i]] = struct{}{}
}
}
// ClearReads clears the "reads" edge to the AnnouncementRead entity.
func (m *AnnouncementMutation) ClearReads() {
m.clearedreads = true
}
// ReadsCleared reports if the "reads" edge to the AnnouncementRead entity was cleared.
func (m *AnnouncementMutation) ReadsCleared() bool {
return m.clearedreads
}
// RemoveReadIDs removes the "reads" edge to the AnnouncementRead entity by IDs.
func (m *AnnouncementMutation) RemoveReadIDs(ids ...int64) {
if m.removedreads == nil {
m.removedreads = make(map[int64]struct{})
}
for i := range ids {
delete(m.reads, ids[i])
m.removedreads[ids[i]] = struct{}{}
}
}
// RemovedReads returns the removed IDs of the "reads" edge to the AnnouncementRead entity.
func (m *AnnouncementMutation) RemovedReadsIDs() (ids []int64) {
for id := range m.removedreads {
ids = append(ids, id)
}
return
}
// ReadsIDs returns the "reads" edge IDs in the mutation.
func (m *AnnouncementMutation) ReadsIDs() (ids []int64) {
for id := range m.reads {
ids = append(ids, id)
}
return
}
// ResetReads resets all changes to the "reads" edge.
func (m *AnnouncementMutation) ResetReads() {
m.reads = nil
m.clearedreads = false
m.removedreads = nil
}
// Where appends a list predicates to the AnnouncementMutation builder.
func (m *AnnouncementMutation) Where(ps ...predicate.Announcement) {
m.predicates = append(m.predicates, ps...)
}
// WhereP appends storage-level predicates to the AnnouncementMutation builder. Using this method,
// users can use type-assertion to append predicates that do not depend on any generated package.
func (m *AnnouncementMutation) WhereP(ps ...func(*sql.Selector)) {
p := make([]predicate.Announcement, len(ps))
for i := range ps {
p[i] = ps[i]
}
m.Where(p...)
}
// Op returns the operation name.
func (m *AnnouncementMutation) Op() Op {
return m.op
}
// SetOp allows setting the mutation operation.
func (m *AnnouncementMutation) SetOp(op Op) {
m.op = op
}
// Type returns the node type of this mutation (Announcement).
func (m *AnnouncementMutation) Type() string {
return m.typ
}
// Fields returns all fields that were changed during this mutation. Note that in
// order to get all numeric fields that were incremented/decremented, call
// AddedFields().
func (m *AnnouncementMutation) Fields() []string {
fields := make([]string, 0, 10)
if m.title != nil {
fields = append(fields, announcement.FieldTitle)
}
if m.content != nil {
fields = append(fields, announcement.FieldContent)
}
if m.status != nil {
fields = append(fields, announcement.FieldStatus)
}
if m.targeting != nil {
fields = append(fields, announcement.FieldTargeting)
}
if m.starts_at != nil {
fields = append(fields, announcement.FieldStartsAt)
}
if m.ends_at != nil {
fields = append(fields, announcement.FieldEndsAt)
}
if m.created_by != nil {
fields = append(fields, announcement.FieldCreatedBy)
}
if m.updated_by != nil {
fields = append(fields, announcement.FieldUpdatedBy)
}
if m.created_at != nil {
fields = append(fields, announcement.FieldCreatedAt)
}
if m.updated_at != nil {
fields = append(fields, announcement.FieldUpdatedAt)
}
return fields
}
// Field returns the value of a field with the given name. The second boolean
// return value indicates that this field was not set, or was not defined in the
// schema.
func (m *AnnouncementMutation) Field(name string) (ent.Value, bool) {
switch name {
case announcement.FieldTitle:
return m.Title()
case announcement.FieldContent:
return m.Content()
case announcement.FieldStatus:
return m.Status()
case announcement.FieldTargeting:
return m.Targeting()
case announcement.FieldStartsAt:
return m.StartsAt()
case announcement.FieldEndsAt:
return m.EndsAt()
case announcement.FieldCreatedBy:
return m.CreatedBy()
case announcement.FieldUpdatedBy:
return m.UpdatedBy()
case announcement.FieldCreatedAt:
return m.CreatedAt()
case announcement.FieldUpdatedAt:
return m.UpdatedAt()
}
return nil, false
}
// OldField returns the old value of the field from the database. An error is
// returned if the mutation operation is not UpdateOne, or the query to the
// database failed.
func (m *AnnouncementMutation) OldField(ctx context.Context, name string) (ent.Value, error) {
switch name {
case announcement.FieldTitle:
return m.OldTitle(ctx)
case announcement.FieldContent:
return m.OldContent(ctx)
case announcement.FieldStatus:
return m.OldStatus(ctx)
case announcement.FieldTargeting:
return m.OldTargeting(ctx)
case announcement.FieldStartsAt:
return m.OldStartsAt(ctx)
case announcement.FieldEndsAt:
return m.OldEndsAt(ctx)
case announcement.FieldCreatedBy:
return m.OldCreatedBy(ctx)
case announcement.FieldUpdatedBy:
return m.OldUpdatedBy(ctx)
case announcement.FieldCreatedAt:
return m.OldCreatedAt(ctx)
case announcement.FieldUpdatedAt:
return m.OldUpdatedAt(ctx)
}
return nil, fmt.Errorf("unknown Announcement field %s", name)
}
// SetField sets the value of a field with the given name. It returns an error if
// the field is not defined in the schema, or if the type mismatched the field
// type.
func (m *AnnouncementMutation) SetField(name string, value ent.Value) error {
switch name {
case announcement.FieldTitle:
v, ok := value.(string)
if !ok {
return fmt.Errorf("unexpected type %T for field %s", value, name)
}
m.SetTitle(v)
return nil
case announcement.FieldContent:
v, ok := value.(string)
if !ok {
return fmt.Errorf("unexpected type %T for field %s", value, name)
}
m.SetContent(v)
return nil
case announcement.FieldStatus:
v, ok := value.(string)
if !ok {
return fmt.Errorf("unexpected type %T for field %s", value, name)
}
m.SetStatus(v)
return nil
case announcement.FieldTargeting:
v, ok := value.(domain.AnnouncementTargeting)
if !ok {
return fmt.Errorf("unexpected type %T for field %s", value, name)
}
m.SetTargeting(v)
return nil
case announcement.FieldStartsAt:
v, ok := value.(time.Time)
if !ok {
return fmt.Errorf("unexpected type %T for field %s", value, name)
}
m.SetStartsAt(v)
return nil
case announcement.FieldEndsAt:
v, ok := value.(time.Time)
if !ok {
return fmt.Errorf("unexpected type %T for field %s", value, name)
}
m.SetEndsAt(v)
return nil
case announcement.FieldCreatedBy:
v, ok := value.(int64)
if !ok {
return fmt.Errorf("unexpected type %T for field %s", value, name)
}
m.SetCreatedBy(v)
return nil
case announcement.FieldUpdatedBy:
v, ok := value.(int64)
if !ok {
return fmt.Errorf("unexpected type %T for field %s", value, name)
}
m.SetUpdatedBy(v)
return nil
case announcement.FieldCreatedAt:
v, ok := value.(time.Time)
if !ok {
return fmt.Errorf("unexpected type %T for field %s", value, name)
}
m.SetCreatedAt(v)
return nil
case announcement.FieldUpdatedAt:
v, ok := value.(time.Time)
if !ok {
return fmt.Errorf("unexpected type %T for field %s", value, name)
}
m.SetUpdatedAt(v)
return nil
}
return fmt.Errorf("unknown Announcement field %s", name)
}
// AddedFields returns all numeric fields that were incremented/decremented during
// this mutation.
func (m *AnnouncementMutation) AddedFields() []string {
var fields []string
if m.addcreated_by != nil {
fields = append(fields, announcement.FieldCreatedBy)
}
if m.addupdated_by != nil {
fields = append(fields, announcement.FieldUpdatedBy)
}
return fields
}
// AddedField returns the numeric value that was incremented/decremented on a field
// with the given name. The second boolean return value indicates that this field
// was not set, or was not defined in the schema.
func (m *AnnouncementMutation) AddedField(name string) (ent.Value, bool) {
switch name {
case announcement.FieldCreatedBy:
return m.AddedCreatedBy()
case announcement.FieldUpdatedBy:
return m.AddedUpdatedBy()
}
return nil, false
}
// AddField adds the value to the field with the given name. It returns an error if
// the field is not defined in the schema, or if the type mismatched the field
// type.
func (m *AnnouncementMutation) AddField(name string, value ent.Value) error {
switch name {
case announcement.FieldCreatedBy:
v, ok := value.(int64)
if !ok {
return fmt.Errorf("unexpected type %T for field %s", value, name)
}
m.AddCreatedBy(v)
return nil
case announcement.FieldUpdatedBy:
v, ok := value.(int64)
if !ok {
return fmt.Errorf("unexpected type %T for field %s", value, name)
}
m.AddUpdatedBy(v)
return nil
}
return fmt.Errorf("unknown Announcement numeric field %s", name)
}
// ClearedFields returns all nullable fields that were cleared during this
// mutation.
func (m *AnnouncementMutation) ClearedFields() []string {
var fields []string
if m.FieldCleared(announcement.FieldTargeting) {
fields = append(fields, announcement.FieldTargeting)
}
if m.FieldCleared(announcement.FieldStartsAt) {
fields = append(fields, announcement.FieldStartsAt)
}
if m.FieldCleared(announcement.FieldEndsAt) {
fields = append(fields, announcement.FieldEndsAt)
}
if m.FieldCleared(announcement.FieldCreatedBy) {
fields = append(fields, announcement.FieldCreatedBy)
}
if m.FieldCleared(announcement.FieldUpdatedBy) {
fields = append(fields, announcement.FieldUpdatedBy)
}
return fields
}
// FieldCleared returns a boolean indicating if a field with the given name was
// cleared in this mutation.
func (m *AnnouncementMutation) FieldCleared(name string) bool {
_, ok := m.clearedFields[name]
return ok
}
// ClearField clears the value of the field with the given name. It returns an
// error if the field is not defined in the schema.
func (m *AnnouncementMutation) ClearField(name string) error {
switch name {
case announcement.FieldTargeting:
m.ClearTargeting()
return nil
case announcement.FieldStartsAt:
m.ClearStartsAt()
return nil
case announcement.FieldEndsAt:
m.ClearEndsAt()
return nil
case announcement.FieldCreatedBy:
m.ClearCreatedBy()
return nil
case announcement.FieldUpdatedBy:
m.ClearUpdatedBy()
return nil
}
return fmt.Errorf("unknown Announcement nullable field %s", name)
}
// ResetField resets all changes in the mutation for the field with the given name.
// It returns an error if the field is not defined in the schema.
func (m *AnnouncementMutation) ResetField(name string) error {
switch name {
case announcement.FieldTitle:
m.ResetTitle()
return nil
case announcement.FieldContent:
m.ResetContent()
return nil
case announcement.FieldStatus:
m.ResetStatus()
return nil
case announcement.FieldTargeting:
m.ResetTargeting()
return nil
case announcement.FieldStartsAt:
m.ResetStartsAt()
return nil
case announcement.FieldEndsAt:
m.ResetEndsAt()
return nil
case announcement.FieldCreatedBy:
m.ResetCreatedBy()
return nil
case announcement.FieldUpdatedBy:
m.ResetUpdatedBy()
return nil
case announcement.FieldCreatedAt:
m.ResetCreatedAt()
return nil
case announcement.FieldUpdatedAt:
m.ResetUpdatedAt()
return nil
}
return fmt.Errorf("unknown Announcement field %s", name)
}
// AddedEdges returns all edge names that were set/added in this mutation.
func (m *AnnouncementMutation) AddedEdges() []string {
edges := make([]string, 0, 1)
if m.reads != nil {
edges = append(edges, announcement.EdgeReads)
}
return edges
}
// AddedIDs returns all IDs (to other nodes) that were added for the given edge
// name in this mutation.
func (m *AnnouncementMutation) AddedIDs(name string) []ent.Value {
switch name {
case announcement.EdgeReads:
ids := make([]ent.Value, 0, len(m.reads))
for id := range m.reads {
ids = append(ids, id)
}
return ids
}
return nil
}
// RemovedEdges returns all edge names that were removed in this mutation.
func (m *AnnouncementMutation) RemovedEdges() []string {
edges := make([]string, 0, 1)
if m.removedreads != nil {
edges = append(edges, announcement.EdgeReads)
}
return edges
}
// RemovedIDs returns all IDs (to other nodes) that were removed for the edge with
// the given name in this mutation.
func (m *AnnouncementMutation) RemovedIDs(name string) []ent.Value {
switch name {
case announcement.EdgeReads:
ids := make([]ent.Value, 0, len(m.removedreads))
for id := range m.removedreads {
ids = append(ids, id)
}
return ids
}
return nil
}
// ClearedEdges returns all edge names that were cleared in this mutation.
func (m *AnnouncementMutation) ClearedEdges() []string {
edges := make([]string, 0, 1)
if m.clearedreads {
edges = append(edges, announcement.EdgeReads)
}
return edges
}
// EdgeCleared returns a boolean which indicates if the edge with the given name
// was cleared in this mutation.
func (m *AnnouncementMutation) EdgeCleared(name string) bool {
switch name {
case announcement.EdgeReads:
return m.clearedreads
}
return false
}
// ClearEdge clears the value of the edge with the given name. It returns an error
// if that edge is not defined in the schema.
func (m *AnnouncementMutation) ClearEdge(name string) error {
switch name {
}
return fmt.Errorf("unknown Announcement unique edge %s", name)
}
// ResetEdge resets all changes to the edge with the given name in this mutation.
// It returns an error if the edge is not defined in the schema.
func (m *AnnouncementMutation) ResetEdge(name string) error {
switch name {
case announcement.EdgeReads:
m.ResetReads()
return nil
}
return fmt.Errorf("unknown Announcement edge %s", name)
}
// AnnouncementReadMutation represents an operation that mutates the AnnouncementRead nodes in the graph.
type AnnouncementReadMutation struct {
config
op Op
typ string
id *int64
read_at *time.Time
created_at *time.Time
clearedFields map[string]struct{}
announcement *int64
clearedannouncement bool
user *int64
cleareduser bool
done bool
oldValue func(context.Context) (*AnnouncementRead, error)
predicates []predicate.AnnouncementRead
}
var _ ent.Mutation = (*AnnouncementReadMutation)(nil)
// announcementreadOption allows management of the mutation configuration using functional options.
type announcementreadOption func(*AnnouncementReadMutation)
// newAnnouncementReadMutation creates new mutation for the AnnouncementRead entity.
func newAnnouncementReadMutation(c config, op Op, opts ...announcementreadOption) *AnnouncementReadMutation {
m := &AnnouncementReadMutation{
config: c,
op: op,
typ: TypeAnnouncementRead,
clearedFields: make(map[string]struct{}),
}
for _, opt := range opts {
opt(m)
}
return m
}
// withAnnouncementReadID sets the ID field of the mutation.
func withAnnouncementReadID(id int64) announcementreadOption {
return func(m *AnnouncementReadMutation) {
var (
err error
once sync.Once
value *AnnouncementRead
)
m.oldValue = func(ctx context.Context) (*AnnouncementRead, error) {
once.Do(func() {
if m.done {
err = errors.New("querying old values post mutation is not allowed")
} else {
value, err = m.Client().AnnouncementRead.Get(ctx, id)
}
})
return value, err
}
m.id = &id
}
}
// withAnnouncementRead sets the old AnnouncementRead of the mutation.
func withAnnouncementRead(node *AnnouncementRead) announcementreadOption {
return func(m *AnnouncementReadMutation) {
m.oldValue = func(context.Context) (*AnnouncementRead, error) {
return node, nil
}
m.id = &node.ID
}
}
// Client returns a new `ent.Client` from the mutation. If the mutation was
// executed in a transaction (ent.Tx), a transactional client is returned.
func (m AnnouncementReadMutation) Client() *Client {
client := &Client{config: m.config}
client.init()
return client
}
// Tx returns an `ent.Tx` for mutations that were executed in transactions;
// it returns an error otherwise.
func (m AnnouncementReadMutation) Tx() (*Tx, error) {
if _, ok := m.driver.(*txDriver); !ok {
return nil, errors.New("ent: mutation is not running in a transaction")
}
tx := &Tx{config: m.config}
tx.init()
return tx, nil
}
// ID returns the ID value in the mutation. Note that the ID is only available
// if it was provided to the builder or after it was returned from the database.
func (m *AnnouncementReadMutation) ID() (id int64, exists bool) {
if m.id == nil {
return
}
return *m.id, true
}
// IDs queries the database and returns the entity ids that match the mutation's predicate.
// That means, if the mutation is applied within a transaction with an isolation level such
// as sql.LevelSerializable, the returned ids match the ids of the rows that will be updated
// or updated by the mutation.
func (m *AnnouncementReadMutation) IDs(ctx context.Context) ([]int64, error) {
switch {
case m.op.Is(OpUpdateOne | OpDeleteOne):
id, exists := m.ID()
if exists {
return []int64{id}, nil
}
fallthrough
case m.op.Is(OpUpdate | OpDelete):
return m.Client().AnnouncementRead.Query().Where(m.predicates...).IDs(ctx)
default:
return nil, fmt.Errorf("IDs is not allowed on %s operations", m.op)
}
}
// SetAnnouncementID sets the "announcement_id" field.
func (m *AnnouncementReadMutation) SetAnnouncementID(i int64) {
m.announcement = &i
}
// AnnouncementID returns the value of the "announcement_id" field in the mutation.
func (m *AnnouncementReadMutation) AnnouncementID() (r int64, exists bool) {
v := m.announcement
if v == nil {
return
}
return *v, true
}
// OldAnnouncementID returns the old "announcement_id" field's value of the AnnouncementRead entity.
// If the AnnouncementRead object wasn't provided to the builder, the object is fetched from the database.
// An error is returned if the mutation operation is not UpdateOne, or the database query fails.
func (m *AnnouncementReadMutation) OldAnnouncementID(ctx context.Context) (v int64, err error) {
if !m.op.Is(OpUpdateOne) {
return v, errors.New("OldAnnouncementID is only allowed on UpdateOne operations")
}
if m.id == nil || m.oldValue == nil {
return v, errors.New("OldAnnouncementID requires an ID field in the mutation")
}
oldValue, err := m.oldValue(ctx)
if err != nil {
return v, fmt.Errorf("querying old value for OldAnnouncementID: %w", err)
}
return oldValue.AnnouncementID, nil
}
// ResetAnnouncementID resets all changes to the "announcement_id" field.
func (m *AnnouncementReadMutation) ResetAnnouncementID() {
m.announcement = nil
}
// SetUserID sets the "user_id" field.
func (m *AnnouncementReadMutation) SetUserID(i int64) {
m.user = &i
}
// UserID returns the value of the "user_id" field in the mutation.
func (m *AnnouncementReadMutation) UserID() (r int64, exists bool) {
v := m.user
if v == nil {
return
}
return *v, true
}
// OldUserID returns the old "user_id" field's value of the AnnouncementRead entity.
// If the AnnouncementRead object wasn't provided to the builder, the object is fetched from the database.
// An error is returned if the mutation operation is not UpdateOne, or the database query fails.
func (m *AnnouncementReadMutation) OldUserID(ctx context.Context) (v int64, err error) {
if !m.op.Is(OpUpdateOne) {
return v, errors.New("OldUserID is only allowed on UpdateOne operations")
}
if m.id == nil || m.oldValue == nil {
return v, errors.New("OldUserID requires an ID field in the mutation")
}
oldValue, err := m.oldValue(ctx)
if err != nil {
return v, fmt.Errorf("querying old value for OldUserID: %w", err)
}
return oldValue.UserID, nil
}
// ResetUserID resets all changes to the "user_id" field.
func (m *AnnouncementReadMutation) ResetUserID() {
m.user = nil
}
// SetReadAt sets the "read_at" field.
func (m *AnnouncementReadMutation) SetReadAt(t time.Time) {
m.read_at = &t
}
// ReadAt returns the value of the "read_at" field in the mutation.
func (m *AnnouncementReadMutation) ReadAt() (r time.Time, exists bool) {
v := m.read_at
if v == nil {
return
}
return *v, true
}
// OldReadAt returns the old "read_at" field's value of the AnnouncementRead entity.
// If the AnnouncementRead object wasn't provided to the builder, the object is fetched from the database.
// An error is returned if the mutation operation is not UpdateOne, or the database query fails.
func (m *AnnouncementReadMutation) OldReadAt(ctx context.Context) (v time.Time, err error) {
if !m.op.Is(OpUpdateOne) {
return v, errors.New("OldReadAt is only allowed on UpdateOne operations")
}
if m.id == nil || m.oldValue == nil {
return v, errors.New("OldReadAt requires an ID field in the mutation")
}
oldValue, err := m.oldValue(ctx)
if err != nil {
return v, fmt.Errorf("querying old value for OldReadAt: %w", err)
}
return oldValue.ReadAt, nil
}
// ResetReadAt resets all changes to the "read_at" field.
func (m *AnnouncementReadMutation) ResetReadAt() {
m.read_at = nil
}
// SetCreatedAt sets the "created_at" field.
func (m *AnnouncementReadMutation) SetCreatedAt(t time.Time) {
m.created_at = &t
}
// CreatedAt returns the value of the "created_at" field in the mutation.
func (m *AnnouncementReadMutation) CreatedAt() (r time.Time, exists bool) {
v := m.created_at
if v == nil {
return
}
return *v, true
}
// OldCreatedAt returns the old "created_at" field's value of the AnnouncementRead entity.
// If the AnnouncementRead object wasn't provided to the builder, the object is fetched from the database.
// An error is returned if the mutation operation is not UpdateOne, or the database query fails.
func (m *AnnouncementReadMutation) OldCreatedAt(ctx context.Context) (v time.Time, err error) {
if !m.op.Is(OpUpdateOne) {
return v, errors.New("OldCreatedAt is only allowed on UpdateOne operations")
}
if m.id == nil || m.oldValue == nil {
return v, errors.New("OldCreatedAt requires an ID field in the mutation")
}
oldValue, err := m.oldValue(ctx)
if err != nil {
return v, fmt.Errorf("querying old value for OldCreatedAt: %w", err)
}
return oldValue.CreatedAt, nil
}
// ResetCreatedAt resets all changes to the "created_at" field.
func (m *AnnouncementReadMutation) ResetCreatedAt() {
m.created_at = nil
}
// ClearAnnouncement clears the "announcement" edge to the Announcement entity.
func (m *AnnouncementReadMutation) ClearAnnouncement() {
m.clearedannouncement = true
m.clearedFields[announcementread.FieldAnnouncementID] = struct{}{}
}
// AnnouncementCleared reports if the "announcement" edge to the Announcement entity was cleared.
func (m *AnnouncementReadMutation) AnnouncementCleared() bool {
return m.clearedannouncement
}
// AnnouncementIDs returns the "announcement" edge IDs in the mutation.
// Note that IDs always returns len(IDs) <= 1 for unique edges, and you should use
// AnnouncementID instead. It exists only for internal usage by the builders.
func (m *AnnouncementReadMutation) AnnouncementIDs() (ids []int64) {
if id := m.announcement; id != nil {
ids = append(ids, *id)
}
return
}
// ResetAnnouncement resets all changes to the "announcement" edge.
func (m *AnnouncementReadMutation) ResetAnnouncement() {
m.announcement = nil
m.clearedannouncement = false
}
// ClearUser clears the "user" edge to the User entity.
func (m *AnnouncementReadMutation) ClearUser() {
m.cleareduser = true
m.clearedFields[announcementread.FieldUserID] = struct{}{}
}
// UserCleared reports if the "user" edge to the User entity was cleared.
func (m *AnnouncementReadMutation) UserCleared() bool {
return m.cleareduser
}
// UserIDs returns the "user" edge IDs in the mutation.
// Note that IDs always returns len(IDs) <= 1 for unique edges, and you should use
// UserID instead. It exists only for internal usage by the builders.
func (m *AnnouncementReadMutation) UserIDs() (ids []int64) {
if id := m.user; id != nil {
ids = append(ids, *id)
}
return
}
// ResetUser resets all changes to the "user" edge.
func (m *AnnouncementReadMutation) ResetUser() {
m.user = nil
m.cleareduser = false
}
// Where appends a list predicates to the AnnouncementReadMutation builder.
func (m *AnnouncementReadMutation) Where(ps ...predicate.AnnouncementRead) {
m.predicates = append(m.predicates, ps...)
}
// WhereP appends storage-level predicates to the AnnouncementReadMutation builder. Using this method,
// users can use type-assertion to append predicates that do not depend on any generated package.
func (m *AnnouncementReadMutation) WhereP(ps ...func(*sql.Selector)) {
p := make([]predicate.AnnouncementRead, len(ps))
for i := range ps {
p[i] = ps[i]
}
m.Where(p...)
}
// Op returns the operation name.
func (m *AnnouncementReadMutation) Op() Op {
return m.op
}
// SetOp allows setting the mutation operation.
func (m *AnnouncementReadMutation) SetOp(op Op) {
m.op = op
}
// Type returns the node type of this mutation (AnnouncementRead).
func (m *AnnouncementReadMutation) Type() string {
return m.typ
}
// Fields returns all fields that were changed during this mutation. Note that in
// order to get all numeric fields that were incremented/decremented, call
// AddedFields().
func (m *AnnouncementReadMutation) Fields() []string {
fields := make([]string, 0, 4)
if m.announcement != nil {
fields = append(fields, announcementread.FieldAnnouncementID)
}
if m.user != nil {
fields = append(fields, announcementread.FieldUserID)
}
if m.read_at != nil {
fields = append(fields, announcementread.FieldReadAt)
}
if m.created_at != nil {
fields = append(fields, announcementread.FieldCreatedAt)
}
return fields
}
// Field returns the value of a field with the given name. The second boolean
// return value indicates that this field was not set, or was not defined in the
// schema.
func (m *AnnouncementReadMutation) Field(name string) (ent.Value, bool) {
switch name {
case announcementread.FieldAnnouncementID:
return m.AnnouncementID()
case announcementread.FieldUserID:
return m.UserID()
case announcementread.FieldReadAt:
return m.ReadAt()
case announcementread.FieldCreatedAt:
return m.CreatedAt()
}
return nil, false
}
// OldField returns the old value of the field from the database. An error is
// returned if the mutation operation is not UpdateOne, or the query to the
// database failed.
func (m *AnnouncementReadMutation) OldField(ctx context.Context, name string) (ent.Value, error) {
switch name {
case announcementread.FieldAnnouncementID:
return m.OldAnnouncementID(ctx)
case announcementread.FieldUserID:
return m.OldUserID(ctx)
case announcementread.FieldReadAt:
return m.OldReadAt(ctx)
case announcementread.FieldCreatedAt:
return m.OldCreatedAt(ctx)
}
return nil, fmt.Errorf("unknown AnnouncementRead field %s", name)
}
// SetField sets the value of a field with the given name. It returns an error if
// the field is not defined in the schema, or if the type mismatched the field
// type.
func (m *AnnouncementReadMutation) SetField(name string, value ent.Value) error {
switch name {
case announcementread.FieldAnnouncementID:
v, ok := value.(int64)
if !ok {
return fmt.Errorf("unexpected type %T for field %s", value, name)
}
m.SetAnnouncementID(v)
return nil
case announcementread.FieldUserID:
v, ok := value.(int64)
if !ok {
return fmt.Errorf("unexpected type %T for field %s", value, name)
}
m.SetUserID(v)
return nil
case announcementread.FieldReadAt:
v, ok := value.(time.Time)
if !ok {
return fmt.Errorf("unexpected type %T for field %s", value, name)
}
m.SetReadAt(v)
return nil
case announcementread.FieldCreatedAt:
v, ok := value.(time.Time)
if !ok {
return fmt.Errorf("unexpected type %T for field %s", value, name)
}
m.SetCreatedAt(v)
return nil
}
return fmt.Errorf("unknown AnnouncementRead field %s", name)
}
// AddedFields returns all numeric fields that were incremented/decremented during
// this mutation.
func (m *AnnouncementReadMutation) AddedFields() []string {
var fields []string
return fields
}
// AddedField returns the numeric value that was incremented/decremented on a field
// with the given name. The second boolean return value indicates that this field
// was not set, or was not defined in the schema.
func (m *AnnouncementReadMutation) AddedField(name string) (ent.Value, bool) {
switch name {
}
return nil, false
}
// AddField adds the value to the field with the given name. It returns an error if
// the field is not defined in the schema, or if the type mismatched the field
// type.
func (m *AnnouncementReadMutation) AddField(name string, value ent.Value) error {
switch name {
}
return fmt.Errorf("unknown AnnouncementRead numeric field %s", name)
}
// ClearedFields returns all nullable fields that were cleared during this
// mutation.
func (m *AnnouncementReadMutation) ClearedFields() []string {
return nil
}
// FieldCleared returns a boolean indicating if a field with the given name was
// cleared in this mutation.
func (m *AnnouncementReadMutation) FieldCleared(name string) bool {
_, ok := m.clearedFields[name]
return ok
}
// ClearField clears the value of the field with the given name. It returns an
// error if the field is not defined in the schema.
func (m *AnnouncementReadMutation) ClearField(name string) error {
return fmt.Errorf("unknown AnnouncementRead nullable field %s", name)
}
// ResetField resets all changes in the mutation for the field with the given name.
// It returns an error if the field is not defined in the schema.
func (m *AnnouncementReadMutation) ResetField(name string) error {
switch name {
case announcementread.FieldAnnouncementID:
m.ResetAnnouncementID()
return nil
case announcementread.FieldUserID:
m.ResetUserID()
return nil
case announcementread.FieldReadAt:
m.ResetReadAt()
return nil
case announcementread.FieldCreatedAt:
m.ResetCreatedAt()
return nil
}
return fmt.Errorf("unknown AnnouncementRead field %s", name)
}
// AddedEdges returns all edge names that were set/added in this mutation.
func (m *AnnouncementReadMutation) AddedEdges() []string {
edges := make([]string, 0, 2)
if m.announcement != nil {
edges = append(edges, announcementread.EdgeAnnouncement)
}
if m.user != nil {
edges = append(edges, announcementread.EdgeUser)
}
return edges
}
// AddedIDs returns all IDs (to other nodes) that were added for the given edge
// name in this mutation.
func (m *AnnouncementReadMutation) AddedIDs(name string) []ent.Value {
switch name {
case announcementread.EdgeAnnouncement:
if id := m.announcement; id != nil {
return []ent.Value{*id}
}
case announcementread.EdgeUser:
if id := m.user; id != nil {
return []ent.Value{*id}
}
}
return nil
}
// RemovedEdges returns all edge names that were removed in this mutation.
func (m *AnnouncementReadMutation) RemovedEdges() []string {
edges := make([]string, 0, 2)
return edges
}
// RemovedIDs returns all IDs (to other nodes) that were removed for the edge with
// the given name in this mutation.
func (m *AnnouncementReadMutation) RemovedIDs(name string) []ent.Value {
return nil
}
// ClearedEdges returns all edge names that were cleared in this mutation.
func (m *AnnouncementReadMutation) ClearedEdges() []string {
edges := make([]string, 0, 2)
if m.clearedannouncement {
edges = append(edges, announcementread.EdgeAnnouncement)
}
if m.cleareduser {
edges = append(edges, announcementread.EdgeUser)
}
return edges
}
// EdgeCleared returns a boolean which indicates if the edge with the given name
// was cleared in this mutation.
func (m *AnnouncementReadMutation) EdgeCleared(name string) bool {
switch name {
case announcementread.EdgeAnnouncement:
return m.clearedannouncement
case announcementread.EdgeUser:
return m.cleareduser
}
return false
}
// ClearEdge clears the value of the edge with the given name. It returns an error
// if that edge is not defined in the schema.
func (m *AnnouncementReadMutation) ClearEdge(name string) error {
switch name {
case announcementread.EdgeAnnouncement:
m.ClearAnnouncement()
return nil
case announcementread.EdgeUser:
m.ClearUser()
return nil
}
return fmt.Errorf("unknown AnnouncementRead unique edge %s", name)
}
// ResetEdge resets all changes to the edge with the given name in this mutation.
// It returns an error if the edge is not defined in the schema.
func (m *AnnouncementReadMutation) ResetEdge(name string) error {
switch name {
case announcementread.EdgeAnnouncement:
m.ResetAnnouncement()
return nil
case announcementread.EdgeUser:
m.ResetUser()
return nil
}
return fmt.Errorf("unknown AnnouncementRead edge %s", name)
}
// GroupMutation represents an operation that mutates the Group nodes in the graph.
type GroupMutation struct {
config
...
...
@@ -14861,6 +16531,9 @@ type UserMutation struct {
status *string
username *string
notes *string
totp_secret_encrypted *string
totp_enabled *bool
totp_enabled_at *time.Time
clearedFields map[string]struct{}
api_keys map[int64]struct{}
removedapi_keys map[int64]struct{}
...
...
@@ -14874,6 +16547,9 @@ type UserMutation struct {
assigned_subscriptions map[int64]struct{}
removedassigned_subscriptions map[int64]struct{}
clearedassigned_subscriptions bool
announcement_reads map[int64]struct{}
removedannouncement_reads map[int64]struct{}
clearedannouncement_reads bool
allowed_groups map[int64]struct{}
removedallowed_groups map[int64]struct{}
clearedallowed_groups bool
...
...
@@ -15438,6 +17114,140 @@ func (m *UserMutation) ResetNotes() {
m.notes = nil
}
// SetTotpSecretEncrypted sets the "totp_secret_encrypted" field.
func (m *UserMutation) SetTotpSecretEncrypted(s string) {
m.totp_secret_encrypted = &s
}
// TotpSecretEncrypted returns the value of the "totp_secret_encrypted" field in the mutation.
func (m *UserMutation) TotpSecretEncrypted() (r string, exists bool) {
v := m.totp_secret_encrypted
if v == nil {
return
}
return *v, true
}
// OldTotpSecretEncrypted returns the old "totp_secret_encrypted" field's value of the User entity.
// If the User object wasn't provided to the builder, the object is fetched from the database.
// An error is returned if the mutation operation is not UpdateOne, or the database query fails.
func (m *UserMutation) OldTotpSecretEncrypted(ctx context.Context) (v *string, err error) {
if !m.op.Is(OpUpdateOne) {
return v, errors.New("OldTotpSecretEncrypted is only allowed on UpdateOne operations")
}
if m.id == nil || m.oldValue == nil {
return v, errors.New("OldTotpSecretEncrypted requires an ID field in the mutation")
}
oldValue, err := m.oldValue(ctx)
if err != nil {
return v, fmt.Errorf("querying old value for OldTotpSecretEncrypted: %w", err)
}
return oldValue.TotpSecretEncrypted, nil
}
// ClearTotpSecretEncrypted clears the value of the "totp_secret_encrypted" field.
func (m *UserMutation) ClearTotpSecretEncrypted() {
m.totp_secret_encrypted = nil
m.clearedFields[user.FieldTotpSecretEncrypted] = struct{}{}
}
// TotpSecretEncryptedCleared returns if the "totp_secret_encrypted" field was cleared in this mutation.
func (m *UserMutation) TotpSecretEncryptedCleared() bool {
_, ok := m.clearedFields[user.FieldTotpSecretEncrypted]
return ok
}
// ResetTotpSecretEncrypted resets all changes to the "totp_secret_encrypted" field.
func (m *UserMutation) ResetTotpSecretEncrypted() {
m.totp_secret_encrypted = nil
delete(m.clearedFields, user.FieldTotpSecretEncrypted)
}
// SetTotpEnabled sets the "totp_enabled" field.
func (m *UserMutation) SetTotpEnabled(b bool) {
m.totp_enabled = &b
}
// TotpEnabled returns the value of the "totp_enabled" field in the mutation.
func (m *UserMutation) TotpEnabled() (r bool, exists bool) {
v := m.totp_enabled
if v == nil {
return
}
return *v, true
}
// OldTotpEnabled returns the old "totp_enabled" field's value of the User entity.
// If the User object wasn't provided to the builder, the object is fetched from the database.
// An error is returned if the mutation operation is not UpdateOne, or the database query fails.
func (m *UserMutation) OldTotpEnabled(ctx context.Context) (v bool, err error) {
if !m.op.Is(OpUpdateOne) {
return v, errors.New("OldTotpEnabled is only allowed on UpdateOne operations")
}
if m.id == nil || m.oldValue == nil {
return v, errors.New("OldTotpEnabled requires an ID field in the mutation")
}
oldValue, err := m.oldValue(ctx)
if err != nil {
return v, fmt.Errorf("querying old value for OldTotpEnabled: %w", err)
}
return oldValue.TotpEnabled, nil
}
// ResetTotpEnabled resets all changes to the "totp_enabled" field.
func (m *UserMutation) ResetTotpEnabled() {
m.totp_enabled = nil
}
// SetTotpEnabledAt sets the "totp_enabled_at" field.
func (m *UserMutation) SetTotpEnabledAt(t time.Time) {
m.totp_enabled_at = &t
}
// TotpEnabledAt returns the value of the "totp_enabled_at" field in the mutation.
func (m *UserMutation) TotpEnabledAt() (r time.Time, exists bool) {
v := m.totp_enabled_at
if v == nil {
return
}
return *v, true
}
// OldTotpEnabledAt returns the old "totp_enabled_at" field's value of the User entity.
// If the User object wasn't provided to the builder, the object is fetched from the database.
// An error is returned if the mutation operation is not UpdateOne, or the database query fails.
func (m *UserMutation) OldTotpEnabledAt(ctx context.Context) (v *time.Time, err error) {
if !m.op.Is(OpUpdateOne) {
return v, errors.New("OldTotpEnabledAt is only allowed on UpdateOne operations")
}
if m.id == nil || m.oldValue == nil {
return v, errors.New("OldTotpEnabledAt requires an ID field in the mutation")
}
oldValue, err := m.oldValue(ctx)
if err != nil {
return v, fmt.Errorf("querying old value for OldTotpEnabledAt: %w", err)
}
return oldValue.TotpEnabledAt, nil
}
// ClearTotpEnabledAt clears the value of the "totp_enabled_at" field.
func (m *UserMutation) ClearTotpEnabledAt() {
m.totp_enabled_at = nil
m.clearedFields[user.FieldTotpEnabledAt] = struct{}{}
}
// TotpEnabledAtCleared returns if the "totp_enabled_at" field was cleared in this mutation.
func (m *UserMutation) TotpEnabledAtCleared() bool {
_, ok := m.clearedFields[user.FieldTotpEnabledAt]
return ok
}
// ResetTotpEnabledAt resets all changes to the "totp_enabled_at" field.
func (m *UserMutation) ResetTotpEnabledAt() {
m.totp_enabled_at = nil
delete(m.clearedFields, user.FieldTotpEnabledAt)
}
// AddAPIKeyIDs adds the "api_keys" edge to the APIKey entity by ids.
func (m *UserMutation) AddAPIKeyIDs(ids ...int64) {
if m.api_keys == nil {
...
...
@@ -15654,6 +17464,60 @@ func (m *UserMutation) ResetAssignedSubscriptions() {
m.removedassigned_subscriptions = nil
}
// AddAnnouncementReadIDs adds the "announcement_reads" edge to the AnnouncementRead entity by ids.
func (m *UserMutation) AddAnnouncementReadIDs(ids ...int64) {
if m.announcement_reads == nil {
m.announcement_reads = make(map[int64]struct{})
}
for i := range ids {
m.announcement_reads[ids[i]] = struct{}{}
}
}
// ClearAnnouncementReads clears the "announcement_reads" edge to the AnnouncementRead entity.
func (m *UserMutation) ClearAnnouncementReads() {
m.clearedannouncement_reads = true
}
// AnnouncementReadsCleared reports if the "announcement_reads" edge to the AnnouncementRead entity was cleared.
func (m *UserMutation) AnnouncementReadsCleared() bool {
return m.clearedannouncement_reads
}
// RemoveAnnouncementReadIDs removes the "announcement_reads" edge to the AnnouncementRead entity by IDs.
func (m *UserMutation) RemoveAnnouncementReadIDs(ids ...int64) {
if m.removedannouncement_reads == nil {
m.removedannouncement_reads = make(map[int64]struct{})
}
for i := range ids {
delete(m.announcement_reads, ids[i])
m.removedannouncement_reads[ids[i]] = struct{}{}
}
}
// RemovedAnnouncementReads returns the removed IDs of the "announcement_reads" edge to the AnnouncementRead entity.
func (m *UserMutation) RemovedAnnouncementReadsIDs() (ids []int64) {
for id := range m.removedannouncement_reads {
ids = append(ids, id)
}
return
}
// AnnouncementReadsIDs returns the "announcement_reads" edge IDs in the mutation.
func (m *UserMutation) AnnouncementReadsIDs() (ids []int64) {
for id := range m.announcement_reads {
ids = append(ids, id)
}
return
}
// ResetAnnouncementReads resets all changes to the "announcement_reads" edge.
func (m *UserMutation) ResetAnnouncementReads() {
m.announcement_reads = nil
m.clearedannouncement_reads = false
m.removedannouncement_reads = nil
}
// AddAllowedGroupIDs adds the "allowed_groups" edge to the Group entity by ids.
func (m *UserMutation) AddAllowedGroupIDs(ids ...int64) {
if m.allowed_groups == nil {
...
...
@@ -15904,7 +17768,7 @@ func (m *UserMutation) Type() string {
// order to get all numeric fields that were incremented/decremented, call
// AddedFields().
func (m *UserMutation) Fields() []string {
fields := make([]string, 0, 1
1
)
fields := make([]string, 0, 1
4
)
if m.created_at != nil {
fields = append(fields, user.FieldCreatedAt)
}
...
...
@@ -15938,6 +17802,15 @@ func (m *UserMutation) Fields() []string {
if m.notes != nil {
fields = append(fields, user.FieldNotes)
}
if m.totp_secret_encrypted != nil {
fields = append(fields, user.FieldTotpSecretEncrypted)
}
if m.totp_enabled != nil {
fields = append(fields, user.FieldTotpEnabled)
}
if m.totp_enabled_at != nil {
fields = append(fields, user.FieldTotpEnabledAt)
}
return fields
}
...
...
@@ -15968,6 +17841,12 @@ func (m *UserMutation) Field(name string) (ent.Value, bool) {
return m.Username()
case user.FieldNotes:
return m.Notes()
case user.FieldTotpSecretEncrypted:
return m.TotpSecretEncrypted()
case user.FieldTotpEnabled:
return m.TotpEnabled()
case user.FieldTotpEnabledAt:
return m.TotpEnabledAt()
}
return nil, false
}
...
...
@@ -15999,6 +17878,12 @@ func (m *UserMutation) OldField(ctx context.Context, name string) (ent.Value, er
return m.OldUsername(ctx)
case user.FieldNotes:
return m.OldNotes(ctx)
case user.FieldTotpSecretEncrypted:
return m.OldTotpSecretEncrypted(ctx)
case user.FieldTotpEnabled:
return m.OldTotpEnabled(ctx)
case user.FieldTotpEnabledAt:
return m.OldTotpEnabledAt(ctx)
}
return nil, fmt.Errorf("unknown User field %s", name)
}
...
...
@@ -16085,6 +17970,27 @@ func (m *UserMutation) SetField(name string, value ent.Value) error {
}
m.SetNotes(v)
return nil
case user.FieldTotpSecretEncrypted:
v, ok := value.(string)
if !ok {
return fmt.Errorf("unexpected type %T for field %s", value, name)
}
m.SetTotpSecretEncrypted(v)
return nil
case user.FieldTotpEnabled:
v, ok := value.(bool)
if !ok {
return fmt.Errorf("unexpected type %T for field %s", value, name)
}
m.SetTotpEnabled(v)
return nil
case user.FieldTotpEnabledAt:
v, ok := value.(time.Time)
if !ok {
return fmt.Errorf("unexpected type %T for field %s", value, name)
}
m.SetTotpEnabledAt(v)
return nil
}
return fmt.Errorf("unknown User field %s", name)
}
...
...
@@ -16145,6 +18051,12 @@ func (m *UserMutation) ClearedFields() []string {
if m.FieldCleared(user.FieldDeletedAt) {
fields = append(fields, user.FieldDeletedAt)
}
if m.FieldCleared(user.FieldTotpSecretEncrypted) {
fields = append(fields, user.FieldTotpSecretEncrypted)
}
if m.FieldCleared(user.FieldTotpEnabledAt) {
fields = append(fields, user.FieldTotpEnabledAt)
}
return fields
}
...
...
@@ -16162,6 +18074,12 @@ func (m *UserMutation) ClearField(name string) error {
case user.FieldDeletedAt:
m.ClearDeletedAt()
return nil
case user.FieldTotpSecretEncrypted:
m.ClearTotpSecretEncrypted()
return nil
case user.FieldTotpEnabledAt:
m.ClearTotpEnabledAt()
return nil
}
return fmt.Errorf("unknown User nullable field %s", name)
}
...
...
@@ -16203,13 +18121,22 @@ func (m *UserMutation) ResetField(name string) error {
case user.FieldNotes:
m.ResetNotes()
return nil
case user.FieldTotpSecretEncrypted:
m.ResetTotpSecretEncrypted()
return nil
case user.FieldTotpEnabled:
m.ResetTotpEnabled()
return nil
case user.FieldTotpEnabledAt:
m.ResetTotpEnabledAt()
return nil
}
return fmt.Errorf("unknown User field %s", name)
}
// AddedEdges returns all edge names that were set/added in this mutation.
func (m *UserMutation) AddedEdges() []string {
edges := make([]string, 0,
8
)
edges := make([]string, 0,
9
)
if m.api_keys != nil {
edges = append(edges, user.EdgeAPIKeys)
}
...
...
@@ -16222,6 +18149,9 @@ func (m *UserMutation) AddedEdges() []string {
if m.assigned_subscriptions != nil {
edges = append(edges, user.EdgeAssignedSubscriptions)
}
if m.announcement_reads != nil {
edges = append(edges, user.EdgeAnnouncementReads)
}
if m.allowed_groups != nil {
edges = append(edges, user.EdgeAllowedGroups)
}
...
...
@@ -16265,6 +18195,12 @@ func (m *UserMutation) AddedIDs(name string) []ent.Value {
ids = append(ids, id)
}
return ids
case user.EdgeAnnouncementReads:
ids := make([]ent.Value, 0, len(m.announcement_reads))
for id := range m.announcement_reads {
ids = append(ids, id)
}
return ids
case user.EdgeAllowedGroups:
ids := make([]ent.Value, 0, len(m.allowed_groups))
for id := range m.allowed_groups {
...
...
@@ -16295,7 +18231,7 @@ func (m *UserMutation) AddedIDs(name string) []ent.Value {
// RemovedEdges returns all edge names that were removed in this mutation.
func (m *UserMutation) RemovedEdges() []string {
edges := make([]string, 0,
8
)
edges := make([]string, 0,
9
)
if m.removedapi_keys != nil {
edges = append(edges, user.EdgeAPIKeys)
}
...
...
@@ -16308,6 +18244,9 @@ func (m *UserMutation) RemovedEdges() []string {
if m.removedassigned_subscriptions != nil {
edges = append(edges, user.EdgeAssignedSubscriptions)
}
if m.removedannouncement_reads != nil {
edges = append(edges, user.EdgeAnnouncementReads)
}
if m.removedallowed_groups != nil {
edges = append(edges, user.EdgeAllowedGroups)
}
...
...
@@ -16351,6 +18290,12 @@ func (m *UserMutation) RemovedIDs(name string) []ent.Value {
ids = append(ids, id)
}
return ids
case user.EdgeAnnouncementReads:
ids := make([]ent.Value, 0, len(m.removedannouncement_reads))
for id := range m.removedannouncement_reads {
ids = append(ids, id)
}
return ids
case user.EdgeAllowedGroups:
ids := make([]ent.Value, 0, len(m.removedallowed_groups))
for id := range m.removedallowed_groups {
...
...
@@ -16381,7 +18326,7 @@ func (m *UserMutation) RemovedIDs(name string) []ent.Value {
// ClearedEdges returns all edge names that were cleared in this mutation.
func (m *UserMutation) ClearedEdges() []string {
edges := make([]string, 0,
8
)
edges := make([]string, 0,
9
)
if m.clearedapi_keys {
edges = append(edges, user.EdgeAPIKeys)
}
...
...
@@ -16394,6 +18339,9 @@ func (m *UserMutation) ClearedEdges() []string {
if m.clearedassigned_subscriptions {
edges = append(edges, user.EdgeAssignedSubscriptions)
}
if m.clearedannouncement_reads {
edges = append(edges, user.EdgeAnnouncementReads)
}
if m.clearedallowed_groups {
edges = append(edges, user.EdgeAllowedGroups)
}
...
...
@@ -16421,6 +18369,8 @@ func (m *UserMutation) EdgeCleared(name string) bool {
return m.clearedsubscriptions
case user.EdgeAssignedSubscriptions:
return m.clearedassigned_subscriptions
case user.EdgeAnnouncementReads:
return m.clearedannouncement_reads
case user.EdgeAllowedGroups:
return m.clearedallowed_groups
case user.EdgeUsageLogs:
...
...
@@ -16457,6 +18407,9 @@ func (m *UserMutation) ResetEdge(name string) error {
case user.EdgeAssignedSubscriptions:
m.ResetAssignedSubscriptions()
return nil
case user.EdgeAnnouncementReads:
m.ResetAnnouncementReads()
return nil
case user.EdgeAllowedGroups:
m.ResetAllowedGroups()
return nil
...
...
backend/ent/predicate/predicate.go
View file @
377bffe2
...
...
@@ -15,6 +15,12 @@ type Account func(*sql.Selector)
// AccountGroup is the predicate function for accountgroup builders.
type
AccountGroup
func
(
*
sql
.
Selector
)
// Announcement is the predicate function for announcement builders.
type
Announcement
func
(
*
sql
.
Selector
)
// AnnouncementRead is the predicate function for announcementread builders.
type
AnnouncementRead
func
(
*
sql
.
Selector
)
// Group is the predicate function for group builders.
type
Group
func
(
*
sql
.
Selector
)
...
...
backend/ent/runtime/runtime.go
View file @
377bffe2
...
...
@@ -7,6 +7,8 @@ import (
"github.com/Wei-Shaw/sub2api/ent/account"
"github.com/Wei-Shaw/sub2api/ent/accountgroup"
"github.com/Wei-Shaw/sub2api/ent/announcement"
"github.com/Wei-Shaw/sub2api/ent/announcementread"
"github.com/Wei-Shaw/sub2api/ent/apikey"
"github.com/Wei-Shaw/sub2api/ent/group"
"github.com/Wei-Shaw/sub2api/ent/promocode"
...
...
@@ -210,6 +212,56 @@ func init() {
accountgroupDescCreatedAt
:=
accountgroupFields
[
3
]
.
Descriptor
()
// accountgroup.DefaultCreatedAt holds the default value on creation for the created_at field.
accountgroup
.
DefaultCreatedAt
=
accountgroupDescCreatedAt
.
Default
.
(
func
()
time
.
Time
)
announcementFields
:=
schema
.
Announcement
{}
.
Fields
()
_
=
announcementFields
// announcementDescTitle is the schema descriptor for title field.
announcementDescTitle
:=
announcementFields
[
0
]
.
Descriptor
()
// announcement.TitleValidator is a validator for the "title" field. It is called by the builders before save.
announcement
.
TitleValidator
=
func
()
func
(
string
)
error
{
validators
:=
announcementDescTitle
.
Validators
fns
:=
[
...
]
func
(
string
)
error
{
validators
[
0
]
.
(
func
(
string
)
error
),
validators
[
1
]
.
(
func
(
string
)
error
),
}
return
func
(
title
string
)
error
{
for
_
,
fn
:=
range
fns
{
if
err
:=
fn
(
title
);
err
!=
nil
{
return
err
}
}
return
nil
}
}()
// announcementDescContent is the schema descriptor for content field.
announcementDescContent
:=
announcementFields
[
1
]
.
Descriptor
()
// announcement.ContentValidator is a validator for the "content" field. It is called by the builders before save.
announcement
.
ContentValidator
=
announcementDescContent
.
Validators
[
0
]
.
(
func
(
string
)
error
)
// announcementDescStatus is the schema descriptor for status field.
announcementDescStatus
:=
announcementFields
[
2
]
.
Descriptor
()
// announcement.DefaultStatus holds the default value on creation for the status field.
announcement
.
DefaultStatus
=
announcementDescStatus
.
Default
.
(
string
)
// announcement.StatusValidator is a validator for the "status" field. It is called by the builders before save.
announcement
.
StatusValidator
=
announcementDescStatus
.
Validators
[
0
]
.
(
func
(
string
)
error
)
// announcementDescCreatedAt is the schema descriptor for created_at field.
announcementDescCreatedAt
:=
announcementFields
[
8
]
.
Descriptor
()
// announcement.DefaultCreatedAt holds the default value on creation for the created_at field.
announcement
.
DefaultCreatedAt
=
announcementDescCreatedAt
.
Default
.
(
func
()
time
.
Time
)
// announcementDescUpdatedAt is the schema descriptor for updated_at field.
announcementDescUpdatedAt
:=
announcementFields
[
9
]
.
Descriptor
()
// announcement.DefaultUpdatedAt holds the default value on creation for the updated_at field.
announcement
.
DefaultUpdatedAt
=
announcementDescUpdatedAt
.
Default
.
(
func
()
time
.
Time
)
// announcement.UpdateDefaultUpdatedAt holds the default value on update for the updated_at field.
announcement
.
UpdateDefaultUpdatedAt
=
announcementDescUpdatedAt
.
UpdateDefault
.
(
func
()
time
.
Time
)
announcementreadFields
:=
schema
.
AnnouncementRead
{}
.
Fields
()
_
=
announcementreadFields
// announcementreadDescReadAt is the schema descriptor for read_at field.
announcementreadDescReadAt
:=
announcementreadFields
[
2
]
.
Descriptor
()
// announcementread.DefaultReadAt holds the default value on creation for the read_at field.
announcementread
.
DefaultReadAt
=
announcementreadDescReadAt
.
Default
.
(
func
()
time
.
Time
)
// announcementreadDescCreatedAt is the schema descriptor for created_at field.
announcementreadDescCreatedAt
:=
announcementreadFields
[
3
]
.
Descriptor
()
// announcementread.DefaultCreatedAt holds the default value on creation for the created_at field.
announcementread
.
DefaultCreatedAt
=
announcementreadDescCreatedAt
.
Default
.
(
func
()
time
.
Time
)
groupMixin
:=
schema
.
Group
{}
.
Mixin
()
groupMixinHooks1
:=
groupMixin
[
1
]
.
Hooks
()
group
.
Hooks
[
0
]
=
groupMixinHooks1
[
0
]
...
...
@@ -740,6 +792,10 @@ func init() {
userDescNotes
:=
userFields
[
7
]
.
Descriptor
()
// user.DefaultNotes holds the default value on creation for the notes field.
user
.
DefaultNotes
=
userDescNotes
.
Default
.
(
string
)
// userDescTotpEnabled is the schema descriptor for totp_enabled field.
userDescTotpEnabled
:=
userFields
[
9
]
.
Descriptor
()
// user.DefaultTotpEnabled holds the default value on creation for the totp_enabled field.
user
.
DefaultTotpEnabled
=
userDescTotpEnabled
.
Default
.
(
bool
)
userallowedgroupFields
:=
schema
.
UserAllowedGroup
{}
.
Fields
()
_
=
userallowedgroupFields
// userallowedgroupDescCreatedAt is the schema descriptor for created_at field.
...
...
backend/ent/schema/account.go
View file @
377bffe2
...
...
@@ -4,7 +4,7 @@ package schema
import
(
"github.com/Wei-Shaw/sub2api/ent/schema/mixins"
"github.com/Wei-Shaw/sub2api/internal/
service
"
"github.com/Wei-Shaw/sub2api/internal/
domain
"
"entgo.io/ent"
"entgo.io/ent/dialect"
...
...
@@ -111,7 +111,7 @@ func (Account) Fields() []ent.Field {
// status: 账户状态,如 "active", "error", "disabled"
field
.
String
(
"status"
)
.
MaxLen
(
20
)
.
Default
(
service
.
StatusActive
),
Default
(
domain
.
StatusActive
),
// error_message: 错误信息,记录账户异常时的详细信息
field
.
String
(
"error_message"
)
.
...
...
backend/ent/schema/announcement.go
0 → 100644
View file @
377bffe2
package
schema
import
(
"time"
"github.com/Wei-Shaw/sub2api/internal/domain"
"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"
)
// Announcement holds the schema definition for the Announcement entity.
//
// 删除策略:硬删除(已读记录通过外键级联删除)
type
Announcement
struct
{
ent
.
Schema
}
func
(
Announcement
)
Annotations
()
[]
schema
.
Annotation
{
return
[]
schema
.
Annotation
{
entsql
.
Annotation
{
Table
:
"announcements"
},
}
}
func
(
Announcement
)
Fields
()
[]
ent
.
Field
{
return
[]
ent
.
Field
{
field
.
String
(
"title"
)
.
MaxLen
(
200
)
.
NotEmpty
()
.
Comment
(
"公告标题"
),
field
.
String
(
"content"
)
.
SchemaType
(
map
[
string
]
string
{
dialect
.
Postgres
:
"text"
})
.
NotEmpty
()
.
Comment
(
"公告内容(支持 Markdown)"
),
field
.
String
(
"status"
)
.
MaxLen
(
20
)
.
Default
(
domain
.
AnnouncementStatusDraft
)
.
Comment
(
"状态: draft, active, archived"
),
field
.
JSON
(
"targeting"
,
domain
.
AnnouncementTargeting
{})
.
Optional
()
.
SchemaType
(
map
[
string
]
string
{
dialect
.
Postgres
:
"jsonb"
})
.
Comment
(
"展示条件(JSON 规则)"
),
field
.
Time
(
"starts_at"
)
.
Optional
()
.
Nillable
()
.
SchemaType
(
map
[
string
]
string
{
dialect
.
Postgres
:
"timestamptz"
})
.
Comment
(
"开始展示时间(为空表示立即生效)"
),
field
.
Time
(
"ends_at"
)
.
Optional
()
.
Nillable
()
.
SchemaType
(
map
[
string
]
string
{
dialect
.
Postgres
:
"timestamptz"
})
.
Comment
(
"结束展示时间(为空表示永久生效)"
),
field
.
Int64
(
"created_by"
)
.
Optional
()
.
Nillable
()
.
Comment
(
"创建人用户ID(管理员)"
),
field
.
Int64
(
"updated_by"
)
.
Optional
()
.
Nillable
()
.
Comment
(
"更新人用户ID(管理员)"
),
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
(
Announcement
)
Edges
()
[]
ent
.
Edge
{
return
[]
ent
.
Edge
{
edge
.
To
(
"reads"
,
AnnouncementRead
.
Type
),
}
}
func
(
Announcement
)
Indexes
()
[]
ent
.
Index
{
return
[]
ent
.
Index
{
index
.
Fields
(
"status"
),
index
.
Fields
(
"created_at"
),
index
.
Fields
(
"starts_at"
),
index
.
Fields
(
"ends_at"
),
}
}
backend/ent/schema/announcement_read.go
0 → 100644
View file @
377bffe2
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"
)
// AnnouncementRead holds the schema definition for the AnnouncementRead entity.
//
// 记录用户对公告的已读状态(首次已读时间)。
type
AnnouncementRead
struct
{
ent
.
Schema
}
func
(
AnnouncementRead
)
Annotations
()
[]
schema
.
Annotation
{
return
[]
schema
.
Annotation
{
entsql
.
Annotation
{
Table
:
"announcement_reads"
},
}
}
func
(
AnnouncementRead
)
Fields
()
[]
ent
.
Field
{
return
[]
ent
.
Field
{
field
.
Int64
(
"announcement_id"
),
field
.
Int64
(
"user_id"
),
field
.
Time
(
"read_at"
)
.
Default
(
time
.
Now
)
.
SchemaType
(
map
[
string
]
string
{
dialect
.
Postgres
:
"timestamptz"
})
.
Comment
(
"用户首次已读时间"
),
field
.
Time
(
"created_at"
)
.
Immutable
()
.
Default
(
time
.
Now
)
.
SchemaType
(
map
[
string
]
string
{
dialect
.
Postgres
:
"timestamptz"
}),
}
}
func
(
AnnouncementRead
)
Edges
()
[]
ent
.
Edge
{
return
[]
ent
.
Edge
{
edge
.
From
(
"announcement"
,
Announcement
.
Type
)
.
Ref
(
"reads"
)
.
Field
(
"announcement_id"
)
.
Unique
()
.
Required
(),
edge
.
From
(
"user"
,
User
.
Type
)
.
Ref
(
"announcement_reads"
)
.
Field
(
"user_id"
)
.
Unique
()
.
Required
(),
}
}
func
(
AnnouncementRead
)
Indexes
()
[]
ent
.
Index
{
return
[]
ent
.
Index
{
index
.
Fields
(
"announcement_id"
),
index
.
Fields
(
"user_id"
),
index
.
Fields
(
"read_at"
),
index
.
Fields
(
"announcement_id"
,
"user_id"
)
.
Unique
(),
}
}
backend/ent/schema/api_key.go
View file @
377bffe2
...
...
@@ -2,7 +2,7 @@ package schema
import
(
"github.com/Wei-Shaw/sub2api/ent/schema/mixins"
"github.com/Wei-Shaw/sub2api/internal/
service
"
"github.com/Wei-Shaw/sub2api/internal/
domain
"
"entgo.io/ent"
"entgo.io/ent/dialect/entsql"
...
...
@@ -45,7 +45,7 @@ func (APIKey) Fields() []ent.Field {
Nillable
(),
field
.
String
(
"status"
)
.
MaxLen
(
20
)
.
Default
(
service
.
StatusActive
),
Default
(
domain
.
StatusActive
),
field
.
JSON
(
"ip_whitelist"
,
[]
string
{})
.
Optional
()
.
Comment
(
"Allowed IPs/CIDRs, e.g. [
\"
192.168.1.100
\"
,
\"
10.0.0.0/8
\"
]"
),
...
...
backend/ent/schema/group.go
View file @
377bffe2
...
...
@@ -2,7 +2,7 @@ package schema
import
(
"github.com/Wei-Shaw/sub2api/ent/schema/mixins"
"github.com/Wei-Shaw/sub2api/internal/
service
"
"github.com/Wei-Shaw/sub2api/internal/
domain
"
"entgo.io/ent"
"entgo.io/ent/dialect"
...
...
@@ -49,15 +49,15 @@ func (Group) Fields() []ent.Field {
Default
(
false
),
field
.
String
(
"status"
)
.
MaxLen
(
20
)
.
Default
(
service
.
StatusActive
),
Default
(
domain
.
StatusActive
),
// Subscription-related fields (added by migration 003)
field
.
String
(
"platform"
)
.
MaxLen
(
50
)
.
Default
(
service
.
PlatformAnthropic
),
Default
(
domain
.
PlatformAnthropic
),
field
.
String
(
"subscription_type"
)
.
MaxLen
(
20
)
.
Default
(
service
.
SubscriptionTypeStandard
),
Default
(
domain
.
SubscriptionTypeStandard
),
field
.
Float
(
"daily_limit_usd"
)
.
Optional
()
.
Nillable
()
.
...
...
backend/ent/schema/promo_code.go
View file @
377bffe2
...
...
@@ -3,7 +3,7 @@ package schema
import
(
"time"
"github.com/Wei-Shaw/sub2api/internal/
service
"
"github.com/Wei-Shaw/sub2api/internal/
domain
"
"entgo.io/ent"
"entgo.io/ent/dialect"
...
...
@@ -49,7 +49,7 @@ func (PromoCode) Fields() []ent.Field {
Comment
(
"已使用次数"
),
field
.
String
(
"status"
)
.
MaxLen
(
20
)
.
Default
(
service
.
PromoCodeStatusActive
)
.
Default
(
domain
.
PromoCodeStatusActive
)
.
Comment
(
"状态: active, disabled"
),
field
.
Time
(
"expires_at"
)
.
Optional
()
.
...
...
backend/ent/schema/redeem_code.go
View file @
377bffe2
...
...
@@ -3,7 +3,7 @@ package schema
import
(
"time"
"github.com/Wei-Shaw/sub2api/internal/
service
"
"github.com/Wei-Shaw/sub2api/internal/
domain
"
"entgo.io/ent"
"entgo.io/ent/dialect"
...
...
@@ -41,13 +41,13 @@ func (RedeemCode) Fields() []ent.Field {
Unique
(),
field
.
String
(
"type"
)
.
MaxLen
(
20
)
.
Default
(
service
.
RedeemTypeBalance
),
Default
(
domain
.
RedeemTypeBalance
),
field
.
Float
(
"value"
)
.
SchemaType
(
map
[
string
]
string
{
dialect
.
Postgres
:
"decimal(20,8)"
})
.
Default
(
0
),
field
.
String
(
"status"
)
.
MaxLen
(
20
)
.
Default
(
service
.
StatusUnused
),
Default
(
domain
.
StatusUnused
),
field
.
Int64
(
"used_by"
)
.
Optional
()
.
Nillable
(),
...
...
backend/ent/schema/user.go
View file @
377bffe2
...
...
@@ -2,7 +2,7 @@ package schema
import
(
"github.com/Wei-Shaw/sub2api/ent/schema/mixins"
"github.com/Wei-Shaw/sub2api/internal/
service
"
"github.com/Wei-Shaw/sub2api/internal/
domain
"
"entgo.io/ent"
"entgo.io/ent/dialect"
...
...
@@ -43,7 +43,7 @@ func (User) Fields() []ent.Field {
NotEmpty
(),
field
.
String
(
"role"
)
.
MaxLen
(
20
)
.
Default
(
service
.
RoleUser
),
Default
(
domain
.
RoleUser
),
field
.
Float
(
"balance"
)
.
SchemaType
(
map
[
string
]
string
{
dialect
.
Postgres
:
"decimal(20,8)"
})
.
Default
(
0
),
...
...
@@ -51,7 +51,7 @@ func (User) Fields() []ent.Field {
Default
(
5
),
field
.
String
(
"status"
)
.
MaxLen
(
20
)
.
Default
(
service
.
StatusActive
),
Default
(
domain
.
StatusActive
),
// Optional profile fields (added later; default '' in DB migration)
field
.
String
(
"username"
)
.
...
...
@@ -61,6 +61,17 @@ func (User) Fields() []ent.Field {
field
.
String
(
"notes"
)
.
SchemaType
(
map
[
string
]
string
{
dialect
.
Postgres
:
"text"
})
.
Default
(
""
),
// TOTP 双因素认证字段
field
.
String
(
"totp_secret_encrypted"
)
.
SchemaType
(
map
[
string
]
string
{
dialect
.
Postgres
:
"text"
})
.
Optional
()
.
Nillable
(),
field
.
Bool
(
"totp_enabled"
)
.
Default
(
false
),
field
.
Time
(
"totp_enabled_at"
)
.
Optional
()
.
Nillable
(),
}
}
...
...
@@ -70,6 +81,7 @@ func (User) Edges() []ent.Edge {
edge
.
To
(
"redeem_codes"
,
RedeemCode
.
Type
),
edge
.
To
(
"subscriptions"
,
UserSubscription
.
Type
),
edge
.
To
(
"assigned_subscriptions"
,
UserSubscription
.
Type
),
edge
.
To
(
"announcement_reads"
,
AnnouncementRead
.
Type
),
edge
.
To
(
"allowed_groups"
,
Group
.
Type
)
.
Through
(
"user_allowed_groups"
,
UserAllowedGroup
.
Type
),
edge
.
To
(
"usage_logs"
,
UsageLog
.
Type
),
...
...
Prev
1
2
3
4
5
6
…
12
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