mirror of
https://github.com/geektutu/7days-golang.git
synced 2024-04-21 12:32:11 +00:00
33 lines
748 B
Go
33 lines
748 B
Go
package session
|
|
|
|
import "reflect"
|
|
|
|
// Hooks constants
|
|
const (
|
|
BeforeQuery = "BeforeQuery"
|
|
AfterQuery = "AfterQuery"
|
|
BeforeUpdate = "BeforeUpdate"
|
|
AfterUpdate = "AfterUpate"
|
|
BeforeDelete = "BeforeDelete"
|
|
AfterDelete = "AfterDelete"
|
|
BeforeInsert = "BeforeInsert"
|
|
AfterInsert = "AfterInsert"
|
|
)
|
|
|
|
// CallMethod calls the registered hooks
|
|
func (s *Session) CallMethod(method string, value interface{}) error {
|
|
fm := reflect.ValueOf(s.RefTable().Model).MethodByName(method)
|
|
if value != nil {
|
|
fm = reflect.ValueOf(value).MethodByName(method)
|
|
}
|
|
param := []reflect.Value{reflect.ValueOf(s)}
|
|
if fm.IsValid() {
|
|
if v := fm.Call(param); len(v) > 0 {
|
|
if err, ok := v[0].Interface().(error); ok {
|
|
return err
|
|
}
|
|
}
|
|
}
|
|
return nil
|
|
}
|