[#109] prealocated handlers and replaced OnRecordBeforeDeleteRequest with OnModelBeforeDelete
This commit is contained in:
parent
d8c8289269
commit
c4fcba5210
|
@ -159,8 +159,8 @@ func (api *realtimeApi) bindEvents() {
|
||||||
adminTable := (&models.Admin{}).TableName()
|
adminTable := (&models.Admin{}).TableName()
|
||||||
|
|
||||||
// update user/admin auth state
|
// update user/admin auth state
|
||||||
api.app.OnModelAfterUpdate().Add(func(data *core.ModelEvent) error {
|
api.app.OnModelAfterUpdate().Add(func(e *core.ModelEvent) error {
|
||||||
modelTable := data.Model.TableName()
|
modelTable := e.Model.TableName()
|
||||||
|
|
||||||
var contextKey string
|
var contextKey string
|
||||||
switch modelTable {
|
switch modelTable {
|
||||||
|
@ -174,8 +174,8 @@ func (api *realtimeApi) bindEvents() {
|
||||||
|
|
||||||
for _, client := range api.app.SubscriptionsBroker().Clients() {
|
for _, client := range api.app.SubscriptionsBroker().Clients() {
|
||||||
model, _ := client.Get(contextKey).(models.Model)
|
model, _ := client.Get(contextKey).(models.Model)
|
||||||
if model != nil && model.GetId() == data.Model.GetId() {
|
if model != nil && model.GetId() == e.Model.GetId() {
|
||||||
client.Set(contextKey, data.Model)
|
client.Set(contextKey, e.Model)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -183,8 +183,8 @@ func (api *realtimeApi) bindEvents() {
|
||||||
})
|
})
|
||||||
|
|
||||||
// remove user/admin client(s)
|
// remove user/admin client(s)
|
||||||
api.app.OnModelAfterDelete().Add(func(data *core.ModelEvent) error {
|
api.app.OnModelAfterDelete().Add(func(e *core.ModelEvent) error {
|
||||||
modelTable := data.Model.TableName()
|
modelTable := e.Model.TableName()
|
||||||
|
|
||||||
var contextKey string
|
var contextKey string
|
||||||
switch modelTable {
|
switch modelTable {
|
||||||
|
@ -198,7 +198,7 @@ func (api *realtimeApi) bindEvents() {
|
||||||
|
|
||||||
for _, client := range api.app.SubscriptionsBroker().Clients() {
|
for _, client := range api.app.SubscriptionsBroker().Clients() {
|
||||||
model, _ := client.Get(contextKey).(models.Model)
|
model, _ := client.Get(contextKey).(models.Model)
|
||||||
if model != nil && model.GetId() == data.Model.GetId() {
|
if model != nil && model.GetId() == e.Model.GetId() {
|
||||||
api.app.SubscriptionsBroker().Unregister(client.Id())
|
api.app.SubscriptionsBroker().Unregister(client.Id())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -206,18 +206,20 @@ func (api *realtimeApi) bindEvents() {
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
|
|
||||||
api.app.OnRecordAfterCreateRequest().Add(func(data *core.RecordCreateEvent) error {
|
api.app.OnRecordAfterCreateRequest().Add(func(e *core.RecordCreateEvent) error {
|
||||||
api.broadcastRecord("create", data.Record)
|
api.broadcastRecord("create", e.Record)
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
|
|
||||||
api.app.OnRecordAfterUpdateRequest().Add(func(data *core.RecordUpdateEvent) error {
|
api.app.OnRecordAfterUpdateRequest().Add(func(e *core.RecordUpdateEvent) error {
|
||||||
api.broadcastRecord("update", data.Record)
|
api.broadcastRecord("update", e.Record)
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
|
|
||||||
api.app.OnRecordAfterDeleteRequest().Add(func(data *core.RecordDeleteEvent) error {
|
api.app.OnModelBeforeDelete().Add(func(e *core.ModelEvent) error {
|
||||||
api.broadcastRecord("delete", data.Record)
|
if record, ok := e.Model.(*models.Record); ok {
|
||||||
|
api.broadcastRecord("delete", record)
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,7 +44,9 @@ func (h *Hook[T]) Reset() {
|
||||||
// - any non-nil error is returned in one of the handlers
|
// - any non-nil error is returned in one of the handlers
|
||||||
func (h *Hook[T]) Trigger(data T, oneOffHandlers ...Handler[T]) error {
|
func (h *Hook[T]) Trigger(data T, oneOffHandlers ...Handler[T]) error {
|
||||||
h.mux.Lock()
|
h.mux.Lock()
|
||||||
handlers := append(h.handlers, oneOffHandlers...) //nolint:gocritic
|
handlers := make([]Handler[T], 0, len(h.handlers)+len(oneOffHandlers))
|
||||||
|
handlers = append(handlers, h.handlers...)
|
||||||
|
handlers = append(handlers, oneOffHandlers...)
|
||||||
// unlock is not deferred to avoid deadlocks when Trigger is called recursive by the handlers
|
// unlock is not deferred to avoid deadlocks when Trigger is called recursive by the handlers
|
||||||
h.mux.Unlock()
|
h.mux.Unlock()
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue