diff --git a/storage-new/dbgen/access_tokens.gen.go b/storage-new/dbgen/access_tokens.gen.go new file mode 100644 index 0000000..2bdb0ba --- /dev/null +++ b/storage-new/dbgen/access_tokens.gen.go @@ -0,0 +1,668 @@ +// Code generated by gorm.io/gen. DO NOT EDIT. +// Code generated by gorm.io/gen. DO NOT EDIT. +// Code generated by gorm.io/gen. DO NOT EDIT. + +package dbgen + +import ( + "context" + + "git.mstar.dev/mstar/linstrom/storage-new/models" + "gorm.io/gorm" + "gorm.io/gorm/clause" + "gorm.io/gorm/schema" + + "gorm.io/gen" + "gorm.io/gen/field" + + "gorm.io/plugin/dbresolver" +) + +func newAccessToken(db *gorm.DB, opts ...gen.DOOption) accessToken { + _accessToken := accessToken{} + + _accessToken.accessTokenDo.UseDB(db, opts...) + _accessToken.accessTokenDo.UseModel(&models.AccessToken{}) + + tableName := _accessToken.accessTokenDo.TableName() + _accessToken.ALL = field.NewAsterisk(tableName) + _accessToken.UserId = field.NewString(tableName, "user_id") + _accessToken.Token = field.NewString(tableName, "token") + _accessToken.Name = field.NewString(tableName, "name") + _accessToken.ExpiresAt = field.NewTime(tableName, "expires_at") + _accessToken.User = accessTokenBelongsToUser{ + db: db.Session(&gorm.Session{}), + + RelationField: field.NewRelation("User", "models.User"), + Icon: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Icon", "models.MediaMetadata"), + }, + Background: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Background", "models.MediaMetadata"), + }, + Banner: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Banner", "models.MediaMetadata"), + }, + RemoteInfo: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.RemoteInfo", "models.UserRemoteLinks"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.RemoteInfo.User", "models.User"), + }, + }, + InfoFields: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.InfoFields", "models.UserInfoField"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.InfoFields.User", "models.User"), + }, + }, + BeingTypes: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.BeingTypes", "models.UserToBeing"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.BeingTypes.User", "models.User"), + }, + }, + Tags: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.Tags", "models.UserToTag"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Tags.User", "models.User"), + }, + }, + Relations: struct { + field.RelationField + User struct { + field.RelationField + } + TargetUser struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.Relations", "models.UserToUserRelation"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Relations.User", "models.User"), + }, + TargetUser: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Relations.TargetUser", "models.User"), + }, + }, + Pronouns: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.Pronouns", "models.UserToPronoun"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Pronouns.User", "models.User"), + }, + }, + Roles: struct { + field.RelationField + User struct { + field.RelationField + } + Role struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.Roles", "models.UserToRole"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Roles.User", "models.User"), + }, + Role: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Roles.Role", "models.Role"), + }, + }, + AuthMethods: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.AuthMethods", "models.UserAuthMethod"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.AuthMethods.User", "models.User"), + }, + }, + } + + _accessToken.fillFieldMap() + + return _accessToken +} + +type accessToken struct { + accessTokenDo + + ALL field.Asterisk + UserId field.String + Token field.String + Name field.String + ExpiresAt field.Time + User accessTokenBelongsToUser + + fieldMap map[string]field.Expr +} + +func (a accessToken) Table(newTableName string) *accessToken { + a.accessTokenDo.UseTable(newTableName) + return a.updateTableName(newTableName) +} + +func (a accessToken) As(alias string) *accessToken { + a.accessTokenDo.DO = *(a.accessTokenDo.As(alias).(*gen.DO)) + return a.updateTableName(alias) +} + +func (a *accessToken) updateTableName(table string) *accessToken { + a.ALL = field.NewAsterisk(table) + a.UserId = field.NewString(table, "user_id") + a.Token = field.NewString(table, "token") + a.Name = field.NewString(table, "name") + a.ExpiresAt = field.NewTime(table, "expires_at") + + a.fillFieldMap() + + return a +} + +func (a *accessToken) GetFieldByName(fieldName string) (field.OrderExpr, bool) { + _f, ok := a.fieldMap[fieldName] + if !ok || _f == nil { + return nil, false + } + _oe, ok := _f.(field.OrderExpr) + return _oe, ok +} + +func (a *accessToken) fillFieldMap() { + a.fieldMap = make(map[string]field.Expr, 5) + a.fieldMap["user_id"] = a.UserId + a.fieldMap["token"] = a.Token + a.fieldMap["name"] = a.Name + a.fieldMap["expires_at"] = a.ExpiresAt + +} + +func (a accessToken) clone(db *gorm.DB) accessToken { + a.accessTokenDo.ReplaceConnPool(db.Statement.ConnPool) + return a +} + +func (a accessToken) replaceDB(db *gorm.DB) accessToken { + a.accessTokenDo.ReplaceDB(db) + return a +} + +type accessTokenBelongsToUser struct { + db *gorm.DB + + field.RelationField + + Icon struct { + field.RelationField + } + Background struct { + field.RelationField + } + Banner struct { + field.RelationField + } + RemoteInfo struct { + field.RelationField + User struct { + field.RelationField + } + } + InfoFields struct { + field.RelationField + User struct { + field.RelationField + } + } + BeingTypes struct { + field.RelationField + User struct { + field.RelationField + } + } + Tags struct { + field.RelationField + User struct { + field.RelationField + } + } + Relations struct { + field.RelationField + User struct { + field.RelationField + } + TargetUser struct { + field.RelationField + } + } + Pronouns struct { + field.RelationField + User struct { + field.RelationField + } + } + Roles struct { + field.RelationField + User struct { + field.RelationField + } + Role struct { + field.RelationField + } + } + AuthMethods struct { + field.RelationField + User struct { + field.RelationField + } + } +} + +func (a accessTokenBelongsToUser) Where(conds ...field.Expr) *accessTokenBelongsToUser { + if len(conds) == 0 { + return &a + } + + exprs := make([]clause.Expression, 0, len(conds)) + for _, cond := range conds { + exprs = append(exprs, cond.BeCond().(clause.Expression)) + } + a.db = a.db.Clauses(clause.Where{Exprs: exprs}) + return &a +} + +func (a accessTokenBelongsToUser) WithContext(ctx context.Context) *accessTokenBelongsToUser { + a.db = a.db.WithContext(ctx) + return &a +} + +func (a accessTokenBelongsToUser) Session(session *gorm.Session) *accessTokenBelongsToUser { + a.db = a.db.Session(session) + return &a +} + +func (a accessTokenBelongsToUser) Model(m *models.AccessToken) *accessTokenBelongsToUserTx { + return &accessTokenBelongsToUserTx{a.db.Model(m).Association(a.Name())} +} + +type accessTokenBelongsToUserTx struct{ tx *gorm.Association } + +func (a accessTokenBelongsToUserTx) Find() (result *models.User, err error) { + return result, a.tx.Find(&result) +} + +func (a accessTokenBelongsToUserTx) Append(values ...*models.User) (err error) { + targetValues := make([]interface{}, len(values)) + for i, v := range values { + targetValues[i] = v + } + return a.tx.Append(targetValues...) +} + +func (a accessTokenBelongsToUserTx) Replace(values ...*models.User) (err error) { + targetValues := make([]interface{}, len(values)) + for i, v := range values { + targetValues[i] = v + } + return a.tx.Replace(targetValues...) +} + +func (a accessTokenBelongsToUserTx) Delete(values ...*models.User) (err error) { + targetValues := make([]interface{}, len(values)) + for i, v := range values { + targetValues[i] = v + } + return a.tx.Delete(targetValues...) +} + +func (a accessTokenBelongsToUserTx) Clear() error { + return a.tx.Clear() +} + +func (a accessTokenBelongsToUserTx) Count() int64 { + return a.tx.Count() +} + +type accessTokenDo struct{ gen.DO } + +type IAccessTokenDo interface { + gen.SubQuery + Debug() IAccessTokenDo + WithContext(ctx context.Context) IAccessTokenDo + WithResult(fc func(tx gen.Dao)) gen.ResultInfo + ReplaceDB(db *gorm.DB) + ReadDB() IAccessTokenDo + WriteDB() IAccessTokenDo + As(alias string) gen.Dao + Session(config *gorm.Session) IAccessTokenDo + Columns(cols ...field.Expr) gen.Columns + Clauses(conds ...clause.Expression) IAccessTokenDo + Not(conds ...gen.Condition) IAccessTokenDo + Or(conds ...gen.Condition) IAccessTokenDo + Select(conds ...field.Expr) IAccessTokenDo + Where(conds ...gen.Condition) IAccessTokenDo + Order(conds ...field.Expr) IAccessTokenDo + Distinct(cols ...field.Expr) IAccessTokenDo + Omit(cols ...field.Expr) IAccessTokenDo + Join(table schema.Tabler, on ...field.Expr) IAccessTokenDo + LeftJoin(table schema.Tabler, on ...field.Expr) IAccessTokenDo + RightJoin(table schema.Tabler, on ...field.Expr) IAccessTokenDo + Group(cols ...field.Expr) IAccessTokenDo + Having(conds ...gen.Condition) IAccessTokenDo + Limit(limit int) IAccessTokenDo + Offset(offset int) IAccessTokenDo + Count() (count int64, err error) + Scopes(funcs ...func(gen.Dao) gen.Dao) IAccessTokenDo + Unscoped() IAccessTokenDo + Create(values ...*models.AccessToken) error + CreateInBatches(values []*models.AccessToken, batchSize int) error + Save(values ...*models.AccessToken) error + First() (*models.AccessToken, error) + Take() (*models.AccessToken, error) + Last() (*models.AccessToken, error) + Find() ([]*models.AccessToken, error) + FindInBatch(batchSize int, fc func(tx gen.Dao, batch int) error) (results []*models.AccessToken, err error) + FindInBatches(result *[]*models.AccessToken, batchSize int, fc func(tx gen.Dao, batch int) error) error + Pluck(column field.Expr, dest interface{}) error + Delete(...*models.AccessToken) (info gen.ResultInfo, err error) + Update(column field.Expr, value interface{}) (info gen.ResultInfo, err error) + UpdateSimple(columns ...field.AssignExpr) (info gen.ResultInfo, err error) + Updates(value interface{}) (info gen.ResultInfo, err error) + UpdateColumn(column field.Expr, value interface{}) (info gen.ResultInfo, err error) + UpdateColumnSimple(columns ...field.AssignExpr) (info gen.ResultInfo, err error) + UpdateColumns(value interface{}) (info gen.ResultInfo, err error) + UpdateFrom(q gen.SubQuery) gen.Dao + Attrs(attrs ...field.AssignExpr) IAccessTokenDo + Assign(attrs ...field.AssignExpr) IAccessTokenDo + Joins(fields ...field.RelationField) IAccessTokenDo + Preload(fields ...field.RelationField) IAccessTokenDo + FirstOrInit() (*models.AccessToken, error) + FirstOrCreate() (*models.AccessToken, error) + FindByPage(offset int, limit int) (result []*models.AccessToken, count int64, err error) + ScanByPage(result interface{}, offset int, limit int) (count int64, err error) + Scan(result interface{}) (err error) + Returning(value interface{}, columns ...string) IAccessTokenDo + UnderlyingDB() *gorm.DB + schema.Tabler +} + +func (a accessTokenDo) Debug() IAccessTokenDo { + return a.withDO(a.DO.Debug()) +} + +func (a accessTokenDo) WithContext(ctx context.Context) IAccessTokenDo { + return a.withDO(a.DO.WithContext(ctx)) +} + +func (a accessTokenDo) ReadDB() IAccessTokenDo { + return a.Clauses(dbresolver.Read) +} + +func (a accessTokenDo) WriteDB() IAccessTokenDo { + return a.Clauses(dbresolver.Write) +} + +func (a accessTokenDo) Session(config *gorm.Session) IAccessTokenDo { + return a.withDO(a.DO.Session(config)) +} + +func (a accessTokenDo) Clauses(conds ...clause.Expression) IAccessTokenDo { + return a.withDO(a.DO.Clauses(conds...)) +} + +func (a accessTokenDo) Returning(value interface{}, columns ...string) IAccessTokenDo { + return a.withDO(a.DO.Returning(value, columns...)) +} + +func (a accessTokenDo) Not(conds ...gen.Condition) IAccessTokenDo { + return a.withDO(a.DO.Not(conds...)) +} + +func (a accessTokenDo) Or(conds ...gen.Condition) IAccessTokenDo { + return a.withDO(a.DO.Or(conds...)) +} + +func (a accessTokenDo) Select(conds ...field.Expr) IAccessTokenDo { + return a.withDO(a.DO.Select(conds...)) +} + +func (a accessTokenDo) Where(conds ...gen.Condition) IAccessTokenDo { + return a.withDO(a.DO.Where(conds...)) +} + +func (a accessTokenDo) Order(conds ...field.Expr) IAccessTokenDo { + return a.withDO(a.DO.Order(conds...)) +} + +func (a accessTokenDo) Distinct(cols ...field.Expr) IAccessTokenDo { + return a.withDO(a.DO.Distinct(cols...)) +} + +func (a accessTokenDo) Omit(cols ...field.Expr) IAccessTokenDo { + return a.withDO(a.DO.Omit(cols...)) +} + +func (a accessTokenDo) Join(table schema.Tabler, on ...field.Expr) IAccessTokenDo { + return a.withDO(a.DO.Join(table, on...)) +} + +func (a accessTokenDo) LeftJoin(table schema.Tabler, on ...field.Expr) IAccessTokenDo { + return a.withDO(a.DO.LeftJoin(table, on...)) +} + +func (a accessTokenDo) RightJoin(table schema.Tabler, on ...field.Expr) IAccessTokenDo { + return a.withDO(a.DO.RightJoin(table, on...)) +} + +func (a accessTokenDo) Group(cols ...field.Expr) IAccessTokenDo { + return a.withDO(a.DO.Group(cols...)) +} + +func (a accessTokenDo) Having(conds ...gen.Condition) IAccessTokenDo { + return a.withDO(a.DO.Having(conds...)) +} + +func (a accessTokenDo) Limit(limit int) IAccessTokenDo { + return a.withDO(a.DO.Limit(limit)) +} + +func (a accessTokenDo) Offset(offset int) IAccessTokenDo { + return a.withDO(a.DO.Offset(offset)) +} + +func (a accessTokenDo) Scopes(funcs ...func(gen.Dao) gen.Dao) IAccessTokenDo { + return a.withDO(a.DO.Scopes(funcs...)) +} + +func (a accessTokenDo) Unscoped() IAccessTokenDo { + return a.withDO(a.DO.Unscoped()) +} + +func (a accessTokenDo) Create(values ...*models.AccessToken) error { + if len(values) == 0 { + return nil + } + return a.DO.Create(values) +} + +func (a accessTokenDo) CreateInBatches(values []*models.AccessToken, batchSize int) error { + return a.DO.CreateInBatches(values, batchSize) +} + +// Save : !!! underlying implementation is different with GORM +// The method is equivalent to executing the statement: db.Clauses(clause.OnConflict{UpdateAll: true}).Create(values) +func (a accessTokenDo) Save(values ...*models.AccessToken) error { + if len(values) == 0 { + return nil + } + return a.DO.Save(values) +} + +func (a accessTokenDo) First() (*models.AccessToken, error) { + if result, err := a.DO.First(); err != nil { + return nil, err + } else { + return result.(*models.AccessToken), nil + } +} + +func (a accessTokenDo) Take() (*models.AccessToken, error) { + if result, err := a.DO.Take(); err != nil { + return nil, err + } else { + return result.(*models.AccessToken), nil + } +} + +func (a accessTokenDo) Last() (*models.AccessToken, error) { + if result, err := a.DO.Last(); err != nil { + return nil, err + } else { + return result.(*models.AccessToken), nil + } +} + +func (a accessTokenDo) Find() ([]*models.AccessToken, error) { + result, err := a.DO.Find() + return result.([]*models.AccessToken), err +} + +func (a accessTokenDo) FindInBatch(batchSize int, fc func(tx gen.Dao, batch int) error) (results []*models.AccessToken, err error) { + buf := make([]*models.AccessToken, 0, batchSize) + err = a.DO.FindInBatches(&buf, batchSize, func(tx gen.Dao, batch int) error { + defer func() { results = append(results, buf...) }() + return fc(tx, batch) + }) + return results, err +} + +func (a accessTokenDo) FindInBatches(result *[]*models.AccessToken, batchSize int, fc func(tx gen.Dao, batch int) error) error { + return a.DO.FindInBatches(result, batchSize, fc) +} + +func (a accessTokenDo) Attrs(attrs ...field.AssignExpr) IAccessTokenDo { + return a.withDO(a.DO.Attrs(attrs...)) +} + +func (a accessTokenDo) Assign(attrs ...field.AssignExpr) IAccessTokenDo { + return a.withDO(a.DO.Assign(attrs...)) +} + +func (a accessTokenDo) Joins(fields ...field.RelationField) IAccessTokenDo { + for _, _f := range fields { + a = *a.withDO(a.DO.Joins(_f)) + } + return &a +} + +func (a accessTokenDo) Preload(fields ...field.RelationField) IAccessTokenDo { + for _, _f := range fields { + a = *a.withDO(a.DO.Preload(_f)) + } + return &a +} + +func (a accessTokenDo) FirstOrInit() (*models.AccessToken, error) { + if result, err := a.DO.FirstOrInit(); err != nil { + return nil, err + } else { + return result.(*models.AccessToken), nil + } +} + +func (a accessTokenDo) FirstOrCreate() (*models.AccessToken, error) { + if result, err := a.DO.FirstOrCreate(); err != nil { + return nil, err + } else { + return result.(*models.AccessToken), nil + } +} + +func (a accessTokenDo) FindByPage(offset int, limit int) (result []*models.AccessToken, count int64, err error) { + result, err = a.Offset(offset).Limit(limit).Find() + if err != nil { + return + } + + if size := len(result); 0 < limit && 0 < size && size < limit { + count = int64(size + offset) + return + } + + count, err = a.Offset(-1).Limit(-1).Count() + return +} + +func (a accessTokenDo) ScanByPage(result interface{}, offset int, limit int) (count int64, err error) { + count, err = a.Count() + if err != nil { + return + } + + err = a.Offset(offset).Limit(limit).Scan(result) + return +} + +func (a accessTokenDo) Scan(result interface{}) (err error) { + return a.DO.Scan(result) +} + +func (a accessTokenDo) Delete(models ...*models.AccessToken) (result gen.ResultInfo, err error) { + return a.DO.Delete(models) +} + +func (a *accessTokenDo) withDO(do gen.Dao) *accessTokenDo { + a.DO = *do.(*gen.DO) + return a +} diff --git a/storage-new/dbgen/emotes.gen.go b/storage-new/dbgen/emotes.gen.go index 4a3fe5b..d7b6d10 100644 --- a/storage-new/dbgen/emotes.gen.go +++ b/storage-new/dbgen/emotes.gen.go @@ -43,6 +43,11 @@ func newEmote(db *gorm.DB, opts ...gen.DOOption) emote { db: db.Session(&gorm.Session{}), RelationField: field.NewRelation("Server", "models.RemoteServer"), + Icon: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Server.Icon", "models.MediaMetadata"), + }, } _emote.fillFieldMap() @@ -199,6 +204,10 @@ type emoteBelongsToServer struct { db *gorm.DB field.RelationField + + Icon struct { + field.RelationField + } } func (a emoteBelongsToServer) Where(conds ...field.Expr) *emoteBelongsToServer { diff --git a/storage-new/dbgen/gen.go b/storage-new/dbgen/gen.go index d220653..ee91b78 100644 --- a/storage-new/dbgen/gen.go +++ b/storage-new/dbgen/gen.go @@ -17,7 +17,9 @@ import ( var ( Q = new(Query) + AccessToken *accessToken Emote *emote + LoginProcessToken *loginProcessToken MediaMetadata *mediaMetadata Note *note NoteTag *noteTag @@ -32,6 +34,7 @@ var ( UserInfoField *userInfoField UserRemoteLinks *userRemoteLinks UserToBeing *userToBeing + UserToPronoun *userToPronoun UserToRole *userToRole UserToTag *userToTag UserToUserRelation *userToUserRelation @@ -39,7 +42,9 @@ var ( func SetDefault(db *gorm.DB, opts ...gen.DOOption) { *Q = *Use(db, opts...) + AccessToken = &Q.AccessToken Emote = &Q.Emote + LoginProcessToken = &Q.LoginProcessToken MediaMetadata = &Q.MediaMetadata Note = &Q.Note NoteTag = &Q.NoteTag @@ -54,6 +59,7 @@ func SetDefault(db *gorm.DB, opts ...gen.DOOption) { UserInfoField = &Q.UserInfoField UserRemoteLinks = &Q.UserRemoteLinks UserToBeing = &Q.UserToBeing + UserToPronoun = &Q.UserToPronoun UserToRole = &Q.UserToRole UserToTag = &Q.UserToTag UserToUserRelation = &Q.UserToUserRelation @@ -62,7 +68,9 @@ func SetDefault(db *gorm.DB, opts ...gen.DOOption) { func Use(db *gorm.DB, opts ...gen.DOOption) *Query { return &Query{ db: db, + AccessToken: newAccessToken(db, opts...), Emote: newEmote(db, opts...), + LoginProcessToken: newLoginProcessToken(db, opts...), MediaMetadata: newMediaMetadata(db, opts...), Note: newNote(db, opts...), NoteTag: newNoteTag(db, opts...), @@ -77,6 +85,7 @@ func Use(db *gorm.DB, opts ...gen.DOOption) *Query { UserInfoField: newUserInfoField(db, opts...), UserRemoteLinks: newUserRemoteLinks(db, opts...), UserToBeing: newUserToBeing(db, opts...), + UserToPronoun: newUserToPronoun(db, opts...), UserToRole: newUserToRole(db, opts...), UserToTag: newUserToTag(db, opts...), UserToUserRelation: newUserToUserRelation(db, opts...), @@ -86,7 +95,9 @@ func Use(db *gorm.DB, opts ...gen.DOOption) *Query { type Query struct { db *gorm.DB + AccessToken accessToken Emote emote + LoginProcessToken loginProcessToken MediaMetadata mediaMetadata Note note NoteTag noteTag @@ -101,6 +112,7 @@ type Query struct { UserInfoField userInfoField UserRemoteLinks userRemoteLinks UserToBeing userToBeing + UserToPronoun userToPronoun UserToRole userToRole UserToTag userToTag UserToUserRelation userToUserRelation @@ -111,7 +123,9 @@ func (q *Query) Available() bool { return q.db != nil } func (q *Query) clone(db *gorm.DB) *Query { return &Query{ db: db, + AccessToken: q.AccessToken.clone(db), Emote: q.Emote.clone(db), + LoginProcessToken: q.LoginProcessToken.clone(db), MediaMetadata: q.MediaMetadata.clone(db), Note: q.Note.clone(db), NoteTag: q.NoteTag.clone(db), @@ -126,6 +140,7 @@ func (q *Query) clone(db *gorm.DB) *Query { UserInfoField: q.UserInfoField.clone(db), UserRemoteLinks: q.UserRemoteLinks.clone(db), UserToBeing: q.UserToBeing.clone(db), + UserToPronoun: q.UserToPronoun.clone(db), UserToRole: q.UserToRole.clone(db), UserToTag: q.UserToTag.clone(db), UserToUserRelation: q.UserToUserRelation.clone(db), @@ -143,7 +158,9 @@ func (q *Query) WriteDB() *Query { func (q *Query) ReplaceDB(db *gorm.DB) *Query { return &Query{ db: db, + AccessToken: q.AccessToken.replaceDB(db), Emote: q.Emote.replaceDB(db), + LoginProcessToken: q.LoginProcessToken.replaceDB(db), MediaMetadata: q.MediaMetadata.replaceDB(db), Note: q.Note.replaceDB(db), NoteTag: q.NoteTag.replaceDB(db), @@ -158,6 +175,7 @@ func (q *Query) ReplaceDB(db *gorm.DB) *Query { UserInfoField: q.UserInfoField.replaceDB(db), UserRemoteLinks: q.UserRemoteLinks.replaceDB(db), UserToBeing: q.UserToBeing.replaceDB(db), + UserToPronoun: q.UserToPronoun.replaceDB(db), UserToRole: q.UserToRole.replaceDB(db), UserToTag: q.UserToTag.replaceDB(db), UserToUserRelation: q.UserToUserRelation.replaceDB(db), @@ -165,7 +183,9 @@ func (q *Query) ReplaceDB(db *gorm.DB) *Query { } type queryCtx struct { + AccessToken IAccessTokenDo Emote IEmoteDo + LoginProcessToken ILoginProcessTokenDo MediaMetadata IMediaMetadataDo Note INoteDo NoteTag INoteTagDo @@ -180,6 +200,7 @@ type queryCtx struct { UserInfoField IUserInfoFieldDo UserRemoteLinks IUserRemoteLinksDo UserToBeing IUserToBeingDo + UserToPronoun IUserToPronounDo UserToRole IUserToRoleDo UserToTag IUserToTagDo UserToUserRelation IUserToUserRelationDo @@ -187,7 +208,9 @@ type queryCtx struct { func (q *Query) WithContext(ctx context.Context) *queryCtx { return &queryCtx{ + AccessToken: q.AccessToken.WithContext(ctx), Emote: q.Emote.WithContext(ctx), + LoginProcessToken: q.LoginProcessToken.WithContext(ctx), MediaMetadata: q.MediaMetadata.WithContext(ctx), Note: q.Note.WithContext(ctx), NoteTag: q.NoteTag.WithContext(ctx), @@ -202,6 +225,7 @@ func (q *Query) WithContext(ctx context.Context) *queryCtx { UserInfoField: q.UserInfoField.WithContext(ctx), UserRemoteLinks: q.UserRemoteLinks.WithContext(ctx), UserToBeing: q.UserToBeing.WithContext(ctx), + UserToPronoun: q.UserToPronoun.WithContext(ctx), UserToRole: q.UserToRole.WithContext(ctx), UserToTag: q.UserToTag.WithContext(ctx), UserToUserRelation: q.UserToUserRelation.WithContext(ctx), diff --git a/storage-new/dbgen/login_process_tokens.gen.go b/storage-new/dbgen/login_process_tokens.gen.go new file mode 100644 index 0000000..0aacbac --- /dev/null +++ b/storage-new/dbgen/login_process_tokens.gen.go @@ -0,0 +1,660 @@ +// Code generated by gorm.io/gen. DO NOT EDIT. +// Code generated by gorm.io/gen. DO NOT EDIT. +// Code generated by gorm.io/gen. DO NOT EDIT. + +package dbgen + +import ( + "context" + + "git.mstar.dev/mstar/linstrom/storage-new/models" + "gorm.io/gorm" + "gorm.io/gorm/clause" + "gorm.io/gorm/schema" + + "gorm.io/gen" + "gorm.io/gen/field" + + "gorm.io/plugin/dbresolver" +) + +func newLoginProcessToken(db *gorm.DB, opts ...gen.DOOption) loginProcessToken { + _loginProcessToken := loginProcessToken{} + + _loginProcessToken.loginProcessTokenDo.UseDB(db, opts...) + _loginProcessToken.loginProcessTokenDo.UseModel(&models.LoginProcessToken{}) + + tableName := _loginProcessToken.loginProcessTokenDo.TableName() + _loginProcessToken.ALL = field.NewAsterisk(tableName) + _loginProcessToken.UserId = field.NewString(tableName, "user_id") + _loginProcessToken.Token = field.NewString(tableName, "token") + _loginProcessToken.User = loginProcessTokenBelongsToUser{ + db: db.Session(&gorm.Session{}), + + RelationField: field.NewRelation("User", "models.User"), + Icon: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Icon", "models.MediaMetadata"), + }, + Background: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Background", "models.MediaMetadata"), + }, + Banner: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Banner", "models.MediaMetadata"), + }, + RemoteInfo: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.RemoteInfo", "models.UserRemoteLinks"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.RemoteInfo.User", "models.User"), + }, + }, + InfoFields: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.InfoFields", "models.UserInfoField"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.InfoFields.User", "models.User"), + }, + }, + BeingTypes: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.BeingTypes", "models.UserToBeing"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.BeingTypes.User", "models.User"), + }, + }, + Tags: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.Tags", "models.UserToTag"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Tags.User", "models.User"), + }, + }, + Relations: struct { + field.RelationField + User struct { + field.RelationField + } + TargetUser struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.Relations", "models.UserToUserRelation"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Relations.User", "models.User"), + }, + TargetUser: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Relations.TargetUser", "models.User"), + }, + }, + Pronouns: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.Pronouns", "models.UserToPronoun"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Pronouns.User", "models.User"), + }, + }, + Roles: struct { + field.RelationField + User struct { + field.RelationField + } + Role struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.Roles", "models.UserToRole"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Roles.User", "models.User"), + }, + Role: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Roles.Role", "models.Role"), + }, + }, + AuthMethods: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.AuthMethods", "models.UserAuthMethod"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.AuthMethods.User", "models.User"), + }, + }, + } + + _loginProcessToken.fillFieldMap() + + return _loginProcessToken +} + +type loginProcessToken struct { + loginProcessTokenDo + + ALL field.Asterisk + UserId field.String + Token field.String + User loginProcessTokenBelongsToUser + + fieldMap map[string]field.Expr +} + +func (l loginProcessToken) Table(newTableName string) *loginProcessToken { + l.loginProcessTokenDo.UseTable(newTableName) + return l.updateTableName(newTableName) +} + +func (l loginProcessToken) As(alias string) *loginProcessToken { + l.loginProcessTokenDo.DO = *(l.loginProcessTokenDo.As(alias).(*gen.DO)) + return l.updateTableName(alias) +} + +func (l *loginProcessToken) updateTableName(table string) *loginProcessToken { + l.ALL = field.NewAsterisk(table) + l.UserId = field.NewString(table, "user_id") + l.Token = field.NewString(table, "token") + + l.fillFieldMap() + + return l +} + +func (l *loginProcessToken) GetFieldByName(fieldName string) (field.OrderExpr, bool) { + _f, ok := l.fieldMap[fieldName] + if !ok || _f == nil { + return nil, false + } + _oe, ok := _f.(field.OrderExpr) + return _oe, ok +} + +func (l *loginProcessToken) fillFieldMap() { + l.fieldMap = make(map[string]field.Expr, 3) + l.fieldMap["user_id"] = l.UserId + l.fieldMap["token"] = l.Token + +} + +func (l loginProcessToken) clone(db *gorm.DB) loginProcessToken { + l.loginProcessTokenDo.ReplaceConnPool(db.Statement.ConnPool) + return l +} + +func (l loginProcessToken) replaceDB(db *gorm.DB) loginProcessToken { + l.loginProcessTokenDo.ReplaceDB(db) + return l +} + +type loginProcessTokenBelongsToUser struct { + db *gorm.DB + + field.RelationField + + Icon struct { + field.RelationField + } + Background struct { + field.RelationField + } + Banner struct { + field.RelationField + } + RemoteInfo struct { + field.RelationField + User struct { + field.RelationField + } + } + InfoFields struct { + field.RelationField + User struct { + field.RelationField + } + } + BeingTypes struct { + field.RelationField + User struct { + field.RelationField + } + } + Tags struct { + field.RelationField + User struct { + field.RelationField + } + } + Relations struct { + field.RelationField + User struct { + field.RelationField + } + TargetUser struct { + field.RelationField + } + } + Pronouns struct { + field.RelationField + User struct { + field.RelationField + } + } + Roles struct { + field.RelationField + User struct { + field.RelationField + } + Role struct { + field.RelationField + } + } + AuthMethods struct { + field.RelationField + User struct { + field.RelationField + } + } +} + +func (a loginProcessTokenBelongsToUser) Where(conds ...field.Expr) *loginProcessTokenBelongsToUser { + if len(conds) == 0 { + return &a + } + + exprs := make([]clause.Expression, 0, len(conds)) + for _, cond := range conds { + exprs = append(exprs, cond.BeCond().(clause.Expression)) + } + a.db = a.db.Clauses(clause.Where{Exprs: exprs}) + return &a +} + +func (a loginProcessTokenBelongsToUser) WithContext(ctx context.Context) *loginProcessTokenBelongsToUser { + a.db = a.db.WithContext(ctx) + return &a +} + +func (a loginProcessTokenBelongsToUser) Session(session *gorm.Session) *loginProcessTokenBelongsToUser { + a.db = a.db.Session(session) + return &a +} + +func (a loginProcessTokenBelongsToUser) Model(m *models.LoginProcessToken) *loginProcessTokenBelongsToUserTx { + return &loginProcessTokenBelongsToUserTx{a.db.Model(m).Association(a.Name())} +} + +type loginProcessTokenBelongsToUserTx struct{ tx *gorm.Association } + +func (a loginProcessTokenBelongsToUserTx) Find() (result *models.User, err error) { + return result, a.tx.Find(&result) +} + +func (a loginProcessTokenBelongsToUserTx) Append(values ...*models.User) (err error) { + targetValues := make([]interface{}, len(values)) + for i, v := range values { + targetValues[i] = v + } + return a.tx.Append(targetValues...) +} + +func (a loginProcessTokenBelongsToUserTx) Replace(values ...*models.User) (err error) { + targetValues := make([]interface{}, len(values)) + for i, v := range values { + targetValues[i] = v + } + return a.tx.Replace(targetValues...) +} + +func (a loginProcessTokenBelongsToUserTx) Delete(values ...*models.User) (err error) { + targetValues := make([]interface{}, len(values)) + for i, v := range values { + targetValues[i] = v + } + return a.tx.Delete(targetValues...) +} + +func (a loginProcessTokenBelongsToUserTx) Clear() error { + return a.tx.Clear() +} + +func (a loginProcessTokenBelongsToUserTx) Count() int64 { + return a.tx.Count() +} + +type loginProcessTokenDo struct{ gen.DO } + +type ILoginProcessTokenDo interface { + gen.SubQuery + Debug() ILoginProcessTokenDo + WithContext(ctx context.Context) ILoginProcessTokenDo + WithResult(fc func(tx gen.Dao)) gen.ResultInfo + ReplaceDB(db *gorm.DB) + ReadDB() ILoginProcessTokenDo + WriteDB() ILoginProcessTokenDo + As(alias string) gen.Dao + Session(config *gorm.Session) ILoginProcessTokenDo + Columns(cols ...field.Expr) gen.Columns + Clauses(conds ...clause.Expression) ILoginProcessTokenDo + Not(conds ...gen.Condition) ILoginProcessTokenDo + Or(conds ...gen.Condition) ILoginProcessTokenDo + Select(conds ...field.Expr) ILoginProcessTokenDo + Where(conds ...gen.Condition) ILoginProcessTokenDo + Order(conds ...field.Expr) ILoginProcessTokenDo + Distinct(cols ...field.Expr) ILoginProcessTokenDo + Omit(cols ...field.Expr) ILoginProcessTokenDo + Join(table schema.Tabler, on ...field.Expr) ILoginProcessTokenDo + LeftJoin(table schema.Tabler, on ...field.Expr) ILoginProcessTokenDo + RightJoin(table schema.Tabler, on ...field.Expr) ILoginProcessTokenDo + Group(cols ...field.Expr) ILoginProcessTokenDo + Having(conds ...gen.Condition) ILoginProcessTokenDo + Limit(limit int) ILoginProcessTokenDo + Offset(offset int) ILoginProcessTokenDo + Count() (count int64, err error) + Scopes(funcs ...func(gen.Dao) gen.Dao) ILoginProcessTokenDo + Unscoped() ILoginProcessTokenDo + Create(values ...*models.LoginProcessToken) error + CreateInBatches(values []*models.LoginProcessToken, batchSize int) error + Save(values ...*models.LoginProcessToken) error + First() (*models.LoginProcessToken, error) + Take() (*models.LoginProcessToken, error) + Last() (*models.LoginProcessToken, error) + Find() ([]*models.LoginProcessToken, error) + FindInBatch(batchSize int, fc func(tx gen.Dao, batch int) error) (results []*models.LoginProcessToken, err error) + FindInBatches(result *[]*models.LoginProcessToken, batchSize int, fc func(tx gen.Dao, batch int) error) error + Pluck(column field.Expr, dest interface{}) error + Delete(...*models.LoginProcessToken) (info gen.ResultInfo, err error) + Update(column field.Expr, value interface{}) (info gen.ResultInfo, err error) + UpdateSimple(columns ...field.AssignExpr) (info gen.ResultInfo, err error) + Updates(value interface{}) (info gen.ResultInfo, err error) + UpdateColumn(column field.Expr, value interface{}) (info gen.ResultInfo, err error) + UpdateColumnSimple(columns ...field.AssignExpr) (info gen.ResultInfo, err error) + UpdateColumns(value interface{}) (info gen.ResultInfo, err error) + UpdateFrom(q gen.SubQuery) gen.Dao + Attrs(attrs ...field.AssignExpr) ILoginProcessTokenDo + Assign(attrs ...field.AssignExpr) ILoginProcessTokenDo + Joins(fields ...field.RelationField) ILoginProcessTokenDo + Preload(fields ...field.RelationField) ILoginProcessTokenDo + FirstOrInit() (*models.LoginProcessToken, error) + FirstOrCreate() (*models.LoginProcessToken, error) + FindByPage(offset int, limit int) (result []*models.LoginProcessToken, count int64, err error) + ScanByPage(result interface{}, offset int, limit int) (count int64, err error) + Scan(result interface{}) (err error) + Returning(value interface{}, columns ...string) ILoginProcessTokenDo + UnderlyingDB() *gorm.DB + schema.Tabler +} + +func (l loginProcessTokenDo) Debug() ILoginProcessTokenDo { + return l.withDO(l.DO.Debug()) +} + +func (l loginProcessTokenDo) WithContext(ctx context.Context) ILoginProcessTokenDo { + return l.withDO(l.DO.WithContext(ctx)) +} + +func (l loginProcessTokenDo) ReadDB() ILoginProcessTokenDo { + return l.Clauses(dbresolver.Read) +} + +func (l loginProcessTokenDo) WriteDB() ILoginProcessTokenDo { + return l.Clauses(dbresolver.Write) +} + +func (l loginProcessTokenDo) Session(config *gorm.Session) ILoginProcessTokenDo { + return l.withDO(l.DO.Session(config)) +} + +func (l loginProcessTokenDo) Clauses(conds ...clause.Expression) ILoginProcessTokenDo { + return l.withDO(l.DO.Clauses(conds...)) +} + +func (l loginProcessTokenDo) Returning(value interface{}, columns ...string) ILoginProcessTokenDo { + return l.withDO(l.DO.Returning(value, columns...)) +} + +func (l loginProcessTokenDo) Not(conds ...gen.Condition) ILoginProcessTokenDo { + return l.withDO(l.DO.Not(conds...)) +} + +func (l loginProcessTokenDo) Or(conds ...gen.Condition) ILoginProcessTokenDo { + return l.withDO(l.DO.Or(conds...)) +} + +func (l loginProcessTokenDo) Select(conds ...field.Expr) ILoginProcessTokenDo { + return l.withDO(l.DO.Select(conds...)) +} + +func (l loginProcessTokenDo) Where(conds ...gen.Condition) ILoginProcessTokenDo { + return l.withDO(l.DO.Where(conds...)) +} + +func (l loginProcessTokenDo) Order(conds ...field.Expr) ILoginProcessTokenDo { + return l.withDO(l.DO.Order(conds...)) +} + +func (l loginProcessTokenDo) Distinct(cols ...field.Expr) ILoginProcessTokenDo { + return l.withDO(l.DO.Distinct(cols...)) +} + +func (l loginProcessTokenDo) Omit(cols ...field.Expr) ILoginProcessTokenDo { + return l.withDO(l.DO.Omit(cols...)) +} + +func (l loginProcessTokenDo) Join(table schema.Tabler, on ...field.Expr) ILoginProcessTokenDo { + return l.withDO(l.DO.Join(table, on...)) +} + +func (l loginProcessTokenDo) LeftJoin(table schema.Tabler, on ...field.Expr) ILoginProcessTokenDo { + return l.withDO(l.DO.LeftJoin(table, on...)) +} + +func (l loginProcessTokenDo) RightJoin(table schema.Tabler, on ...field.Expr) ILoginProcessTokenDo { + return l.withDO(l.DO.RightJoin(table, on...)) +} + +func (l loginProcessTokenDo) Group(cols ...field.Expr) ILoginProcessTokenDo { + return l.withDO(l.DO.Group(cols...)) +} + +func (l loginProcessTokenDo) Having(conds ...gen.Condition) ILoginProcessTokenDo { + return l.withDO(l.DO.Having(conds...)) +} + +func (l loginProcessTokenDo) Limit(limit int) ILoginProcessTokenDo { + return l.withDO(l.DO.Limit(limit)) +} + +func (l loginProcessTokenDo) Offset(offset int) ILoginProcessTokenDo { + return l.withDO(l.DO.Offset(offset)) +} + +func (l loginProcessTokenDo) Scopes(funcs ...func(gen.Dao) gen.Dao) ILoginProcessTokenDo { + return l.withDO(l.DO.Scopes(funcs...)) +} + +func (l loginProcessTokenDo) Unscoped() ILoginProcessTokenDo { + return l.withDO(l.DO.Unscoped()) +} + +func (l loginProcessTokenDo) Create(values ...*models.LoginProcessToken) error { + if len(values) == 0 { + return nil + } + return l.DO.Create(values) +} + +func (l loginProcessTokenDo) CreateInBatches(values []*models.LoginProcessToken, batchSize int) error { + return l.DO.CreateInBatches(values, batchSize) +} + +// Save : !!! underlying implementation is different with GORM +// The method is equivalent to executing the statement: db.Clauses(clause.OnConflict{UpdateAll: true}).Create(values) +func (l loginProcessTokenDo) Save(values ...*models.LoginProcessToken) error { + if len(values) == 0 { + return nil + } + return l.DO.Save(values) +} + +func (l loginProcessTokenDo) First() (*models.LoginProcessToken, error) { + if result, err := l.DO.First(); err != nil { + return nil, err + } else { + return result.(*models.LoginProcessToken), nil + } +} + +func (l loginProcessTokenDo) Take() (*models.LoginProcessToken, error) { + if result, err := l.DO.Take(); err != nil { + return nil, err + } else { + return result.(*models.LoginProcessToken), nil + } +} + +func (l loginProcessTokenDo) Last() (*models.LoginProcessToken, error) { + if result, err := l.DO.Last(); err != nil { + return nil, err + } else { + return result.(*models.LoginProcessToken), nil + } +} + +func (l loginProcessTokenDo) Find() ([]*models.LoginProcessToken, error) { + result, err := l.DO.Find() + return result.([]*models.LoginProcessToken), err +} + +func (l loginProcessTokenDo) FindInBatch(batchSize int, fc func(tx gen.Dao, batch int) error) (results []*models.LoginProcessToken, err error) { + buf := make([]*models.LoginProcessToken, 0, batchSize) + err = l.DO.FindInBatches(&buf, batchSize, func(tx gen.Dao, batch int) error { + defer func() { results = append(results, buf...) }() + return fc(tx, batch) + }) + return results, err +} + +func (l loginProcessTokenDo) FindInBatches(result *[]*models.LoginProcessToken, batchSize int, fc func(tx gen.Dao, batch int) error) error { + return l.DO.FindInBatches(result, batchSize, fc) +} + +func (l loginProcessTokenDo) Attrs(attrs ...field.AssignExpr) ILoginProcessTokenDo { + return l.withDO(l.DO.Attrs(attrs...)) +} + +func (l loginProcessTokenDo) Assign(attrs ...field.AssignExpr) ILoginProcessTokenDo { + return l.withDO(l.DO.Assign(attrs...)) +} + +func (l loginProcessTokenDo) Joins(fields ...field.RelationField) ILoginProcessTokenDo { + for _, _f := range fields { + l = *l.withDO(l.DO.Joins(_f)) + } + return &l +} + +func (l loginProcessTokenDo) Preload(fields ...field.RelationField) ILoginProcessTokenDo { + for _, _f := range fields { + l = *l.withDO(l.DO.Preload(_f)) + } + return &l +} + +func (l loginProcessTokenDo) FirstOrInit() (*models.LoginProcessToken, error) { + if result, err := l.DO.FirstOrInit(); err != nil { + return nil, err + } else { + return result.(*models.LoginProcessToken), nil + } +} + +func (l loginProcessTokenDo) FirstOrCreate() (*models.LoginProcessToken, error) { + if result, err := l.DO.FirstOrCreate(); err != nil { + return nil, err + } else { + return result.(*models.LoginProcessToken), nil + } +} + +func (l loginProcessTokenDo) FindByPage(offset int, limit int) (result []*models.LoginProcessToken, count int64, err error) { + result, err = l.Offset(offset).Limit(limit).Find() + if err != nil { + return + } + + if size := len(result); 0 < limit && 0 < size && size < limit { + count = int64(size + offset) + return + } + + count, err = l.Offset(-1).Limit(-1).Count() + return +} + +func (l loginProcessTokenDo) ScanByPage(result interface{}, offset int, limit int) (count int64, err error) { + count, err = l.Count() + if err != nil { + return + } + + err = l.Offset(offset).Limit(limit).Scan(result) + return +} + +func (l loginProcessTokenDo) Scan(result interface{}) (err error) { + return l.DO.Scan(result) +} + +func (l loginProcessTokenDo) Delete(models ...*models.LoginProcessToken) (result gen.ResultInfo, err error) { + return l.DO.Delete(models) +} + +func (l *loginProcessTokenDo) withDO(do gen.Dao) *loginProcessTokenDo { + l.DO = *do.(*gen.DO) + return l +} diff --git a/storage-new/dbgen/note_tags.gen.go b/storage-new/dbgen/note_tags.gen.go index 71b22a5..30b4e3a 100644 --- a/storage-new/dbgen/note_tags.gen.go +++ b/storage-new/dbgen/note_tags.gen.go @@ -32,6 +32,209 @@ func newNoteTag(db *gorm.DB, opts ...gen.DOOption) noteTag { db: db.Session(&gorm.Session{}), RelationField: field.NewRelation("Note", "models.Note"), + Creator: struct { + field.RelationField + Icon struct { + field.RelationField + } + Background struct { + field.RelationField + } + Banner struct { + field.RelationField + } + RemoteInfo struct { + field.RelationField + User struct { + field.RelationField + } + } + InfoFields struct { + field.RelationField + User struct { + field.RelationField + } + } + BeingTypes struct { + field.RelationField + User struct { + field.RelationField + } + } + Tags struct { + field.RelationField + User struct { + field.RelationField + } + } + Relations struct { + field.RelationField + User struct { + field.RelationField + } + TargetUser struct { + field.RelationField + } + } + Pronouns struct { + field.RelationField + User struct { + field.RelationField + } + } + Roles struct { + field.RelationField + User struct { + field.RelationField + } + Role struct { + field.RelationField + } + } + AuthMethods struct { + field.RelationField + User struct { + field.RelationField + } + } + }{ + RelationField: field.NewRelation("Note.Creator", "models.User"), + Icon: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.Creator.Icon", "models.MediaMetadata"), + }, + Background: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.Creator.Background", "models.MediaMetadata"), + }, + Banner: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.Creator.Banner", "models.MediaMetadata"), + }, + RemoteInfo: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("Note.Creator.RemoteInfo", "models.UserRemoteLinks"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.Creator.RemoteInfo.User", "models.User"), + }, + }, + InfoFields: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("Note.Creator.InfoFields", "models.UserInfoField"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.Creator.InfoFields.User", "models.User"), + }, + }, + BeingTypes: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("Note.Creator.BeingTypes", "models.UserToBeing"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.Creator.BeingTypes.User", "models.User"), + }, + }, + Tags: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("Note.Creator.Tags", "models.UserToTag"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.Creator.Tags.User", "models.User"), + }, + }, + Relations: struct { + field.RelationField + User struct { + field.RelationField + } + TargetUser struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("Note.Creator.Relations", "models.UserToUserRelation"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.Creator.Relations.User", "models.User"), + }, + TargetUser: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.Creator.Relations.TargetUser", "models.User"), + }, + }, + Pronouns: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("Note.Creator.Pronouns", "models.UserToPronoun"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.Creator.Pronouns.User", "models.User"), + }, + }, + Roles: struct { + field.RelationField + User struct { + field.RelationField + } + Role struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("Note.Creator.Roles", "models.UserToRole"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.Creator.Roles.User", "models.User"), + }, + Role: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.Creator.Roles.Role", "models.Role"), + }, + }, + AuthMethods: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("Note.Creator.AuthMethods", "models.UserAuthMethod"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.Creator.AuthMethods.User", "models.User"), + }, + }, + }, AttachmentRelations: struct { field.RelationField Note struct { @@ -65,6 +268,9 @@ func newNoteTag(db *gorm.DB, opts ...gen.DOOption) noteTag { } Server struct { field.RelationField + Icon struct { + field.RelationField + } } } }{ @@ -81,6 +287,9 @@ func newNoteTag(db *gorm.DB, opts ...gen.DOOption) noteTag { } Server struct { field.RelationField + Icon struct { + field.RelationField + } } }{ RelationField: field.NewRelation("Note.EmoteRelations.Emote", "models.Emote"), @@ -91,8 +300,16 @@ func newNoteTag(db *gorm.DB, opts ...gen.DOOption) noteTag { }, Server: struct { field.RelationField + Icon struct { + field.RelationField + } }{ RelationField: field.NewRelation("Note.EmoteRelations.Emote.Server", "models.RemoteServer"), + Icon: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.EmoteRelations.Emote.Server.Icon", "models.MediaMetadata"), + }, }, }, }, @@ -199,6 +416,72 @@ type noteTagBelongsToNote struct { field.RelationField + Creator struct { + field.RelationField + Icon struct { + field.RelationField + } + Background struct { + field.RelationField + } + Banner struct { + field.RelationField + } + RemoteInfo struct { + field.RelationField + User struct { + field.RelationField + } + } + InfoFields struct { + field.RelationField + User struct { + field.RelationField + } + } + BeingTypes struct { + field.RelationField + User struct { + field.RelationField + } + } + Tags struct { + field.RelationField + User struct { + field.RelationField + } + } + Relations struct { + field.RelationField + User struct { + field.RelationField + } + TargetUser struct { + field.RelationField + } + } + Pronouns struct { + field.RelationField + User struct { + field.RelationField + } + } + Roles struct { + field.RelationField + User struct { + field.RelationField + } + Role struct { + field.RelationField + } + } + AuthMethods struct { + field.RelationField + User struct { + field.RelationField + } + } + } AttachmentRelations struct { field.RelationField Note struct { @@ -220,6 +503,9 @@ type noteTagBelongsToNote struct { } Server struct { field.RelationField + Icon struct { + field.RelationField + } } } } diff --git a/storage-new/dbgen/note_to_attachments.gen.go b/storage-new/dbgen/note_to_attachments.gen.go index 718e8f8..bb93d9e 100644 --- a/storage-new/dbgen/note_to_attachments.gen.go +++ b/storage-new/dbgen/note_to_attachments.gen.go @@ -32,6 +32,209 @@ func newNoteToAttachment(db *gorm.DB, opts ...gen.DOOption) noteToAttachment { db: db.Session(&gorm.Session{}), RelationField: field.NewRelation("Note", "models.Note"), + Creator: struct { + field.RelationField + Icon struct { + field.RelationField + } + Background struct { + field.RelationField + } + Banner struct { + field.RelationField + } + RemoteInfo struct { + field.RelationField + User struct { + field.RelationField + } + } + InfoFields struct { + field.RelationField + User struct { + field.RelationField + } + } + BeingTypes struct { + field.RelationField + User struct { + field.RelationField + } + } + Tags struct { + field.RelationField + User struct { + field.RelationField + } + } + Relations struct { + field.RelationField + User struct { + field.RelationField + } + TargetUser struct { + field.RelationField + } + } + Pronouns struct { + field.RelationField + User struct { + field.RelationField + } + } + Roles struct { + field.RelationField + User struct { + field.RelationField + } + Role struct { + field.RelationField + } + } + AuthMethods struct { + field.RelationField + User struct { + field.RelationField + } + } + }{ + RelationField: field.NewRelation("Note.Creator", "models.User"), + Icon: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.Creator.Icon", "models.MediaMetadata"), + }, + Background: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.Creator.Background", "models.MediaMetadata"), + }, + Banner: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.Creator.Banner", "models.MediaMetadata"), + }, + RemoteInfo: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("Note.Creator.RemoteInfo", "models.UserRemoteLinks"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.Creator.RemoteInfo.User", "models.User"), + }, + }, + InfoFields: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("Note.Creator.InfoFields", "models.UserInfoField"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.Creator.InfoFields.User", "models.User"), + }, + }, + BeingTypes: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("Note.Creator.BeingTypes", "models.UserToBeing"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.Creator.BeingTypes.User", "models.User"), + }, + }, + Tags: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("Note.Creator.Tags", "models.UserToTag"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.Creator.Tags.User", "models.User"), + }, + }, + Relations: struct { + field.RelationField + User struct { + field.RelationField + } + TargetUser struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("Note.Creator.Relations", "models.UserToUserRelation"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.Creator.Relations.User", "models.User"), + }, + TargetUser: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.Creator.Relations.TargetUser", "models.User"), + }, + }, + Pronouns: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("Note.Creator.Pronouns", "models.UserToPronoun"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.Creator.Pronouns.User", "models.User"), + }, + }, + Roles: struct { + field.RelationField + User struct { + field.RelationField + } + Role struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("Note.Creator.Roles", "models.UserToRole"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.Creator.Roles.User", "models.User"), + }, + Role: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.Creator.Roles.Role", "models.Role"), + }, + }, + AuthMethods: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("Note.Creator.AuthMethods", "models.UserAuthMethod"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.Creator.AuthMethods.User", "models.User"), + }, + }, + }, AttachmentRelations: struct { field.RelationField Note struct { @@ -65,6 +268,9 @@ func newNoteToAttachment(db *gorm.DB, opts ...gen.DOOption) noteToAttachment { } Server struct { field.RelationField + Icon struct { + field.RelationField + } } } }{ @@ -81,6 +287,9 @@ func newNoteToAttachment(db *gorm.DB, opts ...gen.DOOption) noteToAttachment { } Server struct { field.RelationField + Icon struct { + field.RelationField + } } }{ RelationField: field.NewRelation("Note.EmoteRelations.Emote", "models.Emote"), @@ -91,8 +300,16 @@ func newNoteToAttachment(db *gorm.DB, opts ...gen.DOOption) noteToAttachment { }, Server: struct { field.RelationField + Icon struct { + field.RelationField + } }{ RelationField: field.NewRelation("Note.EmoteRelations.Emote.Server", "models.RemoteServer"), + Icon: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.EmoteRelations.Emote.Server.Icon", "models.MediaMetadata"), + }, }, }, }, @@ -207,6 +424,72 @@ type noteToAttachmentBelongsToNote struct { field.RelationField + Creator struct { + field.RelationField + Icon struct { + field.RelationField + } + Background struct { + field.RelationField + } + Banner struct { + field.RelationField + } + RemoteInfo struct { + field.RelationField + User struct { + field.RelationField + } + } + InfoFields struct { + field.RelationField + User struct { + field.RelationField + } + } + BeingTypes struct { + field.RelationField + User struct { + field.RelationField + } + } + Tags struct { + field.RelationField + User struct { + field.RelationField + } + } + Relations struct { + field.RelationField + User struct { + field.RelationField + } + TargetUser struct { + field.RelationField + } + } + Pronouns struct { + field.RelationField + User struct { + field.RelationField + } + } + Roles struct { + field.RelationField + User struct { + field.RelationField + } + Role struct { + field.RelationField + } + } + AuthMethods struct { + field.RelationField + User struct { + field.RelationField + } + } + } AttachmentRelations struct { field.RelationField Note struct { @@ -228,6 +511,9 @@ type noteToAttachmentBelongsToNote struct { } Server struct { field.RelationField + Icon struct { + field.RelationField + } } } } diff --git a/storage-new/dbgen/note_to_emotes.gen.go b/storage-new/dbgen/note_to_emotes.gen.go index 3cafb40..cf7f8f4 100644 --- a/storage-new/dbgen/note_to_emotes.gen.go +++ b/storage-new/dbgen/note_to_emotes.gen.go @@ -32,6 +32,209 @@ func newNoteToEmote(db *gorm.DB, opts ...gen.DOOption) noteToEmote { db: db.Session(&gorm.Session{}), RelationField: field.NewRelation("Note", "models.Note"), + Creator: struct { + field.RelationField + Icon struct { + field.RelationField + } + Background struct { + field.RelationField + } + Banner struct { + field.RelationField + } + RemoteInfo struct { + field.RelationField + User struct { + field.RelationField + } + } + InfoFields struct { + field.RelationField + User struct { + field.RelationField + } + } + BeingTypes struct { + field.RelationField + User struct { + field.RelationField + } + } + Tags struct { + field.RelationField + User struct { + field.RelationField + } + } + Relations struct { + field.RelationField + User struct { + field.RelationField + } + TargetUser struct { + field.RelationField + } + } + Pronouns struct { + field.RelationField + User struct { + field.RelationField + } + } + Roles struct { + field.RelationField + User struct { + field.RelationField + } + Role struct { + field.RelationField + } + } + AuthMethods struct { + field.RelationField + User struct { + field.RelationField + } + } + }{ + RelationField: field.NewRelation("Note.Creator", "models.User"), + Icon: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.Creator.Icon", "models.MediaMetadata"), + }, + Background: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.Creator.Background", "models.MediaMetadata"), + }, + Banner: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.Creator.Banner", "models.MediaMetadata"), + }, + RemoteInfo: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("Note.Creator.RemoteInfo", "models.UserRemoteLinks"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.Creator.RemoteInfo.User", "models.User"), + }, + }, + InfoFields: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("Note.Creator.InfoFields", "models.UserInfoField"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.Creator.InfoFields.User", "models.User"), + }, + }, + BeingTypes: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("Note.Creator.BeingTypes", "models.UserToBeing"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.Creator.BeingTypes.User", "models.User"), + }, + }, + Tags: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("Note.Creator.Tags", "models.UserToTag"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.Creator.Tags.User", "models.User"), + }, + }, + Relations: struct { + field.RelationField + User struct { + field.RelationField + } + TargetUser struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("Note.Creator.Relations", "models.UserToUserRelation"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.Creator.Relations.User", "models.User"), + }, + TargetUser: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.Creator.Relations.TargetUser", "models.User"), + }, + }, + Pronouns: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("Note.Creator.Pronouns", "models.UserToPronoun"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.Creator.Pronouns.User", "models.User"), + }, + }, + Roles: struct { + field.RelationField + User struct { + field.RelationField + } + Role struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("Note.Creator.Roles", "models.UserToRole"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.Creator.Roles.User", "models.User"), + }, + Role: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.Creator.Roles.Role", "models.Role"), + }, + }, + AuthMethods: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("Note.Creator.AuthMethods", "models.UserAuthMethod"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.Creator.AuthMethods.User", "models.User"), + }, + }, + }, AttachmentRelations: struct { field.RelationField Note struct { @@ -65,6 +268,9 @@ func newNoteToEmote(db *gorm.DB, opts ...gen.DOOption) noteToEmote { } Server struct { field.RelationField + Icon struct { + field.RelationField + } } } }{ @@ -81,6 +287,9 @@ func newNoteToEmote(db *gorm.DB, opts ...gen.DOOption) noteToEmote { } Server struct { field.RelationField + Icon struct { + field.RelationField + } } }{ RelationField: field.NewRelation("Note.EmoteRelations.Emote", "models.Emote"), @@ -91,8 +300,16 @@ func newNoteToEmote(db *gorm.DB, opts ...gen.DOOption) noteToEmote { }, Server: struct { field.RelationField + Icon struct { + field.RelationField + } }{ RelationField: field.NewRelation("Note.EmoteRelations.Emote.Server", "models.RemoteServer"), + Icon: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.EmoteRelations.Emote.Server.Icon", "models.MediaMetadata"), + }, }, }, }, @@ -207,6 +424,72 @@ type noteToEmoteBelongsToNote struct { field.RelationField + Creator struct { + field.RelationField + Icon struct { + field.RelationField + } + Background struct { + field.RelationField + } + Banner struct { + field.RelationField + } + RemoteInfo struct { + field.RelationField + User struct { + field.RelationField + } + } + InfoFields struct { + field.RelationField + User struct { + field.RelationField + } + } + BeingTypes struct { + field.RelationField + User struct { + field.RelationField + } + } + Tags struct { + field.RelationField + User struct { + field.RelationField + } + } + Relations struct { + field.RelationField + User struct { + field.RelationField + } + TargetUser struct { + field.RelationField + } + } + Pronouns struct { + field.RelationField + User struct { + field.RelationField + } + } + Roles struct { + field.RelationField + User struct { + field.RelationField + } + Role struct { + field.RelationField + } + } + AuthMethods struct { + field.RelationField + User struct { + field.RelationField + } + } + } AttachmentRelations struct { field.RelationField Note struct { @@ -228,6 +511,9 @@ type noteToEmoteBelongsToNote struct { } Server struct { field.RelationField + Icon struct { + field.RelationField + } } } } diff --git a/storage-new/dbgen/note_to_pings.gen.go b/storage-new/dbgen/note_to_pings.gen.go index e7d5c5d..8a5dc7a 100644 --- a/storage-new/dbgen/note_to_pings.gen.go +++ b/storage-new/dbgen/note_to_pings.gen.go @@ -32,6 +32,209 @@ func newNoteToPing(db *gorm.DB, opts ...gen.DOOption) noteToPing { db: db.Session(&gorm.Session{}), RelationField: field.NewRelation("Note", "models.Note"), + Creator: struct { + field.RelationField + Icon struct { + field.RelationField + } + Background struct { + field.RelationField + } + Banner struct { + field.RelationField + } + RemoteInfo struct { + field.RelationField + User struct { + field.RelationField + } + } + InfoFields struct { + field.RelationField + User struct { + field.RelationField + } + } + BeingTypes struct { + field.RelationField + User struct { + field.RelationField + } + } + Tags struct { + field.RelationField + User struct { + field.RelationField + } + } + Relations struct { + field.RelationField + User struct { + field.RelationField + } + TargetUser struct { + field.RelationField + } + } + Pronouns struct { + field.RelationField + User struct { + field.RelationField + } + } + Roles struct { + field.RelationField + User struct { + field.RelationField + } + Role struct { + field.RelationField + } + } + AuthMethods struct { + field.RelationField + User struct { + field.RelationField + } + } + }{ + RelationField: field.NewRelation("Note.Creator", "models.User"), + Icon: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.Creator.Icon", "models.MediaMetadata"), + }, + Background: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.Creator.Background", "models.MediaMetadata"), + }, + Banner: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.Creator.Banner", "models.MediaMetadata"), + }, + RemoteInfo: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("Note.Creator.RemoteInfo", "models.UserRemoteLinks"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.Creator.RemoteInfo.User", "models.User"), + }, + }, + InfoFields: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("Note.Creator.InfoFields", "models.UserInfoField"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.Creator.InfoFields.User", "models.User"), + }, + }, + BeingTypes: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("Note.Creator.BeingTypes", "models.UserToBeing"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.Creator.BeingTypes.User", "models.User"), + }, + }, + Tags: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("Note.Creator.Tags", "models.UserToTag"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.Creator.Tags.User", "models.User"), + }, + }, + Relations: struct { + field.RelationField + User struct { + field.RelationField + } + TargetUser struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("Note.Creator.Relations", "models.UserToUserRelation"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.Creator.Relations.User", "models.User"), + }, + TargetUser: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.Creator.Relations.TargetUser", "models.User"), + }, + }, + Pronouns: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("Note.Creator.Pronouns", "models.UserToPronoun"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.Creator.Pronouns.User", "models.User"), + }, + }, + Roles: struct { + field.RelationField + User struct { + field.RelationField + } + Role struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("Note.Creator.Roles", "models.UserToRole"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.Creator.Roles.User", "models.User"), + }, + Role: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.Creator.Roles.Role", "models.Role"), + }, + }, + AuthMethods: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("Note.Creator.AuthMethods", "models.UserAuthMethod"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.Creator.AuthMethods.User", "models.User"), + }, + }, + }, AttachmentRelations: struct { field.RelationField Note struct { @@ -65,6 +268,9 @@ func newNoteToPing(db *gorm.DB, opts ...gen.DOOption) noteToPing { } Server struct { field.RelationField + Icon struct { + field.RelationField + } } } }{ @@ -81,6 +287,9 @@ func newNoteToPing(db *gorm.DB, opts ...gen.DOOption) noteToPing { } Server struct { field.RelationField + Icon struct { + field.RelationField + } } }{ RelationField: field.NewRelation("Note.EmoteRelations.Emote", "models.Emote"), @@ -91,8 +300,16 @@ func newNoteToPing(db *gorm.DB, opts ...gen.DOOption) noteToPing { }, Server: struct { field.RelationField + Icon struct { + field.RelationField + } }{ RelationField: field.NewRelation("Note.EmoteRelations.Emote.Server", "models.RemoteServer"), + Icon: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.EmoteRelations.Emote.Server.Icon", "models.MediaMetadata"), + }, }, }, }, @@ -207,6 +424,72 @@ type noteToPingBelongsToNote struct { field.RelationField + Creator struct { + field.RelationField + Icon struct { + field.RelationField + } + Background struct { + field.RelationField + } + Banner struct { + field.RelationField + } + RemoteInfo struct { + field.RelationField + User struct { + field.RelationField + } + } + InfoFields struct { + field.RelationField + User struct { + field.RelationField + } + } + BeingTypes struct { + field.RelationField + User struct { + field.RelationField + } + } + Tags struct { + field.RelationField + User struct { + field.RelationField + } + } + Relations struct { + field.RelationField + User struct { + field.RelationField + } + TargetUser struct { + field.RelationField + } + } + Pronouns struct { + field.RelationField + User struct { + field.RelationField + } + } + Roles struct { + field.RelationField + User struct { + field.RelationField + } + Role struct { + field.RelationField + } + } + AuthMethods struct { + field.RelationField + User struct { + field.RelationField + } + } + } AttachmentRelations struct { field.RelationField Note struct { @@ -228,6 +511,9 @@ type noteToPingBelongsToNote struct { } Server struct { field.RelationField + Icon struct { + field.RelationField + } } } } diff --git a/storage-new/dbgen/notes.gen.go b/storage-new/dbgen/notes.gen.go index 69ce722..a69d938 100644 --- a/storage-new/dbgen/notes.gen.go +++ b/storage-new/dbgen/notes.gen.go @@ -44,6 +44,72 @@ func newNote(db *gorm.DB, opts ...gen.DOOption) note { RelationField: field.NewRelation("AttachmentRelations", "models.NoteToAttachment"), Note: struct { field.RelationField + Creator struct { + field.RelationField + Icon struct { + field.RelationField + } + Background struct { + field.RelationField + } + Banner struct { + field.RelationField + } + RemoteInfo struct { + field.RelationField + User struct { + field.RelationField + } + } + InfoFields struct { + field.RelationField + User struct { + field.RelationField + } + } + BeingTypes struct { + field.RelationField + User struct { + field.RelationField + } + } + Tags struct { + field.RelationField + User struct { + field.RelationField + } + } + Relations struct { + field.RelationField + User struct { + field.RelationField + } + TargetUser struct { + field.RelationField + } + } + Pronouns struct { + field.RelationField + User struct { + field.RelationField + } + } + Roles struct { + field.RelationField + User struct { + field.RelationField + } + Role struct { + field.RelationField + } + } + AuthMethods struct { + field.RelationField + User struct { + field.RelationField + } + } + } AttachmentRelations struct { field.RelationField } @@ -59,6 +125,9 @@ func newNote(db *gorm.DB, opts ...gen.DOOption) note { } Server struct { field.RelationField + Icon struct { + field.RelationField + } } } } @@ -79,6 +148,209 @@ func newNote(db *gorm.DB, opts ...gen.DOOption) note { } }{ RelationField: field.NewRelation("AttachmentRelations.Note", "models.Note"), + Creator: struct { + field.RelationField + Icon struct { + field.RelationField + } + Background struct { + field.RelationField + } + Banner struct { + field.RelationField + } + RemoteInfo struct { + field.RelationField + User struct { + field.RelationField + } + } + InfoFields struct { + field.RelationField + User struct { + field.RelationField + } + } + BeingTypes struct { + field.RelationField + User struct { + field.RelationField + } + } + Tags struct { + field.RelationField + User struct { + field.RelationField + } + } + Relations struct { + field.RelationField + User struct { + field.RelationField + } + TargetUser struct { + field.RelationField + } + } + Pronouns struct { + field.RelationField + User struct { + field.RelationField + } + } + Roles struct { + field.RelationField + User struct { + field.RelationField + } + Role struct { + field.RelationField + } + } + AuthMethods struct { + field.RelationField + User struct { + field.RelationField + } + } + }{ + RelationField: field.NewRelation("AttachmentRelations.Note.Creator", "models.User"), + Icon: struct { + field.RelationField + }{ + RelationField: field.NewRelation("AttachmentRelations.Note.Creator.Icon", "models.MediaMetadata"), + }, + Background: struct { + field.RelationField + }{ + RelationField: field.NewRelation("AttachmentRelations.Note.Creator.Background", "models.MediaMetadata"), + }, + Banner: struct { + field.RelationField + }{ + RelationField: field.NewRelation("AttachmentRelations.Note.Creator.Banner", "models.MediaMetadata"), + }, + RemoteInfo: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("AttachmentRelations.Note.Creator.RemoteInfo", "models.UserRemoteLinks"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("AttachmentRelations.Note.Creator.RemoteInfo.User", "models.User"), + }, + }, + InfoFields: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("AttachmentRelations.Note.Creator.InfoFields", "models.UserInfoField"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("AttachmentRelations.Note.Creator.InfoFields.User", "models.User"), + }, + }, + BeingTypes: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("AttachmentRelations.Note.Creator.BeingTypes", "models.UserToBeing"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("AttachmentRelations.Note.Creator.BeingTypes.User", "models.User"), + }, + }, + Tags: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("AttachmentRelations.Note.Creator.Tags", "models.UserToTag"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("AttachmentRelations.Note.Creator.Tags.User", "models.User"), + }, + }, + Relations: struct { + field.RelationField + User struct { + field.RelationField + } + TargetUser struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("AttachmentRelations.Note.Creator.Relations", "models.UserToUserRelation"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("AttachmentRelations.Note.Creator.Relations.User", "models.User"), + }, + TargetUser: struct { + field.RelationField + }{ + RelationField: field.NewRelation("AttachmentRelations.Note.Creator.Relations.TargetUser", "models.User"), + }, + }, + Pronouns: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("AttachmentRelations.Note.Creator.Pronouns", "models.UserToPronoun"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("AttachmentRelations.Note.Creator.Pronouns.User", "models.User"), + }, + }, + Roles: struct { + field.RelationField + User struct { + field.RelationField + } + Role struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("AttachmentRelations.Note.Creator.Roles", "models.UserToRole"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("AttachmentRelations.Note.Creator.Roles.User", "models.User"), + }, + Role: struct { + field.RelationField + }{ + RelationField: field.NewRelation("AttachmentRelations.Note.Creator.Roles.Role", "models.Role"), + }, + }, + AuthMethods: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("AttachmentRelations.Note.Creator.AuthMethods", "models.UserAuthMethod"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("AttachmentRelations.Note.Creator.AuthMethods.User", "models.User"), + }, + }, + }, AttachmentRelations: struct { field.RelationField }{ @@ -96,6 +368,9 @@ func newNote(db *gorm.DB, opts ...gen.DOOption) note { } Server struct { field.RelationField + Icon struct { + field.RelationField + } } } }{ @@ -112,6 +387,9 @@ func newNote(db *gorm.DB, opts ...gen.DOOption) note { } Server struct { field.RelationField + Icon struct { + field.RelationField + } } }{ RelationField: field.NewRelation("AttachmentRelations.Note.EmoteRelations.Emote", "models.Emote"), @@ -122,8 +400,16 @@ func newNote(db *gorm.DB, opts ...gen.DOOption) note { }, Server: struct { field.RelationField + Icon struct { + field.RelationField + } }{ RelationField: field.NewRelation("AttachmentRelations.Note.EmoteRelations.Emote.Server", "models.RemoteServer"), + Icon: struct { + field.RelationField + }{ + RelationField: field.NewRelation("AttachmentRelations.Note.EmoteRelations.Emote.Server.Icon", "models.MediaMetadata"), + }, }, }, }, @@ -187,6 +473,12 @@ func newNote(db *gorm.DB, opts ...gen.DOOption) note { RelationField: field.NewRelation("Tags", "models.NoteTag"), } + _note.Creator = noteBelongsToCreator{ + db: db.Session(&gorm.Session{}), + + RelationField: field.NewRelation("Creator", "models.User"), + } + _note.fillFieldMap() return _note @@ -216,6 +508,8 @@ type note struct { Tags noteHasManyTags + Creator noteBelongsToCreator + fieldMap map[string]field.Expr } @@ -259,7 +553,7 @@ func (n *note) GetFieldByName(fieldName string) (field.OrderExpr, bool) { } func (n *note) fillFieldMap() { - n.fieldMap = make(map[string]field.Expr, 16) + n.fieldMap = make(map[string]field.Expr, 17) n.fieldMap["id"] = n.ID n.fieldMap["created_at"] = n.CreatedAt n.fieldMap["updated_at"] = n.UpdatedAt @@ -292,6 +586,72 @@ type noteHasManyAttachmentRelations struct { Note struct { field.RelationField + Creator struct { + field.RelationField + Icon struct { + field.RelationField + } + Background struct { + field.RelationField + } + Banner struct { + field.RelationField + } + RemoteInfo struct { + field.RelationField + User struct { + field.RelationField + } + } + InfoFields struct { + field.RelationField + User struct { + field.RelationField + } + } + BeingTypes struct { + field.RelationField + User struct { + field.RelationField + } + } + Tags struct { + field.RelationField + User struct { + field.RelationField + } + } + Relations struct { + field.RelationField + User struct { + field.RelationField + } + TargetUser struct { + field.RelationField + } + } + Pronouns struct { + field.RelationField + User struct { + field.RelationField + } + } + Roles struct { + field.RelationField + User struct { + field.RelationField + } + Role struct { + field.RelationField + } + } + AuthMethods struct { + field.RelationField + User struct { + field.RelationField + } + } + } AttachmentRelations struct { field.RelationField } @@ -307,6 +667,9 @@ type noteHasManyAttachmentRelations struct { } Server struct { field.RelationField + Icon struct { + field.RelationField + } } } } @@ -609,6 +972,77 @@ func (a noteHasManyTagsTx) Count() int64 { return a.tx.Count() } +type noteBelongsToCreator struct { + db *gorm.DB + + field.RelationField +} + +func (a noteBelongsToCreator) Where(conds ...field.Expr) *noteBelongsToCreator { + if len(conds) == 0 { + return &a + } + + exprs := make([]clause.Expression, 0, len(conds)) + for _, cond := range conds { + exprs = append(exprs, cond.BeCond().(clause.Expression)) + } + a.db = a.db.Clauses(clause.Where{Exprs: exprs}) + return &a +} + +func (a noteBelongsToCreator) WithContext(ctx context.Context) *noteBelongsToCreator { + a.db = a.db.WithContext(ctx) + return &a +} + +func (a noteBelongsToCreator) Session(session *gorm.Session) *noteBelongsToCreator { + a.db = a.db.Session(session) + return &a +} + +func (a noteBelongsToCreator) Model(m *models.Note) *noteBelongsToCreatorTx { + return ¬eBelongsToCreatorTx{a.db.Model(m).Association(a.Name())} +} + +type noteBelongsToCreatorTx struct{ tx *gorm.Association } + +func (a noteBelongsToCreatorTx) Find() (result *models.User, err error) { + return result, a.tx.Find(&result) +} + +func (a noteBelongsToCreatorTx) Append(values ...*models.User) (err error) { + targetValues := make([]interface{}, len(values)) + for i, v := range values { + targetValues[i] = v + } + return a.tx.Append(targetValues...) +} + +func (a noteBelongsToCreatorTx) Replace(values ...*models.User) (err error) { + targetValues := make([]interface{}, len(values)) + for i, v := range values { + targetValues[i] = v + } + return a.tx.Replace(targetValues...) +} + +func (a noteBelongsToCreatorTx) Delete(values ...*models.User) (err error) { + targetValues := make([]interface{}, len(values)) + for i, v := range values { + targetValues[i] = v + } + return a.tx.Delete(targetValues...) +} + +func (a noteBelongsToCreatorTx) Clear() error { + return a.tx.Clear() +} + +func (a noteBelongsToCreatorTx) Count() int64 { + return a.tx.Count() +} + type noteDo struct{ gen.DO } type INoteDo interface { diff --git a/storage-new/dbgen/reactions.gen.go b/storage-new/dbgen/reactions.gen.go index e9154fd..114f7ad 100644 --- a/storage-new/dbgen/reactions.gen.go +++ b/storage-new/dbgen/reactions.gen.go @@ -37,6 +37,209 @@ func newReaction(db *gorm.DB, opts ...gen.DOOption) reaction { db: db.Session(&gorm.Session{}), RelationField: field.NewRelation("Note", "models.Note"), + Creator: struct { + field.RelationField + Icon struct { + field.RelationField + } + Background struct { + field.RelationField + } + Banner struct { + field.RelationField + } + RemoteInfo struct { + field.RelationField + User struct { + field.RelationField + } + } + InfoFields struct { + field.RelationField + User struct { + field.RelationField + } + } + BeingTypes struct { + field.RelationField + User struct { + field.RelationField + } + } + Tags struct { + field.RelationField + User struct { + field.RelationField + } + } + Relations struct { + field.RelationField + User struct { + field.RelationField + } + TargetUser struct { + field.RelationField + } + } + Pronouns struct { + field.RelationField + User struct { + field.RelationField + } + } + Roles struct { + field.RelationField + User struct { + field.RelationField + } + Role struct { + field.RelationField + } + } + AuthMethods struct { + field.RelationField + User struct { + field.RelationField + } + } + }{ + RelationField: field.NewRelation("Note.Creator", "models.User"), + Icon: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.Creator.Icon", "models.MediaMetadata"), + }, + Background: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.Creator.Background", "models.MediaMetadata"), + }, + Banner: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.Creator.Banner", "models.MediaMetadata"), + }, + RemoteInfo: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("Note.Creator.RemoteInfo", "models.UserRemoteLinks"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.Creator.RemoteInfo.User", "models.User"), + }, + }, + InfoFields: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("Note.Creator.InfoFields", "models.UserInfoField"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.Creator.InfoFields.User", "models.User"), + }, + }, + BeingTypes: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("Note.Creator.BeingTypes", "models.UserToBeing"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.Creator.BeingTypes.User", "models.User"), + }, + }, + Tags: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("Note.Creator.Tags", "models.UserToTag"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.Creator.Tags.User", "models.User"), + }, + }, + Relations: struct { + field.RelationField + User struct { + field.RelationField + } + TargetUser struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("Note.Creator.Relations", "models.UserToUserRelation"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.Creator.Relations.User", "models.User"), + }, + TargetUser: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.Creator.Relations.TargetUser", "models.User"), + }, + }, + Pronouns: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("Note.Creator.Pronouns", "models.UserToPronoun"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.Creator.Pronouns.User", "models.User"), + }, + }, + Roles: struct { + field.RelationField + User struct { + field.RelationField + } + Role struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("Note.Creator.Roles", "models.UserToRole"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.Creator.Roles.User", "models.User"), + }, + Role: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.Creator.Roles.Role", "models.Role"), + }, + }, + AuthMethods: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("Note.Creator.AuthMethods", "models.UserAuthMethod"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.Creator.AuthMethods.User", "models.User"), + }, + }, + }, AttachmentRelations: struct { field.RelationField Note struct { @@ -70,6 +273,9 @@ func newReaction(db *gorm.DB, opts ...gen.DOOption) reaction { } Server struct { field.RelationField + Icon struct { + field.RelationField + } } } }{ @@ -86,6 +292,9 @@ func newReaction(db *gorm.DB, opts ...gen.DOOption) reaction { } Server struct { field.RelationField + Icon struct { + field.RelationField + } } }{ RelationField: field.NewRelation("Note.EmoteRelations.Emote", "models.Emote"), @@ -96,8 +305,16 @@ func newReaction(db *gorm.DB, opts ...gen.DOOption) reaction { }, Server: struct { field.RelationField + Icon struct { + field.RelationField + } }{ RelationField: field.NewRelation("Note.EmoteRelations.Emote.Server", "models.RemoteServer"), + Icon: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Note.EmoteRelations.Emote.Server.Icon", "models.MediaMetadata"), + }, }, }, }, @@ -235,6 +452,72 @@ type reactionBelongsToNote struct { field.RelationField + Creator struct { + field.RelationField + Icon struct { + field.RelationField + } + Background struct { + field.RelationField + } + Banner struct { + field.RelationField + } + RemoteInfo struct { + field.RelationField + User struct { + field.RelationField + } + } + InfoFields struct { + field.RelationField + User struct { + field.RelationField + } + } + BeingTypes struct { + field.RelationField + User struct { + field.RelationField + } + } + Tags struct { + field.RelationField + User struct { + field.RelationField + } + } + Relations struct { + field.RelationField + User struct { + field.RelationField + } + TargetUser struct { + field.RelationField + } + } + Pronouns struct { + field.RelationField + User struct { + field.RelationField + } + } + Roles struct { + field.RelationField + User struct { + field.RelationField + } + Role struct { + field.RelationField + } + } + AuthMethods struct { + field.RelationField + User struct { + field.RelationField + } + } + } AttachmentRelations struct { field.RelationField Note struct { @@ -256,6 +539,9 @@ type reactionBelongsToNote struct { } Server struct { field.RelationField + Icon struct { + field.RelationField + } } } } diff --git a/storage-new/dbgen/remote_servers.gen.go b/storage-new/dbgen/remote_servers.gen.go index c031bdf..e31fb00 100644 --- a/storage-new/dbgen/remote_servers.gen.go +++ b/storage-new/dbgen/remote_servers.gen.go @@ -33,8 +33,13 @@ func newRemoteServer(db *gorm.DB, opts ...gen.DOOption) remoteServer { _remoteServer.ServerType = field.NewField(tableName, "server_type") _remoteServer.Domain = field.NewString(tableName, "domain") _remoteServer.Name = field.NewString(tableName, "name") - _remoteServer.Icon = field.NewString(tableName, "icon") + _remoteServer.IconId = field.NewString(tableName, "icon_id") _remoteServer.IsSelf = field.NewBool(tableName, "is_self") + _remoteServer.Icon = remoteServerBelongsToIcon{ + db: db.Session(&gorm.Session{}), + + RelationField: field.NewRelation("Icon", "models.MediaMetadata"), + } _remoteServer.fillFieldMap() @@ -52,8 +57,9 @@ type remoteServer struct { ServerType field.Field Domain field.String Name field.String - Icon field.String + IconId field.String IsSelf field.Bool + Icon remoteServerBelongsToIcon fieldMap map[string]field.Expr } @@ -77,7 +83,7 @@ func (r *remoteServer) updateTableName(table string) *remoteServer { r.ServerType = field.NewField(table, "server_type") r.Domain = field.NewString(table, "domain") r.Name = field.NewString(table, "name") - r.Icon = field.NewString(table, "icon") + r.IconId = field.NewString(table, "icon_id") r.IsSelf = field.NewBool(table, "is_self") r.fillFieldMap() @@ -95,7 +101,7 @@ func (r *remoteServer) GetFieldByName(fieldName string) (field.OrderExpr, bool) } func (r *remoteServer) fillFieldMap() { - r.fieldMap = make(map[string]field.Expr, 9) + r.fieldMap = make(map[string]field.Expr, 10) r.fieldMap["id"] = r.ID r.fieldMap["created_at"] = r.CreatedAt r.fieldMap["updated_at"] = r.UpdatedAt @@ -103,8 +109,9 @@ func (r *remoteServer) fillFieldMap() { r.fieldMap["server_type"] = r.ServerType r.fieldMap["domain"] = r.Domain r.fieldMap["name"] = r.Name - r.fieldMap["icon"] = r.Icon + r.fieldMap["icon_id"] = r.IconId r.fieldMap["is_self"] = r.IsSelf + } func (r remoteServer) clone(db *gorm.DB) remoteServer { @@ -117,6 +124,77 @@ func (r remoteServer) replaceDB(db *gorm.DB) remoteServer { return r } +type remoteServerBelongsToIcon struct { + db *gorm.DB + + field.RelationField +} + +func (a remoteServerBelongsToIcon) Where(conds ...field.Expr) *remoteServerBelongsToIcon { + if len(conds) == 0 { + return &a + } + + exprs := make([]clause.Expression, 0, len(conds)) + for _, cond := range conds { + exprs = append(exprs, cond.BeCond().(clause.Expression)) + } + a.db = a.db.Clauses(clause.Where{Exprs: exprs}) + return &a +} + +func (a remoteServerBelongsToIcon) WithContext(ctx context.Context) *remoteServerBelongsToIcon { + a.db = a.db.WithContext(ctx) + return &a +} + +func (a remoteServerBelongsToIcon) Session(session *gorm.Session) *remoteServerBelongsToIcon { + a.db = a.db.Session(session) + return &a +} + +func (a remoteServerBelongsToIcon) Model(m *models.RemoteServer) *remoteServerBelongsToIconTx { + return &remoteServerBelongsToIconTx{a.db.Model(m).Association(a.Name())} +} + +type remoteServerBelongsToIconTx struct{ tx *gorm.Association } + +func (a remoteServerBelongsToIconTx) Find() (result *models.MediaMetadata, err error) { + return result, a.tx.Find(&result) +} + +func (a remoteServerBelongsToIconTx) Append(values ...*models.MediaMetadata) (err error) { + targetValues := make([]interface{}, len(values)) + for i, v := range values { + targetValues[i] = v + } + return a.tx.Append(targetValues...) +} + +func (a remoteServerBelongsToIconTx) Replace(values ...*models.MediaMetadata) (err error) { + targetValues := make([]interface{}, len(values)) + for i, v := range values { + targetValues[i] = v + } + return a.tx.Replace(targetValues...) +} + +func (a remoteServerBelongsToIconTx) Delete(values ...*models.MediaMetadata) (err error) { + targetValues := make([]interface{}, len(values)) + for i, v := range values { + targetValues[i] = v + } + return a.tx.Delete(targetValues...) +} + +func (a remoteServerBelongsToIconTx) Clear() error { + return a.tx.Clear() +} + +func (a remoteServerBelongsToIconTx) Count() int64 { + return a.tx.Count() +} + type remoteServerDo struct{ gen.DO } type IRemoteServerDo interface { diff --git a/storage-new/dbgen/user_auth_methods.gen.go b/storage-new/dbgen/user_auth_methods.gen.go index b132233..0a1b8ae 100644 --- a/storage-new/dbgen/user_auth_methods.gen.go +++ b/storage-new/dbgen/user_auth_methods.gen.go @@ -33,6 +33,141 @@ func newUserAuthMethod(db *gorm.DB, opts ...gen.DOOption) userAuthMethod { db: db.Session(&gorm.Session{}), RelationField: field.NewRelation("User", "models.User"), + Icon: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Icon", "models.MediaMetadata"), + }, + Background: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Background", "models.MediaMetadata"), + }, + Banner: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Banner", "models.MediaMetadata"), + }, + RemoteInfo: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.RemoteInfo", "models.UserRemoteLinks"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.RemoteInfo.User", "models.User"), + }, + }, + InfoFields: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.InfoFields", "models.UserInfoField"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.InfoFields.User", "models.User"), + }, + }, + BeingTypes: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.BeingTypes", "models.UserToBeing"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.BeingTypes.User", "models.User"), + }, + }, + Tags: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.Tags", "models.UserToTag"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Tags.User", "models.User"), + }, + }, + Relations: struct { + field.RelationField + User struct { + field.RelationField + } + TargetUser struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.Relations", "models.UserToUserRelation"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Relations.User", "models.User"), + }, + TargetUser: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Relations.TargetUser", "models.User"), + }, + }, + Pronouns: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.Pronouns", "models.UserToPronoun"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Pronouns.User", "models.User"), + }, + }, + Roles: struct { + field.RelationField + User struct { + field.RelationField + } + Role struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.Roles", "models.UserToRole"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Roles.User", "models.User"), + }, + Role: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Roles.Role", "models.Role"), + }, + }, + AuthMethods: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.AuthMethods", "models.UserAuthMethod"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.AuthMethods.User", "models.User"), + }, + }, } _userAuthMethod.fillFieldMap() @@ -104,6 +239,70 @@ type userAuthMethodBelongsToUser struct { db *gorm.DB field.RelationField + + Icon struct { + field.RelationField + } + Background struct { + field.RelationField + } + Banner struct { + field.RelationField + } + RemoteInfo struct { + field.RelationField + User struct { + field.RelationField + } + } + InfoFields struct { + field.RelationField + User struct { + field.RelationField + } + } + BeingTypes struct { + field.RelationField + User struct { + field.RelationField + } + } + Tags struct { + field.RelationField + User struct { + field.RelationField + } + } + Relations struct { + field.RelationField + User struct { + field.RelationField + } + TargetUser struct { + field.RelationField + } + } + Pronouns struct { + field.RelationField + User struct { + field.RelationField + } + } + Roles struct { + field.RelationField + User struct { + field.RelationField + } + Role struct { + field.RelationField + } + } + AuthMethods struct { + field.RelationField + User struct { + field.RelationField + } + } } func (a userAuthMethodBelongsToUser) Where(conds ...field.Expr) *userAuthMethodBelongsToUser { diff --git a/storage-new/dbgen/user_info_fields.gen.go b/storage-new/dbgen/user_info_fields.gen.go index 37c353a..3c8dcd9 100644 --- a/storage-new/dbgen/user_info_fields.gen.go +++ b/storage-new/dbgen/user_info_fields.gen.go @@ -39,6 +39,141 @@ func newUserInfoField(db *gorm.DB, opts ...gen.DOOption) userInfoField { db: db.Session(&gorm.Session{}), RelationField: field.NewRelation("User", "models.User"), + Icon: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Icon", "models.MediaMetadata"), + }, + Background: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Background", "models.MediaMetadata"), + }, + Banner: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Banner", "models.MediaMetadata"), + }, + RemoteInfo: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.RemoteInfo", "models.UserRemoteLinks"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.RemoteInfo.User", "models.User"), + }, + }, + InfoFields: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.InfoFields", "models.UserInfoField"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.InfoFields.User", "models.User"), + }, + }, + BeingTypes: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.BeingTypes", "models.UserToBeing"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.BeingTypes.User", "models.User"), + }, + }, + Tags: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.Tags", "models.UserToTag"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Tags.User", "models.User"), + }, + }, + Relations: struct { + field.RelationField + User struct { + field.RelationField + } + TargetUser struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.Relations", "models.UserToUserRelation"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Relations.User", "models.User"), + }, + TargetUser: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Relations.TargetUser", "models.User"), + }, + }, + Pronouns: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.Pronouns", "models.UserToPronoun"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Pronouns.User", "models.User"), + }, + }, + Roles: struct { + field.RelationField + User struct { + field.RelationField + } + Role struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.Roles", "models.UserToRole"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Roles.User", "models.User"), + }, + Role: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Roles.Role", "models.Role"), + }, + }, + AuthMethods: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.AuthMethods", "models.UserAuthMethod"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.AuthMethods.User", "models.User"), + }, + }, } _userInfoField.fillFieldMap() @@ -128,6 +263,70 @@ type userInfoFieldBelongsToUser struct { db *gorm.DB field.RelationField + + Icon struct { + field.RelationField + } + Background struct { + field.RelationField + } + Banner struct { + field.RelationField + } + RemoteInfo struct { + field.RelationField + User struct { + field.RelationField + } + } + InfoFields struct { + field.RelationField + User struct { + field.RelationField + } + } + BeingTypes struct { + field.RelationField + User struct { + field.RelationField + } + } + Tags struct { + field.RelationField + User struct { + field.RelationField + } + } + Relations struct { + field.RelationField + User struct { + field.RelationField + } + TargetUser struct { + field.RelationField + } + } + Pronouns struct { + field.RelationField + User struct { + field.RelationField + } + } + Roles struct { + field.RelationField + User struct { + field.RelationField + } + Role struct { + field.RelationField + } + } + AuthMethods struct { + field.RelationField + User struct { + field.RelationField + } + } } func (a userInfoFieldBelongsToUser) Where(conds ...field.Expr) *userInfoFieldBelongsToUser { diff --git a/storage-new/dbgen/user_remote_links.gen.go b/storage-new/dbgen/user_remote_links.gen.go index 6c936cb..38d1580 100644 --- a/storage-new/dbgen/user_remote_links.gen.go +++ b/storage-new/dbgen/user_remote_links.gen.go @@ -43,6 +43,141 @@ func newUserRemoteLinks(db *gorm.DB, opts ...gen.DOOption) userRemoteLinks { db: db.Session(&gorm.Session{}), RelationField: field.NewRelation("User", "models.User"), + Icon: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Icon", "models.MediaMetadata"), + }, + Background: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Background", "models.MediaMetadata"), + }, + Banner: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Banner", "models.MediaMetadata"), + }, + RemoteInfo: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.RemoteInfo", "models.UserRemoteLinks"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.RemoteInfo.User", "models.User"), + }, + }, + InfoFields: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.InfoFields", "models.UserInfoField"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.InfoFields.User", "models.User"), + }, + }, + BeingTypes: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.BeingTypes", "models.UserToBeing"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.BeingTypes.User", "models.User"), + }, + }, + Tags: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.Tags", "models.UserToTag"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Tags.User", "models.User"), + }, + }, + Relations: struct { + field.RelationField + User struct { + field.RelationField + } + TargetUser struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.Relations", "models.UserToUserRelation"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Relations.User", "models.User"), + }, + TargetUser: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Relations.TargetUser", "models.User"), + }, + }, + Pronouns: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.Pronouns", "models.UserToPronoun"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Pronouns.User", "models.User"), + }, + }, + Roles: struct { + field.RelationField + User struct { + field.RelationField + } + Role struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.Roles", "models.UserToRole"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Roles.User", "models.User"), + }, + Role: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Roles.Role", "models.Role"), + }, + }, + AuthMethods: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.AuthMethods", "models.UserAuthMethod"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.AuthMethods.User", "models.User"), + }, + }, } _userRemoteLinks.fillFieldMap() @@ -144,6 +279,70 @@ type userRemoteLinksBelongsToUser struct { db *gorm.DB field.RelationField + + Icon struct { + field.RelationField + } + Background struct { + field.RelationField + } + Banner struct { + field.RelationField + } + RemoteInfo struct { + field.RelationField + User struct { + field.RelationField + } + } + InfoFields struct { + field.RelationField + User struct { + field.RelationField + } + } + BeingTypes struct { + field.RelationField + User struct { + field.RelationField + } + } + Tags struct { + field.RelationField + User struct { + field.RelationField + } + } + Relations struct { + field.RelationField + User struct { + field.RelationField + } + TargetUser struct { + field.RelationField + } + } + Pronouns struct { + field.RelationField + User struct { + field.RelationField + } + } + Roles struct { + field.RelationField + User struct { + field.RelationField + } + Role struct { + field.RelationField + } + } + AuthMethods struct { + field.RelationField + User struct { + field.RelationField + } + } } func (a userRemoteLinksBelongsToUser) Where(conds ...field.Expr) *userRemoteLinksBelongsToUser { diff --git a/storage-new/dbgen/user_to_beings.gen.go b/storage-new/dbgen/user_to_beings.gen.go index bed407d..6217b25 100644 --- a/storage-new/dbgen/user_to_beings.gen.go +++ b/storage-new/dbgen/user_to_beings.gen.go @@ -32,6 +32,141 @@ func newUserToBeing(db *gorm.DB, opts ...gen.DOOption) userToBeing { db: db.Session(&gorm.Session{}), RelationField: field.NewRelation("User", "models.User"), + Icon: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Icon", "models.MediaMetadata"), + }, + Background: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Background", "models.MediaMetadata"), + }, + Banner: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Banner", "models.MediaMetadata"), + }, + RemoteInfo: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.RemoteInfo", "models.UserRemoteLinks"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.RemoteInfo.User", "models.User"), + }, + }, + InfoFields: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.InfoFields", "models.UserInfoField"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.InfoFields.User", "models.User"), + }, + }, + BeingTypes: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.BeingTypes", "models.UserToBeing"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.BeingTypes.User", "models.User"), + }, + }, + Tags: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.Tags", "models.UserToTag"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Tags.User", "models.User"), + }, + }, + Relations: struct { + field.RelationField + User struct { + field.RelationField + } + TargetUser struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.Relations", "models.UserToUserRelation"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Relations.User", "models.User"), + }, + TargetUser: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Relations.TargetUser", "models.User"), + }, + }, + Pronouns: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.Pronouns", "models.UserToPronoun"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Pronouns.User", "models.User"), + }, + }, + Roles: struct { + field.RelationField + User struct { + field.RelationField + } + Role struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.Roles", "models.UserToRole"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Roles.User", "models.User"), + }, + Role: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Roles.Role", "models.Role"), + }, + }, + AuthMethods: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.AuthMethods", "models.UserAuthMethod"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.AuthMethods.User", "models.User"), + }, + }, } _userToBeing.fillFieldMap() @@ -100,6 +235,70 @@ type userToBeingBelongsToUser struct { db *gorm.DB field.RelationField + + Icon struct { + field.RelationField + } + Background struct { + field.RelationField + } + Banner struct { + field.RelationField + } + RemoteInfo struct { + field.RelationField + User struct { + field.RelationField + } + } + InfoFields struct { + field.RelationField + User struct { + field.RelationField + } + } + BeingTypes struct { + field.RelationField + User struct { + field.RelationField + } + } + Tags struct { + field.RelationField + User struct { + field.RelationField + } + } + Relations struct { + field.RelationField + User struct { + field.RelationField + } + TargetUser struct { + field.RelationField + } + } + Pronouns struct { + field.RelationField + User struct { + field.RelationField + } + } + Roles struct { + field.RelationField + User struct { + field.RelationField + } + Role struct { + field.RelationField + } + } + AuthMethods struct { + field.RelationField + User struct { + field.RelationField + } + } } func (a userToBeingBelongsToUser) Where(conds ...field.Expr) *userToBeingBelongsToUser { diff --git a/storage-new/dbgen/user_to_pronouns.gen.go b/storage-new/dbgen/user_to_pronouns.gen.go new file mode 100644 index 0000000..32a372d --- /dev/null +++ b/storage-new/dbgen/user_to_pronouns.gen.go @@ -0,0 +1,660 @@ +// Code generated by gorm.io/gen. DO NOT EDIT. +// Code generated by gorm.io/gen. DO NOT EDIT. +// Code generated by gorm.io/gen. DO NOT EDIT. + +package dbgen + +import ( + "context" + + "git.mstar.dev/mstar/linstrom/storage-new/models" + "gorm.io/gorm" + "gorm.io/gorm/clause" + "gorm.io/gorm/schema" + + "gorm.io/gen" + "gorm.io/gen/field" + + "gorm.io/plugin/dbresolver" +) + +func newUserToPronoun(db *gorm.DB, opts ...gen.DOOption) userToPronoun { + _userToPronoun := userToPronoun{} + + _userToPronoun.userToPronounDo.UseDB(db, opts...) + _userToPronoun.userToPronounDo.UseModel(&models.UserToPronoun{}) + + tableName := _userToPronoun.userToPronounDo.TableName() + _userToPronoun.ALL = field.NewAsterisk(tableName) + _userToPronoun.UserId = field.NewString(tableName, "user_id") + _userToPronoun.Pronoung = field.NewString(tableName, "pronoung") + _userToPronoun.User = userToPronounBelongsToUser{ + db: db.Session(&gorm.Session{}), + + RelationField: field.NewRelation("User", "models.User"), + Icon: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Icon", "models.MediaMetadata"), + }, + Background: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Background", "models.MediaMetadata"), + }, + Banner: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Banner", "models.MediaMetadata"), + }, + RemoteInfo: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.RemoteInfo", "models.UserRemoteLinks"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.RemoteInfo.User", "models.User"), + }, + }, + InfoFields: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.InfoFields", "models.UserInfoField"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.InfoFields.User", "models.User"), + }, + }, + BeingTypes: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.BeingTypes", "models.UserToBeing"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.BeingTypes.User", "models.User"), + }, + }, + Tags: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.Tags", "models.UserToTag"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Tags.User", "models.User"), + }, + }, + Relations: struct { + field.RelationField + User struct { + field.RelationField + } + TargetUser struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.Relations", "models.UserToUserRelation"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Relations.User", "models.User"), + }, + TargetUser: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Relations.TargetUser", "models.User"), + }, + }, + Pronouns: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.Pronouns", "models.UserToPronoun"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Pronouns.User", "models.User"), + }, + }, + Roles: struct { + field.RelationField + User struct { + field.RelationField + } + Role struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.Roles", "models.UserToRole"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Roles.User", "models.User"), + }, + Role: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Roles.Role", "models.Role"), + }, + }, + AuthMethods: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.AuthMethods", "models.UserAuthMethod"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.AuthMethods.User", "models.User"), + }, + }, + } + + _userToPronoun.fillFieldMap() + + return _userToPronoun +} + +type userToPronoun struct { + userToPronounDo + + ALL field.Asterisk + UserId field.String + Pronoung field.String + User userToPronounBelongsToUser + + fieldMap map[string]field.Expr +} + +func (u userToPronoun) Table(newTableName string) *userToPronoun { + u.userToPronounDo.UseTable(newTableName) + return u.updateTableName(newTableName) +} + +func (u userToPronoun) As(alias string) *userToPronoun { + u.userToPronounDo.DO = *(u.userToPronounDo.As(alias).(*gen.DO)) + return u.updateTableName(alias) +} + +func (u *userToPronoun) updateTableName(table string) *userToPronoun { + u.ALL = field.NewAsterisk(table) + u.UserId = field.NewString(table, "user_id") + u.Pronoung = field.NewString(table, "pronoung") + + u.fillFieldMap() + + return u +} + +func (u *userToPronoun) GetFieldByName(fieldName string) (field.OrderExpr, bool) { + _f, ok := u.fieldMap[fieldName] + if !ok || _f == nil { + return nil, false + } + _oe, ok := _f.(field.OrderExpr) + return _oe, ok +} + +func (u *userToPronoun) fillFieldMap() { + u.fieldMap = make(map[string]field.Expr, 3) + u.fieldMap["user_id"] = u.UserId + u.fieldMap["pronoung"] = u.Pronoung + +} + +func (u userToPronoun) clone(db *gorm.DB) userToPronoun { + u.userToPronounDo.ReplaceConnPool(db.Statement.ConnPool) + return u +} + +func (u userToPronoun) replaceDB(db *gorm.DB) userToPronoun { + u.userToPronounDo.ReplaceDB(db) + return u +} + +type userToPronounBelongsToUser struct { + db *gorm.DB + + field.RelationField + + Icon struct { + field.RelationField + } + Background struct { + field.RelationField + } + Banner struct { + field.RelationField + } + RemoteInfo struct { + field.RelationField + User struct { + field.RelationField + } + } + InfoFields struct { + field.RelationField + User struct { + field.RelationField + } + } + BeingTypes struct { + field.RelationField + User struct { + field.RelationField + } + } + Tags struct { + field.RelationField + User struct { + field.RelationField + } + } + Relations struct { + field.RelationField + User struct { + field.RelationField + } + TargetUser struct { + field.RelationField + } + } + Pronouns struct { + field.RelationField + User struct { + field.RelationField + } + } + Roles struct { + field.RelationField + User struct { + field.RelationField + } + Role struct { + field.RelationField + } + } + AuthMethods struct { + field.RelationField + User struct { + field.RelationField + } + } +} + +func (a userToPronounBelongsToUser) Where(conds ...field.Expr) *userToPronounBelongsToUser { + if len(conds) == 0 { + return &a + } + + exprs := make([]clause.Expression, 0, len(conds)) + for _, cond := range conds { + exprs = append(exprs, cond.BeCond().(clause.Expression)) + } + a.db = a.db.Clauses(clause.Where{Exprs: exprs}) + return &a +} + +func (a userToPronounBelongsToUser) WithContext(ctx context.Context) *userToPronounBelongsToUser { + a.db = a.db.WithContext(ctx) + return &a +} + +func (a userToPronounBelongsToUser) Session(session *gorm.Session) *userToPronounBelongsToUser { + a.db = a.db.Session(session) + return &a +} + +func (a userToPronounBelongsToUser) Model(m *models.UserToPronoun) *userToPronounBelongsToUserTx { + return &userToPronounBelongsToUserTx{a.db.Model(m).Association(a.Name())} +} + +type userToPronounBelongsToUserTx struct{ tx *gorm.Association } + +func (a userToPronounBelongsToUserTx) Find() (result *models.User, err error) { + return result, a.tx.Find(&result) +} + +func (a userToPronounBelongsToUserTx) Append(values ...*models.User) (err error) { + targetValues := make([]interface{}, len(values)) + for i, v := range values { + targetValues[i] = v + } + return a.tx.Append(targetValues...) +} + +func (a userToPronounBelongsToUserTx) Replace(values ...*models.User) (err error) { + targetValues := make([]interface{}, len(values)) + for i, v := range values { + targetValues[i] = v + } + return a.tx.Replace(targetValues...) +} + +func (a userToPronounBelongsToUserTx) Delete(values ...*models.User) (err error) { + targetValues := make([]interface{}, len(values)) + for i, v := range values { + targetValues[i] = v + } + return a.tx.Delete(targetValues...) +} + +func (a userToPronounBelongsToUserTx) Clear() error { + return a.tx.Clear() +} + +func (a userToPronounBelongsToUserTx) Count() int64 { + return a.tx.Count() +} + +type userToPronounDo struct{ gen.DO } + +type IUserToPronounDo interface { + gen.SubQuery + Debug() IUserToPronounDo + WithContext(ctx context.Context) IUserToPronounDo + WithResult(fc func(tx gen.Dao)) gen.ResultInfo + ReplaceDB(db *gorm.DB) + ReadDB() IUserToPronounDo + WriteDB() IUserToPronounDo + As(alias string) gen.Dao + Session(config *gorm.Session) IUserToPronounDo + Columns(cols ...field.Expr) gen.Columns + Clauses(conds ...clause.Expression) IUserToPronounDo + Not(conds ...gen.Condition) IUserToPronounDo + Or(conds ...gen.Condition) IUserToPronounDo + Select(conds ...field.Expr) IUserToPronounDo + Where(conds ...gen.Condition) IUserToPronounDo + Order(conds ...field.Expr) IUserToPronounDo + Distinct(cols ...field.Expr) IUserToPronounDo + Omit(cols ...field.Expr) IUserToPronounDo + Join(table schema.Tabler, on ...field.Expr) IUserToPronounDo + LeftJoin(table schema.Tabler, on ...field.Expr) IUserToPronounDo + RightJoin(table schema.Tabler, on ...field.Expr) IUserToPronounDo + Group(cols ...field.Expr) IUserToPronounDo + Having(conds ...gen.Condition) IUserToPronounDo + Limit(limit int) IUserToPronounDo + Offset(offset int) IUserToPronounDo + Count() (count int64, err error) + Scopes(funcs ...func(gen.Dao) gen.Dao) IUserToPronounDo + Unscoped() IUserToPronounDo + Create(values ...*models.UserToPronoun) error + CreateInBatches(values []*models.UserToPronoun, batchSize int) error + Save(values ...*models.UserToPronoun) error + First() (*models.UserToPronoun, error) + Take() (*models.UserToPronoun, error) + Last() (*models.UserToPronoun, error) + Find() ([]*models.UserToPronoun, error) + FindInBatch(batchSize int, fc func(tx gen.Dao, batch int) error) (results []*models.UserToPronoun, err error) + FindInBatches(result *[]*models.UserToPronoun, batchSize int, fc func(tx gen.Dao, batch int) error) error + Pluck(column field.Expr, dest interface{}) error + Delete(...*models.UserToPronoun) (info gen.ResultInfo, err error) + Update(column field.Expr, value interface{}) (info gen.ResultInfo, err error) + UpdateSimple(columns ...field.AssignExpr) (info gen.ResultInfo, err error) + Updates(value interface{}) (info gen.ResultInfo, err error) + UpdateColumn(column field.Expr, value interface{}) (info gen.ResultInfo, err error) + UpdateColumnSimple(columns ...field.AssignExpr) (info gen.ResultInfo, err error) + UpdateColumns(value interface{}) (info gen.ResultInfo, err error) + UpdateFrom(q gen.SubQuery) gen.Dao + Attrs(attrs ...field.AssignExpr) IUserToPronounDo + Assign(attrs ...field.AssignExpr) IUserToPronounDo + Joins(fields ...field.RelationField) IUserToPronounDo + Preload(fields ...field.RelationField) IUserToPronounDo + FirstOrInit() (*models.UserToPronoun, error) + FirstOrCreate() (*models.UserToPronoun, error) + FindByPage(offset int, limit int) (result []*models.UserToPronoun, count int64, err error) + ScanByPage(result interface{}, offset int, limit int) (count int64, err error) + Scan(result interface{}) (err error) + Returning(value interface{}, columns ...string) IUserToPronounDo + UnderlyingDB() *gorm.DB + schema.Tabler +} + +func (u userToPronounDo) Debug() IUserToPronounDo { + return u.withDO(u.DO.Debug()) +} + +func (u userToPronounDo) WithContext(ctx context.Context) IUserToPronounDo { + return u.withDO(u.DO.WithContext(ctx)) +} + +func (u userToPronounDo) ReadDB() IUserToPronounDo { + return u.Clauses(dbresolver.Read) +} + +func (u userToPronounDo) WriteDB() IUserToPronounDo { + return u.Clauses(dbresolver.Write) +} + +func (u userToPronounDo) Session(config *gorm.Session) IUserToPronounDo { + return u.withDO(u.DO.Session(config)) +} + +func (u userToPronounDo) Clauses(conds ...clause.Expression) IUserToPronounDo { + return u.withDO(u.DO.Clauses(conds...)) +} + +func (u userToPronounDo) Returning(value interface{}, columns ...string) IUserToPronounDo { + return u.withDO(u.DO.Returning(value, columns...)) +} + +func (u userToPronounDo) Not(conds ...gen.Condition) IUserToPronounDo { + return u.withDO(u.DO.Not(conds...)) +} + +func (u userToPronounDo) Or(conds ...gen.Condition) IUserToPronounDo { + return u.withDO(u.DO.Or(conds...)) +} + +func (u userToPronounDo) Select(conds ...field.Expr) IUserToPronounDo { + return u.withDO(u.DO.Select(conds...)) +} + +func (u userToPronounDo) Where(conds ...gen.Condition) IUserToPronounDo { + return u.withDO(u.DO.Where(conds...)) +} + +func (u userToPronounDo) Order(conds ...field.Expr) IUserToPronounDo { + return u.withDO(u.DO.Order(conds...)) +} + +func (u userToPronounDo) Distinct(cols ...field.Expr) IUserToPronounDo { + return u.withDO(u.DO.Distinct(cols...)) +} + +func (u userToPronounDo) Omit(cols ...field.Expr) IUserToPronounDo { + return u.withDO(u.DO.Omit(cols...)) +} + +func (u userToPronounDo) Join(table schema.Tabler, on ...field.Expr) IUserToPronounDo { + return u.withDO(u.DO.Join(table, on...)) +} + +func (u userToPronounDo) LeftJoin(table schema.Tabler, on ...field.Expr) IUserToPronounDo { + return u.withDO(u.DO.LeftJoin(table, on...)) +} + +func (u userToPronounDo) RightJoin(table schema.Tabler, on ...field.Expr) IUserToPronounDo { + return u.withDO(u.DO.RightJoin(table, on...)) +} + +func (u userToPronounDo) Group(cols ...field.Expr) IUserToPronounDo { + return u.withDO(u.DO.Group(cols...)) +} + +func (u userToPronounDo) Having(conds ...gen.Condition) IUserToPronounDo { + return u.withDO(u.DO.Having(conds...)) +} + +func (u userToPronounDo) Limit(limit int) IUserToPronounDo { + return u.withDO(u.DO.Limit(limit)) +} + +func (u userToPronounDo) Offset(offset int) IUserToPronounDo { + return u.withDO(u.DO.Offset(offset)) +} + +func (u userToPronounDo) Scopes(funcs ...func(gen.Dao) gen.Dao) IUserToPronounDo { + return u.withDO(u.DO.Scopes(funcs...)) +} + +func (u userToPronounDo) Unscoped() IUserToPronounDo { + return u.withDO(u.DO.Unscoped()) +} + +func (u userToPronounDo) Create(values ...*models.UserToPronoun) error { + if len(values) == 0 { + return nil + } + return u.DO.Create(values) +} + +func (u userToPronounDo) CreateInBatches(values []*models.UserToPronoun, batchSize int) error { + return u.DO.CreateInBatches(values, batchSize) +} + +// Save : !!! underlying implementation is different with GORM +// The method is equivalent to executing the statement: db.Clauses(clause.OnConflict{UpdateAll: true}).Create(values) +func (u userToPronounDo) Save(values ...*models.UserToPronoun) error { + if len(values) == 0 { + return nil + } + return u.DO.Save(values) +} + +func (u userToPronounDo) First() (*models.UserToPronoun, error) { + if result, err := u.DO.First(); err != nil { + return nil, err + } else { + return result.(*models.UserToPronoun), nil + } +} + +func (u userToPronounDo) Take() (*models.UserToPronoun, error) { + if result, err := u.DO.Take(); err != nil { + return nil, err + } else { + return result.(*models.UserToPronoun), nil + } +} + +func (u userToPronounDo) Last() (*models.UserToPronoun, error) { + if result, err := u.DO.Last(); err != nil { + return nil, err + } else { + return result.(*models.UserToPronoun), nil + } +} + +func (u userToPronounDo) Find() ([]*models.UserToPronoun, error) { + result, err := u.DO.Find() + return result.([]*models.UserToPronoun), err +} + +func (u userToPronounDo) FindInBatch(batchSize int, fc func(tx gen.Dao, batch int) error) (results []*models.UserToPronoun, err error) { + buf := make([]*models.UserToPronoun, 0, batchSize) + err = u.DO.FindInBatches(&buf, batchSize, func(tx gen.Dao, batch int) error { + defer func() { results = append(results, buf...) }() + return fc(tx, batch) + }) + return results, err +} + +func (u userToPronounDo) FindInBatches(result *[]*models.UserToPronoun, batchSize int, fc func(tx gen.Dao, batch int) error) error { + return u.DO.FindInBatches(result, batchSize, fc) +} + +func (u userToPronounDo) Attrs(attrs ...field.AssignExpr) IUserToPronounDo { + return u.withDO(u.DO.Attrs(attrs...)) +} + +func (u userToPronounDo) Assign(attrs ...field.AssignExpr) IUserToPronounDo { + return u.withDO(u.DO.Assign(attrs...)) +} + +func (u userToPronounDo) Joins(fields ...field.RelationField) IUserToPronounDo { + for _, _f := range fields { + u = *u.withDO(u.DO.Joins(_f)) + } + return &u +} + +func (u userToPronounDo) Preload(fields ...field.RelationField) IUserToPronounDo { + for _, _f := range fields { + u = *u.withDO(u.DO.Preload(_f)) + } + return &u +} + +func (u userToPronounDo) FirstOrInit() (*models.UserToPronoun, error) { + if result, err := u.DO.FirstOrInit(); err != nil { + return nil, err + } else { + return result.(*models.UserToPronoun), nil + } +} + +func (u userToPronounDo) FirstOrCreate() (*models.UserToPronoun, error) { + if result, err := u.DO.FirstOrCreate(); err != nil { + return nil, err + } else { + return result.(*models.UserToPronoun), nil + } +} + +func (u userToPronounDo) FindByPage(offset int, limit int) (result []*models.UserToPronoun, count int64, err error) { + result, err = u.Offset(offset).Limit(limit).Find() + if err != nil { + return + } + + if size := len(result); 0 < limit && 0 < size && size < limit { + count = int64(size + offset) + return + } + + count, err = u.Offset(-1).Limit(-1).Count() + return +} + +func (u userToPronounDo) ScanByPage(result interface{}, offset int, limit int) (count int64, err error) { + count, err = u.Count() + if err != nil { + return + } + + err = u.Offset(offset).Limit(limit).Scan(result) + return +} + +func (u userToPronounDo) Scan(result interface{}) (err error) { + return u.DO.Scan(result) +} + +func (u userToPronounDo) Delete(models ...*models.UserToPronoun) (result gen.ResultInfo, err error) { + return u.DO.Delete(models) +} + +func (u *userToPronounDo) withDO(do gen.Dao) *userToPronounDo { + u.DO = *do.(*gen.DO) + return u +} diff --git a/storage-new/dbgen/user_to_roles.gen.go b/storage-new/dbgen/user_to_roles.gen.go index 84a78bd..df245c7 100644 --- a/storage-new/dbgen/user_to_roles.gen.go +++ b/storage-new/dbgen/user_to_roles.gen.go @@ -32,6 +32,141 @@ func newUserToRole(db *gorm.DB, opts ...gen.DOOption) userToRole { db: db.Session(&gorm.Session{}), RelationField: field.NewRelation("User", "models.User"), + Icon: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Icon", "models.MediaMetadata"), + }, + Background: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Background", "models.MediaMetadata"), + }, + Banner: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Banner", "models.MediaMetadata"), + }, + RemoteInfo: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.RemoteInfo", "models.UserRemoteLinks"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.RemoteInfo.User", "models.User"), + }, + }, + InfoFields: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.InfoFields", "models.UserInfoField"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.InfoFields.User", "models.User"), + }, + }, + BeingTypes: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.BeingTypes", "models.UserToBeing"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.BeingTypes.User", "models.User"), + }, + }, + Tags: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.Tags", "models.UserToTag"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Tags.User", "models.User"), + }, + }, + Relations: struct { + field.RelationField + User struct { + field.RelationField + } + TargetUser struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.Relations", "models.UserToUserRelation"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Relations.User", "models.User"), + }, + TargetUser: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Relations.TargetUser", "models.User"), + }, + }, + Pronouns: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.Pronouns", "models.UserToPronoun"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Pronouns.User", "models.User"), + }, + }, + Roles: struct { + field.RelationField + User struct { + field.RelationField + } + Role struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.Roles", "models.UserToRole"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Roles.User", "models.User"), + }, + Role: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Roles.Role", "models.Role"), + }, + }, + AuthMethods: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.AuthMethods", "models.UserAuthMethod"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.AuthMethods.User", "models.User"), + }, + }, } _userToRole.Role = userToRoleBelongsToRole{ @@ -108,6 +243,70 @@ type userToRoleBelongsToUser struct { db *gorm.DB field.RelationField + + Icon struct { + field.RelationField + } + Background struct { + field.RelationField + } + Banner struct { + field.RelationField + } + RemoteInfo struct { + field.RelationField + User struct { + field.RelationField + } + } + InfoFields struct { + field.RelationField + User struct { + field.RelationField + } + } + BeingTypes struct { + field.RelationField + User struct { + field.RelationField + } + } + Tags struct { + field.RelationField + User struct { + field.RelationField + } + } + Relations struct { + field.RelationField + User struct { + field.RelationField + } + TargetUser struct { + field.RelationField + } + } + Pronouns struct { + field.RelationField + User struct { + field.RelationField + } + } + Roles struct { + field.RelationField + User struct { + field.RelationField + } + Role struct { + field.RelationField + } + } + AuthMethods struct { + field.RelationField + User struct { + field.RelationField + } + } } func (a userToRoleBelongsToUser) Where(conds ...field.Expr) *userToRoleBelongsToUser { diff --git a/storage-new/dbgen/user_to_tags.gen.go b/storage-new/dbgen/user_to_tags.gen.go index 9cce7fd..e3761bb 100644 --- a/storage-new/dbgen/user_to_tags.gen.go +++ b/storage-new/dbgen/user_to_tags.gen.go @@ -32,6 +32,141 @@ func newUserToTag(db *gorm.DB, opts ...gen.DOOption) userToTag { db: db.Session(&gorm.Session{}), RelationField: field.NewRelation("User", "models.User"), + Icon: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Icon", "models.MediaMetadata"), + }, + Background: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Background", "models.MediaMetadata"), + }, + Banner: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Banner", "models.MediaMetadata"), + }, + RemoteInfo: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.RemoteInfo", "models.UserRemoteLinks"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.RemoteInfo.User", "models.User"), + }, + }, + InfoFields: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.InfoFields", "models.UserInfoField"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.InfoFields.User", "models.User"), + }, + }, + BeingTypes: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.BeingTypes", "models.UserToBeing"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.BeingTypes.User", "models.User"), + }, + }, + Tags: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.Tags", "models.UserToTag"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Tags.User", "models.User"), + }, + }, + Relations: struct { + field.RelationField + User struct { + field.RelationField + } + TargetUser struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.Relations", "models.UserToUserRelation"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Relations.User", "models.User"), + }, + TargetUser: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Relations.TargetUser", "models.User"), + }, + }, + Pronouns: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.Pronouns", "models.UserToPronoun"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Pronouns.User", "models.User"), + }, + }, + Roles: struct { + field.RelationField + User struct { + field.RelationField + } + Role struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.Roles", "models.UserToRole"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Roles.User", "models.User"), + }, + Role: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Roles.Role", "models.Role"), + }, + }, + AuthMethods: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.AuthMethods", "models.UserAuthMethod"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.AuthMethods.User", "models.User"), + }, + }, } _userToTag.fillFieldMap() @@ -100,6 +235,70 @@ type userToTagBelongsToUser struct { db *gorm.DB field.RelationField + + Icon struct { + field.RelationField + } + Background struct { + field.RelationField + } + Banner struct { + field.RelationField + } + RemoteInfo struct { + field.RelationField + User struct { + field.RelationField + } + } + InfoFields struct { + field.RelationField + User struct { + field.RelationField + } + } + BeingTypes struct { + field.RelationField + User struct { + field.RelationField + } + } + Tags struct { + field.RelationField + User struct { + field.RelationField + } + } + Relations struct { + field.RelationField + User struct { + field.RelationField + } + TargetUser struct { + field.RelationField + } + } + Pronouns struct { + field.RelationField + User struct { + field.RelationField + } + } + Roles struct { + field.RelationField + User struct { + field.RelationField + } + Role struct { + field.RelationField + } + } + AuthMethods struct { + field.RelationField + User struct { + field.RelationField + } + } } func (a userToTagBelongsToUser) Where(conds ...field.Expr) *userToTagBelongsToUser { diff --git a/storage-new/dbgen/user_to_user_relations.gen.go b/storage-new/dbgen/user_to_user_relations.gen.go index 9eb19fd..eb8295b 100644 --- a/storage-new/dbgen/user_to_user_relations.gen.go +++ b/storage-new/dbgen/user_to_user_relations.gen.go @@ -33,6 +33,141 @@ func newUserToUserRelation(db *gorm.DB, opts ...gen.DOOption) userToUserRelation db: db.Session(&gorm.Session{}), RelationField: field.NewRelation("User", "models.User"), + Icon: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Icon", "models.MediaMetadata"), + }, + Background: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Background", "models.MediaMetadata"), + }, + Banner: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Banner", "models.MediaMetadata"), + }, + RemoteInfo: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.RemoteInfo", "models.UserRemoteLinks"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.RemoteInfo.User", "models.User"), + }, + }, + InfoFields: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.InfoFields", "models.UserInfoField"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.InfoFields.User", "models.User"), + }, + }, + BeingTypes: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.BeingTypes", "models.UserToBeing"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.BeingTypes.User", "models.User"), + }, + }, + Tags: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.Tags", "models.UserToTag"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Tags.User", "models.User"), + }, + }, + Relations: struct { + field.RelationField + User struct { + field.RelationField + } + TargetUser struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.Relations", "models.UserToUserRelation"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Relations.User", "models.User"), + }, + TargetUser: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Relations.TargetUser", "models.User"), + }, + }, + Pronouns: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.Pronouns", "models.UserToPronoun"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Pronouns.User", "models.User"), + }, + }, + Roles: struct { + field.RelationField + User struct { + field.RelationField + } + Role struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.Roles", "models.UserToRole"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Roles.User", "models.User"), + }, + Role: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Roles.Role", "models.Role"), + }, + }, + AuthMethods: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.AuthMethods", "models.UserAuthMethod"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.AuthMethods.User", "models.User"), + }, + }, } _userToUserRelation.TargetUser = userToUserRelationBelongsToTargetUser{ @@ -112,6 +247,70 @@ type userToUserRelationBelongsToUser struct { db *gorm.DB field.RelationField + + Icon struct { + field.RelationField + } + Background struct { + field.RelationField + } + Banner struct { + field.RelationField + } + RemoteInfo struct { + field.RelationField + User struct { + field.RelationField + } + } + InfoFields struct { + field.RelationField + User struct { + field.RelationField + } + } + BeingTypes struct { + field.RelationField + User struct { + field.RelationField + } + } + Tags struct { + field.RelationField + User struct { + field.RelationField + } + } + Relations struct { + field.RelationField + User struct { + field.RelationField + } + TargetUser struct { + field.RelationField + } + } + Pronouns struct { + field.RelationField + User struct { + field.RelationField + } + } + Roles struct { + field.RelationField + User struct { + field.RelationField + } + Role struct { + field.RelationField + } + } + AuthMethods struct { + field.RelationField + User struct { + field.RelationField + } + } } func (a userToUserRelationBelongsToUser) Where(conds ...field.Expr) *userToUserRelationBelongsToUser { diff --git a/storage-new/dbgen/users.gen.go b/storage-new/dbgen/users.gen.go index 7e90f55..8c5eb7b 100644 --- a/storage-new/dbgen/users.gen.go +++ b/storage-new/dbgen/users.gen.go @@ -35,15 +35,272 @@ func newUser(db *gorm.DB, opts ...gen.DOOption) user { _user.DisplayName = field.NewString(tableName, "display_name") _user.Description = field.NewString(tableName, "description") _user.IsBot = field.NewBool(tableName, "is_bot") - _user.Icon = field.NewString(tableName, "icon") - _user.Background = field.NewString(tableName, "background") - _user.Banner = field.NewString(tableName, "banner") + _user.IconId = field.NewString(tableName, "icon_id") + _user.BackgroundId = field.NewString(tableName, "background_id") + _user.BannerId = field.NewString(tableName, "banner_id") _user.Indexable = field.NewBool(tableName, "indexable") _user.PublicKey = field.NewBytes(tableName, "public_key") _user.RestrictedFollow = field.NewBool(tableName, "restricted_follow") _user.Location = field.NewString(tableName, "location") _user.Birthday = field.NewTime(tableName, "birthday") _user.Verified = field.NewBool(tableName, "verified") + _user.RemoteInfo = userHasOneRemoteInfo{ + db: db.Session(&gorm.Session{}), + + RelationField: field.NewRelation("RemoteInfo", "models.UserRemoteLinks"), + User: struct { + field.RelationField + Icon struct { + field.RelationField + } + Background struct { + field.RelationField + } + Banner struct { + field.RelationField + } + RemoteInfo struct { + field.RelationField + } + InfoFields struct { + field.RelationField + User struct { + field.RelationField + } + } + BeingTypes struct { + field.RelationField + User struct { + field.RelationField + } + } + Tags struct { + field.RelationField + User struct { + field.RelationField + } + } + Relations struct { + field.RelationField + User struct { + field.RelationField + } + TargetUser struct { + field.RelationField + } + } + Pronouns struct { + field.RelationField + User struct { + field.RelationField + } + } + Roles struct { + field.RelationField + User struct { + field.RelationField + } + Role struct { + field.RelationField + } + } + AuthMethods struct { + field.RelationField + User struct { + field.RelationField + } + } + }{ + RelationField: field.NewRelation("RemoteInfo.User", "models.User"), + Icon: struct { + field.RelationField + }{ + RelationField: field.NewRelation("RemoteInfo.User.Icon", "models.MediaMetadata"), + }, + Background: struct { + field.RelationField + }{ + RelationField: field.NewRelation("RemoteInfo.User.Background", "models.MediaMetadata"), + }, + Banner: struct { + field.RelationField + }{ + RelationField: field.NewRelation("RemoteInfo.User.Banner", "models.MediaMetadata"), + }, + RemoteInfo: struct { + field.RelationField + }{ + RelationField: field.NewRelation("RemoteInfo.User.RemoteInfo", "models.UserRemoteLinks"), + }, + InfoFields: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("RemoteInfo.User.InfoFields", "models.UserInfoField"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("RemoteInfo.User.InfoFields.User", "models.User"), + }, + }, + BeingTypes: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("RemoteInfo.User.BeingTypes", "models.UserToBeing"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("RemoteInfo.User.BeingTypes.User", "models.User"), + }, + }, + Tags: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("RemoteInfo.User.Tags", "models.UserToTag"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("RemoteInfo.User.Tags.User", "models.User"), + }, + }, + Relations: struct { + field.RelationField + User struct { + field.RelationField + } + TargetUser struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("RemoteInfo.User.Relations", "models.UserToUserRelation"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("RemoteInfo.User.Relations.User", "models.User"), + }, + TargetUser: struct { + field.RelationField + }{ + RelationField: field.NewRelation("RemoteInfo.User.Relations.TargetUser", "models.User"), + }, + }, + Pronouns: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("RemoteInfo.User.Pronouns", "models.UserToPronoun"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("RemoteInfo.User.Pronouns.User", "models.User"), + }, + }, + Roles: struct { + field.RelationField + User struct { + field.RelationField + } + Role struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("RemoteInfo.User.Roles", "models.UserToRole"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("RemoteInfo.User.Roles.User", "models.User"), + }, + Role: struct { + field.RelationField + }{ + RelationField: field.NewRelation("RemoteInfo.User.Roles.Role", "models.Role"), + }, + }, + AuthMethods: struct { + field.RelationField + User struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("RemoteInfo.User.AuthMethods", "models.UserAuthMethod"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("RemoteInfo.User.AuthMethods.User", "models.User"), + }, + }, + }, + } + + _user.InfoFields = userHasManyInfoFields{ + db: db.Session(&gorm.Session{}), + + RelationField: field.NewRelation("InfoFields", "models.UserInfoField"), + } + + _user.BeingTypes = userHasManyBeingTypes{ + db: db.Session(&gorm.Session{}), + + RelationField: field.NewRelation("BeingTypes", "models.UserToBeing"), + } + + _user.Tags = userHasManyTags{ + db: db.Session(&gorm.Session{}), + + RelationField: field.NewRelation("Tags", "models.UserToTag"), + } + + _user.Relations = userHasManyRelations{ + db: db.Session(&gorm.Session{}), + + RelationField: field.NewRelation("Relations", "models.UserToUserRelation"), + } + + _user.Pronouns = userHasManyPronouns{ + db: db.Session(&gorm.Session{}), + + RelationField: field.NewRelation("Pronouns", "models.UserToPronoun"), + } + + _user.Roles = userHasManyRoles{ + db: db.Session(&gorm.Session{}), + + RelationField: field.NewRelation("Roles", "models.UserToRole"), + } + + _user.AuthMethods = userHasManyAuthMethods{ + db: db.Session(&gorm.Session{}), + + RelationField: field.NewRelation("AuthMethods", "models.UserAuthMethod"), + } + + _user.Icon = userBelongsToIcon{ + db: db.Session(&gorm.Session{}), + + RelationField: field.NewRelation("Icon", "models.MediaMetadata"), + } + + _user.Background = userBelongsToBackground{ + db: db.Session(&gorm.Session{}), + + RelationField: field.NewRelation("Background", "models.MediaMetadata"), + } + + _user.Banner = userBelongsToBanner{ + db: db.Session(&gorm.Session{}), + + RelationField: field.NewRelation("Banner", "models.MediaMetadata"), + } _user.fillFieldMap() @@ -63,15 +320,36 @@ type user struct { DisplayName field.String Description field.String IsBot field.Bool - Icon field.String - Background field.String - Banner field.String + IconId field.String + BackgroundId field.String + BannerId field.String Indexable field.Bool PublicKey field.Bytes RestrictedFollow field.Bool Location field.String Birthday field.Time Verified field.Bool + RemoteInfo userHasOneRemoteInfo + + InfoFields userHasManyInfoFields + + BeingTypes userHasManyBeingTypes + + Tags userHasManyTags + + Relations userHasManyRelations + + Pronouns userHasManyPronouns + + Roles userHasManyRoles + + AuthMethods userHasManyAuthMethods + + Icon userBelongsToIcon + + Background userBelongsToBackground + + Banner userBelongsToBanner fieldMap map[string]field.Expr } @@ -97,9 +375,9 @@ func (u *user) updateTableName(table string) *user { u.DisplayName = field.NewString(table, "display_name") u.Description = field.NewString(table, "description") u.IsBot = field.NewBool(table, "is_bot") - u.Icon = field.NewString(table, "icon") - u.Background = field.NewString(table, "background") - u.Banner = field.NewString(table, "banner") + u.IconId = field.NewString(table, "icon_id") + u.BackgroundId = field.NewString(table, "background_id") + u.BannerId = field.NewString(table, "banner_id") u.Indexable = field.NewBool(table, "indexable") u.PublicKey = field.NewBytes(table, "public_key") u.RestrictedFollow = field.NewBool(table, "restricted_follow") @@ -122,7 +400,7 @@ func (u *user) GetFieldByName(fieldName string) (field.OrderExpr, bool) { } func (u *user) fillFieldMap() { - u.fieldMap = make(map[string]field.Expr, 18) + u.fieldMap = make(map[string]field.Expr, 29) u.fieldMap["id"] = u.ID u.fieldMap["username"] = u.Username u.fieldMap["created_at"] = u.CreatedAt @@ -132,15 +410,16 @@ func (u *user) fillFieldMap() { u.fieldMap["display_name"] = u.DisplayName u.fieldMap["description"] = u.Description u.fieldMap["is_bot"] = u.IsBot - u.fieldMap["icon"] = u.Icon - u.fieldMap["background"] = u.Background - u.fieldMap["banner"] = u.Banner + u.fieldMap["icon_id"] = u.IconId + u.fieldMap["background_id"] = u.BackgroundId + u.fieldMap["banner_id"] = u.BannerId u.fieldMap["indexable"] = u.Indexable u.fieldMap["public_key"] = u.PublicKey u.fieldMap["restricted_follow"] = u.RestrictedFollow u.fieldMap["location"] = u.Location u.fieldMap["birthday"] = u.Birthday u.fieldMap["verified"] = u.Verified + } func (u user) clone(db *gorm.DB) user { @@ -153,6 +432,851 @@ func (u user) replaceDB(db *gorm.DB) user { return u } +type userHasOneRemoteInfo struct { + db *gorm.DB + + field.RelationField + + User struct { + field.RelationField + Icon struct { + field.RelationField + } + Background struct { + field.RelationField + } + Banner struct { + field.RelationField + } + RemoteInfo struct { + field.RelationField + } + InfoFields struct { + field.RelationField + User struct { + field.RelationField + } + } + BeingTypes struct { + field.RelationField + User struct { + field.RelationField + } + } + Tags struct { + field.RelationField + User struct { + field.RelationField + } + } + Relations struct { + field.RelationField + User struct { + field.RelationField + } + TargetUser struct { + field.RelationField + } + } + Pronouns struct { + field.RelationField + User struct { + field.RelationField + } + } + Roles struct { + field.RelationField + User struct { + field.RelationField + } + Role struct { + field.RelationField + } + } + AuthMethods struct { + field.RelationField + User struct { + field.RelationField + } + } + } +} + +func (a userHasOneRemoteInfo) Where(conds ...field.Expr) *userHasOneRemoteInfo { + if len(conds) == 0 { + return &a + } + + exprs := make([]clause.Expression, 0, len(conds)) + for _, cond := range conds { + exprs = append(exprs, cond.BeCond().(clause.Expression)) + } + a.db = a.db.Clauses(clause.Where{Exprs: exprs}) + return &a +} + +func (a userHasOneRemoteInfo) WithContext(ctx context.Context) *userHasOneRemoteInfo { + a.db = a.db.WithContext(ctx) + return &a +} + +func (a userHasOneRemoteInfo) Session(session *gorm.Session) *userHasOneRemoteInfo { + a.db = a.db.Session(session) + return &a +} + +func (a userHasOneRemoteInfo) Model(m *models.User) *userHasOneRemoteInfoTx { + return &userHasOneRemoteInfoTx{a.db.Model(m).Association(a.Name())} +} + +type userHasOneRemoteInfoTx struct{ tx *gorm.Association } + +func (a userHasOneRemoteInfoTx) Find() (result *models.UserRemoteLinks, err error) { + return result, a.tx.Find(&result) +} + +func (a userHasOneRemoteInfoTx) Append(values ...*models.UserRemoteLinks) (err error) { + targetValues := make([]interface{}, len(values)) + for i, v := range values { + targetValues[i] = v + } + return a.tx.Append(targetValues...) +} + +func (a userHasOneRemoteInfoTx) Replace(values ...*models.UserRemoteLinks) (err error) { + targetValues := make([]interface{}, len(values)) + for i, v := range values { + targetValues[i] = v + } + return a.tx.Replace(targetValues...) +} + +func (a userHasOneRemoteInfoTx) Delete(values ...*models.UserRemoteLinks) (err error) { + targetValues := make([]interface{}, len(values)) + for i, v := range values { + targetValues[i] = v + } + return a.tx.Delete(targetValues...) +} + +func (a userHasOneRemoteInfoTx) Clear() error { + return a.tx.Clear() +} + +func (a userHasOneRemoteInfoTx) Count() int64 { + return a.tx.Count() +} + +type userHasManyInfoFields struct { + db *gorm.DB + + field.RelationField +} + +func (a userHasManyInfoFields) Where(conds ...field.Expr) *userHasManyInfoFields { + if len(conds) == 0 { + return &a + } + + exprs := make([]clause.Expression, 0, len(conds)) + for _, cond := range conds { + exprs = append(exprs, cond.BeCond().(clause.Expression)) + } + a.db = a.db.Clauses(clause.Where{Exprs: exprs}) + return &a +} + +func (a userHasManyInfoFields) WithContext(ctx context.Context) *userHasManyInfoFields { + a.db = a.db.WithContext(ctx) + return &a +} + +func (a userHasManyInfoFields) Session(session *gorm.Session) *userHasManyInfoFields { + a.db = a.db.Session(session) + return &a +} + +func (a userHasManyInfoFields) Model(m *models.User) *userHasManyInfoFieldsTx { + return &userHasManyInfoFieldsTx{a.db.Model(m).Association(a.Name())} +} + +type userHasManyInfoFieldsTx struct{ tx *gorm.Association } + +func (a userHasManyInfoFieldsTx) Find() (result []*models.UserInfoField, err error) { + return result, a.tx.Find(&result) +} + +func (a userHasManyInfoFieldsTx) Append(values ...*models.UserInfoField) (err error) { + targetValues := make([]interface{}, len(values)) + for i, v := range values { + targetValues[i] = v + } + return a.tx.Append(targetValues...) +} + +func (a userHasManyInfoFieldsTx) Replace(values ...*models.UserInfoField) (err error) { + targetValues := make([]interface{}, len(values)) + for i, v := range values { + targetValues[i] = v + } + return a.tx.Replace(targetValues...) +} + +func (a userHasManyInfoFieldsTx) Delete(values ...*models.UserInfoField) (err error) { + targetValues := make([]interface{}, len(values)) + for i, v := range values { + targetValues[i] = v + } + return a.tx.Delete(targetValues...) +} + +func (a userHasManyInfoFieldsTx) Clear() error { + return a.tx.Clear() +} + +func (a userHasManyInfoFieldsTx) Count() int64 { + return a.tx.Count() +} + +type userHasManyBeingTypes struct { + db *gorm.DB + + field.RelationField +} + +func (a userHasManyBeingTypes) Where(conds ...field.Expr) *userHasManyBeingTypes { + if len(conds) == 0 { + return &a + } + + exprs := make([]clause.Expression, 0, len(conds)) + for _, cond := range conds { + exprs = append(exprs, cond.BeCond().(clause.Expression)) + } + a.db = a.db.Clauses(clause.Where{Exprs: exprs}) + return &a +} + +func (a userHasManyBeingTypes) WithContext(ctx context.Context) *userHasManyBeingTypes { + a.db = a.db.WithContext(ctx) + return &a +} + +func (a userHasManyBeingTypes) Session(session *gorm.Session) *userHasManyBeingTypes { + a.db = a.db.Session(session) + return &a +} + +func (a userHasManyBeingTypes) Model(m *models.User) *userHasManyBeingTypesTx { + return &userHasManyBeingTypesTx{a.db.Model(m).Association(a.Name())} +} + +type userHasManyBeingTypesTx struct{ tx *gorm.Association } + +func (a userHasManyBeingTypesTx) Find() (result []*models.UserToBeing, err error) { + return result, a.tx.Find(&result) +} + +func (a userHasManyBeingTypesTx) Append(values ...*models.UserToBeing) (err error) { + targetValues := make([]interface{}, len(values)) + for i, v := range values { + targetValues[i] = v + } + return a.tx.Append(targetValues...) +} + +func (a userHasManyBeingTypesTx) Replace(values ...*models.UserToBeing) (err error) { + targetValues := make([]interface{}, len(values)) + for i, v := range values { + targetValues[i] = v + } + return a.tx.Replace(targetValues...) +} + +func (a userHasManyBeingTypesTx) Delete(values ...*models.UserToBeing) (err error) { + targetValues := make([]interface{}, len(values)) + for i, v := range values { + targetValues[i] = v + } + return a.tx.Delete(targetValues...) +} + +func (a userHasManyBeingTypesTx) Clear() error { + return a.tx.Clear() +} + +func (a userHasManyBeingTypesTx) Count() int64 { + return a.tx.Count() +} + +type userHasManyTags struct { + db *gorm.DB + + field.RelationField +} + +func (a userHasManyTags) Where(conds ...field.Expr) *userHasManyTags { + if len(conds) == 0 { + return &a + } + + exprs := make([]clause.Expression, 0, len(conds)) + for _, cond := range conds { + exprs = append(exprs, cond.BeCond().(clause.Expression)) + } + a.db = a.db.Clauses(clause.Where{Exprs: exprs}) + return &a +} + +func (a userHasManyTags) WithContext(ctx context.Context) *userHasManyTags { + a.db = a.db.WithContext(ctx) + return &a +} + +func (a userHasManyTags) Session(session *gorm.Session) *userHasManyTags { + a.db = a.db.Session(session) + return &a +} + +func (a userHasManyTags) Model(m *models.User) *userHasManyTagsTx { + return &userHasManyTagsTx{a.db.Model(m).Association(a.Name())} +} + +type userHasManyTagsTx struct{ tx *gorm.Association } + +func (a userHasManyTagsTx) Find() (result []*models.UserToTag, err error) { + return result, a.tx.Find(&result) +} + +func (a userHasManyTagsTx) Append(values ...*models.UserToTag) (err error) { + targetValues := make([]interface{}, len(values)) + for i, v := range values { + targetValues[i] = v + } + return a.tx.Append(targetValues...) +} + +func (a userHasManyTagsTx) Replace(values ...*models.UserToTag) (err error) { + targetValues := make([]interface{}, len(values)) + for i, v := range values { + targetValues[i] = v + } + return a.tx.Replace(targetValues...) +} + +func (a userHasManyTagsTx) Delete(values ...*models.UserToTag) (err error) { + targetValues := make([]interface{}, len(values)) + for i, v := range values { + targetValues[i] = v + } + return a.tx.Delete(targetValues...) +} + +func (a userHasManyTagsTx) Clear() error { + return a.tx.Clear() +} + +func (a userHasManyTagsTx) Count() int64 { + return a.tx.Count() +} + +type userHasManyRelations struct { + db *gorm.DB + + field.RelationField +} + +func (a userHasManyRelations) Where(conds ...field.Expr) *userHasManyRelations { + if len(conds) == 0 { + return &a + } + + exprs := make([]clause.Expression, 0, len(conds)) + for _, cond := range conds { + exprs = append(exprs, cond.BeCond().(clause.Expression)) + } + a.db = a.db.Clauses(clause.Where{Exprs: exprs}) + return &a +} + +func (a userHasManyRelations) WithContext(ctx context.Context) *userHasManyRelations { + a.db = a.db.WithContext(ctx) + return &a +} + +func (a userHasManyRelations) Session(session *gorm.Session) *userHasManyRelations { + a.db = a.db.Session(session) + return &a +} + +func (a userHasManyRelations) Model(m *models.User) *userHasManyRelationsTx { + return &userHasManyRelationsTx{a.db.Model(m).Association(a.Name())} +} + +type userHasManyRelationsTx struct{ tx *gorm.Association } + +func (a userHasManyRelationsTx) Find() (result []*models.UserToUserRelation, err error) { + return result, a.tx.Find(&result) +} + +func (a userHasManyRelationsTx) Append(values ...*models.UserToUserRelation) (err error) { + targetValues := make([]interface{}, len(values)) + for i, v := range values { + targetValues[i] = v + } + return a.tx.Append(targetValues...) +} + +func (a userHasManyRelationsTx) Replace(values ...*models.UserToUserRelation) (err error) { + targetValues := make([]interface{}, len(values)) + for i, v := range values { + targetValues[i] = v + } + return a.tx.Replace(targetValues...) +} + +func (a userHasManyRelationsTx) Delete(values ...*models.UserToUserRelation) (err error) { + targetValues := make([]interface{}, len(values)) + for i, v := range values { + targetValues[i] = v + } + return a.tx.Delete(targetValues...) +} + +func (a userHasManyRelationsTx) Clear() error { + return a.tx.Clear() +} + +func (a userHasManyRelationsTx) Count() int64 { + return a.tx.Count() +} + +type userHasManyPronouns struct { + db *gorm.DB + + field.RelationField +} + +func (a userHasManyPronouns) Where(conds ...field.Expr) *userHasManyPronouns { + if len(conds) == 0 { + return &a + } + + exprs := make([]clause.Expression, 0, len(conds)) + for _, cond := range conds { + exprs = append(exprs, cond.BeCond().(clause.Expression)) + } + a.db = a.db.Clauses(clause.Where{Exprs: exprs}) + return &a +} + +func (a userHasManyPronouns) WithContext(ctx context.Context) *userHasManyPronouns { + a.db = a.db.WithContext(ctx) + return &a +} + +func (a userHasManyPronouns) Session(session *gorm.Session) *userHasManyPronouns { + a.db = a.db.Session(session) + return &a +} + +func (a userHasManyPronouns) Model(m *models.User) *userHasManyPronounsTx { + return &userHasManyPronounsTx{a.db.Model(m).Association(a.Name())} +} + +type userHasManyPronounsTx struct{ tx *gorm.Association } + +func (a userHasManyPronounsTx) Find() (result []*models.UserToPronoun, err error) { + return result, a.tx.Find(&result) +} + +func (a userHasManyPronounsTx) Append(values ...*models.UserToPronoun) (err error) { + targetValues := make([]interface{}, len(values)) + for i, v := range values { + targetValues[i] = v + } + return a.tx.Append(targetValues...) +} + +func (a userHasManyPronounsTx) Replace(values ...*models.UserToPronoun) (err error) { + targetValues := make([]interface{}, len(values)) + for i, v := range values { + targetValues[i] = v + } + return a.tx.Replace(targetValues...) +} + +func (a userHasManyPronounsTx) Delete(values ...*models.UserToPronoun) (err error) { + targetValues := make([]interface{}, len(values)) + for i, v := range values { + targetValues[i] = v + } + return a.tx.Delete(targetValues...) +} + +func (a userHasManyPronounsTx) Clear() error { + return a.tx.Clear() +} + +func (a userHasManyPronounsTx) Count() int64 { + return a.tx.Count() +} + +type userHasManyRoles struct { + db *gorm.DB + + field.RelationField +} + +func (a userHasManyRoles) Where(conds ...field.Expr) *userHasManyRoles { + if len(conds) == 0 { + return &a + } + + exprs := make([]clause.Expression, 0, len(conds)) + for _, cond := range conds { + exprs = append(exprs, cond.BeCond().(clause.Expression)) + } + a.db = a.db.Clauses(clause.Where{Exprs: exprs}) + return &a +} + +func (a userHasManyRoles) WithContext(ctx context.Context) *userHasManyRoles { + a.db = a.db.WithContext(ctx) + return &a +} + +func (a userHasManyRoles) Session(session *gorm.Session) *userHasManyRoles { + a.db = a.db.Session(session) + return &a +} + +func (a userHasManyRoles) Model(m *models.User) *userHasManyRolesTx { + return &userHasManyRolesTx{a.db.Model(m).Association(a.Name())} +} + +type userHasManyRolesTx struct{ tx *gorm.Association } + +func (a userHasManyRolesTx) Find() (result []*models.UserToRole, err error) { + return result, a.tx.Find(&result) +} + +func (a userHasManyRolesTx) Append(values ...*models.UserToRole) (err error) { + targetValues := make([]interface{}, len(values)) + for i, v := range values { + targetValues[i] = v + } + return a.tx.Append(targetValues...) +} + +func (a userHasManyRolesTx) Replace(values ...*models.UserToRole) (err error) { + targetValues := make([]interface{}, len(values)) + for i, v := range values { + targetValues[i] = v + } + return a.tx.Replace(targetValues...) +} + +func (a userHasManyRolesTx) Delete(values ...*models.UserToRole) (err error) { + targetValues := make([]interface{}, len(values)) + for i, v := range values { + targetValues[i] = v + } + return a.tx.Delete(targetValues...) +} + +func (a userHasManyRolesTx) Clear() error { + return a.tx.Clear() +} + +func (a userHasManyRolesTx) Count() int64 { + return a.tx.Count() +} + +type userHasManyAuthMethods struct { + db *gorm.DB + + field.RelationField +} + +func (a userHasManyAuthMethods) Where(conds ...field.Expr) *userHasManyAuthMethods { + if len(conds) == 0 { + return &a + } + + exprs := make([]clause.Expression, 0, len(conds)) + for _, cond := range conds { + exprs = append(exprs, cond.BeCond().(clause.Expression)) + } + a.db = a.db.Clauses(clause.Where{Exprs: exprs}) + return &a +} + +func (a userHasManyAuthMethods) WithContext(ctx context.Context) *userHasManyAuthMethods { + a.db = a.db.WithContext(ctx) + return &a +} + +func (a userHasManyAuthMethods) Session(session *gorm.Session) *userHasManyAuthMethods { + a.db = a.db.Session(session) + return &a +} + +func (a userHasManyAuthMethods) Model(m *models.User) *userHasManyAuthMethodsTx { + return &userHasManyAuthMethodsTx{a.db.Model(m).Association(a.Name())} +} + +type userHasManyAuthMethodsTx struct{ tx *gorm.Association } + +func (a userHasManyAuthMethodsTx) Find() (result []*models.UserAuthMethod, err error) { + return result, a.tx.Find(&result) +} + +func (a userHasManyAuthMethodsTx) Append(values ...*models.UserAuthMethod) (err error) { + targetValues := make([]interface{}, len(values)) + for i, v := range values { + targetValues[i] = v + } + return a.tx.Append(targetValues...) +} + +func (a userHasManyAuthMethodsTx) Replace(values ...*models.UserAuthMethod) (err error) { + targetValues := make([]interface{}, len(values)) + for i, v := range values { + targetValues[i] = v + } + return a.tx.Replace(targetValues...) +} + +func (a userHasManyAuthMethodsTx) Delete(values ...*models.UserAuthMethod) (err error) { + targetValues := make([]interface{}, len(values)) + for i, v := range values { + targetValues[i] = v + } + return a.tx.Delete(targetValues...) +} + +func (a userHasManyAuthMethodsTx) Clear() error { + return a.tx.Clear() +} + +func (a userHasManyAuthMethodsTx) Count() int64 { + return a.tx.Count() +} + +type userBelongsToIcon struct { + db *gorm.DB + + field.RelationField +} + +func (a userBelongsToIcon) Where(conds ...field.Expr) *userBelongsToIcon { + if len(conds) == 0 { + return &a + } + + exprs := make([]clause.Expression, 0, len(conds)) + for _, cond := range conds { + exprs = append(exprs, cond.BeCond().(clause.Expression)) + } + a.db = a.db.Clauses(clause.Where{Exprs: exprs}) + return &a +} + +func (a userBelongsToIcon) WithContext(ctx context.Context) *userBelongsToIcon { + a.db = a.db.WithContext(ctx) + return &a +} + +func (a userBelongsToIcon) Session(session *gorm.Session) *userBelongsToIcon { + a.db = a.db.Session(session) + return &a +} + +func (a userBelongsToIcon) Model(m *models.User) *userBelongsToIconTx { + return &userBelongsToIconTx{a.db.Model(m).Association(a.Name())} +} + +type userBelongsToIconTx struct{ tx *gorm.Association } + +func (a userBelongsToIconTx) Find() (result *models.MediaMetadata, err error) { + return result, a.tx.Find(&result) +} + +func (a userBelongsToIconTx) Append(values ...*models.MediaMetadata) (err error) { + targetValues := make([]interface{}, len(values)) + for i, v := range values { + targetValues[i] = v + } + return a.tx.Append(targetValues...) +} + +func (a userBelongsToIconTx) Replace(values ...*models.MediaMetadata) (err error) { + targetValues := make([]interface{}, len(values)) + for i, v := range values { + targetValues[i] = v + } + return a.tx.Replace(targetValues...) +} + +func (a userBelongsToIconTx) Delete(values ...*models.MediaMetadata) (err error) { + targetValues := make([]interface{}, len(values)) + for i, v := range values { + targetValues[i] = v + } + return a.tx.Delete(targetValues...) +} + +func (a userBelongsToIconTx) Clear() error { + return a.tx.Clear() +} + +func (a userBelongsToIconTx) Count() int64 { + return a.tx.Count() +} + +type userBelongsToBackground struct { + db *gorm.DB + + field.RelationField +} + +func (a userBelongsToBackground) Where(conds ...field.Expr) *userBelongsToBackground { + if len(conds) == 0 { + return &a + } + + exprs := make([]clause.Expression, 0, len(conds)) + for _, cond := range conds { + exprs = append(exprs, cond.BeCond().(clause.Expression)) + } + a.db = a.db.Clauses(clause.Where{Exprs: exprs}) + return &a +} + +func (a userBelongsToBackground) WithContext(ctx context.Context) *userBelongsToBackground { + a.db = a.db.WithContext(ctx) + return &a +} + +func (a userBelongsToBackground) Session(session *gorm.Session) *userBelongsToBackground { + a.db = a.db.Session(session) + return &a +} + +func (a userBelongsToBackground) Model(m *models.User) *userBelongsToBackgroundTx { + return &userBelongsToBackgroundTx{a.db.Model(m).Association(a.Name())} +} + +type userBelongsToBackgroundTx struct{ tx *gorm.Association } + +func (a userBelongsToBackgroundTx) Find() (result *models.MediaMetadata, err error) { + return result, a.tx.Find(&result) +} + +func (a userBelongsToBackgroundTx) Append(values ...*models.MediaMetadata) (err error) { + targetValues := make([]interface{}, len(values)) + for i, v := range values { + targetValues[i] = v + } + return a.tx.Append(targetValues...) +} + +func (a userBelongsToBackgroundTx) Replace(values ...*models.MediaMetadata) (err error) { + targetValues := make([]interface{}, len(values)) + for i, v := range values { + targetValues[i] = v + } + return a.tx.Replace(targetValues...) +} + +func (a userBelongsToBackgroundTx) Delete(values ...*models.MediaMetadata) (err error) { + targetValues := make([]interface{}, len(values)) + for i, v := range values { + targetValues[i] = v + } + return a.tx.Delete(targetValues...) +} + +func (a userBelongsToBackgroundTx) Clear() error { + return a.tx.Clear() +} + +func (a userBelongsToBackgroundTx) Count() int64 { + return a.tx.Count() +} + +type userBelongsToBanner struct { + db *gorm.DB + + field.RelationField +} + +func (a userBelongsToBanner) Where(conds ...field.Expr) *userBelongsToBanner { + if len(conds) == 0 { + return &a + } + + exprs := make([]clause.Expression, 0, len(conds)) + for _, cond := range conds { + exprs = append(exprs, cond.BeCond().(clause.Expression)) + } + a.db = a.db.Clauses(clause.Where{Exprs: exprs}) + return &a +} + +func (a userBelongsToBanner) WithContext(ctx context.Context) *userBelongsToBanner { + a.db = a.db.WithContext(ctx) + return &a +} + +func (a userBelongsToBanner) Session(session *gorm.Session) *userBelongsToBanner { + a.db = a.db.Session(session) + return &a +} + +func (a userBelongsToBanner) Model(m *models.User) *userBelongsToBannerTx { + return &userBelongsToBannerTx{a.db.Model(m).Association(a.Name())} +} + +type userBelongsToBannerTx struct{ tx *gorm.Association } + +func (a userBelongsToBannerTx) Find() (result *models.MediaMetadata, err error) { + return result, a.tx.Find(&result) +} + +func (a userBelongsToBannerTx) Append(values ...*models.MediaMetadata) (err error) { + targetValues := make([]interface{}, len(values)) + for i, v := range values { + targetValues[i] = v + } + return a.tx.Append(targetValues...) +} + +func (a userBelongsToBannerTx) Replace(values ...*models.MediaMetadata) (err error) { + targetValues := make([]interface{}, len(values)) + for i, v := range values { + targetValues[i] = v + } + return a.tx.Replace(targetValues...) +} + +func (a userBelongsToBannerTx) Delete(values ...*models.MediaMetadata) (err error) { + targetValues := make([]interface{}, len(values)) + for i, v := range values { + targetValues[i] = v + } + return a.tx.Delete(targetValues...) +} + +func (a userBelongsToBannerTx) Clear() error { + return a.tx.Clear() +} + +func (a userBelongsToBannerTx) Count() int64 { + return a.tx.Count() +} + type userDo struct{ gen.DO } type IUserDo interface { diff --git a/storage-new/models/0allTypes.go b/storage-new/models/0allTypes.go index 634852f..d4b3f7d 100644 --- a/storage-new/models/0allTypes.go +++ b/storage-new/models/0allTypes.go @@ -11,6 +11,8 @@ var AllTypes = []any{ &Reaction{}, &RemoteServer{}, &Role{}, + &AccessToken{}, + &LoginProcessToken{}, &User{}, &UserAuthMethod{}, &UserToBeing{}, @@ -18,5 +20,6 @@ var AllTypes = []any{ &UserToUserRelation{}, &UserRemoteLinks{}, &UserToTag{}, + &UserToPronoun{}, &UserToRole{}, } diff --git a/storage-new/models/MediaMetadata.go b/storage-new/models/MediaMetadata.go index c75ee64..eca359c 100644 --- a/storage-new/models/MediaMetadata.go +++ b/storage-new/models/MediaMetadata.go @@ -10,7 +10,7 @@ import ( // Media is, at least for Linstrom, always stored on a separate server, // be that the remote server it originated from or an s3 bucket type MediaMetadata struct { - ID string `gorm:"primarykey"` // The unique ID of this media file + ID string `gorm:"primarykey;type:uuid;default:gen_random_uuid()"` // The unique ID of this media file CreatedAt time.Time // When this entry was created UpdatedAt time.Time // When this entry was last updated // When this entry was deleted (for soft deletions) diff --git a/storage-new/models/Note.go b/storage-new/models/Note.go index f5e8e0e..bb14c9a 100644 --- a/storage-new/models/Note.go +++ b/storage-new/models/Note.go @@ -15,7 +15,7 @@ import ( // - Pings: models.NoteToPing // - Tags: models.NoteTag type Note struct { - ID string `gorm:"primarykey"` // Make ID a string (uuid) for other implementations + ID string `gorm:"primarykey;type:uuid;default:gen_random_uuid()"` // Make ID a string (uuid) for other implementations CreatedAt time.Time // When this entry was created UpdatedAt time.Time // When this entry was last updated // When this entry was deleted (for soft deletions) diff --git a/storage-new/models/TokenAccess.go b/storage-new/models/TokenAccess.go new file mode 100644 index 0000000..dca7aea --- /dev/null +++ b/storage-new/models/TokenAccess.go @@ -0,0 +1,22 @@ +package models + +import ( + "time" + + "gorm.io/gen" +) + +type AccessToken struct { + User User + UserId string + Token string `gorm:"primarykey;type:uuid;default:gen_random_uuid()"` + Name string // Token name will be empty if autogenerated with sucessful login + // Every token expires, even if set to "not expire". If set to "not expire", it just expires + // at a point in the future this server should never reach + ExpiresAt time.Time `gorm:"default:TIMESTAMP WITH TIME ZONE '9999-12-30 23:59:59+00'"` +} + +type IAccessToken interface { + // INSERT INTO @@table (user_id, token, name, {{if expiresAt != nil}}, ) + NewToken(user *User, name string, expiresAt *time.Time) (gen.T, error) +} diff --git a/storage-new/models/TokenLoginProcess.go b/storage-new/models/TokenLoginProcess.go new file mode 100644 index 0000000..ad96975 --- /dev/null +++ b/storage-new/models/TokenLoginProcess.go @@ -0,0 +1,12 @@ +package models + +import "time" + +// A token used during the login process +// Each user may only have at most one login process active at the same time +type LoginProcessToken struct { + User User + UserId string + Token string `gorm:"primarykey;type:uuid;default:gen_random_uuid()"` + ExpiresAt time.Time +} diff --git a/storage-new/models/User.go b/storage-new/models/User.go index f229146..94ee0c8 100644 --- a/storage-new/models/User.go +++ b/storage-new/models/User.go @@ -30,7 +30,6 @@ type User struct { // identifier for users and other servers, especially when changing the username // (username != display name) might be a future feature // Same also applies for other types that use a UUID as primary key - // TODO: Copy the default value and gorm type to those other types as well ID string `gorm:"primarykey;type:uuid;default:gen_random_uuid()"` // Username of the user (eg "max" if the full username is @max@example.com) // Assume unchangable (once set by a user) to be kind to other implementations @@ -63,9 +62,22 @@ type User struct { Location *string Birthday *time.Time - // --- And internal account stuff --- // Whether the account got verified and is allowed to be active // For local accounts being active means being allowed to login and perform interactions // For remote users, if an account is not verified, any interactions it sends are discarded Verified bool + // 64 byte unique id for passkeys, because UUIDs are 128 bytes and passkey spec says 64 bytes max + // In theory, could also slash Id in half, but that would be a lot more calculations than the + // saved space is worth + PasskeyId []byte + + // ---- "Remote" linked values + InfoFields []UserInfoField + BeingTypes []UserToBeing + Tags []UserToTag + Relations []UserToUserRelation + Pronouns []UserToPronoun + Roles []UserToRole + RemoteInfo *UserRemoteLinks + AuthMethods []UserAuthMethod } diff --git a/storage-new/models/UserAuthentication.go b/storage-new/models/UserAuthentication.go index cbca796..b762191 100644 --- a/storage-new/models/UserAuthentication.go +++ b/storage-new/models/UserAuthentication.go @@ -5,6 +5,8 @@ package models // For a password, this would be a hash of that password, // totp would be the seed, // and passkey would be the webauthn.Credential, marshalled into json +// +// Password hashes may only exist at most once per user, the rest 0-m type UserAuthMethod struct { User User UserId string diff --git a/storage-new/models/UserToPronoun.go b/storage-new/models/UserToPronoun.go new file mode 100644 index 0000000..cbc6d38 --- /dev/null +++ b/storage-new/models/UserToPronoun.go @@ -0,0 +1,7 @@ +package models + +type UserToPronoun struct { + User User + UserId string + Pronoung string +}