package repository import ( "context" "fmt" "gorm.io/gorm" ) // Exists reports whether a record with the given ID exists for type T. func Exists[T any](ctx context.Context, db *gorm.DB, id uint) (bool, error) { var count int64 if err := db.WithContext(ctx). Model(new(T)). Where("id = ?", id). Count(&count).Error; err != nil { return false, err } return count > 0, nil } func ExistsByName[T any](ctx context.Context, db *gorm.DB, name string, excludeID *uint) (bool, error) { var count int64 q := db.WithContext(ctx). Model(new(T)). Where("name = ?", name). Where("deleted_at IS NULL") if excludeID != nil { q = q.Where("id <> ?", *excludeID) } if err := q.Count(&count).Error; err != nil { return false, err } return count > 0, nil } func ExistsByField[T any](ctx context.Context, db *gorm.DB, field string, value any, excludeID *uint) (bool, error) { if field == "" { return false, fmt.Errorf("field is required") } var count int64 q := db.WithContext(ctx). Model(new(T)). Where(fmt.Sprintf("%s = ?", field), value). Where("deleted_at IS NULL") if excludeID != nil { q = q.Where("id <> ?", *excludeID) } if err := q.Count(&count).Error; err != nil { return false, err } return count > 0, nil }