summaryrefslogtreecommitdiff
path: root/vendor/github.com/authzed/spicedb/pkg/datastore/util.go
diff options
context:
space:
mode:
authormo khan <mo@mokhan.ca>2025-07-22 17:35:49 -0600
committermo khan <mo@mokhan.ca>2025-07-22 17:35:49 -0600
commit20ef0d92694465ac86b550df139e8366a0a2b4fa (patch)
tree3f14589e1ce6eb9306a3af31c3a1f9e1af5ed637 /vendor/github.com/authzed/spicedb/pkg/datastore/util.go
parent44e0d272c040cdc53a98b9f1dc58ae7da67752e6 (diff)
feat: connect to spicedb
Diffstat (limited to 'vendor/github.com/authzed/spicedb/pkg/datastore/util.go')
-rw-r--r--vendor/github.com/authzed/spicedb/pkg/datastore/util.go63
1 files changed, 63 insertions, 0 deletions
diff --git a/vendor/github.com/authzed/spicedb/pkg/datastore/util.go b/vendor/github.com/authzed/spicedb/pkg/datastore/util.go
new file mode 100644
index 0000000..55bb8f2
--- /dev/null
+++ b/vendor/github.com/authzed/spicedb/pkg/datastore/util.go
@@ -0,0 +1,63 @@
+package datastore
+
+import (
+ "context"
+
+ v1 "github.com/authzed/authzed-go/proto/authzed/api/v1"
+)
+
+// DefinitionsOf returns just the schema definitions found in the list of revisioned
+// definitions.
+func DefinitionsOf[T SchemaDefinition](revisionedDefinitions []RevisionedDefinition[T]) []T {
+ definitions := make([]T, 0, len(revisionedDefinitions))
+ for _, revDef := range revisionedDefinitions {
+ definitions = append(definitions, revDef.Definition)
+ }
+ return definitions
+}
+
+// DeleteAllData deletes all data from the datastore. Should only be used when explicitly requested.
+// The data is transactionally deleted, which means it may time out.
+func DeleteAllData(ctx context.Context, ds Datastore) error {
+ _, err := ds.ReadWriteTx(ctx, func(ctx context.Context, rwt ReadWriteTransaction) error {
+ nsDefs, err := rwt.ListAllNamespaces(ctx)
+ if err != nil {
+ return err
+ }
+
+ // Delete all relationships.
+ namespaceNames := make([]string, 0, len(nsDefs))
+ for _, nsDef := range nsDefs {
+ _, _, err = rwt.DeleteRelationships(ctx, &v1.RelationshipFilter{
+ ResourceType: nsDef.Definition.Name,
+ })
+ if err != nil {
+ return err
+ }
+ namespaceNames = append(namespaceNames, nsDef.Definition.Name)
+ }
+
+ // Delete all caveats.
+ caveatDefs, err := rwt.ListAllCaveats(ctx)
+ if err != nil {
+ return err
+ }
+
+ caveatNames := make([]string, 0, len(caveatDefs))
+ for _, caveatDef := range caveatDefs {
+ caveatNames = append(caveatNames, caveatDef.Definition.Name)
+ }
+
+ if err := rwt.DeleteCaveats(ctx, caveatNames); err != nil {
+ return err
+ }
+
+ // Delete all namespaces.
+ if err := rwt.DeleteNamespaces(ctx, namespaceNames...); err != nil {
+ return err
+ }
+
+ return nil
+ })
+ return err
+}