From 264b9e1659497995b11a4aa090123ca1a15b57a9 Mon Sep 17 00:00:00 2001 From: sreejith Date: Tue, 9 Feb 2021 16:44:03 +0530 Subject: [PATCH] CheckVersionandUpdate --- repository/Repository.go | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/repository/Repository.go b/repository/Repository.go index bac25e0..a77c0e5 100644 --- a/repository/Repository.go +++ b/repository/Repository.go @@ -1,6 +1,7 @@ package repository import ( + "errors" "fmt" "net/http" "strconv" @@ -24,6 +25,7 @@ type Repository interface { GetAllUnscopedForTenant(uow *UnitOfWork, out interface{}, tenantID uuid.UUID, queryProcessors []QueryProcessor) microappError.DatabaseError GetCount(uow *UnitOfWork, out *int64, entity interface{}, queryProcessors []QueryProcessor) microappError.DatabaseError GetCountForTenant(uow *UnitOfWork, out *int64, tenantID uuid.UUID, entity interface{}, queryProcessors []QueryProcessor) microappError.DatabaseError + CheckVersionandUpdate(uow *UnitOfWork, entity interface{}, queryProcessors []QueryProcessor) microappError.DatabaseError Add(uow *UnitOfWork, out interface{}) microappError.DatabaseError Update(uow *UnitOfWork, out interface{}) microappError.DatabaseError @@ -377,6 +379,21 @@ func (repository *GormRepository) Update(uow *UnitOfWork, entity interface{}) mi return nil } +// CheckVersionandUpdate specified Entity after checking for version change +func (repository *GormRepository) CheckVersionandUpdate(uow *UnitOfWork, entity interface{}, queryProcessors []QueryProcessor) microappError.DatabaseError { + var count int64 + if err := repository.GetCount(uow, &count, entity, queryProcessors); err != nil { + return microappError.NewDatabaseError(err) + } + if count == 0 { + return microappError.NewDatabaseError(errors.New("row data modified")) + } + if err := uow.DB.Model(entity).Updates(entity).Error; err != nil { + return microappError.NewDatabaseError(err) + } + return nil +} + // Delete specified Entity func (repository *GormRepository) Delete(uow *UnitOfWork, entity interface{}, where ...interface{}) microappError.DatabaseError { if err := uow.DB.Delete(entity, where...).Error; err != nil {