// Copyright (C) 2024 Mya Pitzeruse // SPDX-License-Identifier: MIT package crud import ( "context" "gorm.io/gorm" ) // DeleteFunc defines the signature of the function returned by Deleter. It simplifies the interface for deleting data // using gorm. type DeleteFunc func(ctx context.Context, filters ...map[string]interface{}) error // Deleter returns a function that can delete data using gorm db. func Deleter[T any](db *gorm.DB) DeleteFunc { prototype := new(T) return func(ctx context.Context, filters ...map[string]interface{}) error { q := Transaction(ctx, db). Model(prototype) for _, filter := range filters { q = q.Where(filter) } return q.Delete(prototype).Error } }