This is an intermediate step between shifting from the old fs_* prefixed table names to an entire fieldseeker schema. At this point we have both, and we aren't doing much with the new schema but compiling.
1245 lines
35 KiB
Go
1245 lines
35 KiB
Go
// Code generated by BobGen psql v0.42.0. 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 {
|
|
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
|
|
}
|
|
|
|
// 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 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 "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 {
|
|
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 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]{
|
|
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...)
|
|
},
|
|
),
|
|
}
|
|
}
|
|
|
|
// 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
|
|
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,
|
|
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
|
|
},
|
|
},
|
|
}
|
|
}
|