diff --git a/app/repository/method_update.go b/app/repository/method_update.go new file mode 100644 index 0000000..82a0d40 --- /dev/null +++ b/app/repository/method_update.go @@ -0,0 +1,31 @@ +package repository + +import ( + "repo-pattern/app/repository/smartfilter" + + "gorm.io/gorm/schema" +) + +type UpdateMethod[T schema.Tabler] struct { + repo *RepoBase[T] +} + +func (m *UpdateMethod[T]) Init(repo *RepoBase[T]) { + m.repo = repo +} + +func (m UpdateMethod[T]) Update(filter interface{}, values map[string]interface{}) (int64, error) { + var ( + model T + ) + + query, err := smartfilter.ToQuery(model, filter, m.repo.dbConn) + if err != nil { + return 0, err + } + result := query.Updates(values) + if result.Error != nil { + return 0, result.Error + } + return result.RowsAffected, nil +} diff --git a/app/repository/repository.go b/app/repository/repository.go index 3088cba..50272d3 100644 --- a/app/repository/repository.go +++ b/app/repository/repository.go @@ -24,6 +24,7 @@ type RepoBase[T schema.Tabler] struct { ExistsMethod[T] CountMethod[T] SaveMethod[T] + UpdateMethod[T] DeleteMethod[T] } @@ -51,6 +52,7 @@ func (m *RepoBase[T]) Init(dbConn *gorm.DB, options *RepoOptions) { &m.ExistsMethod, &m.CountMethod, &m.SaveMethod, + &m.UpdateMethod, &m.DeleteMethod, } m.InitMethods(methods)