Files
peach/gen/go/service.pb.gorm.go
2025-04-06 10:25:26 -06:00

1188 lines
35 KiB
Go

package pb
import (
context "context"
fmt "fmt"
errors "github.com/infobloxopen/protoc-gen-gorm/errors"
field_mask "google.golang.org/genproto/protobuf/field_mask"
gorm "gorm.io/gorm"
)
type UserORM struct {
Bio string
Id uint64
Username string
}
// TableName overrides the default tablename generated by GORM
func (UserORM) TableName() string {
return "users"
}
// ToORM runs the BeforeToORM hook if present, converts the fields of this
// object to ORM format, runs the AfterToORM hook, then returns the ORM object
func (m *User) ToORM(ctx context.Context) (UserORM, error) {
to := UserORM{}
var err error
if prehook, ok := interface{}(m).(UserWithBeforeToORM); ok {
if err = prehook.BeforeToORM(ctx, &to); err != nil {
return to, err
}
}
to.Id = m.Id
to.Username = m.Username
to.Bio = m.Bio
if posthook, ok := interface{}(m).(UserWithAfterToORM); ok {
err = posthook.AfterToORM(ctx, &to)
}
return to, err
}
// ToPB runs the BeforeToPB hook if present, converts the fields of this
// object to PB format, runs the AfterToPB hook, then returns the PB object
func (m *UserORM) ToPB(ctx context.Context) (User, error) {
to := User{}
var err error
if prehook, ok := interface{}(m).(UserWithBeforeToPB); ok {
if err = prehook.BeforeToPB(ctx, &to); err != nil {
return to, err
}
}
to.Id = m.Id
to.Username = m.Username
to.Bio = m.Bio
if posthook, ok := interface{}(m).(UserWithAfterToPB); ok {
err = posthook.AfterToPB(ctx, &to)
}
return to, err
}
// The following are interfaces you can implement for special behavior during ORM/PB conversions
// of type User the arg will be the target, the caller the one being converted from
// UserBeforeToORM called before default ToORM code
type UserWithBeforeToORM interface {
BeforeToORM(context.Context, *UserORM) error
}
// UserAfterToORM called after default ToORM code
type UserWithAfterToORM interface {
AfterToORM(context.Context, *UserORM) error
}
// UserBeforeToPB called before default ToPB code
type UserWithBeforeToPB interface {
BeforeToPB(context.Context, *User) error
}
// UserAfterToPB called after default ToPB code
type UserWithAfterToPB interface {
AfterToPB(context.Context, *User) error
}
type ProductORM struct {
Description string
Id uint64
Name string
Price float32
}
// TableName overrides the default tablename generated by GORM
func (ProductORM) TableName() string {
return "products"
}
// ToORM runs the BeforeToORM hook if present, converts the fields of this
// object to ORM format, runs the AfterToORM hook, then returns the ORM object
func (m *Product) ToORM(ctx context.Context) (ProductORM, error) {
to := ProductORM{}
var err error
if prehook, ok := interface{}(m).(ProductWithBeforeToORM); ok {
if err = prehook.BeforeToORM(ctx, &to); err != nil {
return to, err
}
}
to.Id = m.Id
to.Name = m.Name
to.Description = m.Description
to.Price = m.Price
if posthook, ok := interface{}(m).(ProductWithAfterToORM); ok {
err = posthook.AfterToORM(ctx, &to)
}
return to, err
}
// ToPB runs the BeforeToPB hook if present, converts the fields of this
// object to PB format, runs the AfterToPB hook, then returns the PB object
func (m *ProductORM) ToPB(ctx context.Context) (Product, error) {
to := Product{}
var err error
if prehook, ok := interface{}(m).(ProductWithBeforeToPB); ok {
if err = prehook.BeforeToPB(ctx, &to); err != nil {
return to, err
}
}
to.Id = m.Id
to.Name = m.Name
to.Description = m.Description
to.Price = m.Price
if posthook, ok := interface{}(m).(ProductWithAfterToPB); ok {
err = posthook.AfterToPB(ctx, &to)
}
return to, err
}
// The following are interfaces you can implement for special behavior during ORM/PB conversions
// of type Product the arg will be the target, the caller the one being converted from
// ProductBeforeToORM called before default ToORM code
type ProductWithBeforeToORM interface {
BeforeToORM(context.Context, *ProductORM) error
}
// ProductAfterToORM called after default ToORM code
type ProductWithAfterToORM interface {
AfterToORM(context.Context, *ProductORM) error
}
// ProductBeforeToPB called before default ToPB code
type ProductWithBeforeToPB interface {
BeforeToPB(context.Context, *Product) error
}
// ProductAfterToPB called after default ToPB code
type ProductWithAfterToPB interface {
AfterToPB(context.Context, *Product) error
}
// DefaultCreateUser executes a basic gorm create call
func DefaultCreateUser(ctx context.Context, in *User, db *gorm.DB) (*User, error) {
if in == nil {
return nil, errors.NilArgumentError
}
ormObj, err := in.ToORM(ctx)
if err != nil {
return nil, err
}
if hook, ok := interface{}(&ormObj).(UserORMWithBeforeCreate_); ok {
if db, err = hook.BeforeCreate_(ctx, db); err != nil {
return nil, err
}
}
if err = db.Omit().Create(&ormObj).Error; err != nil {
return nil, err
}
if hook, ok := interface{}(&ormObj).(UserORMWithAfterCreate_); ok {
if err = hook.AfterCreate_(ctx, db); err != nil {
return nil, err
}
}
pbResponse, err := ormObj.ToPB(ctx)
return &pbResponse, err
}
type UserORMWithBeforeCreate_ interface {
BeforeCreate_(context.Context, *gorm.DB) (*gorm.DB, error)
}
type UserORMWithAfterCreate_ interface {
AfterCreate_(context.Context, *gorm.DB) error
}
func DefaultReadUser(ctx context.Context, in *User, db *gorm.DB) (*User, error) {
if in == nil {
return nil, errors.NilArgumentError
}
ormObj, err := in.ToORM(ctx)
if err != nil {
return nil, err
}
if ormObj.Id == 0 {
return nil, errors.EmptyIdError
}
if hook, ok := interface{}(&ormObj).(UserORMWithBeforeReadApplyQuery); ok {
if db, err = hook.BeforeReadApplyQuery(ctx, db); err != nil {
return nil, err
}
}
if hook, ok := interface{}(&ormObj).(UserORMWithBeforeReadFind); ok {
if db, err = hook.BeforeReadFind(ctx, db); err != nil {
return nil, err
}
}
ormResponse := UserORM{}
if err = db.Where(&ormObj).First(&ormResponse).Error; err != nil {
return nil, err
}
if hook, ok := interface{}(&ormResponse).(UserORMWithAfterReadFind); ok {
if err = hook.AfterReadFind(ctx, db); err != nil {
return nil, err
}
}
pbResponse, err := ormResponse.ToPB(ctx)
return &pbResponse, err
}
type UserORMWithBeforeReadApplyQuery interface {
BeforeReadApplyQuery(context.Context, *gorm.DB) (*gorm.DB, error)
}
type UserORMWithBeforeReadFind interface {
BeforeReadFind(context.Context, *gorm.DB) (*gorm.DB, error)
}
type UserORMWithAfterReadFind interface {
AfterReadFind(context.Context, *gorm.DB) error
}
func DefaultDeleteUser(ctx context.Context, in *User, db *gorm.DB) error {
if in == nil {
return errors.NilArgumentError
}
ormObj, err := in.ToORM(ctx)
if err != nil {
return err
}
if ormObj.Id == 0 {
return errors.EmptyIdError
}
if hook, ok := interface{}(&ormObj).(UserORMWithBeforeDelete_); ok {
if db, err = hook.BeforeDelete_(ctx, db); err != nil {
return err
}
}
err = db.Where(&ormObj).Delete(&UserORM{}).Error
if err != nil {
return err
}
if hook, ok := interface{}(&ormObj).(UserORMWithAfterDelete_); ok {
err = hook.AfterDelete_(ctx, db)
}
return err
}
type UserORMWithBeforeDelete_ interface {
BeforeDelete_(context.Context, *gorm.DB) (*gorm.DB, error)
}
type UserORMWithAfterDelete_ interface {
AfterDelete_(context.Context, *gorm.DB) error
}
func DefaultDeleteUserSet(ctx context.Context, in []*User, db *gorm.DB) error {
if in == nil {
return errors.NilArgumentError
}
var err error
keys := []uint64{}
for _, obj := range in {
ormObj, err := obj.ToORM(ctx)
if err != nil {
return err
}
if ormObj.Id == 0 {
return errors.EmptyIdError
}
keys = append(keys, ormObj.Id)
}
if hook, ok := (interface{}(&UserORM{})).(UserORMWithBeforeDeleteSet); ok {
if db, err = hook.BeforeDeleteSet(ctx, in, db); err != nil {
return err
}
}
err = db.Where("id in (?)", keys).Delete(&UserORM{}).Error
if err != nil {
return err
}
if hook, ok := (interface{}(&UserORM{})).(UserORMWithAfterDeleteSet); ok {
err = hook.AfterDeleteSet(ctx, in, db)
}
return err
}
type UserORMWithBeforeDeleteSet interface {
BeforeDeleteSet(context.Context, []*User, *gorm.DB) (*gorm.DB, error)
}
type UserORMWithAfterDeleteSet interface {
AfterDeleteSet(context.Context, []*User, *gorm.DB) error
}
// DefaultStrictUpdateUser clears / replaces / appends first level 1:many children and then executes a gorm update call
func DefaultStrictUpdateUser(ctx context.Context, in *User, db *gorm.DB) (*User, error) {
if in == nil {
return nil, fmt.Errorf("Nil argument to DefaultStrictUpdateUser")
}
ormObj, err := in.ToORM(ctx)
if err != nil {
return nil, err
}
lockedRow := &UserORM{}
db.Model(&ormObj).Set("gorm:query_option", "FOR UPDATE").Where("id=?", ormObj.Id).First(lockedRow)
if hook, ok := interface{}(&ormObj).(UserORMWithBeforeStrictUpdateCleanup); ok {
if db, err = hook.BeforeStrictUpdateCleanup(ctx, db); err != nil {
return nil, err
}
}
if hook, ok := interface{}(&ormObj).(UserORMWithBeforeStrictUpdateSave); ok {
if db, err = hook.BeforeStrictUpdateSave(ctx, db); err != nil {
return nil, err
}
}
if err = db.Omit().Save(&ormObj).Error; err != nil {
return nil, err
}
if hook, ok := interface{}(&ormObj).(UserORMWithAfterStrictUpdateSave); ok {
if err = hook.AfterStrictUpdateSave(ctx, db); err != nil {
return nil, err
}
}
pbResponse, err := ormObj.ToPB(ctx)
if err != nil {
return nil, err
}
return &pbResponse, err
}
type UserORMWithBeforeStrictUpdateCleanup interface {
BeforeStrictUpdateCleanup(context.Context, *gorm.DB) (*gorm.DB, error)
}
type UserORMWithBeforeStrictUpdateSave interface {
BeforeStrictUpdateSave(context.Context, *gorm.DB) (*gorm.DB, error)
}
type UserORMWithAfterStrictUpdateSave interface {
AfterStrictUpdateSave(context.Context, *gorm.DB) error
}
// DefaultPatchUser executes a basic gorm update call with patch behavior
func DefaultPatchUser(ctx context.Context, in *User, updateMask *field_mask.FieldMask, db *gorm.DB) (*User, error) {
if in == nil {
return nil, errors.NilArgumentError
}
var pbObj User
var err error
if hook, ok := interface{}(&pbObj).(UserWithBeforePatchRead); ok {
if db, err = hook.BeforePatchRead(ctx, in, updateMask, db); err != nil {
return nil, err
}
}
pbReadRes, err := DefaultReadUser(ctx, &User{Id: in.GetId()}, db)
if err != nil {
return nil, err
}
pbObj = *pbReadRes
if hook, ok := interface{}(&pbObj).(UserWithBeforePatchApplyFieldMask); ok {
if db, err = hook.BeforePatchApplyFieldMask(ctx, in, updateMask, db); err != nil {
return nil, err
}
}
if _, err := DefaultApplyFieldMaskUser(ctx, &pbObj, in, updateMask, "", db); err != nil {
return nil, err
}
if hook, ok := interface{}(&pbObj).(UserWithBeforePatchSave); ok {
if db, err = hook.BeforePatchSave(ctx, in, updateMask, db); err != nil {
return nil, err
}
}
pbResponse, err := DefaultStrictUpdateUser(ctx, &pbObj, db)
if err != nil {
return nil, err
}
if hook, ok := interface{}(pbResponse).(UserWithAfterPatchSave); ok {
if err = hook.AfterPatchSave(ctx, in, updateMask, db); err != nil {
return nil, err
}
}
return pbResponse, nil
}
type UserWithBeforePatchRead interface {
BeforePatchRead(context.Context, *User, *field_mask.FieldMask, *gorm.DB) (*gorm.DB, error)
}
type UserWithBeforePatchApplyFieldMask interface {
BeforePatchApplyFieldMask(context.Context, *User, *field_mask.FieldMask, *gorm.DB) (*gorm.DB, error)
}
type UserWithBeforePatchSave interface {
BeforePatchSave(context.Context, *User, *field_mask.FieldMask, *gorm.DB) (*gorm.DB, error)
}
type UserWithAfterPatchSave interface {
AfterPatchSave(context.Context, *User, *field_mask.FieldMask, *gorm.DB) error
}
// DefaultPatchSetUser executes a bulk gorm update call with patch behavior
func DefaultPatchSetUser(ctx context.Context, objects []*User, updateMasks []*field_mask.FieldMask, db *gorm.DB) ([]*User, error) {
if len(objects) != len(updateMasks) {
return nil, fmt.Errorf(errors.BadRepeatedFieldMaskTpl, len(updateMasks), len(objects))
}
results := make([]*User, 0, len(objects))
for i, patcher := range objects {
pbResponse, err := DefaultPatchUser(ctx, patcher, updateMasks[i], db)
if err != nil {
return nil, err
}
results = append(results, pbResponse)
}
return results, nil
}
// DefaultApplyFieldMaskUser patches an pbObject with patcher according to a field mask.
func DefaultApplyFieldMaskUser(ctx context.Context, patchee *User, patcher *User, updateMask *field_mask.FieldMask, prefix string, db *gorm.DB) (*User, error) {
if patcher == nil {
return nil, nil
} else if patchee == nil {
return nil, errors.NilArgumentError
}
var err error
for _, f := range updateMask.Paths {
if f == prefix+"Id" {
patchee.Id = patcher.Id
continue
}
if f == prefix+"Username" {
patchee.Username = patcher.Username
continue
}
if f == prefix+"Bio" {
patchee.Bio = patcher.Bio
continue
}
}
if err != nil {
return nil, err
}
return patchee, nil
}
// DefaultListUser executes a gorm list call
func DefaultListUser(ctx context.Context, db *gorm.DB) ([]*User, error) {
in := User{}
ormObj, err := in.ToORM(ctx)
if err != nil {
return nil, err
}
if hook, ok := interface{}(&ormObj).(UserORMWithBeforeListApplyQuery); ok {
if db, err = hook.BeforeListApplyQuery(ctx, db); err != nil {
return nil, err
}
}
if hook, ok := interface{}(&ormObj).(UserORMWithBeforeListFind); ok {
if db, err = hook.BeforeListFind(ctx, db); err != nil {
return nil, err
}
}
db = db.Where(&ormObj)
db = db.Order("id")
ormResponse := []UserORM{}
if err := db.Find(&ormResponse).Error; err != nil {
return nil, err
}
if hook, ok := interface{}(&ormObj).(UserORMWithAfterListFind); ok {
if err = hook.AfterListFind(ctx, db, &ormResponse); err != nil {
return nil, err
}
}
pbResponse := []*User{}
for _, responseEntry := range ormResponse {
temp, err := responseEntry.ToPB(ctx)
if err != nil {
return nil, err
}
pbResponse = append(pbResponse, &temp)
}
return pbResponse, nil
}
type UserORMWithBeforeListApplyQuery interface {
BeforeListApplyQuery(context.Context, *gorm.DB) (*gorm.DB, error)
}
type UserORMWithBeforeListFind interface {
BeforeListFind(context.Context, *gorm.DB) (*gorm.DB, error)
}
type UserORMWithAfterListFind interface {
AfterListFind(context.Context, *gorm.DB, *[]UserORM) error
}
// DefaultCreateProduct executes a basic gorm create call
func DefaultCreateProduct(ctx context.Context, in *Product, db *gorm.DB) (*Product, error) {
if in == nil {
return nil, errors.NilArgumentError
}
ormObj, err := in.ToORM(ctx)
if err != nil {
return nil, err
}
if hook, ok := interface{}(&ormObj).(ProductORMWithBeforeCreate_); ok {
if db, err = hook.BeforeCreate_(ctx, db); err != nil {
return nil, err
}
}
if err = db.Omit().Create(&ormObj).Error; err != nil {
return nil, err
}
if hook, ok := interface{}(&ormObj).(ProductORMWithAfterCreate_); ok {
if err = hook.AfterCreate_(ctx, db); err != nil {
return nil, err
}
}
pbResponse, err := ormObj.ToPB(ctx)
return &pbResponse, err
}
type ProductORMWithBeforeCreate_ interface {
BeforeCreate_(context.Context, *gorm.DB) (*gorm.DB, error)
}
type ProductORMWithAfterCreate_ interface {
AfterCreate_(context.Context, *gorm.DB) error
}
func DefaultReadProduct(ctx context.Context, in *Product, db *gorm.DB) (*Product, error) {
if in == nil {
return nil, errors.NilArgumentError
}
ormObj, err := in.ToORM(ctx)
if err != nil {
return nil, err
}
if ormObj.Id == 0 {
return nil, errors.EmptyIdError
}
if hook, ok := interface{}(&ormObj).(ProductORMWithBeforeReadApplyQuery); ok {
if db, err = hook.BeforeReadApplyQuery(ctx, db); err != nil {
return nil, err
}
}
if hook, ok := interface{}(&ormObj).(ProductORMWithBeforeReadFind); ok {
if db, err = hook.BeforeReadFind(ctx, db); err != nil {
return nil, err
}
}
ormResponse := ProductORM{}
if err = db.Where(&ormObj).First(&ormResponse).Error; err != nil {
return nil, err
}
if hook, ok := interface{}(&ormResponse).(ProductORMWithAfterReadFind); ok {
if err = hook.AfterReadFind(ctx, db); err != nil {
return nil, err
}
}
pbResponse, err := ormResponse.ToPB(ctx)
return &pbResponse, err
}
type ProductORMWithBeforeReadApplyQuery interface {
BeforeReadApplyQuery(context.Context, *gorm.DB) (*gorm.DB, error)
}
type ProductORMWithBeforeReadFind interface {
BeforeReadFind(context.Context, *gorm.DB) (*gorm.DB, error)
}
type ProductORMWithAfterReadFind interface {
AfterReadFind(context.Context, *gorm.DB) error
}
func DefaultDeleteProduct(ctx context.Context, in *Product, db *gorm.DB) error {
if in == nil {
return errors.NilArgumentError
}
ormObj, err := in.ToORM(ctx)
if err != nil {
return err
}
if ormObj.Id == 0 {
return errors.EmptyIdError
}
if hook, ok := interface{}(&ormObj).(ProductORMWithBeforeDelete_); ok {
if db, err = hook.BeforeDelete_(ctx, db); err != nil {
return err
}
}
err = db.Where(&ormObj).Delete(&ProductORM{}).Error
if err != nil {
return err
}
if hook, ok := interface{}(&ormObj).(ProductORMWithAfterDelete_); ok {
err = hook.AfterDelete_(ctx, db)
}
return err
}
type ProductORMWithBeforeDelete_ interface {
BeforeDelete_(context.Context, *gorm.DB) (*gorm.DB, error)
}
type ProductORMWithAfterDelete_ interface {
AfterDelete_(context.Context, *gorm.DB) error
}
func DefaultDeleteProductSet(ctx context.Context, in []*Product, db *gorm.DB) error {
if in == nil {
return errors.NilArgumentError
}
var err error
keys := []uint64{}
for _, obj := range in {
ormObj, err := obj.ToORM(ctx)
if err != nil {
return err
}
if ormObj.Id == 0 {
return errors.EmptyIdError
}
keys = append(keys, ormObj.Id)
}
if hook, ok := (interface{}(&ProductORM{})).(ProductORMWithBeforeDeleteSet); ok {
if db, err = hook.BeforeDeleteSet(ctx, in, db); err != nil {
return err
}
}
err = db.Where("id in (?)", keys).Delete(&ProductORM{}).Error
if err != nil {
return err
}
if hook, ok := (interface{}(&ProductORM{})).(ProductORMWithAfterDeleteSet); ok {
err = hook.AfterDeleteSet(ctx, in, db)
}
return err
}
type ProductORMWithBeforeDeleteSet interface {
BeforeDeleteSet(context.Context, []*Product, *gorm.DB) (*gorm.DB, error)
}
type ProductORMWithAfterDeleteSet interface {
AfterDeleteSet(context.Context, []*Product, *gorm.DB) error
}
// DefaultStrictUpdateProduct clears / replaces / appends first level 1:many children and then executes a gorm update call
func DefaultStrictUpdateProduct(ctx context.Context, in *Product, db *gorm.DB) (*Product, error) {
if in == nil {
return nil, fmt.Errorf("Nil argument to DefaultStrictUpdateProduct")
}
ormObj, err := in.ToORM(ctx)
if err != nil {
return nil, err
}
lockedRow := &ProductORM{}
db.Model(&ormObj).Set("gorm:query_option", "FOR UPDATE").Where("id=?", ormObj.Id).First(lockedRow)
if hook, ok := interface{}(&ormObj).(ProductORMWithBeforeStrictUpdateCleanup); ok {
if db, err = hook.BeforeStrictUpdateCleanup(ctx, db); err != nil {
return nil, err
}
}
if hook, ok := interface{}(&ormObj).(ProductORMWithBeforeStrictUpdateSave); ok {
if db, err = hook.BeforeStrictUpdateSave(ctx, db); err != nil {
return nil, err
}
}
if err = db.Omit().Save(&ormObj).Error; err != nil {
return nil, err
}
if hook, ok := interface{}(&ormObj).(ProductORMWithAfterStrictUpdateSave); ok {
if err = hook.AfterStrictUpdateSave(ctx, db); err != nil {
return nil, err
}
}
pbResponse, err := ormObj.ToPB(ctx)
if err != nil {
return nil, err
}
return &pbResponse, err
}
type ProductORMWithBeforeStrictUpdateCleanup interface {
BeforeStrictUpdateCleanup(context.Context, *gorm.DB) (*gorm.DB, error)
}
type ProductORMWithBeforeStrictUpdateSave interface {
BeforeStrictUpdateSave(context.Context, *gorm.DB) (*gorm.DB, error)
}
type ProductORMWithAfterStrictUpdateSave interface {
AfterStrictUpdateSave(context.Context, *gorm.DB) error
}
// DefaultPatchProduct executes a basic gorm update call with patch behavior
func DefaultPatchProduct(ctx context.Context, in *Product, updateMask *field_mask.FieldMask, db *gorm.DB) (*Product, error) {
if in == nil {
return nil, errors.NilArgumentError
}
var pbObj Product
var err error
if hook, ok := interface{}(&pbObj).(ProductWithBeforePatchRead); ok {
if db, err = hook.BeforePatchRead(ctx, in, updateMask, db); err != nil {
return nil, err
}
}
pbReadRes, err := DefaultReadProduct(ctx, &Product{Id: in.GetId()}, db)
if err != nil {
return nil, err
}
pbObj = *pbReadRes
if hook, ok := interface{}(&pbObj).(ProductWithBeforePatchApplyFieldMask); ok {
if db, err = hook.BeforePatchApplyFieldMask(ctx, in, updateMask, db); err != nil {
return nil, err
}
}
if _, err := DefaultApplyFieldMaskProduct(ctx, &pbObj, in, updateMask, "", db); err != nil {
return nil, err
}
if hook, ok := interface{}(&pbObj).(ProductWithBeforePatchSave); ok {
if db, err = hook.BeforePatchSave(ctx, in, updateMask, db); err != nil {
return nil, err
}
}
pbResponse, err := DefaultStrictUpdateProduct(ctx, &pbObj, db)
if err != nil {
return nil, err
}
if hook, ok := interface{}(pbResponse).(ProductWithAfterPatchSave); ok {
if err = hook.AfterPatchSave(ctx, in, updateMask, db); err != nil {
return nil, err
}
}
return pbResponse, nil
}
type ProductWithBeforePatchRead interface {
BeforePatchRead(context.Context, *Product, *field_mask.FieldMask, *gorm.DB) (*gorm.DB, error)
}
type ProductWithBeforePatchApplyFieldMask interface {
BeforePatchApplyFieldMask(context.Context, *Product, *field_mask.FieldMask, *gorm.DB) (*gorm.DB, error)
}
type ProductWithBeforePatchSave interface {
BeforePatchSave(context.Context, *Product, *field_mask.FieldMask, *gorm.DB) (*gorm.DB, error)
}
type ProductWithAfterPatchSave interface {
AfterPatchSave(context.Context, *Product, *field_mask.FieldMask, *gorm.DB) error
}
// DefaultPatchSetProduct executes a bulk gorm update call with patch behavior
func DefaultPatchSetProduct(ctx context.Context, objects []*Product, updateMasks []*field_mask.FieldMask, db *gorm.DB) ([]*Product, error) {
if len(objects) != len(updateMasks) {
return nil, fmt.Errorf(errors.BadRepeatedFieldMaskTpl, len(updateMasks), len(objects))
}
results := make([]*Product, 0, len(objects))
for i, patcher := range objects {
pbResponse, err := DefaultPatchProduct(ctx, patcher, updateMasks[i], db)
if err != nil {
return nil, err
}
results = append(results, pbResponse)
}
return results, nil
}
// DefaultApplyFieldMaskProduct patches an pbObject with patcher according to a field mask.
func DefaultApplyFieldMaskProduct(ctx context.Context, patchee *Product, patcher *Product, updateMask *field_mask.FieldMask, prefix string, db *gorm.DB) (*Product, error) {
if patcher == nil {
return nil, nil
} else if patchee == nil {
return nil, errors.NilArgumentError
}
var err error
for _, f := range updateMask.Paths {
if f == prefix+"Id" {
patchee.Id = patcher.Id
continue
}
if f == prefix+"Name" {
patchee.Name = patcher.Name
continue
}
if f == prefix+"Description" {
patchee.Description = patcher.Description
continue
}
if f == prefix+"Price" {
patchee.Price = patcher.Price
continue
}
}
if err != nil {
return nil, err
}
return patchee, nil
}
// DefaultListProduct executes a gorm list call
func DefaultListProduct(ctx context.Context, db *gorm.DB) ([]*Product, error) {
in := Product{}
ormObj, err := in.ToORM(ctx)
if err != nil {
return nil, err
}
if hook, ok := interface{}(&ormObj).(ProductORMWithBeforeListApplyQuery); ok {
if db, err = hook.BeforeListApplyQuery(ctx, db); err != nil {
return nil, err
}
}
if hook, ok := interface{}(&ormObj).(ProductORMWithBeforeListFind); ok {
if db, err = hook.BeforeListFind(ctx, db); err != nil {
return nil, err
}
}
db = db.Where(&ormObj)
db = db.Order("id")
ormResponse := []ProductORM{}
if err := db.Find(&ormResponse).Error; err != nil {
return nil, err
}
if hook, ok := interface{}(&ormObj).(ProductORMWithAfterListFind); ok {
if err = hook.AfterListFind(ctx, db, &ormResponse); err != nil {
return nil, err
}
}
pbResponse := []*Product{}
for _, responseEntry := range ormResponse {
temp, err := responseEntry.ToPB(ctx)
if err != nil {
return nil, err
}
pbResponse = append(pbResponse, &temp)
}
return pbResponse, nil
}
type ProductORMWithBeforeListApplyQuery interface {
BeforeListApplyQuery(context.Context, *gorm.DB) (*gorm.DB, error)
}
type ProductORMWithBeforeListFind interface {
BeforeListFind(context.Context, *gorm.DB) (*gorm.DB, error)
}
type ProductORMWithAfterListFind interface {
AfterListFind(context.Context, *gorm.DB, *[]ProductORM) error
}
type PeachDefaultServer struct {
DB *gorm.DB
}
// CreateUser ...
func (m *PeachDefaultServer) CreateUser(ctx context.Context, in *CreateUserRequest) (*CreateUserResponse, error) {
db := m.DB
if custom, ok := interface{}(in).(PeachUserWithBeforeCreateUser); ok {
var err error
if db, err = custom.BeforeCreateUser(ctx, db); err != nil {
return nil, err
}
}
res, err := DefaultCreateUser(ctx, in.GetPayload(), db)
if err != nil {
return nil, err
}
out := &CreateUserResponse{Result: res}
if custom, ok := interface{}(in).(PeachUserWithAfterCreateUser); ok {
var err error
if err = custom.AfterCreateUser(ctx, out, db); err != nil {
return nil, err
}
}
return out, nil
}
// PeachUserWithBeforeCreateUser called before DefaultCreateUserUser in the default CreateUser handler
type PeachUserWithBeforeCreateUser interface {
BeforeCreateUser(context.Context, *gorm.DB) (*gorm.DB, error)
}
// PeachUserWithAfterCreateUser called before DefaultCreateUserUser in the default CreateUser handler
type PeachUserWithAfterCreateUser interface {
AfterCreateUser(context.Context, *CreateUserResponse, *gorm.DB) error
}
// ReadUser ...
func (m *PeachDefaultServer) ReadUser(ctx context.Context, in *ReadUserRequest) (*ReadUserResponse, error) {
db := m.DB
if custom, ok := interface{}(in).(PeachUserWithBeforeReadUser); ok {
var err error
if db, err = custom.BeforeReadUser(ctx, db); err != nil {
return nil, err
}
}
res, err := DefaultReadUser(ctx, &User{Id: in.GetId()}, db)
if err != nil {
return nil, err
}
out := &ReadUserResponse{Result: res}
if custom, ok := interface{}(in).(PeachUserWithAfterReadUser); ok {
var err error
if err = custom.AfterReadUser(ctx, out, db); err != nil {
return nil, err
}
}
return out, nil
}
// PeachUserWithBeforeReadUser called before DefaultReadUserUser in the default ReadUser handler
type PeachUserWithBeforeReadUser interface {
BeforeReadUser(context.Context, *gorm.DB) (*gorm.DB, error)
}
// PeachUserWithAfterReadUser called before DefaultReadUserUser in the default ReadUser handler
type PeachUserWithAfterReadUser interface {
AfterReadUser(context.Context, *ReadUserResponse, *gorm.DB) error
}
// ListUsers ...
func (m *PeachDefaultServer) ListUsers(ctx context.Context, in *ListUsersRequest) (*ListUsersResponse, error) {
db := m.DB
if custom, ok := interface{}(in).(PeachUserWithBeforeListUsers); ok {
var err error
if db, err = custom.BeforeListUsers(ctx, db); err != nil {
return nil, err
}
}
res, err := DefaultListUser(ctx, db)
if err != nil {
return nil, err
}
out := &ListUsersResponse{Results: res}
if custom, ok := interface{}(in).(PeachUserWithAfterListUsers); ok {
var err error
if err = custom.AfterListUsers(ctx, out, db); err != nil {
return nil, err
}
}
return out, nil
}
// PeachUserWithBeforeListUsers called before DefaultListUsersUser in the default ListUsers handler
type PeachUserWithBeforeListUsers interface {
BeforeListUsers(context.Context, *gorm.DB) (*gorm.DB, error)
}
// PeachUserWithAfterListUsers called before DefaultListUsersUser in the default ListUsers handler
type PeachUserWithAfterListUsers interface {
AfterListUsers(context.Context, *ListUsersResponse, *gorm.DB) error
}
// UpdateUser ...
func (m *PeachDefaultServer) UpdateUser(ctx context.Context, in *UpdateUserRequest) (*UpdateUserResponse, error) {
var err error
var res *User
db := m.DB
if custom, ok := interface{}(in).(PeachUserWithBeforeUpdateUser); ok {
var err error
if db, err = custom.BeforeUpdateUser(ctx, db); err != nil {
return nil, err
}
}
res, err = DefaultStrictUpdateUser(ctx, in.GetPayload(), db)
if err != nil {
return nil, err
}
out := &UpdateUserResponse{Result: res}
if custom, ok := interface{}(in).(PeachUserWithAfterUpdateUser); ok {
var err error
if err = custom.AfterUpdateUser(ctx, out, db); err != nil {
return nil, err
}
}
return out, nil
}
// PeachUserWithBeforeUpdateUser called before DefaultUpdateUserUser in the default UpdateUser handler
type PeachUserWithBeforeUpdateUser interface {
BeforeUpdateUser(context.Context, *gorm.DB) (*gorm.DB, error)
}
// PeachUserWithAfterUpdateUser called before DefaultUpdateUserUser in the default UpdateUser handler
type PeachUserWithAfterUpdateUser interface {
AfterUpdateUser(context.Context, *UpdateUserResponse, *gorm.DB) error
}
// DeleteUser ...
func (m *PeachDefaultServer) DeleteUser(ctx context.Context, in *DeleteUserRequest) (*DeleteUserResponse, error) {
db := m.DB
if custom, ok := interface{}(in).(PeachUserWithBeforeDeleteUser); ok {
var err error
if db, err = custom.BeforeDeleteUser(ctx, db); err != nil {
return nil, err
}
}
err := DefaultDeleteUser(ctx, &User{Id: in.GetId()}, db)
if err != nil {
return nil, err
}
out := &DeleteUserResponse{}
if custom, ok := interface{}(in).(PeachUserWithAfterDeleteUser); ok {
var err error
if err = custom.AfterDeleteUser(ctx, out, db); err != nil {
return nil, err
}
}
return out, nil
}
// PeachUserWithBeforeDeleteUser called before DefaultDeleteUserUser in the default DeleteUser handler
type PeachUserWithBeforeDeleteUser interface {
BeforeDeleteUser(context.Context, *gorm.DB) (*gorm.DB, error)
}
// PeachUserWithAfterDeleteUser called before DefaultDeleteUserUser in the default DeleteUser handler
type PeachUserWithAfterDeleteUser interface {
AfterDeleteUser(context.Context, *DeleteUserResponse, *gorm.DB) error
}
// CreateProduct ...
func (m *PeachDefaultServer) CreateProduct(ctx context.Context, in *CreateProductRequest) (*CreateProductResponse, error) {
db := m.DB
if custom, ok := interface{}(in).(PeachProductWithBeforeCreateProduct); ok {
var err error
if db, err = custom.BeforeCreateProduct(ctx, db); err != nil {
return nil, err
}
}
res, err := DefaultCreateProduct(ctx, in.GetPayload(), db)
if err != nil {
return nil, err
}
out := &CreateProductResponse{Result: res}
if custom, ok := interface{}(in).(PeachProductWithAfterCreateProduct); ok {
var err error
if err = custom.AfterCreateProduct(ctx, out, db); err != nil {
return nil, err
}
}
return out, nil
}
// PeachProductWithBeforeCreateProduct called before DefaultCreateProductProduct in the default CreateProduct handler
type PeachProductWithBeforeCreateProduct interface {
BeforeCreateProduct(context.Context, *gorm.DB) (*gorm.DB, error)
}
// PeachProductWithAfterCreateProduct called before DefaultCreateProductProduct in the default CreateProduct handler
type PeachProductWithAfterCreateProduct interface {
AfterCreateProduct(context.Context, *CreateProductResponse, *gorm.DB) error
}
// ReadProduct ...
func (m *PeachDefaultServer) ReadProduct(ctx context.Context, in *ReadProductRequest) (*ReadProductResponse, error) {
db := m.DB
if custom, ok := interface{}(in).(PeachProductWithBeforeReadProduct); ok {
var err error
if db, err = custom.BeforeReadProduct(ctx, db); err != nil {
return nil, err
}
}
res, err := DefaultReadProduct(ctx, &Product{Id: in.GetId()}, db)
if err != nil {
return nil, err
}
out := &ReadProductResponse{Result: res}
if custom, ok := interface{}(in).(PeachProductWithAfterReadProduct); ok {
var err error
if err = custom.AfterReadProduct(ctx, out, db); err != nil {
return nil, err
}
}
return out, nil
}
// PeachProductWithBeforeReadProduct called before DefaultReadProductProduct in the default ReadProduct handler
type PeachProductWithBeforeReadProduct interface {
BeforeReadProduct(context.Context, *gorm.DB) (*gorm.DB, error)
}
// PeachProductWithAfterReadProduct called before DefaultReadProductProduct in the default ReadProduct handler
type PeachProductWithAfterReadProduct interface {
AfterReadProduct(context.Context, *ReadProductResponse, *gorm.DB) error
}
// ListProducts ...
func (m *PeachDefaultServer) ListProducts(ctx context.Context, in *ListProductsRequest) (*ListProductsResponse, error) {
db := m.DB
if custom, ok := interface{}(in).(PeachProductWithBeforeListProducts); ok {
var err error
if db, err = custom.BeforeListProducts(ctx, db); err != nil {
return nil, err
}
}
res, err := DefaultListProduct(ctx, db)
if err != nil {
return nil, err
}
out := &ListProductsResponse{Results: res}
if custom, ok := interface{}(in).(PeachProductWithAfterListProducts); ok {
var err error
if err = custom.AfterListProducts(ctx, out, db); err != nil {
return nil, err
}
}
return out, nil
}
// PeachProductWithBeforeListProducts called before DefaultListProductsProduct in the default ListProducts handler
type PeachProductWithBeforeListProducts interface {
BeforeListProducts(context.Context, *gorm.DB) (*gorm.DB, error)
}
// PeachProductWithAfterListProducts called before DefaultListProductsProduct in the default ListProducts handler
type PeachProductWithAfterListProducts interface {
AfterListProducts(context.Context, *ListProductsResponse, *gorm.DB) error
}
// UpdateProduct ...
func (m *PeachDefaultServer) UpdateProduct(ctx context.Context, in *UpdateProductRequest) (*UpdateProductResponse, error) {
var err error
var res *Product
db := m.DB
if custom, ok := interface{}(in).(PeachProductWithBeforeUpdateProduct); ok {
var err error
if db, err = custom.BeforeUpdateProduct(ctx, db); err != nil {
return nil, err
}
}
res, err = DefaultStrictUpdateProduct(ctx, in.GetPayload(), db)
if err != nil {
return nil, err
}
out := &UpdateProductResponse{Result: res}
if custom, ok := interface{}(in).(PeachProductWithAfterUpdateProduct); ok {
var err error
if err = custom.AfterUpdateProduct(ctx, out, db); err != nil {
return nil, err
}
}
return out, nil
}
// PeachProductWithBeforeUpdateProduct called before DefaultUpdateProductProduct in the default UpdateProduct handler
type PeachProductWithBeforeUpdateProduct interface {
BeforeUpdateProduct(context.Context, *gorm.DB) (*gorm.DB, error)
}
// PeachProductWithAfterUpdateProduct called before DefaultUpdateProductProduct in the default UpdateProduct handler
type PeachProductWithAfterUpdateProduct interface {
AfterUpdateProduct(context.Context, *UpdateProductResponse, *gorm.DB) error
}
// DeleteProduct ...
func (m *PeachDefaultServer) DeleteProduct(ctx context.Context, in *DeleteProductRequest) (*DeleteProductResponse, error) {
db := m.DB
if custom, ok := interface{}(in).(PeachProductWithBeforeDeleteProduct); ok {
var err error
if db, err = custom.BeforeDeleteProduct(ctx, db); err != nil {
return nil, err
}
}
err := DefaultDeleteProduct(ctx, &Product{Id: in.GetId()}, db)
if err != nil {
return nil, err
}
out := &DeleteProductResponse{}
if custom, ok := interface{}(in).(PeachProductWithAfterDeleteProduct); ok {
var err error
if err = custom.AfterDeleteProduct(ctx, out, db); err != nil {
return nil, err
}
}
return out, nil
}
// PeachProductWithBeforeDeleteProduct called before DefaultDeleteProductProduct in the default DeleteProduct handler
type PeachProductWithBeforeDeleteProduct interface {
BeforeDeleteProduct(context.Context, *gorm.DB) (*gorm.DB, error)
}
// PeachProductWithAfterDeleteProduct called before DefaultDeleteProductProduct in the default DeleteProduct handler
type PeachProductWithAfterDeleteProduct interface {
AfterDeleteProduct(context.Context, *DeleteProductResponse, *gorm.DB) error
}