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
31fe0178
Commit
31fe0178
authored
Feb 03, 2026
by
yangjianbo
Browse files
Merge branch 'main' of
https://github.com/mt21625457/aicodex2api
parents
d9e345f2
ba5a0d47
Changes
235
Hide whitespace changes
Inline
Side-by-side
backend/ent/announcementread_create.go
0 → 100644
View file @
31fe0178
// 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 @
31fe0178
// 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 @
31fe0178
// 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 @
31fe0178
// 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 @
31fe0178
...
...
@@ -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 @
31fe0178
...
...
@@ -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 @
31fe0178
...
...
@@ -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 @
31fe0178
...
...
@@ -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 @
31fe0178
...
...
@@ -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
},
...
...
@@ -610,6 +702,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
{
...
...
@@ -837,6 +932,8 @@ var (
APIKeysTable
,
AccountsTable
,
AccountGroupsTable
,
AnnouncementsTable
,
AnnouncementReadsTable
,
GroupsTable
,
PromoCodesTable
,
PromoCodeUsagesTable
,
...
...
@@ -868,6 +965,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 @
31fe0178
...
...
@@ -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
...
...
@@ -14360,6 +16030,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{}
...
...
@@ -14373,6 +16046,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
...
...
@@ -14937,6 +16613,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 {
...
...
@@ -15153,6 +16963,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 {
...
...
@@ -15403,7 +17267,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)
}
...
...
@@ -15437,6 +17301,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
}
...
...
@@ -15467,6 +17340,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
}
...
...
@@ -15498,6 +17377,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)
}
...
...
@@ -15584,6 +17469,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)
}
...
...
@@ -15644,6 +17550,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
}
...
...
@@ -15661,6 +17573,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)
}
...
...
@@ -15702,13 +17620,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)
}
...
...
@@ -15721,6 +17648,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)
}
...
...
@@ -15764,6 +17694,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 {
...
...
@@ -15794,7 +17730,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)
}
...
...
@@ -15807,6 +17743,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)
}
...
...
@@ -15850,6 +17789,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 {
...
...
@@ -15880,7 +17825,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)
}
...
...
@@ -15893,6 +17838,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)
}
...
...
@@ -15920,6 +17868,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:
...
...
@@ -15956,6 +17906,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 @
31fe0178
...
...
@@ -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 @
31fe0178
...
...
@@ -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
]
...
...
@@ -736,6 +788,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 @
31fe0178
...
...
@@ -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 @
31fe0178
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 @
31fe0178
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 @
31fe0178
...
...
@@ -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 @
31fe0178
...
...
@@ -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 @
31fe0178
...
...
@@ -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 @
31fe0178
...
...
@@ -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 @
31fe0178
...
...
@@ -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