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:
Aaron Craelius
2022-02-25 14:54:44 +01:00
committed by GitHub
co-authored by Marko
parent c686634819
commit 57b46134a9
15 changed files with 393 additions and 147 deletions
+21 -11
View File
@@ -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)
})
}