This requires a bunch of changes since the types on these tables are much closer to the underlying types of the Fieldseeker data we are getting back from the API. I now need to use proper UUID types everywhere, which means I had to modify the bob gen config to consistently use google UUID, my UUID library of choice. I also had to add the organization_id to all the fieldseeker tables since we rely on them existing for some of our compound queries. There were some changes to the API type signatures to get things to build. I may yet regret those.
2023 lines
54 KiB
Go
2023 lines
54 KiB
Go
// Code generated by BobGen psql v0.0.4-0.20251216163753-8e325b7c773a+dirty. DO NOT EDIT.
|
|
// This file is meant to be re-generated in place and/or deleted at any time.
|
|
|
|
package models
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"io"
|
|
"time"
|
|
|
|
enums "github.com/Gleipnir-Technology/nidus-sync/db/enums"
|
|
"github.com/aarondl/opt/null"
|
|
"github.com/aarondl/opt/omit"
|
|
"github.com/aarondl/opt/omitnull"
|
|
"github.com/stephenafamo/bob"
|
|
"github.com/stephenafamo/bob/dialect/psql"
|
|
"github.com/stephenafamo/bob/dialect/psql/dialect"
|
|
"github.com/stephenafamo/bob/dialect/psql/dm"
|
|
"github.com/stephenafamo/bob/dialect/psql/sm"
|
|
"github.com/stephenafamo/bob/dialect/psql/um"
|
|
"github.com/stephenafamo/bob/expr"
|
|
"github.com/stephenafamo/bob/mods"
|
|
"github.com/stephenafamo/bob/orm"
|
|
"github.com/stephenafamo/bob/types/pgtypes"
|
|
)
|
|
|
|
// User is an object representing the database table.
|
|
type User struct {
|
|
ID int32 `db:"id,pk" `
|
|
ArcgisAccessToken null.Val[string] `db:"arcgis_access_token" `
|
|
ArcgisLicense null.Val[enums.Arcgislicensetype] `db:"arcgis_license" `
|
|
ArcgisRefreshToken null.Val[string] `db:"arcgis_refresh_token" `
|
|
ArcgisRefreshTokenExpires null.Val[time.Time] `db:"arcgis_refresh_token_expires" `
|
|
ArcgisRole null.Val[string] `db:"arcgis_role" `
|
|
DisplayName string `db:"display_name" `
|
|
Email null.Val[string] `db:"email" `
|
|
OrganizationID null.Val[int32] `db:"organization_id" `
|
|
Username string `db:"username" `
|
|
PasswordHashType enums.Hashtype `db:"password_hash_type" `
|
|
PasswordHash string `db:"password_hash" `
|
|
|
|
R userR `db:"-" `
|
|
}
|
|
|
|
// UserSlice is an alias for a slice of pointers to User.
|
|
// This should almost always be used instead of []*User.
|
|
type UserSlice []*User
|
|
|
|
// Users contains methods to work with the user_ table
|
|
var Users = psql.NewTablex[*User, UserSlice, *UserSetter]("", "user_", buildUserColumns("user_"))
|
|
|
|
// UsersQuery is a query on the user_ table
|
|
type UsersQuery = *psql.ViewQuery[*User, UserSlice]
|
|
|
|
// userR is where relationships are stored.
|
|
type userR struct {
|
|
CreatorNoteAudios NoteAudioSlice // note_audio.note_audio_creator_id_fkey
|
|
DeletorNoteAudios NoteAudioSlice // note_audio.note_audio_deletor_id_fkey
|
|
CreatorNoteImages NoteImageSlice // note_image.note_image_creator_id_fkey
|
|
DeletorNoteImages NoteImageSlice // note_image.note_image_deletor_id_fkey
|
|
UserNotifications NotificationSlice // notification.notification_user_id_fkey
|
|
UserOauthTokens OauthTokenSlice // oauth_token.oauth_token_user_id_fkey
|
|
Organization *Organization // user_.user__organization_id_fkey
|
|
}
|
|
|
|
func buildUserColumns(alias string) userColumns {
|
|
return userColumns{
|
|
ColumnsExpr: expr.NewColumnsExpr(
|
|
"id", "arcgis_access_token", "arcgis_license", "arcgis_refresh_token", "arcgis_refresh_token_expires", "arcgis_role", "display_name", "email", "organization_id", "username", "password_hash_type", "password_hash",
|
|
).WithParent("user_"),
|
|
tableAlias: alias,
|
|
ID: psql.Quote(alias, "id"),
|
|
ArcgisAccessToken: psql.Quote(alias, "arcgis_access_token"),
|
|
ArcgisLicense: psql.Quote(alias, "arcgis_license"),
|
|
ArcgisRefreshToken: psql.Quote(alias, "arcgis_refresh_token"),
|
|
ArcgisRefreshTokenExpires: psql.Quote(alias, "arcgis_refresh_token_expires"),
|
|
ArcgisRole: psql.Quote(alias, "arcgis_role"),
|
|
DisplayName: psql.Quote(alias, "display_name"),
|
|
Email: psql.Quote(alias, "email"),
|
|
OrganizationID: psql.Quote(alias, "organization_id"),
|
|
Username: psql.Quote(alias, "username"),
|
|
PasswordHashType: psql.Quote(alias, "password_hash_type"),
|
|
PasswordHash: psql.Quote(alias, "password_hash"),
|
|
}
|
|
}
|
|
|
|
type userColumns struct {
|
|
expr.ColumnsExpr
|
|
tableAlias string
|
|
ID psql.Expression
|
|
ArcgisAccessToken psql.Expression
|
|
ArcgisLicense psql.Expression
|
|
ArcgisRefreshToken psql.Expression
|
|
ArcgisRefreshTokenExpires psql.Expression
|
|
ArcgisRole psql.Expression
|
|
DisplayName psql.Expression
|
|
Email psql.Expression
|
|
OrganizationID psql.Expression
|
|
Username psql.Expression
|
|
PasswordHashType psql.Expression
|
|
PasswordHash psql.Expression
|
|
}
|
|
|
|
func (c userColumns) Alias() string {
|
|
return c.tableAlias
|
|
}
|
|
|
|
func (userColumns) AliasedAs(alias string) userColumns {
|
|
return buildUserColumns(alias)
|
|
}
|
|
|
|
// UserSetter is used for insert/upsert/update operations
|
|
// All values are optional, and do not have to be set
|
|
// Generated columns are not included
|
|
type UserSetter struct {
|
|
ID omit.Val[int32] `db:"id,pk" `
|
|
ArcgisAccessToken omitnull.Val[string] `db:"arcgis_access_token" `
|
|
ArcgisLicense omitnull.Val[enums.Arcgislicensetype] `db:"arcgis_license" `
|
|
ArcgisRefreshToken omitnull.Val[string] `db:"arcgis_refresh_token" `
|
|
ArcgisRefreshTokenExpires omitnull.Val[time.Time] `db:"arcgis_refresh_token_expires" `
|
|
ArcgisRole omitnull.Val[string] `db:"arcgis_role" `
|
|
DisplayName omit.Val[string] `db:"display_name" `
|
|
Email omitnull.Val[string] `db:"email" `
|
|
OrganizationID omitnull.Val[int32] `db:"organization_id" `
|
|
Username omit.Val[string] `db:"username" `
|
|
PasswordHashType omit.Val[enums.Hashtype] `db:"password_hash_type" `
|
|
PasswordHash omit.Val[string] `db:"password_hash" `
|
|
}
|
|
|
|
func (s UserSetter) SetColumns() []string {
|
|
vals := make([]string, 0, 12)
|
|
if s.ID.IsValue() {
|
|
vals = append(vals, "id")
|
|
}
|
|
if !s.ArcgisAccessToken.IsUnset() {
|
|
vals = append(vals, "arcgis_access_token")
|
|
}
|
|
if !s.ArcgisLicense.IsUnset() {
|
|
vals = append(vals, "arcgis_license")
|
|
}
|
|
if !s.ArcgisRefreshToken.IsUnset() {
|
|
vals = append(vals, "arcgis_refresh_token")
|
|
}
|
|
if !s.ArcgisRefreshTokenExpires.IsUnset() {
|
|
vals = append(vals, "arcgis_refresh_token_expires")
|
|
}
|
|
if !s.ArcgisRole.IsUnset() {
|
|
vals = append(vals, "arcgis_role")
|
|
}
|
|
if s.DisplayName.IsValue() {
|
|
vals = append(vals, "display_name")
|
|
}
|
|
if !s.Email.IsUnset() {
|
|
vals = append(vals, "email")
|
|
}
|
|
if !s.OrganizationID.IsUnset() {
|
|
vals = append(vals, "organization_id")
|
|
}
|
|
if s.Username.IsValue() {
|
|
vals = append(vals, "username")
|
|
}
|
|
if s.PasswordHashType.IsValue() {
|
|
vals = append(vals, "password_hash_type")
|
|
}
|
|
if s.PasswordHash.IsValue() {
|
|
vals = append(vals, "password_hash")
|
|
}
|
|
return vals
|
|
}
|
|
|
|
func (s UserSetter) Overwrite(t *User) {
|
|
if s.ID.IsValue() {
|
|
t.ID = s.ID.MustGet()
|
|
}
|
|
if !s.ArcgisAccessToken.IsUnset() {
|
|
t.ArcgisAccessToken = s.ArcgisAccessToken.MustGetNull()
|
|
}
|
|
if !s.ArcgisLicense.IsUnset() {
|
|
t.ArcgisLicense = s.ArcgisLicense.MustGetNull()
|
|
}
|
|
if !s.ArcgisRefreshToken.IsUnset() {
|
|
t.ArcgisRefreshToken = s.ArcgisRefreshToken.MustGetNull()
|
|
}
|
|
if !s.ArcgisRefreshTokenExpires.IsUnset() {
|
|
t.ArcgisRefreshTokenExpires = s.ArcgisRefreshTokenExpires.MustGetNull()
|
|
}
|
|
if !s.ArcgisRole.IsUnset() {
|
|
t.ArcgisRole = s.ArcgisRole.MustGetNull()
|
|
}
|
|
if s.DisplayName.IsValue() {
|
|
t.DisplayName = s.DisplayName.MustGet()
|
|
}
|
|
if !s.Email.IsUnset() {
|
|
t.Email = s.Email.MustGetNull()
|
|
}
|
|
if !s.OrganizationID.IsUnset() {
|
|
t.OrganizationID = s.OrganizationID.MustGetNull()
|
|
}
|
|
if s.Username.IsValue() {
|
|
t.Username = s.Username.MustGet()
|
|
}
|
|
if s.PasswordHashType.IsValue() {
|
|
t.PasswordHashType = s.PasswordHashType.MustGet()
|
|
}
|
|
if s.PasswordHash.IsValue() {
|
|
t.PasswordHash = s.PasswordHash.MustGet()
|
|
}
|
|
}
|
|
|
|
func (s *UserSetter) Apply(q *dialect.InsertQuery) {
|
|
q.AppendHooks(func(ctx context.Context, exec bob.Executor) (context.Context, error) {
|
|
return Users.BeforeInsertHooks.RunHooks(ctx, exec, s)
|
|
})
|
|
|
|
q.AppendValues(bob.ExpressionFunc(func(ctx context.Context, w io.StringWriter, d bob.Dialect, start int) ([]any, error) {
|
|
vals := make([]bob.Expression, 12)
|
|
if s.ID.IsValue() {
|
|
vals[0] = psql.Arg(s.ID.MustGet())
|
|
} else {
|
|
vals[0] = psql.Raw("DEFAULT")
|
|
}
|
|
|
|
if !s.ArcgisAccessToken.IsUnset() {
|
|
vals[1] = psql.Arg(s.ArcgisAccessToken.MustGetNull())
|
|
} else {
|
|
vals[1] = psql.Raw("DEFAULT")
|
|
}
|
|
|
|
if !s.ArcgisLicense.IsUnset() {
|
|
vals[2] = psql.Arg(s.ArcgisLicense.MustGetNull())
|
|
} else {
|
|
vals[2] = psql.Raw("DEFAULT")
|
|
}
|
|
|
|
if !s.ArcgisRefreshToken.IsUnset() {
|
|
vals[3] = psql.Arg(s.ArcgisRefreshToken.MustGetNull())
|
|
} else {
|
|
vals[3] = psql.Raw("DEFAULT")
|
|
}
|
|
|
|
if !s.ArcgisRefreshTokenExpires.IsUnset() {
|
|
vals[4] = psql.Arg(s.ArcgisRefreshTokenExpires.MustGetNull())
|
|
} else {
|
|
vals[4] = psql.Raw("DEFAULT")
|
|
}
|
|
|
|
if !s.ArcgisRole.IsUnset() {
|
|
vals[5] = psql.Arg(s.ArcgisRole.MustGetNull())
|
|
} else {
|
|
vals[5] = psql.Raw("DEFAULT")
|
|
}
|
|
|
|
if s.DisplayName.IsValue() {
|
|
vals[6] = psql.Arg(s.DisplayName.MustGet())
|
|
} else {
|
|
vals[6] = psql.Raw("DEFAULT")
|
|
}
|
|
|
|
if !s.Email.IsUnset() {
|
|
vals[7] = psql.Arg(s.Email.MustGetNull())
|
|
} else {
|
|
vals[7] = psql.Raw("DEFAULT")
|
|
}
|
|
|
|
if !s.OrganizationID.IsUnset() {
|
|
vals[8] = psql.Arg(s.OrganizationID.MustGetNull())
|
|
} else {
|
|
vals[8] = psql.Raw("DEFAULT")
|
|
}
|
|
|
|
if s.Username.IsValue() {
|
|
vals[9] = psql.Arg(s.Username.MustGet())
|
|
} else {
|
|
vals[9] = psql.Raw("DEFAULT")
|
|
}
|
|
|
|
if s.PasswordHashType.IsValue() {
|
|
vals[10] = psql.Arg(s.PasswordHashType.MustGet())
|
|
} else {
|
|
vals[10] = psql.Raw("DEFAULT")
|
|
}
|
|
|
|
if s.PasswordHash.IsValue() {
|
|
vals[11] = psql.Arg(s.PasswordHash.MustGet())
|
|
} else {
|
|
vals[11] = psql.Raw("DEFAULT")
|
|
}
|
|
|
|
return bob.ExpressSlice(ctx, w, d, start, vals, "", ", ", "")
|
|
}))
|
|
}
|
|
|
|
func (s UserSetter) UpdateMod() bob.Mod[*dialect.UpdateQuery] {
|
|
return um.Set(s.Expressions()...)
|
|
}
|
|
|
|
func (s UserSetter) Expressions(prefix ...string) []bob.Expression {
|
|
exprs := make([]bob.Expression, 0, 12)
|
|
|
|
if s.ID.IsValue() {
|
|
exprs = append(exprs, expr.Join{Sep: " = ", Exprs: []bob.Expression{
|
|
psql.Quote(append(prefix, "id")...),
|
|
psql.Arg(s.ID),
|
|
}})
|
|
}
|
|
|
|
if !s.ArcgisAccessToken.IsUnset() {
|
|
exprs = append(exprs, expr.Join{Sep: " = ", Exprs: []bob.Expression{
|
|
psql.Quote(append(prefix, "arcgis_access_token")...),
|
|
psql.Arg(s.ArcgisAccessToken),
|
|
}})
|
|
}
|
|
|
|
if !s.ArcgisLicense.IsUnset() {
|
|
exprs = append(exprs, expr.Join{Sep: " = ", Exprs: []bob.Expression{
|
|
psql.Quote(append(prefix, "arcgis_license")...),
|
|
psql.Arg(s.ArcgisLicense),
|
|
}})
|
|
}
|
|
|
|
if !s.ArcgisRefreshToken.IsUnset() {
|
|
exprs = append(exprs, expr.Join{Sep: " = ", Exprs: []bob.Expression{
|
|
psql.Quote(append(prefix, "arcgis_refresh_token")...),
|
|
psql.Arg(s.ArcgisRefreshToken),
|
|
}})
|
|
}
|
|
|
|
if !s.ArcgisRefreshTokenExpires.IsUnset() {
|
|
exprs = append(exprs, expr.Join{Sep: " = ", Exprs: []bob.Expression{
|
|
psql.Quote(append(prefix, "arcgis_refresh_token_expires")...),
|
|
psql.Arg(s.ArcgisRefreshTokenExpires),
|
|
}})
|
|
}
|
|
|
|
if !s.ArcgisRole.IsUnset() {
|
|
exprs = append(exprs, expr.Join{Sep: " = ", Exprs: []bob.Expression{
|
|
psql.Quote(append(prefix, "arcgis_role")...),
|
|
psql.Arg(s.ArcgisRole),
|
|
}})
|
|
}
|
|
|
|
if s.DisplayName.IsValue() {
|
|
exprs = append(exprs, expr.Join{Sep: " = ", Exprs: []bob.Expression{
|
|
psql.Quote(append(prefix, "display_name")...),
|
|
psql.Arg(s.DisplayName),
|
|
}})
|
|
}
|
|
|
|
if !s.Email.IsUnset() {
|
|
exprs = append(exprs, expr.Join{Sep: " = ", Exprs: []bob.Expression{
|
|
psql.Quote(append(prefix, "email")...),
|
|
psql.Arg(s.Email),
|
|
}})
|
|
}
|
|
|
|
if !s.OrganizationID.IsUnset() {
|
|
exprs = append(exprs, expr.Join{Sep: " = ", Exprs: []bob.Expression{
|
|
psql.Quote(append(prefix, "organization_id")...),
|
|
psql.Arg(s.OrganizationID),
|
|
}})
|
|
}
|
|
|
|
if s.Username.IsValue() {
|
|
exprs = append(exprs, expr.Join{Sep: " = ", Exprs: []bob.Expression{
|
|
psql.Quote(append(prefix, "username")...),
|
|
psql.Arg(s.Username),
|
|
}})
|
|
}
|
|
|
|
if s.PasswordHashType.IsValue() {
|
|
exprs = append(exprs, expr.Join{Sep: " = ", Exprs: []bob.Expression{
|
|
psql.Quote(append(prefix, "password_hash_type")...),
|
|
psql.Arg(s.PasswordHashType),
|
|
}})
|
|
}
|
|
|
|
if s.PasswordHash.IsValue() {
|
|
exprs = append(exprs, expr.Join{Sep: " = ", Exprs: []bob.Expression{
|
|
psql.Quote(append(prefix, "password_hash")...),
|
|
psql.Arg(s.PasswordHash),
|
|
}})
|
|
}
|
|
|
|
return exprs
|
|
}
|
|
|
|
// FindUser retrieves a single record by primary key
|
|
// If cols is empty Find will return all columns.
|
|
func FindUser(ctx context.Context, exec bob.Executor, IDPK int32, cols ...string) (*User, error) {
|
|
if len(cols) == 0 {
|
|
return Users.Query(
|
|
sm.Where(Users.Columns.ID.EQ(psql.Arg(IDPK))),
|
|
).One(ctx, exec)
|
|
}
|
|
|
|
return Users.Query(
|
|
sm.Where(Users.Columns.ID.EQ(psql.Arg(IDPK))),
|
|
sm.Columns(Users.Columns.Only(cols...)),
|
|
).One(ctx, exec)
|
|
}
|
|
|
|
// UserExists checks the presence of a single record by primary key
|
|
func UserExists(ctx context.Context, exec bob.Executor, IDPK int32) (bool, error) {
|
|
return Users.Query(
|
|
sm.Where(Users.Columns.ID.EQ(psql.Arg(IDPK))),
|
|
).Exists(ctx, exec)
|
|
}
|
|
|
|
// AfterQueryHook is called after User is retrieved from the database
|
|
func (o *User) AfterQueryHook(ctx context.Context, exec bob.Executor, queryType bob.QueryType) error {
|
|
var err error
|
|
|
|
switch queryType {
|
|
case bob.QueryTypeSelect:
|
|
ctx, err = Users.AfterSelectHooks.RunHooks(ctx, exec, UserSlice{o})
|
|
case bob.QueryTypeInsert:
|
|
ctx, err = Users.AfterInsertHooks.RunHooks(ctx, exec, UserSlice{o})
|
|
case bob.QueryTypeUpdate:
|
|
ctx, err = Users.AfterUpdateHooks.RunHooks(ctx, exec, UserSlice{o})
|
|
case bob.QueryTypeDelete:
|
|
ctx, err = Users.AfterDeleteHooks.RunHooks(ctx, exec, UserSlice{o})
|
|
}
|
|
|
|
return err
|
|
}
|
|
|
|
// primaryKeyVals returns the primary key values of the User
|
|
func (o *User) primaryKeyVals() bob.Expression {
|
|
return psql.Arg(o.ID)
|
|
}
|
|
|
|
func (o *User) pkEQ() dialect.Expression {
|
|
return psql.Quote("user_", "id").EQ(bob.ExpressionFunc(func(ctx context.Context, w io.StringWriter, d bob.Dialect, start int) ([]any, error) {
|
|
return o.primaryKeyVals().WriteSQL(ctx, w, d, start)
|
|
}))
|
|
}
|
|
|
|
// Update uses an executor to update the User
|
|
func (o *User) Update(ctx context.Context, exec bob.Executor, s *UserSetter) error {
|
|
v, err := Users.Update(s.UpdateMod(), um.Where(o.pkEQ())).One(ctx, exec)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
o.R = v.R
|
|
*o = *v
|
|
|
|
return nil
|
|
}
|
|
|
|
// Delete deletes a single User record with an executor
|
|
func (o *User) Delete(ctx context.Context, exec bob.Executor) error {
|
|
_, err := Users.Delete(dm.Where(o.pkEQ())).Exec(ctx, exec)
|
|
return err
|
|
}
|
|
|
|
// Reload refreshes the User using the executor
|
|
func (o *User) Reload(ctx context.Context, exec bob.Executor) error {
|
|
o2, err := Users.Query(
|
|
sm.Where(Users.Columns.ID.EQ(psql.Arg(o.ID))),
|
|
).One(ctx, exec)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
o2.R = o.R
|
|
*o = *o2
|
|
|
|
return nil
|
|
}
|
|
|
|
// AfterQueryHook is called after UserSlice is retrieved from the database
|
|
func (o UserSlice) AfterQueryHook(ctx context.Context, exec bob.Executor, queryType bob.QueryType) error {
|
|
var err error
|
|
|
|
switch queryType {
|
|
case bob.QueryTypeSelect:
|
|
ctx, err = Users.AfterSelectHooks.RunHooks(ctx, exec, o)
|
|
case bob.QueryTypeInsert:
|
|
ctx, err = Users.AfterInsertHooks.RunHooks(ctx, exec, o)
|
|
case bob.QueryTypeUpdate:
|
|
ctx, err = Users.AfterUpdateHooks.RunHooks(ctx, exec, o)
|
|
case bob.QueryTypeDelete:
|
|
ctx, err = Users.AfterDeleteHooks.RunHooks(ctx, exec, o)
|
|
}
|
|
|
|
return err
|
|
}
|
|
|
|
func (o UserSlice) pkIN() dialect.Expression {
|
|
if len(o) == 0 {
|
|
return psql.Raw("NULL")
|
|
}
|
|
|
|
return psql.Quote("user_", "id").In(bob.ExpressionFunc(func(ctx context.Context, w io.StringWriter, d bob.Dialect, start int) ([]any, error) {
|
|
pkPairs := make([]bob.Expression, len(o))
|
|
for i, row := range o {
|
|
pkPairs[i] = row.primaryKeyVals()
|
|
}
|
|
return bob.ExpressSlice(ctx, w, d, start, pkPairs, "", ", ", "")
|
|
}))
|
|
}
|
|
|
|
// copyMatchingRows finds models in the given slice that have the same primary key
|
|
// then it first copies the existing relationships from the old model to the new model
|
|
// and then replaces the old model in the slice with the new model
|
|
func (o UserSlice) copyMatchingRows(from ...*User) {
|
|
for i, old := range o {
|
|
for _, new := range from {
|
|
if new.ID != old.ID {
|
|
continue
|
|
}
|
|
new.R = old.R
|
|
o[i] = new
|
|
break
|
|
}
|
|
}
|
|
}
|
|
|
|
// UpdateMod modifies an update query with "WHERE primary_key IN (o...)"
|
|
func (o UserSlice) UpdateMod() bob.Mod[*dialect.UpdateQuery] {
|
|
return bob.ModFunc[*dialect.UpdateQuery](func(q *dialect.UpdateQuery) {
|
|
q.AppendHooks(func(ctx context.Context, exec bob.Executor) (context.Context, error) {
|
|
return Users.BeforeUpdateHooks.RunHooks(ctx, exec, o)
|
|
})
|
|
|
|
q.AppendLoader(bob.LoaderFunc(func(ctx context.Context, exec bob.Executor, retrieved any) error {
|
|
var err error
|
|
switch retrieved := retrieved.(type) {
|
|
case *User:
|
|
o.copyMatchingRows(retrieved)
|
|
case []*User:
|
|
o.copyMatchingRows(retrieved...)
|
|
case UserSlice:
|
|
o.copyMatchingRows(retrieved...)
|
|
default:
|
|
// If the retrieved value is not a User or a slice of User
|
|
// then run the AfterUpdateHooks on the slice
|
|
_, err = Users.AfterUpdateHooks.RunHooks(ctx, exec, o)
|
|
}
|
|
|
|
return err
|
|
}))
|
|
|
|
q.AppendWhere(o.pkIN())
|
|
})
|
|
}
|
|
|
|
// DeleteMod modifies an delete query with "WHERE primary_key IN (o...)"
|
|
func (o UserSlice) DeleteMod() bob.Mod[*dialect.DeleteQuery] {
|
|
return bob.ModFunc[*dialect.DeleteQuery](func(q *dialect.DeleteQuery) {
|
|
q.AppendHooks(func(ctx context.Context, exec bob.Executor) (context.Context, error) {
|
|
return Users.BeforeDeleteHooks.RunHooks(ctx, exec, o)
|
|
})
|
|
|
|
q.AppendLoader(bob.LoaderFunc(func(ctx context.Context, exec bob.Executor, retrieved any) error {
|
|
var err error
|
|
switch retrieved := retrieved.(type) {
|
|
case *User:
|
|
o.copyMatchingRows(retrieved)
|
|
case []*User:
|
|
o.copyMatchingRows(retrieved...)
|
|
case UserSlice:
|
|
o.copyMatchingRows(retrieved...)
|
|
default:
|
|
// If the retrieved value is not a User or a slice of User
|
|
// then run the AfterDeleteHooks on the slice
|
|
_, err = Users.AfterDeleteHooks.RunHooks(ctx, exec, o)
|
|
}
|
|
|
|
return err
|
|
}))
|
|
|
|
q.AppendWhere(o.pkIN())
|
|
})
|
|
}
|
|
|
|
func (o UserSlice) UpdateAll(ctx context.Context, exec bob.Executor, vals UserSetter) error {
|
|
if len(o) == 0 {
|
|
return nil
|
|
}
|
|
|
|
_, err := Users.Update(vals.UpdateMod(), o.UpdateMod()).All(ctx, exec)
|
|
return err
|
|
}
|
|
|
|
func (o UserSlice) DeleteAll(ctx context.Context, exec bob.Executor) error {
|
|
if len(o) == 0 {
|
|
return nil
|
|
}
|
|
|
|
_, err := Users.Delete(o.DeleteMod()).Exec(ctx, exec)
|
|
return err
|
|
}
|
|
|
|
func (o UserSlice) ReloadAll(ctx context.Context, exec bob.Executor) error {
|
|
if len(o) == 0 {
|
|
return nil
|
|
}
|
|
|
|
o2, err := Users.Query(sm.Where(o.pkIN())).All(ctx, exec)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
o.copyMatchingRows(o2...)
|
|
|
|
return nil
|
|
}
|
|
|
|
// CreatorNoteAudios starts a query for related objects on note_audio
|
|
func (o *User) CreatorNoteAudios(mods ...bob.Mod[*dialect.SelectQuery]) NoteAudiosQuery {
|
|
return NoteAudios.Query(append(mods,
|
|
sm.Where(NoteAudios.Columns.CreatorID.EQ(psql.Arg(o.ID))),
|
|
)...)
|
|
}
|
|
|
|
func (os UserSlice) CreatorNoteAudios(mods ...bob.Mod[*dialect.SelectQuery]) NoteAudiosQuery {
|
|
pkID := make(pgtypes.Array[int32], 0, len(os))
|
|
for _, o := range os {
|
|
if o == nil {
|
|
continue
|
|
}
|
|
pkID = append(pkID, o.ID)
|
|
}
|
|
PKArgExpr := psql.Select(sm.Columns(
|
|
psql.F("unnest", psql.Cast(psql.Arg(pkID), "integer[]")),
|
|
))
|
|
|
|
return NoteAudios.Query(append(mods,
|
|
sm.Where(psql.Group(NoteAudios.Columns.CreatorID).OP("IN", PKArgExpr)),
|
|
)...)
|
|
}
|
|
|
|
// DeletorNoteAudios starts a query for related objects on note_audio
|
|
func (o *User) DeletorNoteAudios(mods ...bob.Mod[*dialect.SelectQuery]) NoteAudiosQuery {
|
|
return NoteAudios.Query(append(mods,
|
|
sm.Where(NoteAudios.Columns.DeletorID.EQ(psql.Arg(o.ID))),
|
|
)...)
|
|
}
|
|
|
|
func (os UserSlice) DeletorNoteAudios(mods ...bob.Mod[*dialect.SelectQuery]) NoteAudiosQuery {
|
|
pkID := make(pgtypes.Array[int32], 0, len(os))
|
|
for _, o := range os {
|
|
if o == nil {
|
|
continue
|
|
}
|
|
pkID = append(pkID, o.ID)
|
|
}
|
|
PKArgExpr := psql.Select(sm.Columns(
|
|
psql.F("unnest", psql.Cast(psql.Arg(pkID), "integer[]")),
|
|
))
|
|
|
|
return NoteAudios.Query(append(mods,
|
|
sm.Where(psql.Group(NoteAudios.Columns.DeletorID).OP("IN", PKArgExpr)),
|
|
)...)
|
|
}
|
|
|
|
// CreatorNoteImages starts a query for related objects on note_image
|
|
func (o *User) CreatorNoteImages(mods ...bob.Mod[*dialect.SelectQuery]) NoteImagesQuery {
|
|
return NoteImages.Query(append(mods,
|
|
sm.Where(NoteImages.Columns.CreatorID.EQ(psql.Arg(o.ID))),
|
|
)...)
|
|
}
|
|
|
|
func (os UserSlice) CreatorNoteImages(mods ...bob.Mod[*dialect.SelectQuery]) NoteImagesQuery {
|
|
pkID := make(pgtypes.Array[int32], 0, len(os))
|
|
for _, o := range os {
|
|
if o == nil {
|
|
continue
|
|
}
|
|
pkID = append(pkID, o.ID)
|
|
}
|
|
PKArgExpr := psql.Select(sm.Columns(
|
|
psql.F("unnest", psql.Cast(psql.Arg(pkID), "integer[]")),
|
|
))
|
|
|
|
return NoteImages.Query(append(mods,
|
|
sm.Where(psql.Group(NoteImages.Columns.CreatorID).OP("IN", PKArgExpr)),
|
|
)...)
|
|
}
|
|
|
|
// DeletorNoteImages starts a query for related objects on note_image
|
|
func (o *User) DeletorNoteImages(mods ...bob.Mod[*dialect.SelectQuery]) NoteImagesQuery {
|
|
return NoteImages.Query(append(mods,
|
|
sm.Where(NoteImages.Columns.DeletorID.EQ(psql.Arg(o.ID))),
|
|
)...)
|
|
}
|
|
|
|
func (os UserSlice) DeletorNoteImages(mods ...bob.Mod[*dialect.SelectQuery]) NoteImagesQuery {
|
|
pkID := make(pgtypes.Array[int32], 0, len(os))
|
|
for _, o := range os {
|
|
if o == nil {
|
|
continue
|
|
}
|
|
pkID = append(pkID, o.ID)
|
|
}
|
|
PKArgExpr := psql.Select(sm.Columns(
|
|
psql.F("unnest", psql.Cast(psql.Arg(pkID), "integer[]")),
|
|
))
|
|
|
|
return NoteImages.Query(append(mods,
|
|
sm.Where(psql.Group(NoteImages.Columns.DeletorID).OP("IN", PKArgExpr)),
|
|
)...)
|
|
}
|
|
|
|
// UserNotifications starts a query for related objects on notification
|
|
func (o *User) UserNotifications(mods ...bob.Mod[*dialect.SelectQuery]) NotificationsQuery {
|
|
return Notifications.Query(append(mods,
|
|
sm.Where(Notifications.Columns.UserID.EQ(psql.Arg(o.ID))),
|
|
)...)
|
|
}
|
|
|
|
func (os UserSlice) UserNotifications(mods ...bob.Mod[*dialect.SelectQuery]) NotificationsQuery {
|
|
pkID := make(pgtypes.Array[int32], 0, len(os))
|
|
for _, o := range os {
|
|
if o == nil {
|
|
continue
|
|
}
|
|
pkID = append(pkID, o.ID)
|
|
}
|
|
PKArgExpr := psql.Select(sm.Columns(
|
|
psql.F("unnest", psql.Cast(psql.Arg(pkID), "integer[]")),
|
|
))
|
|
|
|
return Notifications.Query(append(mods,
|
|
sm.Where(psql.Group(Notifications.Columns.UserID).OP("IN", PKArgExpr)),
|
|
)...)
|
|
}
|
|
|
|
// UserOauthTokens starts a query for related objects on oauth_token
|
|
func (o *User) UserOauthTokens(mods ...bob.Mod[*dialect.SelectQuery]) OauthTokensQuery {
|
|
return OauthTokens.Query(append(mods,
|
|
sm.Where(OauthTokens.Columns.UserID.EQ(psql.Arg(o.ID))),
|
|
)...)
|
|
}
|
|
|
|
func (os UserSlice) UserOauthTokens(mods ...bob.Mod[*dialect.SelectQuery]) OauthTokensQuery {
|
|
pkID := make(pgtypes.Array[int32], 0, len(os))
|
|
for _, o := range os {
|
|
if o == nil {
|
|
continue
|
|
}
|
|
pkID = append(pkID, o.ID)
|
|
}
|
|
PKArgExpr := psql.Select(sm.Columns(
|
|
psql.F("unnest", psql.Cast(psql.Arg(pkID), "integer[]")),
|
|
))
|
|
|
|
return OauthTokens.Query(append(mods,
|
|
sm.Where(psql.Group(OauthTokens.Columns.UserID).OP("IN", PKArgExpr)),
|
|
)...)
|
|
}
|
|
|
|
// Organization starts a query for related objects on organization
|
|
func (o *User) Organization(mods ...bob.Mod[*dialect.SelectQuery]) OrganizationsQuery {
|
|
return Organizations.Query(append(mods,
|
|
sm.Where(Organizations.Columns.ID.EQ(psql.Arg(o.OrganizationID))),
|
|
)...)
|
|
}
|
|
|
|
func (os UserSlice) Organization(mods ...bob.Mod[*dialect.SelectQuery]) OrganizationsQuery {
|
|
pkOrganizationID := make(pgtypes.Array[null.Val[int32]], 0, len(os))
|
|
for _, o := range os {
|
|
if o == nil {
|
|
continue
|
|
}
|
|
pkOrganizationID = append(pkOrganizationID, o.OrganizationID)
|
|
}
|
|
PKArgExpr := psql.Select(sm.Columns(
|
|
psql.F("unnest", psql.Cast(psql.Arg(pkOrganizationID), "integer[]")),
|
|
))
|
|
|
|
return Organizations.Query(append(mods,
|
|
sm.Where(psql.Group(Organizations.Columns.ID).OP("IN", PKArgExpr)),
|
|
)...)
|
|
}
|
|
|
|
func insertUserCreatorNoteAudios0(ctx context.Context, exec bob.Executor, noteAudios1 []*NoteAudioSetter, user0 *User) (NoteAudioSlice, error) {
|
|
for i := range noteAudios1 {
|
|
noteAudios1[i].CreatorID = omit.From(user0.ID)
|
|
}
|
|
|
|
ret, err := NoteAudios.Insert(bob.ToMods(noteAudios1...)).All(ctx, exec)
|
|
if err != nil {
|
|
return ret, fmt.Errorf("insertUserCreatorNoteAudios0: %w", err)
|
|
}
|
|
|
|
return ret, nil
|
|
}
|
|
|
|
func attachUserCreatorNoteAudios0(ctx context.Context, exec bob.Executor, count int, noteAudios1 NoteAudioSlice, user0 *User) (NoteAudioSlice, error) {
|
|
setter := &NoteAudioSetter{
|
|
CreatorID: omit.From(user0.ID),
|
|
}
|
|
|
|
err := noteAudios1.UpdateAll(ctx, exec, *setter)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("attachUserCreatorNoteAudios0: %w", err)
|
|
}
|
|
|
|
return noteAudios1, nil
|
|
}
|
|
|
|
func (user0 *User) InsertCreatorNoteAudios(ctx context.Context, exec bob.Executor, related ...*NoteAudioSetter) error {
|
|
if len(related) == 0 {
|
|
return nil
|
|
}
|
|
|
|
var err error
|
|
|
|
noteAudios1, err := insertUserCreatorNoteAudios0(ctx, exec, related, user0)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
user0.R.CreatorNoteAudios = append(user0.R.CreatorNoteAudios, noteAudios1...)
|
|
|
|
for _, rel := range noteAudios1 {
|
|
rel.R.CreatorUser = user0
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (user0 *User) AttachCreatorNoteAudios(ctx context.Context, exec bob.Executor, related ...*NoteAudio) error {
|
|
if len(related) == 0 {
|
|
return nil
|
|
}
|
|
|
|
var err error
|
|
noteAudios1 := NoteAudioSlice(related)
|
|
|
|
_, err = attachUserCreatorNoteAudios0(ctx, exec, len(related), noteAudios1, user0)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
user0.R.CreatorNoteAudios = append(user0.R.CreatorNoteAudios, noteAudios1...)
|
|
|
|
for _, rel := range related {
|
|
rel.R.CreatorUser = user0
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func insertUserDeletorNoteAudios0(ctx context.Context, exec bob.Executor, noteAudios1 []*NoteAudioSetter, user0 *User) (NoteAudioSlice, error) {
|
|
for i := range noteAudios1 {
|
|
noteAudios1[i].DeletorID = omitnull.From(user0.ID)
|
|
}
|
|
|
|
ret, err := NoteAudios.Insert(bob.ToMods(noteAudios1...)).All(ctx, exec)
|
|
if err != nil {
|
|
return ret, fmt.Errorf("insertUserDeletorNoteAudios0: %w", err)
|
|
}
|
|
|
|
return ret, nil
|
|
}
|
|
|
|
func attachUserDeletorNoteAudios0(ctx context.Context, exec bob.Executor, count int, noteAudios1 NoteAudioSlice, user0 *User) (NoteAudioSlice, error) {
|
|
setter := &NoteAudioSetter{
|
|
DeletorID: omitnull.From(user0.ID),
|
|
}
|
|
|
|
err := noteAudios1.UpdateAll(ctx, exec, *setter)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("attachUserDeletorNoteAudios0: %w", err)
|
|
}
|
|
|
|
return noteAudios1, nil
|
|
}
|
|
|
|
func (user0 *User) InsertDeletorNoteAudios(ctx context.Context, exec bob.Executor, related ...*NoteAudioSetter) error {
|
|
if len(related) == 0 {
|
|
return nil
|
|
}
|
|
|
|
var err error
|
|
|
|
noteAudios1, err := insertUserDeletorNoteAudios0(ctx, exec, related, user0)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
user0.R.DeletorNoteAudios = append(user0.R.DeletorNoteAudios, noteAudios1...)
|
|
|
|
for _, rel := range noteAudios1 {
|
|
rel.R.DeletorUser = user0
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (user0 *User) AttachDeletorNoteAudios(ctx context.Context, exec bob.Executor, related ...*NoteAudio) error {
|
|
if len(related) == 0 {
|
|
return nil
|
|
}
|
|
|
|
var err error
|
|
noteAudios1 := NoteAudioSlice(related)
|
|
|
|
_, err = attachUserDeletorNoteAudios0(ctx, exec, len(related), noteAudios1, user0)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
user0.R.DeletorNoteAudios = append(user0.R.DeletorNoteAudios, noteAudios1...)
|
|
|
|
for _, rel := range related {
|
|
rel.R.DeletorUser = user0
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func insertUserCreatorNoteImages0(ctx context.Context, exec bob.Executor, noteImages1 []*NoteImageSetter, user0 *User) (NoteImageSlice, error) {
|
|
for i := range noteImages1 {
|
|
noteImages1[i].CreatorID = omit.From(user0.ID)
|
|
}
|
|
|
|
ret, err := NoteImages.Insert(bob.ToMods(noteImages1...)).All(ctx, exec)
|
|
if err != nil {
|
|
return ret, fmt.Errorf("insertUserCreatorNoteImages0: %w", err)
|
|
}
|
|
|
|
return ret, nil
|
|
}
|
|
|
|
func attachUserCreatorNoteImages0(ctx context.Context, exec bob.Executor, count int, noteImages1 NoteImageSlice, user0 *User) (NoteImageSlice, error) {
|
|
setter := &NoteImageSetter{
|
|
CreatorID: omit.From(user0.ID),
|
|
}
|
|
|
|
err := noteImages1.UpdateAll(ctx, exec, *setter)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("attachUserCreatorNoteImages0: %w", err)
|
|
}
|
|
|
|
return noteImages1, nil
|
|
}
|
|
|
|
func (user0 *User) InsertCreatorNoteImages(ctx context.Context, exec bob.Executor, related ...*NoteImageSetter) error {
|
|
if len(related) == 0 {
|
|
return nil
|
|
}
|
|
|
|
var err error
|
|
|
|
noteImages1, err := insertUserCreatorNoteImages0(ctx, exec, related, user0)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
user0.R.CreatorNoteImages = append(user0.R.CreatorNoteImages, noteImages1...)
|
|
|
|
for _, rel := range noteImages1 {
|
|
rel.R.CreatorUser = user0
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (user0 *User) AttachCreatorNoteImages(ctx context.Context, exec bob.Executor, related ...*NoteImage) error {
|
|
if len(related) == 0 {
|
|
return nil
|
|
}
|
|
|
|
var err error
|
|
noteImages1 := NoteImageSlice(related)
|
|
|
|
_, err = attachUserCreatorNoteImages0(ctx, exec, len(related), noteImages1, user0)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
user0.R.CreatorNoteImages = append(user0.R.CreatorNoteImages, noteImages1...)
|
|
|
|
for _, rel := range related {
|
|
rel.R.CreatorUser = user0
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func insertUserDeletorNoteImages0(ctx context.Context, exec bob.Executor, noteImages1 []*NoteImageSetter, user0 *User) (NoteImageSlice, error) {
|
|
for i := range noteImages1 {
|
|
noteImages1[i].DeletorID = omitnull.From(user0.ID)
|
|
}
|
|
|
|
ret, err := NoteImages.Insert(bob.ToMods(noteImages1...)).All(ctx, exec)
|
|
if err != nil {
|
|
return ret, fmt.Errorf("insertUserDeletorNoteImages0: %w", err)
|
|
}
|
|
|
|
return ret, nil
|
|
}
|
|
|
|
func attachUserDeletorNoteImages0(ctx context.Context, exec bob.Executor, count int, noteImages1 NoteImageSlice, user0 *User) (NoteImageSlice, error) {
|
|
setter := &NoteImageSetter{
|
|
DeletorID: omitnull.From(user0.ID),
|
|
}
|
|
|
|
err := noteImages1.UpdateAll(ctx, exec, *setter)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("attachUserDeletorNoteImages0: %w", err)
|
|
}
|
|
|
|
return noteImages1, nil
|
|
}
|
|
|
|
func (user0 *User) InsertDeletorNoteImages(ctx context.Context, exec bob.Executor, related ...*NoteImageSetter) error {
|
|
if len(related) == 0 {
|
|
return nil
|
|
}
|
|
|
|
var err error
|
|
|
|
noteImages1, err := insertUserDeletorNoteImages0(ctx, exec, related, user0)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
user0.R.DeletorNoteImages = append(user0.R.DeletorNoteImages, noteImages1...)
|
|
|
|
for _, rel := range noteImages1 {
|
|
rel.R.DeletorUser = user0
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (user0 *User) AttachDeletorNoteImages(ctx context.Context, exec bob.Executor, related ...*NoteImage) error {
|
|
if len(related) == 0 {
|
|
return nil
|
|
}
|
|
|
|
var err error
|
|
noteImages1 := NoteImageSlice(related)
|
|
|
|
_, err = attachUserDeletorNoteImages0(ctx, exec, len(related), noteImages1, user0)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
user0.R.DeletorNoteImages = append(user0.R.DeletorNoteImages, noteImages1...)
|
|
|
|
for _, rel := range related {
|
|
rel.R.DeletorUser = user0
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func insertUserUserNotifications0(ctx context.Context, exec bob.Executor, notifications1 []*NotificationSetter, user0 *User) (NotificationSlice, error) {
|
|
for i := range notifications1 {
|
|
notifications1[i].UserID = omit.From(user0.ID)
|
|
}
|
|
|
|
ret, err := Notifications.Insert(bob.ToMods(notifications1...)).All(ctx, exec)
|
|
if err != nil {
|
|
return ret, fmt.Errorf("insertUserUserNotifications0: %w", err)
|
|
}
|
|
|
|
return ret, nil
|
|
}
|
|
|
|
func attachUserUserNotifications0(ctx context.Context, exec bob.Executor, count int, notifications1 NotificationSlice, user0 *User) (NotificationSlice, error) {
|
|
setter := &NotificationSetter{
|
|
UserID: omit.From(user0.ID),
|
|
}
|
|
|
|
err := notifications1.UpdateAll(ctx, exec, *setter)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("attachUserUserNotifications0: %w", err)
|
|
}
|
|
|
|
return notifications1, nil
|
|
}
|
|
|
|
func (user0 *User) InsertUserNotifications(ctx context.Context, exec bob.Executor, related ...*NotificationSetter) error {
|
|
if len(related) == 0 {
|
|
return nil
|
|
}
|
|
|
|
var err error
|
|
|
|
notifications1, err := insertUserUserNotifications0(ctx, exec, related, user0)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
user0.R.UserNotifications = append(user0.R.UserNotifications, notifications1...)
|
|
|
|
for _, rel := range notifications1 {
|
|
rel.R.UserUser = user0
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (user0 *User) AttachUserNotifications(ctx context.Context, exec bob.Executor, related ...*Notification) error {
|
|
if len(related) == 0 {
|
|
return nil
|
|
}
|
|
|
|
var err error
|
|
notifications1 := NotificationSlice(related)
|
|
|
|
_, err = attachUserUserNotifications0(ctx, exec, len(related), notifications1, user0)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
user0.R.UserNotifications = append(user0.R.UserNotifications, notifications1...)
|
|
|
|
for _, rel := range related {
|
|
rel.R.UserUser = user0
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func insertUserUserOauthTokens0(ctx context.Context, exec bob.Executor, oauthTokens1 []*OauthTokenSetter, user0 *User) (OauthTokenSlice, error) {
|
|
for i := range oauthTokens1 {
|
|
oauthTokens1[i].UserID = omit.From(user0.ID)
|
|
}
|
|
|
|
ret, err := OauthTokens.Insert(bob.ToMods(oauthTokens1...)).All(ctx, exec)
|
|
if err != nil {
|
|
return ret, fmt.Errorf("insertUserUserOauthTokens0: %w", err)
|
|
}
|
|
|
|
return ret, nil
|
|
}
|
|
|
|
func attachUserUserOauthTokens0(ctx context.Context, exec bob.Executor, count int, oauthTokens1 OauthTokenSlice, user0 *User) (OauthTokenSlice, error) {
|
|
setter := &OauthTokenSetter{
|
|
UserID: omit.From(user0.ID),
|
|
}
|
|
|
|
err := oauthTokens1.UpdateAll(ctx, exec, *setter)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("attachUserUserOauthTokens0: %w", err)
|
|
}
|
|
|
|
return oauthTokens1, nil
|
|
}
|
|
|
|
func (user0 *User) InsertUserOauthTokens(ctx context.Context, exec bob.Executor, related ...*OauthTokenSetter) error {
|
|
if len(related) == 0 {
|
|
return nil
|
|
}
|
|
|
|
var err error
|
|
|
|
oauthTokens1, err := insertUserUserOauthTokens0(ctx, exec, related, user0)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
user0.R.UserOauthTokens = append(user0.R.UserOauthTokens, oauthTokens1...)
|
|
|
|
for _, rel := range oauthTokens1 {
|
|
rel.R.UserUser = user0
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (user0 *User) AttachUserOauthTokens(ctx context.Context, exec bob.Executor, related ...*OauthToken) error {
|
|
if len(related) == 0 {
|
|
return nil
|
|
}
|
|
|
|
var err error
|
|
oauthTokens1 := OauthTokenSlice(related)
|
|
|
|
_, err = attachUserUserOauthTokens0(ctx, exec, len(related), oauthTokens1, user0)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
user0.R.UserOauthTokens = append(user0.R.UserOauthTokens, oauthTokens1...)
|
|
|
|
for _, rel := range related {
|
|
rel.R.UserUser = user0
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func attachUserOrganization0(ctx context.Context, exec bob.Executor, count int, user0 *User, organization1 *Organization) (*User, error) {
|
|
setter := &UserSetter{
|
|
OrganizationID: omitnull.From(organization1.ID),
|
|
}
|
|
|
|
err := user0.Update(ctx, exec, setter)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("attachUserOrganization0: %w", err)
|
|
}
|
|
|
|
return user0, nil
|
|
}
|
|
|
|
func (user0 *User) InsertOrganization(ctx context.Context, exec bob.Executor, related *OrganizationSetter) error {
|
|
var err error
|
|
|
|
organization1, err := Organizations.Insert(related).One(ctx, exec)
|
|
if err != nil {
|
|
return fmt.Errorf("inserting related objects: %w", err)
|
|
}
|
|
|
|
_, err = attachUserOrganization0(ctx, exec, 1, user0, organization1)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
user0.R.Organization = organization1
|
|
|
|
organization1.R.User = append(organization1.R.User, user0)
|
|
|
|
return nil
|
|
}
|
|
|
|
func (user0 *User) AttachOrganization(ctx context.Context, exec bob.Executor, organization1 *Organization) error {
|
|
var err error
|
|
|
|
_, err = attachUserOrganization0(ctx, exec, 1, user0, organization1)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
user0.R.Organization = organization1
|
|
|
|
organization1.R.User = append(organization1.R.User, user0)
|
|
|
|
return nil
|
|
}
|
|
|
|
type userWhere[Q psql.Filterable] struct {
|
|
ID psql.WhereMod[Q, int32]
|
|
ArcgisAccessToken psql.WhereNullMod[Q, string]
|
|
ArcgisLicense psql.WhereNullMod[Q, enums.Arcgislicensetype]
|
|
ArcgisRefreshToken psql.WhereNullMod[Q, string]
|
|
ArcgisRefreshTokenExpires psql.WhereNullMod[Q, time.Time]
|
|
ArcgisRole psql.WhereNullMod[Q, string]
|
|
DisplayName psql.WhereMod[Q, string]
|
|
Email psql.WhereNullMod[Q, string]
|
|
OrganizationID psql.WhereNullMod[Q, int32]
|
|
Username psql.WhereMod[Q, string]
|
|
PasswordHashType psql.WhereMod[Q, enums.Hashtype]
|
|
PasswordHash psql.WhereMod[Q, string]
|
|
}
|
|
|
|
func (userWhere[Q]) AliasedAs(alias string) userWhere[Q] {
|
|
return buildUserWhere[Q](buildUserColumns(alias))
|
|
}
|
|
|
|
func buildUserWhere[Q psql.Filterable](cols userColumns) userWhere[Q] {
|
|
return userWhere[Q]{
|
|
ID: psql.Where[Q, int32](cols.ID),
|
|
ArcgisAccessToken: psql.WhereNull[Q, string](cols.ArcgisAccessToken),
|
|
ArcgisLicense: psql.WhereNull[Q, enums.Arcgislicensetype](cols.ArcgisLicense),
|
|
ArcgisRefreshToken: psql.WhereNull[Q, string](cols.ArcgisRefreshToken),
|
|
ArcgisRefreshTokenExpires: psql.WhereNull[Q, time.Time](cols.ArcgisRefreshTokenExpires),
|
|
ArcgisRole: psql.WhereNull[Q, string](cols.ArcgisRole),
|
|
DisplayName: psql.Where[Q, string](cols.DisplayName),
|
|
Email: psql.WhereNull[Q, string](cols.Email),
|
|
OrganizationID: psql.WhereNull[Q, int32](cols.OrganizationID),
|
|
Username: psql.Where[Q, string](cols.Username),
|
|
PasswordHashType: psql.Where[Q, enums.Hashtype](cols.PasswordHashType),
|
|
PasswordHash: psql.Where[Q, string](cols.PasswordHash),
|
|
}
|
|
}
|
|
|
|
func (o *User) Preload(name string, retrieved any) error {
|
|
if o == nil {
|
|
return nil
|
|
}
|
|
|
|
switch name {
|
|
case "CreatorNoteAudios":
|
|
rels, ok := retrieved.(NoteAudioSlice)
|
|
if !ok {
|
|
return fmt.Errorf("user cannot load %T as %q", retrieved, name)
|
|
}
|
|
|
|
o.R.CreatorNoteAudios = rels
|
|
|
|
for _, rel := range rels {
|
|
if rel != nil {
|
|
rel.R.CreatorUser = o
|
|
}
|
|
}
|
|
return nil
|
|
case "DeletorNoteAudios":
|
|
rels, ok := retrieved.(NoteAudioSlice)
|
|
if !ok {
|
|
return fmt.Errorf("user cannot load %T as %q", retrieved, name)
|
|
}
|
|
|
|
o.R.DeletorNoteAudios = rels
|
|
|
|
for _, rel := range rels {
|
|
if rel != nil {
|
|
rel.R.DeletorUser = o
|
|
}
|
|
}
|
|
return nil
|
|
case "CreatorNoteImages":
|
|
rels, ok := retrieved.(NoteImageSlice)
|
|
if !ok {
|
|
return fmt.Errorf("user cannot load %T as %q", retrieved, name)
|
|
}
|
|
|
|
o.R.CreatorNoteImages = rels
|
|
|
|
for _, rel := range rels {
|
|
if rel != nil {
|
|
rel.R.CreatorUser = o
|
|
}
|
|
}
|
|
return nil
|
|
case "DeletorNoteImages":
|
|
rels, ok := retrieved.(NoteImageSlice)
|
|
if !ok {
|
|
return fmt.Errorf("user cannot load %T as %q", retrieved, name)
|
|
}
|
|
|
|
o.R.DeletorNoteImages = rels
|
|
|
|
for _, rel := range rels {
|
|
if rel != nil {
|
|
rel.R.DeletorUser = o
|
|
}
|
|
}
|
|
return nil
|
|
case "UserNotifications":
|
|
rels, ok := retrieved.(NotificationSlice)
|
|
if !ok {
|
|
return fmt.Errorf("user cannot load %T as %q", retrieved, name)
|
|
}
|
|
|
|
o.R.UserNotifications = rels
|
|
|
|
for _, rel := range rels {
|
|
if rel != nil {
|
|
rel.R.UserUser = o
|
|
}
|
|
}
|
|
return nil
|
|
case "UserOauthTokens":
|
|
rels, ok := retrieved.(OauthTokenSlice)
|
|
if !ok {
|
|
return fmt.Errorf("user cannot load %T as %q", retrieved, name)
|
|
}
|
|
|
|
o.R.UserOauthTokens = rels
|
|
|
|
for _, rel := range rels {
|
|
if rel != nil {
|
|
rel.R.UserUser = o
|
|
}
|
|
}
|
|
return nil
|
|
case "Organization":
|
|
rel, ok := retrieved.(*Organization)
|
|
if !ok {
|
|
return fmt.Errorf("user cannot load %T as %q", retrieved, name)
|
|
}
|
|
|
|
o.R.Organization = rel
|
|
|
|
if rel != nil {
|
|
rel.R.User = UserSlice{o}
|
|
}
|
|
return nil
|
|
default:
|
|
return fmt.Errorf("user has no relationship %q", name)
|
|
}
|
|
}
|
|
|
|
type userPreloader struct {
|
|
Organization func(...psql.PreloadOption) psql.Preloader
|
|
}
|
|
|
|
func buildUserPreloader() userPreloader {
|
|
return userPreloader{
|
|
Organization: func(opts ...psql.PreloadOption) psql.Preloader {
|
|
return psql.Preload[*Organization, OrganizationSlice](psql.PreloadRel{
|
|
Name: "Organization",
|
|
Sides: []psql.PreloadSide{
|
|
{
|
|
From: Users,
|
|
To: Organizations,
|
|
FromColumns: []string{"organization_id"},
|
|
ToColumns: []string{"id"},
|
|
},
|
|
},
|
|
}, Organizations.Columns.Names(), opts...)
|
|
},
|
|
}
|
|
}
|
|
|
|
type userThenLoader[Q orm.Loadable] struct {
|
|
CreatorNoteAudios func(...bob.Mod[*dialect.SelectQuery]) orm.Loader[Q]
|
|
DeletorNoteAudios func(...bob.Mod[*dialect.SelectQuery]) orm.Loader[Q]
|
|
CreatorNoteImages func(...bob.Mod[*dialect.SelectQuery]) orm.Loader[Q]
|
|
DeletorNoteImages func(...bob.Mod[*dialect.SelectQuery]) orm.Loader[Q]
|
|
UserNotifications func(...bob.Mod[*dialect.SelectQuery]) orm.Loader[Q]
|
|
UserOauthTokens func(...bob.Mod[*dialect.SelectQuery]) orm.Loader[Q]
|
|
Organization func(...bob.Mod[*dialect.SelectQuery]) orm.Loader[Q]
|
|
}
|
|
|
|
func buildUserThenLoader[Q orm.Loadable]() userThenLoader[Q] {
|
|
type CreatorNoteAudiosLoadInterface interface {
|
|
LoadCreatorNoteAudios(context.Context, bob.Executor, ...bob.Mod[*dialect.SelectQuery]) error
|
|
}
|
|
type DeletorNoteAudiosLoadInterface interface {
|
|
LoadDeletorNoteAudios(context.Context, bob.Executor, ...bob.Mod[*dialect.SelectQuery]) error
|
|
}
|
|
type CreatorNoteImagesLoadInterface interface {
|
|
LoadCreatorNoteImages(context.Context, bob.Executor, ...bob.Mod[*dialect.SelectQuery]) error
|
|
}
|
|
type DeletorNoteImagesLoadInterface interface {
|
|
LoadDeletorNoteImages(context.Context, bob.Executor, ...bob.Mod[*dialect.SelectQuery]) error
|
|
}
|
|
type UserNotificationsLoadInterface interface {
|
|
LoadUserNotifications(context.Context, bob.Executor, ...bob.Mod[*dialect.SelectQuery]) error
|
|
}
|
|
type UserOauthTokensLoadInterface interface {
|
|
LoadUserOauthTokens(context.Context, bob.Executor, ...bob.Mod[*dialect.SelectQuery]) error
|
|
}
|
|
type OrganizationLoadInterface interface {
|
|
LoadOrganization(context.Context, bob.Executor, ...bob.Mod[*dialect.SelectQuery]) error
|
|
}
|
|
|
|
return userThenLoader[Q]{
|
|
CreatorNoteAudios: thenLoadBuilder[Q](
|
|
"CreatorNoteAudios",
|
|
func(ctx context.Context, exec bob.Executor, retrieved CreatorNoteAudiosLoadInterface, mods ...bob.Mod[*dialect.SelectQuery]) error {
|
|
return retrieved.LoadCreatorNoteAudios(ctx, exec, mods...)
|
|
},
|
|
),
|
|
DeletorNoteAudios: thenLoadBuilder[Q](
|
|
"DeletorNoteAudios",
|
|
func(ctx context.Context, exec bob.Executor, retrieved DeletorNoteAudiosLoadInterface, mods ...bob.Mod[*dialect.SelectQuery]) error {
|
|
return retrieved.LoadDeletorNoteAudios(ctx, exec, mods...)
|
|
},
|
|
),
|
|
CreatorNoteImages: thenLoadBuilder[Q](
|
|
"CreatorNoteImages",
|
|
func(ctx context.Context, exec bob.Executor, retrieved CreatorNoteImagesLoadInterface, mods ...bob.Mod[*dialect.SelectQuery]) error {
|
|
return retrieved.LoadCreatorNoteImages(ctx, exec, mods...)
|
|
},
|
|
),
|
|
DeletorNoteImages: thenLoadBuilder[Q](
|
|
"DeletorNoteImages",
|
|
func(ctx context.Context, exec bob.Executor, retrieved DeletorNoteImagesLoadInterface, mods ...bob.Mod[*dialect.SelectQuery]) error {
|
|
return retrieved.LoadDeletorNoteImages(ctx, exec, mods...)
|
|
},
|
|
),
|
|
UserNotifications: thenLoadBuilder[Q](
|
|
"UserNotifications",
|
|
func(ctx context.Context, exec bob.Executor, retrieved UserNotificationsLoadInterface, mods ...bob.Mod[*dialect.SelectQuery]) error {
|
|
return retrieved.LoadUserNotifications(ctx, exec, mods...)
|
|
},
|
|
),
|
|
UserOauthTokens: thenLoadBuilder[Q](
|
|
"UserOauthTokens",
|
|
func(ctx context.Context, exec bob.Executor, retrieved UserOauthTokensLoadInterface, mods ...bob.Mod[*dialect.SelectQuery]) error {
|
|
return retrieved.LoadUserOauthTokens(ctx, exec, mods...)
|
|
},
|
|
),
|
|
Organization: thenLoadBuilder[Q](
|
|
"Organization",
|
|
func(ctx context.Context, exec bob.Executor, retrieved OrganizationLoadInterface, mods ...bob.Mod[*dialect.SelectQuery]) error {
|
|
return retrieved.LoadOrganization(ctx, exec, mods...)
|
|
},
|
|
),
|
|
}
|
|
}
|
|
|
|
// LoadCreatorNoteAudios loads the user's CreatorNoteAudios into the .R struct
|
|
func (o *User) LoadCreatorNoteAudios(ctx context.Context, exec bob.Executor, mods ...bob.Mod[*dialect.SelectQuery]) error {
|
|
if o == nil {
|
|
return nil
|
|
}
|
|
|
|
// Reset the relationship
|
|
o.R.CreatorNoteAudios = nil
|
|
|
|
related, err := o.CreatorNoteAudios(mods...).All(ctx, exec)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
for _, rel := range related {
|
|
rel.R.CreatorUser = o
|
|
}
|
|
|
|
o.R.CreatorNoteAudios = related
|
|
return nil
|
|
}
|
|
|
|
// LoadCreatorNoteAudios loads the user's CreatorNoteAudios into the .R struct
|
|
func (os UserSlice) LoadCreatorNoteAudios(ctx context.Context, exec bob.Executor, mods ...bob.Mod[*dialect.SelectQuery]) error {
|
|
if len(os) == 0 {
|
|
return nil
|
|
}
|
|
|
|
noteAudios, err := os.CreatorNoteAudios(mods...).All(ctx, exec)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
for _, o := range os {
|
|
if o == nil {
|
|
continue
|
|
}
|
|
|
|
o.R.CreatorNoteAudios = nil
|
|
}
|
|
|
|
for _, o := range os {
|
|
if o == nil {
|
|
continue
|
|
}
|
|
|
|
for _, rel := range noteAudios {
|
|
|
|
if !(o.ID == rel.CreatorID) {
|
|
continue
|
|
}
|
|
|
|
rel.R.CreatorUser = o
|
|
|
|
o.R.CreatorNoteAudios = append(o.R.CreatorNoteAudios, rel)
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// LoadDeletorNoteAudios loads the user's DeletorNoteAudios into the .R struct
|
|
func (o *User) LoadDeletorNoteAudios(ctx context.Context, exec bob.Executor, mods ...bob.Mod[*dialect.SelectQuery]) error {
|
|
if o == nil {
|
|
return nil
|
|
}
|
|
|
|
// Reset the relationship
|
|
o.R.DeletorNoteAudios = nil
|
|
|
|
related, err := o.DeletorNoteAudios(mods...).All(ctx, exec)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
for _, rel := range related {
|
|
rel.R.DeletorUser = o
|
|
}
|
|
|
|
o.R.DeletorNoteAudios = related
|
|
return nil
|
|
}
|
|
|
|
// LoadDeletorNoteAudios loads the user's DeletorNoteAudios into the .R struct
|
|
func (os UserSlice) LoadDeletorNoteAudios(ctx context.Context, exec bob.Executor, mods ...bob.Mod[*dialect.SelectQuery]) error {
|
|
if len(os) == 0 {
|
|
return nil
|
|
}
|
|
|
|
noteAudios, err := os.DeletorNoteAudios(mods...).All(ctx, exec)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
for _, o := range os {
|
|
if o == nil {
|
|
continue
|
|
}
|
|
|
|
o.R.DeletorNoteAudios = nil
|
|
}
|
|
|
|
for _, o := range os {
|
|
if o == nil {
|
|
continue
|
|
}
|
|
|
|
for _, rel := range noteAudios {
|
|
|
|
if !rel.DeletorID.IsValue() {
|
|
continue
|
|
}
|
|
if !(rel.DeletorID.IsValue() && o.ID == rel.DeletorID.MustGet()) {
|
|
continue
|
|
}
|
|
|
|
rel.R.DeletorUser = o
|
|
|
|
o.R.DeletorNoteAudios = append(o.R.DeletorNoteAudios, rel)
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// LoadCreatorNoteImages loads the user's CreatorNoteImages into the .R struct
|
|
func (o *User) LoadCreatorNoteImages(ctx context.Context, exec bob.Executor, mods ...bob.Mod[*dialect.SelectQuery]) error {
|
|
if o == nil {
|
|
return nil
|
|
}
|
|
|
|
// Reset the relationship
|
|
o.R.CreatorNoteImages = nil
|
|
|
|
related, err := o.CreatorNoteImages(mods...).All(ctx, exec)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
for _, rel := range related {
|
|
rel.R.CreatorUser = o
|
|
}
|
|
|
|
o.R.CreatorNoteImages = related
|
|
return nil
|
|
}
|
|
|
|
// LoadCreatorNoteImages loads the user's CreatorNoteImages into the .R struct
|
|
func (os UserSlice) LoadCreatorNoteImages(ctx context.Context, exec bob.Executor, mods ...bob.Mod[*dialect.SelectQuery]) error {
|
|
if len(os) == 0 {
|
|
return nil
|
|
}
|
|
|
|
noteImages, err := os.CreatorNoteImages(mods...).All(ctx, exec)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
for _, o := range os {
|
|
if o == nil {
|
|
continue
|
|
}
|
|
|
|
o.R.CreatorNoteImages = nil
|
|
}
|
|
|
|
for _, o := range os {
|
|
if o == nil {
|
|
continue
|
|
}
|
|
|
|
for _, rel := range noteImages {
|
|
|
|
if !(o.ID == rel.CreatorID) {
|
|
continue
|
|
}
|
|
|
|
rel.R.CreatorUser = o
|
|
|
|
o.R.CreatorNoteImages = append(o.R.CreatorNoteImages, rel)
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// LoadDeletorNoteImages loads the user's DeletorNoteImages into the .R struct
|
|
func (o *User) LoadDeletorNoteImages(ctx context.Context, exec bob.Executor, mods ...bob.Mod[*dialect.SelectQuery]) error {
|
|
if o == nil {
|
|
return nil
|
|
}
|
|
|
|
// Reset the relationship
|
|
o.R.DeletorNoteImages = nil
|
|
|
|
related, err := o.DeletorNoteImages(mods...).All(ctx, exec)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
for _, rel := range related {
|
|
rel.R.DeletorUser = o
|
|
}
|
|
|
|
o.R.DeletorNoteImages = related
|
|
return nil
|
|
}
|
|
|
|
// LoadDeletorNoteImages loads the user's DeletorNoteImages into the .R struct
|
|
func (os UserSlice) LoadDeletorNoteImages(ctx context.Context, exec bob.Executor, mods ...bob.Mod[*dialect.SelectQuery]) error {
|
|
if len(os) == 0 {
|
|
return nil
|
|
}
|
|
|
|
noteImages, err := os.DeletorNoteImages(mods...).All(ctx, exec)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
for _, o := range os {
|
|
if o == nil {
|
|
continue
|
|
}
|
|
|
|
o.R.DeletorNoteImages = nil
|
|
}
|
|
|
|
for _, o := range os {
|
|
if o == nil {
|
|
continue
|
|
}
|
|
|
|
for _, rel := range noteImages {
|
|
|
|
if !rel.DeletorID.IsValue() {
|
|
continue
|
|
}
|
|
if !(rel.DeletorID.IsValue() && o.ID == rel.DeletorID.MustGet()) {
|
|
continue
|
|
}
|
|
|
|
rel.R.DeletorUser = o
|
|
|
|
o.R.DeletorNoteImages = append(o.R.DeletorNoteImages, rel)
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// LoadUserNotifications loads the user's UserNotifications into the .R struct
|
|
func (o *User) LoadUserNotifications(ctx context.Context, exec bob.Executor, mods ...bob.Mod[*dialect.SelectQuery]) error {
|
|
if o == nil {
|
|
return nil
|
|
}
|
|
|
|
// Reset the relationship
|
|
o.R.UserNotifications = nil
|
|
|
|
related, err := o.UserNotifications(mods...).All(ctx, exec)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
for _, rel := range related {
|
|
rel.R.UserUser = o
|
|
}
|
|
|
|
o.R.UserNotifications = related
|
|
return nil
|
|
}
|
|
|
|
// LoadUserNotifications loads the user's UserNotifications into the .R struct
|
|
func (os UserSlice) LoadUserNotifications(ctx context.Context, exec bob.Executor, mods ...bob.Mod[*dialect.SelectQuery]) error {
|
|
if len(os) == 0 {
|
|
return nil
|
|
}
|
|
|
|
notifications, err := os.UserNotifications(mods...).All(ctx, exec)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
for _, o := range os {
|
|
if o == nil {
|
|
continue
|
|
}
|
|
|
|
o.R.UserNotifications = nil
|
|
}
|
|
|
|
for _, o := range os {
|
|
if o == nil {
|
|
continue
|
|
}
|
|
|
|
for _, rel := range notifications {
|
|
|
|
if !(o.ID == rel.UserID) {
|
|
continue
|
|
}
|
|
|
|
rel.R.UserUser = o
|
|
|
|
o.R.UserNotifications = append(o.R.UserNotifications, rel)
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// LoadUserOauthTokens loads the user's UserOauthTokens into the .R struct
|
|
func (o *User) LoadUserOauthTokens(ctx context.Context, exec bob.Executor, mods ...bob.Mod[*dialect.SelectQuery]) error {
|
|
if o == nil {
|
|
return nil
|
|
}
|
|
|
|
// Reset the relationship
|
|
o.R.UserOauthTokens = nil
|
|
|
|
related, err := o.UserOauthTokens(mods...).All(ctx, exec)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
for _, rel := range related {
|
|
rel.R.UserUser = o
|
|
}
|
|
|
|
o.R.UserOauthTokens = related
|
|
return nil
|
|
}
|
|
|
|
// LoadUserOauthTokens loads the user's UserOauthTokens into the .R struct
|
|
func (os UserSlice) LoadUserOauthTokens(ctx context.Context, exec bob.Executor, mods ...bob.Mod[*dialect.SelectQuery]) error {
|
|
if len(os) == 0 {
|
|
return nil
|
|
}
|
|
|
|
oauthTokens, err := os.UserOauthTokens(mods...).All(ctx, exec)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
for _, o := range os {
|
|
if o == nil {
|
|
continue
|
|
}
|
|
|
|
o.R.UserOauthTokens = nil
|
|
}
|
|
|
|
for _, o := range os {
|
|
if o == nil {
|
|
continue
|
|
}
|
|
|
|
for _, rel := range oauthTokens {
|
|
|
|
if !(o.ID == rel.UserID) {
|
|
continue
|
|
}
|
|
|
|
rel.R.UserUser = o
|
|
|
|
o.R.UserOauthTokens = append(o.R.UserOauthTokens, rel)
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// LoadOrganization loads the user's Organization into the .R struct
|
|
func (o *User) LoadOrganization(ctx context.Context, exec bob.Executor, mods ...bob.Mod[*dialect.SelectQuery]) error {
|
|
if o == nil {
|
|
return nil
|
|
}
|
|
|
|
// Reset the relationship
|
|
o.R.Organization = nil
|
|
|
|
related, err := o.Organization(mods...).One(ctx, exec)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
related.R.User = UserSlice{o}
|
|
|
|
o.R.Organization = related
|
|
return nil
|
|
}
|
|
|
|
// LoadOrganization loads the user's Organization into the .R struct
|
|
func (os UserSlice) LoadOrganization(ctx context.Context, exec bob.Executor, mods ...bob.Mod[*dialect.SelectQuery]) error {
|
|
if len(os) == 0 {
|
|
return nil
|
|
}
|
|
|
|
organizations, err := os.Organization(mods...).All(ctx, exec)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
for _, o := range os {
|
|
if o == nil {
|
|
continue
|
|
}
|
|
|
|
for _, rel := range organizations {
|
|
if !o.OrganizationID.IsValue() {
|
|
continue
|
|
}
|
|
|
|
if !(o.OrganizationID.IsValue() && o.OrganizationID.MustGet() == rel.ID) {
|
|
continue
|
|
}
|
|
|
|
rel.R.User = append(rel.R.User, o)
|
|
|
|
o.R.Organization = rel
|
|
break
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
type userJoins[Q dialect.Joinable] struct {
|
|
typ string
|
|
CreatorNoteAudios modAs[Q, noteAudioColumns]
|
|
DeletorNoteAudios modAs[Q, noteAudioColumns]
|
|
CreatorNoteImages modAs[Q, noteImageColumns]
|
|
DeletorNoteImages modAs[Q, noteImageColumns]
|
|
UserNotifications modAs[Q, notificationColumns]
|
|
UserOauthTokens modAs[Q, oauthTokenColumns]
|
|
Organization modAs[Q, organizationColumns]
|
|
}
|
|
|
|
func (j userJoins[Q]) aliasedAs(alias string) userJoins[Q] {
|
|
return buildUserJoins[Q](buildUserColumns(alias), j.typ)
|
|
}
|
|
|
|
func buildUserJoins[Q dialect.Joinable](cols userColumns, typ string) userJoins[Q] {
|
|
return userJoins[Q]{
|
|
typ: typ,
|
|
CreatorNoteAudios: modAs[Q, noteAudioColumns]{
|
|
c: NoteAudios.Columns,
|
|
f: func(to noteAudioColumns) bob.Mod[Q] {
|
|
mods := make(mods.QueryMods[Q], 0, 1)
|
|
|
|
{
|
|
mods = append(mods, dialect.Join[Q](typ, NoteAudios.Name().As(to.Alias())).On(
|
|
to.CreatorID.EQ(cols.ID),
|
|
))
|
|
}
|
|
|
|
return mods
|
|
},
|
|
},
|
|
DeletorNoteAudios: modAs[Q, noteAudioColumns]{
|
|
c: NoteAudios.Columns,
|
|
f: func(to noteAudioColumns) bob.Mod[Q] {
|
|
mods := make(mods.QueryMods[Q], 0, 1)
|
|
|
|
{
|
|
mods = append(mods, dialect.Join[Q](typ, NoteAudios.Name().As(to.Alias())).On(
|
|
to.DeletorID.EQ(cols.ID),
|
|
))
|
|
}
|
|
|
|
return mods
|
|
},
|
|
},
|
|
CreatorNoteImages: modAs[Q, noteImageColumns]{
|
|
c: NoteImages.Columns,
|
|
f: func(to noteImageColumns) bob.Mod[Q] {
|
|
mods := make(mods.QueryMods[Q], 0, 1)
|
|
|
|
{
|
|
mods = append(mods, dialect.Join[Q](typ, NoteImages.Name().As(to.Alias())).On(
|
|
to.CreatorID.EQ(cols.ID),
|
|
))
|
|
}
|
|
|
|
return mods
|
|
},
|
|
},
|
|
DeletorNoteImages: modAs[Q, noteImageColumns]{
|
|
c: NoteImages.Columns,
|
|
f: func(to noteImageColumns) bob.Mod[Q] {
|
|
mods := make(mods.QueryMods[Q], 0, 1)
|
|
|
|
{
|
|
mods = append(mods, dialect.Join[Q](typ, NoteImages.Name().As(to.Alias())).On(
|
|
to.DeletorID.EQ(cols.ID),
|
|
))
|
|
}
|
|
|
|
return mods
|
|
},
|
|
},
|
|
UserNotifications: modAs[Q, notificationColumns]{
|
|
c: Notifications.Columns,
|
|
f: func(to notificationColumns) bob.Mod[Q] {
|
|
mods := make(mods.QueryMods[Q], 0, 1)
|
|
|
|
{
|
|
mods = append(mods, dialect.Join[Q](typ, Notifications.Name().As(to.Alias())).On(
|
|
to.UserID.EQ(cols.ID),
|
|
))
|
|
}
|
|
|
|
return mods
|
|
},
|
|
},
|
|
UserOauthTokens: modAs[Q, oauthTokenColumns]{
|
|
c: OauthTokens.Columns,
|
|
f: func(to oauthTokenColumns) bob.Mod[Q] {
|
|
mods := make(mods.QueryMods[Q], 0, 1)
|
|
|
|
{
|
|
mods = append(mods, dialect.Join[Q](typ, OauthTokens.Name().As(to.Alias())).On(
|
|
to.UserID.EQ(cols.ID),
|
|
))
|
|
}
|
|
|
|
return mods
|
|
},
|
|
},
|
|
Organization: modAs[Q, organizationColumns]{
|
|
c: Organizations.Columns,
|
|
f: func(to organizationColumns) bob.Mod[Q] {
|
|
mods := make(mods.QueryMods[Q], 0, 1)
|
|
|
|
{
|
|
mods = append(mods, dialect.Join[Q](typ, Organizations.Name().As(to.Alias())).On(
|
|
to.ID.EQ(cols.OrganizationID),
|
|
))
|
|
}
|
|
|
|
return mods
|
|
},
|
|
},
|
|
}
|
|
}
|