refactor(orm)!: refactor hooks into validate and write hooks (#11185)
* refactor(orm)!: refactor hooks into validate and write hooks * impl and tests * docs * update mock hooks and tests Co-authored-by: Marko <marbar3778@yahoo.com>
This commit is contained in:
@@ -53,7 +53,7 @@ func (t tableImpl) Save(ctx context.Context, message proto.Message) error {
|
||||
return err
|
||||
}
|
||||
|
||||
return t.save(backend, message, saveModeDefault)
|
||||
return t.save(ctx, backend, message, saveModeDefault)
|
||||
}
|
||||
|
||||
func (t tableImpl) Insert(ctx context.Context, message proto.Message) error {
|
||||
@@ -62,7 +62,7 @@ func (t tableImpl) Insert(ctx context.Context, message proto.Message) error {
|
||||
return err
|
||||
}
|
||||
|
||||
return t.save(backend, message, saveModeInsert)
|
||||
return t.save(ctx, backend, message, saveModeInsert)
|
||||
}
|
||||
|
||||
func (t tableImpl) Update(ctx context.Context, message proto.Message) error {
|
||||
@@ -71,16 +71,16 @@ func (t tableImpl) Update(ctx context.Context, message proto.Message) error {
|
||||
return err
|
||||
}
|
||||
|
||||
return t.save(backend, message, saveModeUpdate)
|
||||
return t.save(ctx, backend, message, saveModeUpdate)
|
||||
}
|
||||
|
||||
func (t tableImpl) save(backend Backend, message proto.Message, mode saveMode) error {
|
||||
func (t tableImpl) save(ctx context.Context, backend Backend, message proto.Message, mode saveMode) error {
|
||||
writer := newBatchIndexCommitmentWriter(backend)
|
||||
defer writer.Close()
|
||||
return t.doSave(writer, message, mode)
|
||||
return t.doSave(ctx, writer, message, mode)
|
||||
}
|
||||
|
||||
func (t tableImpl) doSave(writer *batchIndexCommitmentWriter, message proto.Message, mode saveMode) error {
|
||||
func (t tableImpl) doSave(ctx context.Context, writer *batchIndexCommitmentWriter, message proto.Message, mode saveMode) error {
|
||||
mref := message.ProtoReflect()
|
||||
pkValues, pk, err := t.EncodeKeyFromMessage(mref)
|
||||
if err != nil {
|
||||
@@ -98,8 +98,8 @@ func (t tableImpl) doSave(writer *batchIndexCommitmentWriter, message proto.Mess
|
||||
return ormerrors.PrimaryKeyConstraintViolation.Wrapf("%q:%+v", mref.Descriptor().FullName(), pkValues)
|
||||
}
|
||||
|
||||
if hooks := writer.Hooks(); hooks != nil {
|
||||
err = hooks.OnUpdate(existing, message)
|
||||
if validateHooks := writer.ValidateHooks(); validateHooks != nil {
|
||||
err = validateHooks.ValidateUpdate(ctx, existing, message)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -109,8 +109,8 @@ func (t tableImpl) doSave(writer *batchIndexCommitmentWriter, message proto.Mess
|
||||
return ormerrors.NotFoundOnUpdate.Wrapf("%q", mref.Descriptor().FullName())
|
||||
}
|
||||
|
||||
if hooks := writer.Hooks(); hooks != nil {
|
||||
err = hooks.OnInsert(message)
|
||||
if validateHooks := writer.ValidateHooks(); validateHooks != nil {
|
||||
err = validateHooks.ValidateInsert(ctx, message)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -140,6 +140,11 @@ func (t tableImpl) doSave(writer *batchIndexCommitmentWriter, message proto.Mess
|
||||
}
|
||||
|
||||
}
|
||||
if writeHooks := writer.WriteHooks(); writeHooks != nil {
|
||||
writer.enqueueHook(func() {
|
||||
writeHooks.OnInsert(ctx, message)
|
||||
})
|
||||
}
|
||||
} else {
|
||||
existingMref := existing.ProtoReflect()
|
||||
for _, idx := range t.indexers {
|
||||
@@ -148,6 +153,11 @@ func (t tableImpl) doSave(writer *batchIndexCommitmentWriter, message proto.Mess
|
||||
return err
|
||||
}
|
||||
}
|
||||
if writeHooks := writer.WriteHooks(); writeHooks != nil {
|
||||
writer.enqueueHook(func() {
|
||||
writeHooks.OnUpdate(ctx, existing, message)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
return writer.Write()
|
||||
@@ -283,7 +293,7 @@ func (t tableImpl) ImportJSON(ctx context.Context, reader io.Reader) error {
|
||||
}
|
||||
|
||||
return t.decodeJson(reader, func(message proto.Message) error {
|
||||
return t.save(backend, message, saveModeDefault)
|
||||
return t.save(ctx, backend, message, saveModeDefault)
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user