Files
commerce/models/mixin/modelhooks.go
zeekay 1943f1c093 Hanzo Commerce
Multi-tenant commerce and billing: orders, subscriptions, invoices, plans,
usage metering and a credit ledger. One Go binary. MIT OR Apache-2.0.

Claude-Session: https://claude.ai/code/session_01SAtaDFm8VDiWrhYHNNtxMw
2026-09-23 21:52:16 -07:00

51 lines
963 B
Go

package mixin
import "reflect"
type BeforeCreate interface {
BeforeCreate() error
}
type BeforeDelete interface {
BeforeDelete() error
}
type AfterCreate interface {
AfterCreate() error
}
type AfterDelete interface {
AfterDelete() error
}
// These last two interfaces are largely ignored -- we use helper below to have
// nicely typed update hooks in models.
type BeforeUpdate interface {
BeforeUpdate(Entity) error
}
type AfterUpdate interface {
AfterUpdate(Entity) error
}
// Try to get method off a model
func getHook(name string, entity Kind) (reflect.Method, bool) {
typ := reflect.TypeOf(entity)
return typ.MethodByName(name)
}
// Call method returned by getMethod
func callHook(entity Kind, method reflect.Method, previous interface{}) error {
args := []reflect.Value{
reflect.ValueOf(entity),
reflect.ValueOf(previous),
}
ret := method.Func.Call(args)
err, ok := ret[0].Interface().(error)
if ok {
return err
}
return nil
}