diff --git a/.task/checksum/generate-ent-smart b/.task/checksum/generate-ent-smart index 4437b7d355..8bd2929c36 100644 --- a/.task/checksum/generate-ent-smart +++ b/.task/checksum/generate-ent-smart @@ -1 +1 @@ -c532c06aa054e80e1b50e8587e9f6d3c +5a715b91ca7219cba80e2f8aac01ad6f diff --git a/.task/checksum/generate-graphql-smart b/.task/checksum/generate-graphql-smart index 835b4c272a..61971606d9 100644 --- a/.task/checksum/generate-graphql-smart +++ b/.task/checksum/generate-graphql-smart @@ -1 +1 @@ -54e5e3c3d76e71451c97ad7b4abc414b +fa663ecfd53a07e36e31ea824f492e20 diff --git a/cli/go.mod b/cli/go.mod index 6cb6a2eddb..b1254ffc71 100644 --- a/cli/go.mod +++ b/cli/go.mod @@ -62,7 +62,7 @@ require ( github.com/lestrrat-go/jwx/v3 v3.1.0 // indirect github.com/lestrrat-go/option/v2 v2.0.0 // indirect github.com/mattn/go-colorable v0.1.14 // indirect - github.com/mattn/go-isatty v0.0.20 // indirect + github.com/mattn/go-isatty v0.0.21 // indirect github.com/mattn/go-runewidth v0.0.19 // indirect github.com/mitchellh/copystructure v1.2.0 // indirect github.com/mitchellh/reflectwalk v1.0.2 // indirect diff --git a/cli/go.sum b/cli/go.sum index 78442b460c..e9580d670a 100644 --- a/cli/go.sum +++ b/cli/go.sum @@ -122,8 +122,7 @@ github.com/lestrrat-go/option/v2 v2.0.0 h1:XxrcaJESE1fokHy3FpaQ/cXW8ZsIdWcdFzzLO github.com/lestrrat-go/option/v2 v2.0.0/go.mod h1:oSySsmzMoR0iRzCDCaUfsCzxQHUEuhOViQObyy7S6Vg= github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE= github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8= -github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= -github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-isatty v0.0.21 h1:xYae+lCNBP7QuW4PUnNG61ffM4hVIfm+zUzDuSzYLGs= github.com/mattn/go-runewidth v0.0.19 h1:v++JhqYnZuu5jSKrk9RbgF5v4CGUjqRfBm05byFGLdw= github.com/mattn/go-runewidth v0.0.19/go.mod h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs= github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= @@ -239,7 +238,6 @@ golang.org/x/oauth2 v0.36.0/go.mod h1:YDBUJMTkDnJS+A4BP4eZBjCqtokkg1hODuPjwiGPO7 golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4= golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.43.0 h1:Rlag2XtaFTxp19wS8MXlJwTvoh8ArU6ezoyFsMyCTNI= golang.org/x/sys v0.43.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= golang.org/x/term v0.42.0 h1:UiKe+zDFmJobeJ5ggPwOshJIVt6/Ft0rcfrXZDLWAWY= diff --git a/common/go.mod b/common/go.mod index b8e72666bc..e630f92330 100644 --- a/common/go.mod +++ b/common/go.mod @@ -49,7 +49,7 @@ require ( github.com/jackc/pgx/v5 v5.9.2 // indirect github.com/jackc/puddle/v2 v2.2.2 // indirect github.com/mattn/go-colorable v0.1.14 // indirect - github.com/mattn/go-isatty v0.0.20 // indirect + github.com/mattn/go-isatty v0.0.21 // indirect github.com/mattn/go-sqlite3 v1.14.32 // indirect github.com/mitchellh/go-wordwrap v1.0.1 // indirect github.com/muhlemmer/gu v0.3.1 // indirect diff --git a/common/go.sum b/common/go.sum index 0f5adaedb8..c589c2c976 100644 --- a/common/go.sum +++ b/common/go.sum @@ -85,8 +85,7 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE= github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8= -github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= -github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-isatty v0.0.21 h1:xYae+lCNBP7QuW4PUnNG61ffM4hVIfm+zUzDuSzYLGs= github.com/mattn/go-sqlite3 v1.14.32 h1:JD12Ag3oLy1zQA+BNn74xRgaBbdhbNIDYvQUEuuErjs= github.com/mattn/go-sqlite3 v1.14.32/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= github.com/mitchellh/go-wordwrap v1.0.1 h1:TLuKupo69TCn6TQSyGxwI1EblZZEsQ0vMlAFQflz0v0= @@ -198,7 +197,6 @@ golang.org/x/oauth2 v0.36.0 h1:peZ/1z27fi9hUOFCAZaHyrpWG5lwe0RJEEEeH0ThlIs= golang.org/x/oauth2 v0.36.0/go.mod h1:YDBUJMTkDnJS+A4BP4eZBjCqtokkg1hODuPjwiGPO7Q= golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4= golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= -golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.43.0 h1:Rlag2XtaFTxp19wS8MXlJwTvoh8ArU6ezoyFsMyCTNI= golang.org/x/sys v0.43.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= golang.org/x/text v0.36.0 h1:JfKh3XmcRPqZPKevfXVpI1wXPTqbkE5f7JA92a55Yxg= diff --git a/common/jobspec/organization.go b/common/jobspec/organization.go index 14cb73b11d..8feb610334 100644 --- a/common/jobspec/organization.go +++ b/common/jobspec/organization.go @@ -15,10 +15,7 @@ func (OrganizationDeletionReminderArgs) InsertOpts() river.InsertOpts { } // OrganizationDeletionReminderArgs for the periodic worker to delete an organization -type OrganizationDeletionArgs struct { - // OrganizationID is the organization that is deleted - OrganizationID string `json:"organization_id"` -} +type OrganizationDeletionArgs struct{} // Kind satisfies the river.Job interface func (OrganizationDeletionArgs) Kind() string { return "org_deletion" } diff --git a/db/migrations-goose-postgres/20260420125531_organization_setting_pending_deletion_at.sql b/db/migrations-goose-postgres/20260420125531_organization_setting_pending_deletion_at.sql new file mode 100644 index 0000000000..71d9dabd55 --- /dev/null +++ b/db/migrations-goose-postgres/20260420125531_organization_setting_pending_deletion_at.sql @@ -0,0 +1,7 @@ +-- +goose Up +-- modify "organization_settings" table +ALTER TABLE "organization_settings" ADD COLUMN "pending_deletion_at" timestamptz NULL; + +-- +goose Down +-- reverse: modify "organization_settings" table +ALTER TABLE "organization_settings" DROP COLUMN "pending_deletion_at"; diff --git a/db/migrations-goose-postgres/20260420125541_organization_setting_pending_deletion_at_history.sql b/db/migrations-goose-postgres/20260420125541_organization_setting_pending_deletion_at_history.sql new file mode 100644 index 0000000000..e5c73bf6ac --- /dev/null +++ b/db/migrations-goose-postgres/20260420125541_organization_setting_pending_deletion_at_history.sql @@ -0,0 +1,7 @@ +-- +goose Up +-- modify "organization_setting_history" table +ALTER TABLE "organization_setting_history" ADD COLUMN "pending_deletion_at" timestamptz NULL; + +-- +goose Down +-- reverse: modify "organization_setting_history" table +ALTER TABLE "organization_setting_history" DROP COLUMN "pending_deletion_at"; diff --git a/db/migrations-goose-postgres/atlas.sum b/db/migrations-goose-postgres/atlas.sum index 4fb88e4004..3218e81e8f 100644 --- a/db/migrations-goose-postgres/atlas.sum +++ b/db/migrations-goose-postgres/atlas.sum @@ -1,4 +1,4 @@ -h1:93l9wk61QpyU3p0afFNY3K2AaiUwydnW7LeEjfUxNY8= +h1:77tJi+/yyYPSk3oV8CW/QkVbTTgRmF5QDakJNM1zb2Y= 20251229183203_init.sql h1:g/05irCXoqKFObJV2PPLuvDRqma+da41VPsZ5fXQgfE= 20251229183205_init_history.sql h1:P/q2kAHb8zfNMOWzYkKtPbOwoh9GdJUQljSNAiPEjYI= 20251231045229_workflow.sql h1:uUPRLO4yw2y//fPGeqIXRrL+fiEN1TRGkF4wHiqPaPk= @@ -117,3 +117,5 @@ h1:93l9wk61QpyU3p0afFNY3K2AaiUwydnW7LeEjfUxNY8= 20260417045841_integrations_directory_accounts_history.sql h1:X+BkbIMBENfr2PKUb39JwoJLw/EVNEuMgZoT6Ftz6q4= 20260417200313_file_category_and_name.sql h1:XpUXRyLZswyLIG8Xqk+yR6jIonIVncp4beFnffrwm50= 20260417200323_file_category_and_name_history.sql h1:KW0FYnvmQQ5DQiAsgtB/xQSokP3N6UHi1yC6Oi4LOXU= +20260420125531_organization_setting_pending_deletion_at.sql h1:3JbK+6fXYvRJ3RPtN3s1GkdZASupXGQCLAxA600bzW8= +20260420125541_organization_setting_pending_deletion_at_history.sql h1:f2IWz2YuqDja9t1SM/sGZLo2EJFHHh5Cm2M1G4yCrdg= diff --git a/db/migrations/20260420125504_organization_setting_pending_deletion_at.sql b/db/migrations/20260420125504_organization_setting_pending_deletion_at.sql new file mode 100644 index 0000000000..11507c0723 --- /dev/null +++ b/db/migrations/20260420125504_organization_setting_pending_deletion_at.sql @@ -0,0 +1,2 @@ +-- Modify "organization_settings" table +ALTER TABLE "organization_settings" ADD COLUMN "pending_deletion_at" timestamptz NULL; diff --git a/db/migrations/20260420125516_organization_setting_pending_deletion_at_history.sql b/db/migrations/20260420125516_organization_setting_pending_deletion_at_history.sql new file mode 100644 index 0000000000..340a5b0ca5 --- /dev/null +++ b/db/migrations/20260420125516_organization_setting_pending_deletion_at_history.sql @@ -0,0 +1,2 @@ +-- Modify "organization_setting_history" table +ALTER TABLE "organization_setting_history" ADD COLUMN "pending_deletion_at" timestamptz NULL; diff --git a/db/migrations/atlas.sum b/db/migrations/atlas.sum index 3a0355ef59..bb649a6501 100644 --- a/db/migrations/atlas.sum +++ b/db/migrations/atlas.sum @@ -1,4 +1,4 @@ -h1:eqT50oHZlb2TX3kOKima//k24jZ65HcwqxuRMVoPCb4= +h1:O9JQFdGfzaYL5Ily7YexSO4xjN+W24fPmXWtLmZuo74= 20251229183159_init.sql h1:3uf/ftr28zW8YUD9qAaY2GESQHC7pYmkhlI6oDWUCKU= 20251229183201_init_history.sql h1:1tFSeCDWvZgb2Ctw80C/s3tqVPNLADQw9fSDACzL8WA= 20251231045221_workflow.sql h1:5bLq4cHh2kxUV7xajK5bq5McKKpr88HmufYauTdsgUw= @@ -117,3 +117,5 @@ h1:eqT50oHZlb2TX3kOKima//k24jZ65HcwqxuRMVoPCb4= 20260417045833_integrations_directory_accounts_history.sql h1:/1iTo0qzLR0WCNtTkzHjf7PWacJ08ptOQRV6LVrNBLQ= 20260417200247_file_category_and_name.sql h1:CeHehsDn2+g81Om5s0kF1Pkg+KNkAw2j826hjR7R5RM= 20260417200300_file_category_and_name_history.sql h1:gp5j8slOUzZeenBswbm4a2D3nvV1XaT5nZs7cvB8Jtg= +20260420125504_organization_setting_pending_deletion_at.sql h1:eKiagvLL7IOpb2cztyekrwGGyBxGS8fiaWnC4VT5DZY= +20260420125516_organization_setting_pending_deletion_at_history.sql h1:mzIOLV8TnvSEx3GISsL/PbLw5aKz63FR8u/OHp8QjMA= diff --git a/internal/ent/checksum/.history_schema_checksum b/internal/ent/checksum/.history_schema_checksum index 94b9acc7a5..6daacc2d45 100644 --- a/internal/ent/checksum/.history_schema_checksum +++ b/internal/ent/checksum/.history_schema_checksum @@ -1 +1 @@ -efd48930f2cba0fb370a288c49bf5916d22899ab03e7c7e06b5a02e5b69d7722 \ No newline at end of file +6a207b60daf10323cef10cb80efeffd0f8fd304aca7e3bdb9622c80038270c99 \ No newline at end of file diff --git a/internal/ent/checksum/.schema_checksum b/internal/ent/checksum/.schema_checksum index 4211e16abb..dc0ccd9ca0 100644 --- a/internal/ent/checksum/.schema_checksum +++ b/internal/ent/checksum/.schema_checksum @@ -1 +1 @@ -f2b07aa110f1340e2d85b9713ca56d0f4b381d8f6bd01f12a5e5a867230255eb \ No newline at end of file +2aff7ebf2013e6ced212b25fc3fa7ad3b1e5113f5220b789b9316e8bc8d32444 \ No newline at end of file diff --git a/internal/ent/generate/entc.go b/internal/ent/generate/entc.go index 66eadc8bd5..522215c328 100644 --- a/internal/ent/generate/entc.go +++ b/internal/ent/generate/entc.go @@ -18,19 +18,6 @@ import ( _ "github.com/jackc/pgx/v5" "gocloud.dev/secrets" - "github.com/theopenlane/core/common/enums/exportenums" - "github.com/theopenlane/core/internal/ent/entconfig" - "github.com/theopenlane/core/internal/ent/filecategorygen" - "github.com/theopenlane/core/internal/ent/historygenerated" - "github.com/theopenlane/core/internal/ent/validator" - "github.com/theopenlane/core/internal/entitlements/genfeatures" - "github.com/theopenlane/core/internal/genhelpers" - "github.com/theopenlane/core/internal/graphapi/directives" - "github.com/theopenlane/core/internal/objects" - "github.com/theopenlane/core/pkg/entitlements" - "github.com/theopenlane/core/pkg/gala" - "github.com/theopenlane/core/pkg/shortlinks" - "github.com/theopenlane/core/pkg/summarizer" "github.com/theopenlane/emailtemplates" "github.com/theopenlane/entx" "github.com/theopenlane/entx/accessmap" @@ -44,6 +31,20 @@ import ( "github.com/theopenlane/iam/sessions" "github.com/theopenlane/iam/tokens" "github.com/theopenlane/iam/totp" + + "github.com/theopenlane/core/common/enums/exportenums" + "github.com/theopenlane/core/internal/ent/entconfig" + "github.com/theopenlane/core/internal/ent/filecategorygen" + "github.com/theopenlane/core/internal/ent/historygenerated" + "github.com/theopenlane/core/internal/ent/validator" + "github.com/theopenlane/core/internal/entitlements/genfeatures" + "github.com/theopenlane/core/internal/genhelpers" + "github.com/theopenlane/core/internal/graphapi/directives" + "github.com/theopenlane/core/internal/objects" + "github.com/theopenlane/core/pkg/entitlements" + "github.com/theopenlane/core/pkg/gala" + "github.com/theopenlane/core/pkg/shortlinks" + "github.com/theopenlane/core/pkg/summarizer" ) var ( @@ -359,6 +360,7 @@ func runParallelPostGenHooks(g *gen.Graph) { integrationmapping.WithDoPackage("github.com/samber/do/v2"), integrationmapping.WithLoPackage("github.com/samber/lo"), integrationmapping.WithJsonxPackage("github.com/theopenlane/core/pkg/jsonx"), + integrationmapping.WithLogxPackage("github.com/theopenlane/core/pkg/logx"), ).Hook(), accessMapExt.Hook(), fileCategoryGen.Hook(), diff --git a/internal/ent/generate/templates/ent/edge_cleanup.tmpl b/internal/ent/generate/templates/ent/edge_cleanup.tmpl index ebda47ed83..5af6fa619d 100644 --- a/internal/ent/generate/templates/ent/edge_cleanup.tmpl +++ b/internal/ent/generate/templates/ent/edge_cleanup.tmpl @@ -7,12 +7,26 @@ {{ $pkg := base $.Config.Package }} {{ template "header" $ }} +import ( + "github.com/theopenlane/core/internal/ent/hooks/contextx" +) + {{/* For each schema */}} {{- range $node := $.Nodes }} {{/* create an EdgeCleanup function accepting an ID */}} func {{ $node.Name }}EdgeCleanup(ctx context.Context, id string) error { ctx = entfga.WithDeleteTuplesFirst(privacy.DecisionContext(ctx, privacy.Allowf("cleanup {{ $node.Name | lower }} edge"))) + {{- if eq $node.Name "Organization" }} + ctx = contextx.WithSkipEnumInUseCheck(ctx) + if exists, err := FromContext(ctx).CustomTypeEnum.Query().Where((customtypeenum.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { + if customtypeenumCount, err := FromContext(ctx).CustomTypeEnum.Delete().Where(customtypeenum.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { + logx.FromContext(ctx).Error().Err(err).Int("count", customtypeenumCount).Msg("error deleting customtypeenum") + return err + } + } + {{- end }} + {{/* For each edge */}} {{- range $edge := $node.Edges }} {{/* if the edge has our custom annotation applied */}} @@ -34,6 +48,20 @@ } } {{- else }} + {{/* clean up nested edges before deleting */}} + { + ids, err := FromContext(ctx).{{ $edge.Type.Name }}.Query().Where({{ $edge.Type.Name | lower }}.Has{{ $annotation.Field }}With({{ $node.Name | lower }}.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying {{ $edge.Type.Name | lower }} ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := {{ $edge.Type.Name }}EdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up {{ $edge.Type.Name | lower }} edges") + return err + } + } + } if exists, err := FromContext(ctx).{{ $edge.Type.Name }}.Query().Where(({{ $edge.Type.Name | lower }}.Has{{ $annotation.Field }}With({{ $node.Name | lower }}.ID(id)))).Exist(ctx); err == nil && exists { if {{ $edge.Type.Name | lower }}Count, err := FromContext(ctx).{{ $edge.Type.Name }}.Delete().Where({{ $edge.Type.Name | lower }}.Has{{ $annotation.Field }}With({{ $node.Name | lower }}.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", {{ $edge.Type.Name | lower }}Count).Msg("error deleting {{ $edge.Type.Name | lower }}") diff --git a/internal/ent/generated/edge_cleanup.go b/internal/ent/generated/edge_cleanup.go index 3888e6130a..fc8031c1e6 100644 --- a/internal/ent/generated/edge_cleanup.go +++ b/internal/ent/generated/edge_cleanup.go @@ -36,6 +36,7 @@ import ( "github.com/theopenlane/core/internal/ent/generated/file" "github.com/theopenlane/core/internal/ent/generated/filedownloadtoken" "github.com/theopenlane/core/internal/ent/generated/finding" + "github.com/theopenlane/core/internal/ent/generated/findingcontrol" "github.com/theopenlane/core/internal/ent/generated/group" "github.com/theopenlane/core/internal/ent/generated/groupmembership" "github.com/theopenlane/core/internal/ent/generated/groupsetting" @@ -108,6 +109,7 @@ import ( "github.com/theopenlane/core/internal/ent/generated/workflowinstance" "github.com/theopenlane/core/internal/ent/generated/workflowobjectref" "github.com/theopenlane/core/internal/ent/generated/workflowproposal" + "github.com/theopenlane/core/internal/ent/hooks/contextx" "github.com/theopenlane/core/pkg/logx" "github.com/theopenlane/iam/entfga" ) @@ -163,6 +165,19 @@ func ContactEdgeCleanup(ctx context.Context, id string) error { func ControlEdgeCleanup(ctx context.Context, id string) error { ctx = entfga.WithDeleteTuplesFirst(privacy.DecisionContext(ctx, privacy.Allowf("cleanup control edge"))) + { + ids, err := FromContext(ctx).Subcontrol.Query().Where(subcontrol.HasControlWith(control.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying subcontrol ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := SubcontrolEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up subcontrol edges") + return err + } + } + } if exists, err := FromContext(ctx).Subcontrol.Query().Where((subcontrol.HasControlWith(control.ID(id)))).Exist(ctx); err == nil && exists { if subcontrolCount, err := FromContext(ctx).Subcontrol.Delete().Where(subcontrol.HasControlWith(control.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", subcontrolCount).Msg("error deleting subcontrol") @@ -170,6 +185,13 @@ func ControlEdgeCleanup(ctx context.Context, id string) error { } } + if exists, err := FromContext(ctx).FindingControl.Query().Where((findingcontrol.HasControlWith(control.ID(id)))).Exist(ctx); err == nil && exists { + if findingcontrolCount, err := FromContext(ctx).FindingControl.Delete().Where(findingcontrol.HasControlWith(control.ID(id))).Exec(ctx); err != nil { + logx.FromContext(ctx).Error().Err(err).Int("count", findingcontrolCount).Msg("error deleting findingcontrol") + return err + } + } + return nil } @@ -244,6 +266,19 @@ func DirectorySyncRunEdgeCleanup(ctx context.Context, id string) error { func DiscussionEdgeCleanup(ctx context.Context, id string) error { ctx = entfga.WithDeleteTuplesFirst(privacy.DecisionContext(ctx, privacy.Allowf("cleanup discussion edge"))) + { + ids, err := FromContext(ctx).Note.Query().Where(note.HasDiscussionWith(discussion.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying note ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := NoteEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up note edges") + return err + } + } + } if exists, err := FromContext(ctx).Note.Query().Where((note.HasDiscussionWith(discussion.ID(id)))).Exist(ctx); err == nil && exists { if noteCount, err := FromContext(ctx).Note.Delete().Where(note.HasDiscussionWith(discussion.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", noteCount).Msg("error deleting note") @@ -335,6 +370,19 @@ func FindingControlEdgeCleanup(ctx context.Context, id string) error { func GroupEdgeCleanup(ctx context.Context, id string) error { ctx = entfga.WithDeleteTuplesFirst(privacy.DecisionContext(ctx, privacy.Allowf("cleanup group edge"))) + { + ids, err := FromContext(ctx).GroupSetting.Query().Where(groupsetting.HasGroupWith(group.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying groupsetting ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := GroupSettingEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up groupsetting edges") + return err + } + } + } if exists, err := FromContext(ctx).GroupSetting.Query().Where((groupsetting.HasGroupWith(group.ID(id)))).Exist(ctx); err == nil && exists { if groupsettingCount, err := FromContext(ctx).GroupSetting.Delete().Where(groupsetting.HasGroupWith(group.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", groupsettingCount).Msg("error deleting groupsetting") @@ -439,6 +487,19 @@ func JobRunnerTokenEdgeCleanup(ctx context.Context, id string) error { func JobTemplateEdgeCleanup(ctx context.Context, id string) error { ctx = entfga.WithDeleteTuplesFirst(privacy.DecisionContext(ctx, privacy.Allowf("cleanup jobtemplate edge"))) + { + ids, err := FromContext(ctx).ScheduledJob.Query().Where(scheduledjob.HasJobTemplateWith(jobtemplate.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying scheduledjob ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := ScheduledJobEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up scheduledjob edges") + return err + } + } + } if exists, err := FromContext(ctx).ScheduledJob.Query().Where((scheduledjob.HasJobTemplateWith(jobtemplate.ID(id)))).Exist(ctx); err == nil && exists { if scheduledjobCount, err := FromContext(ctx).ScheduledJob.Delete().Where(scheduledjob.HasJobTemplateWith(jobtemplate.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", scheduledjobCount).Msg("error deleting scheduledjob") @@ -470,6 +531,19 @@ func NarrativeEdgeCleanup(ctx context.Context, id string) error { func NoteEdgeCleanup(ctx context.Context, id string) error { ctx = entfga.WithDeleteTuplesFirst(privacy.DecisionContext(ctx, privacy.Allowf("cleanup note edge"))) + { + ids, err := FromContext(ctx).TrustCenterFAQ.Query().Where(trustcenterfaq.HasNoteWith(note.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying trustcenterfaq ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := TrustCenterFAQEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up trustcenterfaq edges") + return err + } + } + } if exists, err := FromContext(ctx).TrustCenterFAQ.Query().Where((trustcenterfaq.HasNoteWith(note.ID(id)))).Exist(ctx); err == nil && exists { if trustcenterfaqCount, err := FromContext(ctx).TrustCenterFAQ.Delete().Where(trustcenterfaq.HasNoteWith(note.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", trustcenterfaqCount).Msg("error deleting trustcenterfaq") @@ -550,6 +624,13 @@ func OrgSubscriptionEdgeCleanup(ctx context.Context, id string) error { func OrganizationEdgeCleanup(ctx context.Context, id string) error { ctx = entfga.WithDeleteTuplesFirst(privacy.DecisionContext(ctx, privacy.Allowf("cleanup organization edge"))) + ctx = contextx.WithSkipEnumInUseCheck(ctx) + if exists, err := FromContext(ctx).CustomTypeEnum.Query().Where((customtypeenum.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { + if customtypeenumCount, err := FromContext(ctx).CustomTypeEnum.Delete().Where(customtypeenum.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { + logx.FromContext(ctx).Error().Err(err).Int("count", customtypeenumCount).Msg("error deleting customtypeenum") + return err + } + } if exists, err := FromContext(ctx).Organization.Query().Where(organization.HasParentWith(organization.ID(id))).Exist(ctx); err == nil && exists { if organizationCount, err := FromContext(ctx).Organization.Delete().Where(organization.HasParentWith(organization.ID(id))).Exec(ctx); err != nil { @@ -558,6 +639,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).OrganizationSetting.Query().Where(organizationsetting.HasOrganizationWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying organizationsetting ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := OrganizationSettingEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up organizationsetting edges") + return err + } + } + } if exists, err := FromContext(ctx).OrganizationSetting.Query().Where((organizationsetting.HasOrganizationWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if organizationsettingCount, err := FromContext(ctx).OrganizationSetting.Delete().Where(organizationsetting.HasOrganizationWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", organizationsettingCount).Msg("error deleting organizationsetting") @@ -565,6 +659,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).APIToken.Query().Where(apitoken.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying apitoken ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := APITokenEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up apitoken edges") + return err + } + } + } if exists, err := FromContext(ctx).APIToken.Query().Where((apitoken.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if apitokenCount, err := FromContext(ctx).APIToken.Delete().Where(apitoken.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", apitokenCount).Msg("error deleting apitoken") @@ -572,6 +679,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).EmailBranding.Query().Where(emailbranding.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying emailbranding ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := EmailBrandingEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up emailbranding edges") + return err + } + } + } if exists, err := FromContext(ctx).EmailBranding.Query().Where((emailbranding.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if emailbrandingCount, err := FromContext(ctx).EmailBranding.Delete().Where(emailbranding.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", emailbrandingCount).Msg("error deleting emailbranding") @@ -579,6 +699,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).EmailTemplate.Query().Where(emailtemplate.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying emailtemplate ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := EmailTemplateEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up emailtemplate edges") + return err + } + } + } if exists, err := FromContext(ctx).EmailTemplate.Query().Where((emailtemplate.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if emailtemplateCount, err := FromContext(ctx).EmailTemplate.Delete().Where(emailtemplate.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", emailtemplateCount).Msg("error deleting emailtemplate") @@ -586,6 +719,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).IntegrationWebhook.Query().Where(integrationwebhook.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying integrationwebhook ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := IntegrationWebhookEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up integrationwebhook edges") + return err + } + } + } if exists, err := FromContext(ctx).IntegrationWebhook.Query().Where((integrationwebhook.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if integrationwebhookCount, err := FromContext(ctx).IntegrationWebhook.Delete().Where(integrationwebhook.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", integrationwebhookCount).Msg("error deleting integrationwebhook") @@ -593,6 +739,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).IntegrationRun.Query().Where(integrationrun.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying integrationrun ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := IntegrationRunEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up integrationrun edges") + return err + } + } + } if exists, err := FromContext(ctx).IntegrationRun.Query().Where((integrationrun.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if integrationrunCount, err := FromContext(ctx).IntegrationRun.Delete().Where(integrationrun.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", integrationrunCount).Msg("error deleting integrationrun") @@ -600,6 +759,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).NotificationPreference.Query().Where(notificationpreference.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying notificationpreference ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := NotificationPreferenceEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up notificationpreference edges") + return err + } + } + } if exists, err := FromContext(ctx).NotificationPreference.Query().Where((notificationpreference.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if notificationpreferenceCount, err := FromContext(ctx).NotificationPreference.Delete().Where(notificationpreference.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", notificationpreferenceCount).Msg("error deleting notificationpreference") @@ -607,6 +779,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).NotificationTemplate.Query().Where(notificationtemplate.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying notificationtemplate ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := NotificationTemplateEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up notificationtemplate edges") + return err + } + } + } if exists, err := FromContext(ctx).NotificationTemplate.Query().Where((notificationtemplate.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if notificationtemplateCount, err := FromContext(ctx).NotificationTemplate.Delete().Where(notificationtemplate.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", notificationtemplateCount).Msg("error deleting notificationtemplate") @@ -614,6 +799,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).File.Query().Where(file.HasOrganizationWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying file ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := FileEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up file edges") + return err + } + } + } if exists, err := FromContext(ctx).File.Query().Where((file.HasOrganizationWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if fileCount, err := FromContext(ctx).File.Delete().Where(file.HasOrganizationWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", fileCount).Msg("error deleting file") @@ -621,6 +819,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).Hush.Query().Where(hush.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying hush ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := HushEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up hush edges") + return err + } + } + } if exists, err := FromContext(ctx).Hush.Query().Where((hush.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if hushCount, err := FromContext(ctx).Hush.Delete().Where(hush.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", hushCount).Msg("error deleting hush") @@ -628,6 +839,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).Group.Query().Where(group.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying group ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := GroupEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up group edges") + return err + } + } + } if exists, err := FromContext(ctx).Group.Query().Where((group.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if groupCount, err := FromContext(ctx).Group.Delete().Where(group.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", groupCount).Msg("error deleting group") @@ -635,6 +859,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).Template.Query().Where(template.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying template ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := TemplateEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up template edges") + return err + } + } + } if exists, err := FromContext(ctx).Template.Query().Where((template.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if templateCount, err := FromContext(ctx).Template.Delete().Where(template.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", templateCount).Msg("error deleting template") @@ -642,6 +879,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).Integration.Query().Where(integration.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying integration ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := IntegrationEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up integration edges") + return err + } + } + } if exists, err := FromContext(ctx).Integration.Query().Where((integration.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if integrationCount, err := FromContext(ctx).Integration.Delete().Where(integration.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", integrationCount).Msg("error deleting integration") @@ -649,6 +899,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).DocumentData.Query().Where(documentdata.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying documentdata ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := DocumentDataEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up documentdata edges") + return err + } + } + } if exists, err := FromContext(ctx).DocumentData.Query().Where((documentdata.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if documentdataCount, err := FromContext(ctx).DocumentData.Delete().Where(documentdata.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", documentdataCount).Msg("error deleting documentdata") @@ -656,6 +919,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).OrgSubscription.Query().Where(orgsubscription.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying orgsubscription ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := OrgSubscriptionEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up orgsubscription edges") + return err + } + } + } if exists, err := FromContext(ctx).OrgSubscription.Query().Where((orgsubscription.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if orgsubscriptionCount, err := FromContext(ctx).OrgSubscription.Delete().Where(orgsubscription.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", orgsubscriptionCount).Msg("error deleting orgsubscription") @@ -663,6 +939,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).OrgProduct.Query().Where(orgproduct.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying orgproduct ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := OrgProductEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up orgproduct edges") + return err + } + } + } if exists, err := FromContext(ctx).OrgProduct.Query().Where((orgproduct.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if orgproductCount, err := FromContext(ctx).OrgProduct.Delete().Where(orgproduct.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", orgproductCount).Msg("error deleting orgproduct") @@ -670,6 +959,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).OrgPrice.Query().Where(orgprice.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying orgprice ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := OrgPriceEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up orgprice edges") + return err + } + } + } if exists, err := FromContext(ctx).OrgPrice.Query().Where((orgprice.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if orgpriceCount, err := FromContext(ctx).OrgPrice.Delete().Where(orgprice.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", orgpriceCount).Msg("error deleting orgprice") @@ -677,6 +979,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).OrgModule.Query().Where(orgmodule.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying orgmodule ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := OrgModuleEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up orgmodule edges") + return err + } + } + } if exists, err := FromContext(ctx).OrgModule.Query().Where((orgmodule.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if orgmoduleCount, err := FromContext(ctx).OrgModule.Delete().Where(orgmodule.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", orgmoduleCount).Msg("error deleting orgmodule") @@ -684,6 +999,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).Invite.Query().Where(invite.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying invite ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := InviteEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up invite edges") + return err + } + } + } if exists, err := FromContext(ctx).Invite.Query().Where((invite.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if inviteCount, err := FromContext(ctx).Invite.Delete().Where(invite.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", inviteCount).Msg("error deleting invite") @@ -691,6 +1019,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).Subscriber.Query().Where(subscriber.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying subscriber ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := SubscriberEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up subscriber edges") + return err + } + } + } if exists, err := FromContext(ctx).Subscriber.Query().Where((subscriber.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if subscriberCount, err := FromContext(ctx).Subscriber.Delete().Where(subscriber.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", subscriberCount).Msg("error deleting subscriber") @@ -698,6 +1039,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).Entity.Query().Where(entity.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying entity ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := EntityEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up entity edges") + return err + } + } + } if exists, err := FromContext(ctx).Entity.Query().Where((entity.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if entityCount, err := FromContext(ctx).Entity.Delete().Where(entity.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", entityCount).Msg("error deleting entity") @@ -705,6 +1059,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).Platform.Query().Where(platform.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying platform ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := PlatformEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up platform edges") + return err + } + } + } if exists, err := FromContext(ctx).Platform.Query().Where((platform.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if platformCount, err := FromContext(ctx).Platform.Delete().Where(platform.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", platformCount).Msg("error deleting platform") @@ -712,6 +1079,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).IdentityHolder.Query().Where(identityholder.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying identityholder ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := IdentityHolderEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up identityholder edges") + return err + } + } + } if exists, err := FromContext(ctx).IdentityHolder.Query().Where((identityholder.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if identityholderCount, err := FromContext(ctx).IdentityHolder.Delete().Where(identityholder.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", identityholderCount).Msg("error deleting identityholder") @@ -719,6 +1099,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).Campaign.Query().Where(campaign.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying campaign ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := CampaignEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up campaign edges") + return err + } + } + } if exists, err := FromContext(ctx).Campaign.Query().Where((campaign.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if campaignCount, err := FromContext(ctx).Campaign.Delete().Where(campaign.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", campaignCount).Msg("error deleting campaign") @@ -726,6 +1119,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).CampaignTarget.Query().Where(campaigntarget.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying campaigntarget ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := CampaignTargetEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up campaigntarget edges") + return err + } + } + } if exists, err := FromContext(ctx).CampaignTarget.Query().Where((campaigntarget.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if campaigntargetCount, err := FromContext(ctx).CampaignTarget.Delete().Where(campaigntarget.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", campaigntargetCount).Msg("error deleting campaigntarget") @@ -733,6 +1139,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).EntityType.Query().Where(entitytype.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying entitytype ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := EntityTypeEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up entitytype edges") + return err + } + } + } if exists, err := FromContext(ctx).EntityType.Query().Where((entitytype.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if entitytypeCount, err := FromContext(ctx).EntityType.Delete().Where(entitytype.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", entitytypeCount).Msg("error deleting entitytype") @@ -740,6 +1159,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).Contact.Query().Where(contact.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying contact ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := ContactEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up contact edges") + return err + } + } + } if exists, err := FromContext(ctx).Contact.Query().Where((contact.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if contactCount, err := FromContext(ctx).Contact.Delete().Where(contact.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", contactCount).Msg("error deleting contact") @@ -747,6 +1179,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).Note.Query().Where(note.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying note ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := NoteEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up note edges") + return err + } + } + } if exists, err := FromContext(ctx).Note.Query().Where((note.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if noteCount, err := FromContext(ctx).Note.Delete().Where(note.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", noteCount).Msg("error deleting note") @@ -754,6 +1199,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).Task.Query().Where(task.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying task ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := TaskEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up task edges") + return err + } + } + } if exists, err := FromContext(ctx).Task.Query().Where((task.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if taskCount, err := FromContext(ctx).Task.Delete().Where(task.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", taskCount).Msg("error deleting task") @@ -761,6 +1219,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).Program.Query().Where(program.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying program ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := ProgramEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up program edges") + return err + } + } + } if exists, err := FromContext(ctx).Program.Query().Where((program.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if programCount, err := FromContext(ctx).Program.Delete().Where(program.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", programCount).Msg("error deleting program") @@ -768,6 +1239,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).SystemDetail.Query().Where(systemdetail.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying systemdetail ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := SystemDetailEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up systemdetail edges") + return err + } + } + } if exists, err := FromContext(ctx).SystemDetail.Query().Where((systemdetail.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if systemdetailCount, err := FromContext(ctx).SystemDetail.Delete().Where(systemdetail.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", systemdetailCount).Msg("error deleting systemdetail") @@ -775,6 +1259,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).Procedure.Query().Where(procedure.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying procedure ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := ProcedureEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up procedure edges") + return err + } + } + } if exists, err := FromContext(ctx).Procedure.Query().Where((procedure.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if procedureCount, err := FromContext(ctx).Procedure.Delete().Where(procedure.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", procedureCount).Msg("error deleting procedure") @@ -782,6 +1279,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).InternalPolicy.Query().Where(internalpolicy.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying internalpolicy ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := InternalPolicyEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up internalpolicy edges") + return err + } + } + } if exists, err := FromContext(ctx).InternalPolicy.Query().Where((internalpolicy.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if internalpolicyCount, err := FromContext(ctx).InternalPolicy.Delete().Where(internalpolicy.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", internalpolicyCount).Msg("error deleting internalpolicy") @@ -789,6 +1299,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).Risk.Query().Where(risk.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying risk ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := RiskEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up risk edges") + return err + } + } + } if exists, err := FromContext(ctx).Risk.Query().Where((risk.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if riskCount, err := FromContext(ctx).Risk.Delete().Where(risk.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", riskCount).Msg("error deleting risk") @@ -796,6 +1319,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).ControlObjective.Query().Where(controlobjective.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying controlobjective ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := ControlObjectiveEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up controlobjective edges") + return err + } + } + } if exists, err := FromContext(ctx).ControlObjective.Query().Where((controlobjective.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if controlobjectiveCount, err := FromContext(ctx).ControlObjective.Delete().Where(controlobjective.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", controlobjectiveCount).Msg("error deleting controlobjective") @@ -803,6 +1339,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).Narrative.Query().Where(narrative.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying narrative ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := NarrativeEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up narrative edges") + return err + } + } + } if exists, err := FromContext(ctx).Narrative.Query().Where((narrative.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if narrativeCount, err := FromContext(ctx).Narrative.Delete().Where(narrative.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", narrativeCount).Msg("error deleting narrative") @@ -810,6 +1359,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).Control.Query().Where(control.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying control ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := ControlEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up control edges") + return err + } + } + } if exists, err := FromContext(ctx).Control.Query().Where((control.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if controlCount, err := FromContext(ctx).Control.Delete().Where(control.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", controlCount).Msg("error deleting control") @@ -817,6 +1379,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).Subcontrol.Query().Where(subcontrol.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying subcontrol ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := SubcontrolEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up subcontrol edges") + return err + } + } + } if exists, err := FromContext(ctx).Subcontrol.Query().Where((subcontrol.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if subcontrolCount, err := FromContext(ctx).Subcontrol.Delete().Where(subcontrol.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", subcontrolCount).Msg("error deleting subcontrol") @@ -824,6 +1399,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).ControlImplementation.Query().Where(controlimplementation.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying controlimplementation ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := ControlImplementationEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up controlimplementation edges") + return err + } + } + } if exists, err := FromContext(ctx).ControlImplementation.Query().Where((controlimplementation.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if controlimplementationCount, err := FromContext(ctx).ControlImplementation.Delete().Where(controlimplementation.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", controlimplementationCount).Msg("error deleting controlimplementation") @@ -831,6 +1419,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).MappedControl.Query().Where(mappedcontrol.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying mappedcontrol ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := MappedControlEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up mappedcontrol edges") + return err + } + } + } if exists, err := FromContext(ctx).MappedControl.Query().Where((mappedcontrol.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if mappedcontrolCount, err := FromContext(ctx).MappedControl.Delete().Where(mappedcontrol.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", mappedcontrolCount).Msg("error deleting mappedcontrol") @@ -838,6 +1439,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).Evidence.Query().Where(evidence.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying evidence ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := EvidenceEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up evidence edges") + return err + } + } + } if exists, err := FromContext(ctx).Evidence.Query().Where((evidence.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if evidenceCount, err := FromContext(ctx).Evidence.Delete().Where(evidence.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", evidenceCount).Msg("error deleting evidence") @@ -845,6 +1459,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).Standard.Query().Where(standard.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying standard ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := StandardEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up standard edges") + return err + } + } + } if exists, err := FromContext(ctx).Standard.Query().Where((standard.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if standardCount, err := FromContext(ctx).Standard.Delete().Where(standard.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", standardCount).Msg("error deleting standard") @@ -852,6 +1479,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).ActionPlan.Query().Where(actionplan.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying actionplan ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := ActionPlanEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up actionplan edges") + return err + } + } + } if exists, err := FromContext(ctx).ActionPlan.Query().Where((actionplan.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if actionplanCount, err := FromContext(ctx).ActionPlan.Delete().Where(actionplan.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", actionplanCount).Msg("error deleting actionplan") @@ -859,6 +1499,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).CustomDomain.Query().Where(customdomain.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying customdomain ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := CustomDomainEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up customdomain edges") + return err + } + } + } if exists, err := FromContext(ctx).CustomDomain.Query().Where((customdomain.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if customdomainCount, err := FromContext(ctx).CustomDomain.Delete().Where(customdomain.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", customdomainCount).Msg("error deleting customdomain") @@ -866,6 +1519,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).JobRunner.Query().Where(jobrunner.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying jobrunner ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := JobRunnerEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up jobrunner edges") + return err + } + } + } if exists, err := FromContext(ctx).JobRunner.Query().Where((jobrunner.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if jobrunnerCount, err := FromContext(ctx).JobRunner.Delete().Where(jobrunner.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", jobrunnerCount).Msg("error deleting jobrunner") @@ -873,6 +1539,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).JobRunnerToken.Query().Where(jobrunnertoken.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying jobrunnertoken ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := JobRunnerTokenEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up jobrunnertoken edges") + return err + } + } + } if exists, err := FromContext(ctx).JobRunnerToken.Query().Where((jobrunnertoken.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if jobrunnertokenCount, err := FromContext(ctx).JobRunnerToken.Delete().Where(jobrunnertoken.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", jobrunnertokenCount).Msg("error deleting jobrunnertoken") @@ -880,6 +1559,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).JobRunnerRegistrationToken.Query().Where(jobrunnerregistrationtoken.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying jobrunnerregistrationtoken ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := JobRunnerRegistrationTokenEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up jobrunnerregistrationtoken edges") + return err + } + } + } if exists, err := FromContext(ctx).JobRunnerRegistrationToken.Query().Where((jobrunnerregistrationtoken.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if jobrunnerregistrationtokenCount, err := FromContext(ctx).JobRunnerRegistrationToken.Delete().Where(jobrunnerregistrationtoken.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", jobrunnerregistrationtokenCount).Msg("error deleting jobrunnerregistrationtoken") @@ -887,6 +1579,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).DNSVerification.Query().Where(dnsverification.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying dnsverification ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := DNSVerificationEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up dnsverification edges") + return err + } + } + } if exists, err := FromContext(ctx).DNSVerification.Query().Where((dnsverification.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if dnsverificationCount, err := FromContext(ctx).DNSVerification.Delete().Where(dnsverification.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", dnsverificationCount).Msg("error deleting dnsverification") @@ -894,6 +1599,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).JobTemplate.Query().Where(jobtemplate.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying jobtemplate ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := JobTemplateEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up jobtemplate edges") + return err + } + } + } if exists, err := FromContext(ctx).JobTemplate.Query().Where((jobtemplate.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if jobtemplateCount, err := FromContext(ctx).JobTemplate.Delete().Where(jobtemplate.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", jobtemplateCount).Msg("error deleting jobtemplate") @@ -901,6 +1619,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).ScheduledJob.Query().Where(scheduledjob.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying scheduledjob ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := ScheduledJobEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up scheduledjob edges") + return err + } + } + } if exists, err := FromContext(ctx).ScheduledJob.Query().Where((scheduledjob.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if scheduledjobCount, err := FromContext(ctx).ScheduledJob.Delete().Where(scheduledjob.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", scheduledjobCount).Msg("error deleting scheduledjob") @@ -908,6 +1639,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).JobResult.Query().Where(jobresult.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying jobresult ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := JobResultEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up jobresult edges") + return err + } + } + } if exists, err := FromContext(ctx).JobResult.Query().Where((jobresult.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if jobresultCount, err := FromContext(ctx).JobResult.Delete().Where(jobresult.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", jobresultCount).Msg("error deleting jobresult") @@ -915,6 +1659,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).ScheduledJobRun.Query().Where(scheduledjobrun.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying scheduledjobrun ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := ScheduledJobRunEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up scheduledjobrun edges") + return err + } + } + } if exists, err := FromContext(ctx).ScheduledJobRun.Query().Where((scheduledjobrun.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if scheduledjobrunCount, err := FromContext(ctx).ScheduledJobRun.Delete().Where(scheduledjobrun.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", scheduledjobrunCount).Msg("error deleting scheduledjobrun") @@ -922,6 +1679,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).TrustCenter.Query().Where(trustcenter.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying trustcenter ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := TrustCenterEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up trustcenter edges") + return err + } + } + } if exists, err := FromContext(ctx).TrustCenter.Query().Where((trustcenter.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if trustcenterCount, err := FromContext(ctx).TrustCenter.Delete().Where(trustcenter.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", trustcenterCount).Msg("error deleting trustcenter") @@ -929,6 +1699,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).Asset.Query().Where(asset.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying asset ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := AssetEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up asset edges") + return err + } + } + } if exists, err := FromContext(ctx).Asset.Query().Where((asset.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if assetCount, err := FromContext(ctx).Asset.Delete().Where(asset.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", assetCount).Msg("error deleting asset") @@ -936,6 +1719,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).Scan.Query().Where(scan.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying scan ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := ScanEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up scan edges") + return err + } + } + } if exists, err := FromContext(ctx).Scan.Query().Where((scan.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if scanCount, err := FromContext(ctx).Scan.Delete().Where(scan.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", scanCount).Msg("error deleting scan") @@ -943,6 +1739,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).SLADefinition.Query().Where(sladefinition.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying sladefinition ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := SLADefinitionEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up sladefinition edges") + return err + } + } + } if exists, err := FromContext(ctx).SLADefinition.Query().Where((sladefinition.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if sladefinitionCount, err := FromContext(ctx).SLADefinition.Delete().Where(sladefinition.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", sladefinitionCount).Msg("error deleting sladefinition") @@ -950,6 +1759,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).Subprocessor.Query().Where(subprocessor.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying subprocessor ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := SubprocessorEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up subprocessor edges") + return err + } + } + } if exists, err := FromContext(ctx).Subprocessor.Query().Where((subprocessor.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if subprocessorCount, err := FromContext(ctx).Subprocessor.Delete().Where(subprocessor.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", subprocessorCount).Msg("error deleting subprocessor") @@ -957,6 +1779,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).Export.Query().Where(export.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying export ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := ExportEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up export edges") + return err + } + } + } if exists, err := FromContext(ctx).Export.Query().Where((export.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if exportCount, err := FromContext(ctx).Export.Delete().Where(export.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", exportCount).Msg("error deleting export") @@ -964,6 +1799,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).TrustCenterWatermarkConfig.Query().Where(trustcenterwatermarkconfig.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying trustcenterwatermarkconfig ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := TrustCenterWatermarkConfigEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up trustcenterwatermarkconfig edges") + return err + } + } + } if exists, err := FromContext(ctx).TrustCenterWatermarkConfig.Query().Where((trustcenterwatermarkconfig.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if trustcenterwatermarkconfigCount, err := FromContext(ctx).TrustCenterWatermarkConfig.Delete().Where(trustcenterwatermarkconfig.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", trustcenterwatermarkconfigCount).Msg("error deleting trustcenterwatermarkconfig") @@ -971,6 +1819,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).Assessment.Query().Where(assessment.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying assessment ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := AssessmentEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up assessment edges") + return err + } + } + } if exists, err := FromContext(ctx).Assessment.Query().Where((assessment.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if assessmentCount, err := FromContext(ctx).Assessment.Delete().Where(assessment.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", assessmentCount).Msg("error deleting assessment") @@ -978,6 +1839,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).AssessmentResponse.Query().Where(assessmentresponse.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying assessmentresponse ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := AssessmentResponseEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up assessmentresponse edges") + return err + } + } + } if exists, err := FromContext(ctx).AssessmentResponse.Query().Where((assessmentresponse.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if assessmentresponseCount, err := FromContext(ctx).AssessmentResponse.Delete().Where(assessmentresponse.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", assessmentresponseCount).Msg("error deleting assessmentresponse") @@ -985,6 +1859,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).CustomTypeEnum.Query().Where(customtypeenum.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying customtypeenum ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := CustomTypeEnumEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up customtypeenum edges") + return err + } + } + } if exists, err := FromContext(ctx).CustomTypeEnum.Query().Where((customtypeenum.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if customtypeenumCount, err := FromContext(ctx).CustomTypeEnum.Delete().Where(customtypeenum.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", customtypeenumCount).Msg("error deleting customtypeenum") @@ -992,6 +1879,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).TagDefinition.Query().Where(tagdefinition.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying tagdefinition ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := TagDefinitionEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up tagdefinition edges") + return err + } + } + } if exists, err := FromContext(ctx).TagDefinition.Query().Where((tagdefinition.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if tagdefinitionCount, err := FromContext(ctx).TagDefinition.Delete().Where(tagdefinition.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", tagdefinitionCount).Msg("error deleting tagdefinition") @@ -999,6 +1899,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).Remediation.Query().Where(remediation.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying remediation ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := RemediationEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up remediation edges") + return err + } + } + } if exists, err := FromContext(ctx).Remediation.Query().Where((remediation.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if remediationCount, err := FromContext(ctx).Remediation.Delete().Where(remediation.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", remediationCount).Msg("error deleting remediation") @@ -1006,6 +1919,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).Finding.Query().Where(finding.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying finding ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := FindingEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up finding edges") + return err + } + } + } if exists, err := FromContext(ctx).Finding.Query().Where((finding.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if findingCount, err := FromContext(ctx).Finding.Delete().Where(finding.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", findingCount).Msg("error deleting finding") @@ -1013,6 +1939,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).Review.Query().Where(review.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying review ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := ReviewEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up review edges") + return err + } + } + } if exists, err := FromContext(ctx).Review.Query().Where((review.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if reviewCount, err := FromContext(ctx).Review.Delete().Where(review.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", reviewCount).Msg("error deleting review") @@ -1020,6 +1959,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).Vulnerability.Query().Where(vulnerability.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying vulnerability ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := VulnerabilityEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up vulnerability edges") + return err + } + } + } if exists, err := FromContext(ctx).Vulnerability.Query().Where((vulnerability.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if vulnerabilityCount, err := FromContext(ctx).Vulnerability.Delete().Where(vulnerability.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", vulnerabilityCount).Msg("error deleting vulnerability") @@ -1027,6 +1979,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).Notification.Query().Where(notification.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying notification ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := NotificationEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up notification edges") + return err + } + } + } if exists, err := FromContext(ctx).Notification.Query().Where((notification.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if notificationCount, err := FromContext(ctx).Notification.Delete().Where(notification.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", notificationCount).Msg("error deleting notification") @@ -1034,6 +1999,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).WorkflowDefinition.Query().Where(workflowdefinition.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying workflowdefinition ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := WorkflowDefinitionEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up workflowdefinition edges") + return err + } + } + } if exists, err := FromContext(ctx).WorkflowDefinition.Query().Where((workflowdefinition.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if workflowdefinitionCount, err := FromContext(ctx).WorkflowDefinition.Delete().Where(workflowdefinition.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", workflowdefinitionCount).Msg("error deleting workflowdefinition") @@ -1041,6 +2019,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).WorkflowInstance.Query().Where(workflowinstance.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying workflowinstance ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := WorkflowInstanceEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up workflowinstance edges") + return err + } + } + } if exists, err := FromContext(ctx).WorkflowInstance.Query().Where((workflowinstance.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if workflowinstanceCount, err := FromContext(ctx).WorkflowInstance.Delete().Where(workflowinstance.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", workflowinstanceCount).Msg("error deleting workflowinstance") @@ -1048,6 +2039,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).WorkflowEvent.Query().Where(workflowevent.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying workflowevent ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := WorkflowEventEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up workflowevent edges") + return err + } + } + } if exists, err := FromContext(ctx).WorkflowEvent.Query().Where((workflowevent.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if workfloweventCount, err := FromContext(ctx).WorkflowEvent.Delete().Where(workflowevent.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", workfloweventCount).Msg("error deleting workflowevent") @@ -1055,6 +2059,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).WorkflowAssignment.Query().Where(workflowassignment.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying workflowassignment ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := WorkflowAssignmentEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up workflowassignment edges") + return err + } + } + } if exists, err := FromContext(ctx).WorkflowAssignment.Query().Where((workflowassignment.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if workflowassignmentCount, err := FromContext(ctx).WorkflowAssignment.Delete().Where(workflowassignment.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", workflowassignmentCount).Msg("error deleting workflowassignment") @@ -1062,6 +2079,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).WorkflowAssignmentTarget.Query().Where(workflowassignmenttarget.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying workflowassignmenttarget ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := WorkflowAssignmentTargetEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up workflowassignmenttarget edges") + return err + } + } + } if exists, err := FromContext(ctx).WorkflowAssignmentTarget.Query().Where((workflowassignmenttarget.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if workflowassignmenttargetCount, err := FromContext(ctx).WorkflowAssignmentTarget.Delete().Where(workflowassignmenttarget.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", workflowassignmenttargetCount).Msg("error deleting workflowassignmenttarget") @@ -1069,6 +2099,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).WorkflowObjectRef.Query().Where(workflowobjectref.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying workflowobjectref ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := WorkflowObjectRefEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up workflowobjectref edges") + return err + } + } + } if exists, err := FromContext(ctx).WorkflowObjectRef.Query().Where((workflowobjectref.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if workflowobjectrefCount, err := FromContext(ctx).WorkflowObjectRef.Delete().Where(workflowobjectref.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", workflowobjectrefCount).Msg("error deleting workflowobjectref") @@ -1076,6 +2119,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).WorkflowProposal.Query().Where(workflowproposal.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying workflowproposal ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := WorkflowProposalEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up workflowproposal edges") + return err + } + } + } if exists, err := FromContext(ctx).WorkflowProposal.Query().Where((workflowproposal.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if workflowproposalCount, err := FromContext(ctx).WorkflowProposal.Delete().Where(workflowproposal.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", workflowproposalCount).Msg("error deleting workflowproposal") @@ -1083,6 +2139,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).DirectoryAccount.Query().Where(directoryaccount.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying directoryaccount ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := DirectoryAccountEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up directoryaccount edges") + return err + } + } + } if exists, err := FromContext(ctx).DirectoryAccount.Query().Where((directoryaccount.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if directoryaccountCount, err := FromContext(ctx).DirectoryAccount.Delete().Where(directoryaccount.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", directoryaccountCount).Msg("error deleting directoryaccount") @@ -1090,6 +2159,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).DirectoryGroup.Query().Where(directorygroup.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying directorygroup ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := DirectoryGroupEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up directorygroup edges") + return err + } + } + } if exists, err := FromContext(ctx).DirectoryGroup.Query().Where((directorygroup.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if directorygroupCount, err := FromContext(ctx).DirectoryGroup.Delete().Where(directorygroup.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", directorygroupCount).Msg("error deleting directorygroup") @@ -1097,6 +2179,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).DirectoryMembership.Query().Where(directorymembership.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying directorymembership ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := DirectoryMembershipEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up directorymembership edges") + return err + } + } + } if exists, err := FromContext(ctx).DirectoryMembership.Query().Where((directorymembership.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if directorymembershipCount, err := FromContext(ctx).DirectoryMembership.Delete().Where(directorymembership.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", directorymembershipCount).Msg("error deleting directorymembership") @@ -1104,6 +2199,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).DirectorySyncRun.Query().Where(directorysyncrun.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying directorysyncrun ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := DirectorySyncRunEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up directorysyncrun edges") + return err + } + } + } if exists, err := FromContext(ctx).DirectorySyncRun.Query().Where((directorysyncrun.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if directorysyncrunCount, err := FromContext(ctx).DirectorySyncRun.Delete().Where(directorysyncrun.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", directorysyncrunCount).Msg("error deleting directorysyncrun") @@ -1111,6 +2219,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).Discussion.Query().Where(discussion.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying discussion ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := DiscussionEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up discussion edges") + return err + } + } + } if exists, err := FromContext(ctx).Discussion.Query().Where((discussion.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if discussionCount, err := FromContext(ctx).Discussion.Delete().Where(discussion.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", discussionCount).Msg("error deleting discussion") @@ -1118,6 +2239,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).VendorScoringConfig.Query().Where(vendorscoringconfig.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying vendorscoringconfig ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := VendorScoringConfigEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up vendorscoringconfig edges") + return err + } + } + } if exists, err := FromContext(ctx).VendorScoringConfig.Query().Where((vendorscoringconfig.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if vendorscoringconfigCount, err := FromContext(ctx).VendorScoringConfig.Delete().Where(vendorscoringconfig.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", vendorscoringconfigCount).Msg("error deleting vendorscoringconfig") @@ -1125,6 +2259,19 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).VendorRiskScore.Query().Where(vendorriskscore.HasOwnerWith(organization.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying vendorriskscore ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := VendorRiskScoreEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up vendorriskscore edges") + return err + } + } + } if exists, err := FromContext(ctx).VendorRiskScore.Query().Where((vendorriskscore.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { if vendorriskscoreCount, err := FromContext(ctx).VendorRiskScore.Delete().Where(vendorriskscore.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", vendorriskscoreCount).Msg("error deleting vendorriskscore") @@ -1248,6 +2395,19 @@ func SubcontrolEdgeCleanup(ctx context.Context, id string) error { func SubprocessorEdgeCleanup(ctx context.Context, id string) error { ctx = entfga.WithDeleteTuplesFirst(privacy.DecisionContext(ctx, privacy.Allowf("cleanup subprocessor edge"))) + { + ids, err := FromContext(ctx).TrustCenterSubprocessor.Query().Where(trustcentersubprocessor.HasSubprocessorWith(subprocessor.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying trustcentersubprocessor ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := TrustCenterSubprocessorEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up trustcentersubprocessor edges") + return err + } + } + } if exists, err := FromContext(ctx).TrustCenterSubprocessor.Query().Where((trustcentersubprocessor.HasSubprocessorWith(subprocessor.ID(id)))).Exist(ctx); err == nil && exists { if trustcentersubprocessorCount, err := FromContext(ctx).TrustCenterSubprocessor.Delete().Where(trustcentersubprocessor.HasSubprocessorWith(subprocessor.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", trustcentersubprocessorCount).Msg("error deleting trustcentersubprocessor") @@ -1291,6 +2451,19 @@ func TaskEdgeCleanup(ctx context.Context, id string) error { func TemplateEdgeCleanup(ctx context.Context, id string) error { ctx = entfga.WithDeleteTuplesFirst(privacy.DecisionContext(ctx, privacy.Allowf("cleanup template edge"))) + { + ids, err := FromContext(ctx).DocumentData.Query().Where(documentdata.HasTemplateWith(template.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying documentdata ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := DocumentDataEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up documentdata edges") + return err + } + } + } if exists, err := FromContext(ctx).DocumentData.Query().Where((documentdata.HasTemplateWith(template.ID(id)))).Exist(ctx); err == nil && exists { if documentdataCount, err := FromContext(ctx).DocumentData.Delete().Where(documentdata.HasTemplateWith(template.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", documentdataCount).Msg("error deleting documentdata") @@ -1332,6 +2505,19 @@ func TrustCenterEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).TrustCenterWatermarkConfig.Query().Where(trustcenterwatermarkconfig.HasTrustCenterWith(trustcenter.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying trustcenterwatermarkconfig ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := TrustCenterWatermarkConfigEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up trustcenterwatermarkconfig edges") + return err + } + } + } if exists, err := FromContext(ctx).TrustCenterWatermarkConfig.Query().Where((trustcenterwatermarkconfig.HasTrustCenterWith(trustcenter.ID(id)))).Exist(ctx); err == nil && exists { if trustcenterwatermarkconfigCount, err := FromContext(ctx).TrustCenterWatermarkConfig.Delete().Where(trustcenterwatermarkconfig.HasTrustCenterWith(trustcenter.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", trustcenterwatermarkconfigCount).Msg("error deleting trustcenterwatermarkconfig") @@ -1339,6 +2525,19 @@ func TrustCenterEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).TrustCenterSubprocessor.Query().Where(trustcentersubprocessor.HasTrustCenterWith(trustcenter.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying trustcentersubprocessor ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := TrustCenterSubprocessorEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up trustcentersubprocessor edges") + return err + } + } + } if exists, err := FromContext(ctx).TrustCenterSubprocessor.Query().Where((trustcentersubprocessor.HasTrustCenterWith(trustcenter.ID(id)))).Exist(ctx); err == nil && exists { if trustcentersubprocessorCount, err := FromContext(ctx).TrustCenterSubprocessor.Delete().Where(trustcentersubprocessor.HasTrustCenterWith(trustcenter.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", trustcentersubprocessorCount).Msg("error deleting trustcentersubprocessor") @@ -1346,6 +2545,19 @@ func TrustCenterEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).TrustCenterDoc.Query().Where(trustcenterdoc.HasTrustCenterWith(trustcenter.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying trustcenterdoc ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := TrustCenterDocEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up trustcenterdoc edges") + return err + } + } + } if exists, err := FromContext(ctx).TrustCenterDoc.Query().Where((trustcenterdoc.HasTrustCenterWith(trustcenter.ID(id)))).Exist(ctx); err == nil && exists { if trustcenterdocCount, err := FromContext(ctx).TrustCenterDoc.Delete().Where(trustcenterdoc.HasTrustCenterWith(trustcenter.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", trustcenterdocCount).Msg("error deleting trustcenterdoc") @@ -1353,6 +2565,19 @@ func TrustCenterEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).TrustCenterCompliance.Query().Where(trustcentercompliance.HasTrustCenterWith(trustcenter.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying trustcentercompliance ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := TrustCenterComplianceEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up trustcentercompliance edges") + return err + } + } + } if exists, err := FromContext(ctx).TrustCenterCompliance.Query().Where((trustcentercompliance.HasTrustCenterWith(trustcenter.ID(id)))).Exist(ctx); err == nil && exists { if trustcentercomplianceCount, err := FromContext(ctx).TrustCenterCompliance.Delete().Where(trustcentercompliance.HasTrustCenterWith(trustcenter.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", trustcentercomplianceCount).Msg("error deleting trustcentercompliance") @@ -1360,6 +2585,19 @@ func TrustCenterEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).Template.Query().Where(template.HasTrustCenterWith(trustcenter.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying template ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := TemplateEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up template edges") + return err + } + } + } if exists, err := FromContext(ctx).Template.Query().Where((template.HasTrustCenterWith(trustcenter.ID(id)))).Exist(ctx); err == nil && exists { if templateCount, err := FromContext(ctx).Template.Delete().Where(template.HasTrustCenterWith(trustcenter.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", templateCount).Msg("error deleting template") @@ -1367,6 +2605,19 @@ func TrustCenterEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).Note.Query().Where(note.HasTrustCenterWith(trustcenter.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying note ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := NoteEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up note edges") + return err + } + } + } if exists, err := FromContext(ctx).Note.Query().Where((note.HasTrustCenterWith(trustcenter.ID(id)))).Exist(ctx); err == nil && exists { if noteCount, err := FromContext(ctx).Note.Delete().Where(note.HasTrustCenterWith(trustcenter.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", noteCount).Msg("error deleting note") @@ -1374,6 +2625,19 @@ func TrustCenterEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).TrustCenterEntity.Query().Where(trustcenterentity.HasTrustCenterWith(trustcenter.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying trustcenterentity ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := TrustCenterEntityEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up trustcenterentity edges") + return err + } + } + } if exists, err := FromContext(ctx).TrustCenterEntity.Query().Where((trustcenterentity.HasTrustCenterWith(trustcenter.ID(id)))).Exist(ctx); err == nil && exists { if trustcenterentityCount, err := FromContext(ctx).TrustCenterEntity.Delete().Where(trustcenterentity.HasTrustCenterWith(trustcenter.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", trustcenterentityCount).Msg("error deleting trustcenterentity") @@ -1381,6 +2645,19 @@ func TrustCenterEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).TrustCenterNDARequest.Query().Where(trustcenterndarequest.HasTrustCenterWith(trustcenter.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying trustcenterndarequest ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := TrustCenterNDARequestEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up trustcenterndarequest edges") + return err + } + } + } if exists, err := FromContext(ctx).TrustCenterNDARequest.Query().Where((trustcenterndarequest.HasTrustCenterWith(trustcenter.ID(id)))).Exist(ctx); err == nil && exists { if trustcenterndarequestCount, err := FromContext(ctx).TrustCenterNDARequest.Delete().Where(trustcenterndarequest.HasTrustCenterWith(trustcenter.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", trustcenterndarequestCount).Msg("error deleting trustcenterndarequest") @@ -1388,6 +2665,19 @@ func TrustCenterEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).TrustCenterFAQ.Query().Where(trustcenterfaq.HasTrustCenterWith(trustcenter.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying trustcenterfaq ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := TrustCenterFAQEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up trustcenterfaq edges") + return err + } + } + } if exists, err := FromContext(ctx).TrustCenterFAQ.Query().Where((trustcenterfaq.HasTrustCenterWith(trustcenter.ID(id)))).Exist(ctx); err == nil && exists { if trustcenterfaqCount, err := FromContext(ctx).TrustCenterFAQ.Delete().Where(trustcenterfaq.HasTrustCenterWith(trustcenter.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", trustcenterfaqCount).Msg("error deleting trustcenterfaq") @@ -1407,6 +2697,19 @@ func TrustCenterComplianceEdgeCleanup(ctx context.Context, id string) error { func TrustCenterDocEdgeCleanup(ctx context.Context, id string) error { ctx = entfga.WithDeleteTuplesFirst(privacy.DecisionContext(ctx, privacy.Allowf("cleanup trustcenterdoc edge"))) + { + ids, err := FromContext(ctx).File.Query().Where(file.HasTrustCenterDocWith(trustcenterdoc.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying file ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := FileEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up file edges") + return err + } + } + } if exists, err := FromContext(ctx).File.Query().Where((file.HasTrustCenterDocWith(trustcenterdoc.ID(id)))).Exist(ctx); err == nil && exists { if fileCount, err := FromContext(ctx).File.Delete().Where(file.HasTrustCenterDocWith(trustcenterdoc.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", fileCount).Msg("error deleting file") @@ -1414,6 +2717,19 @@ func TrustCenterDocEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).File.Query().Where(file.HasTrustCenterDocWith(trustcenterdoc.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying file ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := FileEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up file edges") + return err + } + } + } if exists, err := FromContext(ctx).File.Query().Where((file.HasTrustCenterDocWith(trustcenterdoc.ID(id)))).Exist(ctx); err == nil && exists { if fileCount, err := FromContext(ctx).File.Delete().Where(file.HasTrustCenterDocWith(trustcenterdoc.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", fileCount).Msg("error deleting file") @@ -1463,6 +2779,19 @@ func TrustCenterWatermarkConfigEdgeCleanup(ctx context.Context, id string) error func UserEdgeCleanup(ctx context.Context, id string) error { ctx = entfga.WithDeleteTuplesFirst(privacy.DecisionContext(ctx, privacy.Allowf("cleanup user edge"))) + { + ids, err := FromContext(ctx).PersonalAccessToken.Query().Where(personalaccesstoken.HasOwnerWith(user.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying personalaccesstoken ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := PersonalAccessTokenEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up personalaccesstoken edges") + return err + } + } + } if exists, err := FromContext(ctx).PersonalAccessToken.Query().Where((personalaccesstoken.HasOwnerWith(user.ID(id)))).Exist(ctx); err == nil && exists { if personalaccesstokenCount, err := FromContext(ctx).PersonalAccessToken.Delete().Where(personalaccesstoken.HasOwnerWith(user.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", personalaccesstokenCount).Msg("error deleting personalaccesstoken") @@ -1470,6 +2799,19 @@ func UserEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).TFASetting.Query().Where(tfasetting.HasOwnerWith(user.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying tfasetting ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := TFASettingEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up tfasetting edges") + return err + } + } + } if exists, err := FromContext(ctx).TFASetting.Query().Where((tfasetting.HasOwnerWith(user.ID(id)))).Exist(ctx); err == nil && exists { if tfasettingCount, err := FromContext(ctx).TFASetting.Delete().Where(tfasetting.HasOwnerWith(user.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", tfasettingCount).Msg("error deleting tfasetting") @@ -1477,6 +2819,19 @@ func UserEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).UserSetting.Query().Where(usersetting.HasUserWith(user.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying usersetting ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := UserSettingEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up usersetting edges") + return err + } + } + } if exists, err := FromContext(ctx).UserSetting.Query().Where((usersetting.HasUserWith(user.ID(id)))).Exist(ctx); err == nil && exists { if usersettingCount, err := FromContext(ctx).UserSetting.Delete().Where(usersetting.HasUserWith(user.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", usersettingCount).Msg("error deleting usersetting") @@ -1484,6 +2839,19 @@ func UserEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).EmailVerificationToken.Query().Where(emailverificationtoken.HasOwnerWith(user.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying emailverificationtoken ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := EmailVerificationTokenEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up emailverificationtoken edges") + return err + } + } + } if exists, err := FromContext(ctx).EmailVerificationToken.Query().Where((emailverificationtoken.HasOwnerWith(user.ID(id)))).Exist(ctx); err == nil && exists { if emailverificationtokenCount, err := FromContext(ctx).EmailVerificationToken.Delete().Where(emailverificationtoken.HasOwnerWith(user.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", emailverificationtokenCount).Msg("error deleting emailverificationtoken") @@ -1491,6 +2859,19 @@ func UserEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).FileDownloadToken.Query().Where(filedownloadtoken.HasOwnerWith(user.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying filedownloadtoken ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := FileDownloadTokenEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up filedownloadtoken edges") + return err + } + } + } if exists, err := FromContext(ctx).FileDownloadToken.Query().Where((filedownloadtoken.HasOwnerWith(user.ID(id)))).Exist(ctx); err == nil && exists { if filedownloadtokenCount, err := FromContext(ctx).FileDownloadToken.Delete().Where(filedownloadtoken.HasOwnerWith(user.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", filedownloadtokenCount).Msg("error deleting filedownloadtoken") @@ -1498,6 +2879,19 @@ func UserEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).PasswordResetToken.Query().Where(passwordresettoken.HasOwnerWith(user.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying passwordresettoken ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := PasswordResetTokenEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up passwordresettoken edges") + return err + } + } + } if exists, err := FromContext(ctx).PasswordResetToken.Query().Where((passwordresettoken.HasOwnerWith(user.ID(id)))).Exist(ctx); err == nil && exists { if passwordresettokenCount, err := FromContext(ctx).PasswordResetToken.Delete().Where(passwordresettoken.HasOwnerWith(user.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", passwordresettokenCount).Msg("error deleting passwordresettoken") @@ -1505,6 +2899,19 @@ func UserEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).Webauthn.Query().Where(webauthn.HasOwnerWith(user.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying webauthn ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := WebauthnEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up webauthn edges") + return err + } + } + } if exists, err := FromContext(ctx).Webauthn.Query().Where((webauthn.HasOwnerWith(user.ID(id)))).Exist(ctx); err == nil && exists { if webauthnCount, err := FromContext(ctx).Webauthn.Delete().Where(webauthn.HasOwnerWith(user.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", webauthnCount).Msg("error deleting webauthn") @@ -1512,6 +2919,19 @@ func UserEdgeCleanup(ctx context.Context, id string) error { } } + { + ids, err := FromContext(ctx).Notification.Query().Where(notification.HasUserWith(user.ID(id))).IDs(ctx) + if err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("error querying notification ids for cleanup") + return err + } + for _, edgeID := range ids { + if err := NotificationEdgeCleanup(ctx, edgeID); err != nil { + logx.FromContext(ctx).Error().Err(err).Str("id", edgeID).Msg("error cleaning up notification edges") + return err + } + } + } if exists, err := FromContext(ctx).Notification.Query().Where((notification.HasUserWith(user.ID(id)))).Exist(ctx); err == nil && exists { if notificationCount, err := FromContext(ctx).Notification.Delete().Where(notification.HasUserWith(user.ID(id))).Exec(ctx); err != nil { logx.FromContext(ctx).Error().Err(err).Int("count", notificationCount).Msg("error deleting notification") diff --git a/internal/ent/generated/entity/entity.go b/internal/ent/generated/entity/entity.go index 1a14f3ab2b..43de6dbdd7 100644 --- a/internal/ent/generated/entity/entity.go +++ b/internal/ent/generated/entity/entity.go @@ -644,7 +644,7 @@ func StatusValidator(s enums.EntityStatus) error { } } -const DefaultTier enums.VendorTier = "STANDARD" +const DefaultTier enums.VendorTier = "LOW" // TierValidator is a validator for the "tier" field enum values. It is called by the builders before save. func TierValidator(t enums.VendorTier) error { diff --git a/internal/ent/generated/entql.go b/internal/ent/generated/entql.go index e8f51b76e4..fc69113de0 100644 --- a/internal/ent/generated/entql.go +++ b/internal/ent/generated/entql.go @@ -2337,6 +2337,7 @@ var schemaGraph = func() *sqlgraph.Schema { organizationsetting.FieldMultifactorAuthEnforced: {Type: field.TypeBool, Column: organizationsetting.FieldMultifactorAuthEnforced}, organizationsetting.FieldComplianceWebhookToken: {Type: field.TypeString, Column: organizationsetting.FieldComplianceWebhookToken}, organizationsetting.FieldPaymentMethodAdded: {Type: field.TypeBool, Column: organizationsetting.FieldPaymentMethodAdded}, + organizationsetting.FieldPendingDeletionAt: {Type: field.TypeTime, Column: organizationsetting.FieldPendingDeletionAt}, }, } graph.Nodes[63] = &sqlgraph.Node{ @@ -36563,6 +36564,11 @@ func (f *OrganizationSettingFilter) WherePaymentMethodAdded(p entql.BoolP) { f.Where(p.Field(organizationsetting.FieldPaymentMethodAdded)) } +// WherePendingDeletionAt applies the entql time.Time predicate on the pending_deletion_at field. +func (f *OrganizationSettingFilter) WherePendingDeletionAt(p entql.TimeP) { + f.Where(p.Field(organizationsetting.FieldPendingDeletionAt)) +} + // WhereHasOrganization applies a predicate to check if query has an edge organization. func (f *OrganizationSettingFilter) WhereHasOrganization() { f.Where(entql.HasEdge("organization")) diff --git a/internal/ent/generated/gql_collection.go b/internal/ent/generated/gql_collection.go index f0539e854a..d0e8c8de8a 100644 --- a/internal/ent/generated/gql_collection.go +++ b/internal/ent/generated/gql_collection.go @@ -53657,6 +53657,11 @@ func (_q *OrganizationSettingQuery) collectField(ctx context.Context, oneNode bo selectedFields = append(selectedFields, organizationsetting.FieldPaymentMethodAdded) fieldSeen[organizationsetting.FieldPaymentMethodAdded] = struct{}{} } + case "pendingDeletionAt": + if _, ok := fieldSeen[organizationsetting.FieldPendingDeletionAt]; !ok { + selectedFields = append(selectedFields, organizationsetting.FieldPendingDeletionAt) + fieldSeen[organizationsetting.FieldPendingDeletionAt] = struct{}{} + } case "id": case "__typename": default: diff --git a/internal/ent/generated/gql_mutation_input.go b/internal/ent/generated/gql_mutation_input.go index 5098660bf0..014fd9a208 100644 --- a/internal/ent/generated/gql_mutation_input.go +++ b/internal/ent/generated/gql_mutation_input.go @@ -17782,6 +17782,8 @@ type UpdateOrganizationSettingInput struct { MultifactorAuthEnforced *bool ClearComplianceWebhookToken bool ComplianceWebhookToken *string + ClearPendingDeletionAt bool + PendingDeletionAt *models.DateTime ClearOrganization bool OrganizationID *string ClearFiles bool @@ -17932,6 +17934,12 @@ func (i *UpdateOrganizationSettingInput) Mutate(m *OrganizationSettingMutation) if v := i.ComplianceWebhookToken; v != nil { m.SetComplianceWebhookToken(*v) } + if i.ClearPendingDeletionAt { + m.ClearPendingDeletionAt() + } + if v := i.PendingDeletionAt; v != nil { + m.SetPendingDeletionAt(*v) + } if i.ClearOrganization { m.ClearOrganization() } diff --git a/internal/ent/generated/gql_where_input.go b/internal/ent/generated/gql_where_input.go index 72a664791d..4e2d64b8aa 100644 --- a/internal/ent/generated/gql_where_input.go +++ b/internal/ent/generated/gql_where_input.go @@ -72142,6 +72142,22 @@ type OrganizationSettingWhereInput struct { ComplianceWebhookTokenEqualFold *string `json:"complianceWebhookTokenEqualFold,omitempty"` ComplianceWebhookTokenContainsFold *string `json:"complianceWebhookTokenContainsFold,omitempty"` + // "payment_method_added" field predicates. + PaymentMethodAdded *bool `json:"paymentMethodAdded,omitempty"` + PaymentMethodAddedNEQ *bool `json:"paymentMethodAddedNEQ,omitempty"` + + // "pending_deletion_at" field predicates. + PendingDeletionAt *models.DateTime `json:"pendingDeletionAt,omitempty"` + PendingDeletionAtNEQ *models.DateTime `json:"pendingDeletionAtNEQ,omitempty"` + PendingDeletionAtIn []models.DateTime `json:"pendingDeletionAtIn,omitempty"` + PendingDeletionAtNotIn []models.DateTime `json:"pendingDeletionAtNotIn,omitempty"` + PendingDeletionAtGT *models.DateTime `json:"pendingDeletionAtGT,omitempty"` + PendingDeletionAtGTE *models.DateTime `json:"pendingDeletionAtGTE,omitempty"` + PendingDeletionAtLT *models.DateTime `json:"pendingDeletionAtLT,omitempty"` + PendingDeletionAtLTE *models.DateTime `json:"pendingDeletionAtLTE,omitempty"` + PendingDeletionAtIsNil bool `json:"pendingDeletionAtIsNil,omitempty"` + PendingDeletionAtNotNil bool `json:"pendingDeletionAtNotNil,omitempty"` + // "tags" JSON-string-array predicates. TagsHas *string `json:"tagsHas,omitempty"` @@ -73119,6 +73135,42 @@ func (i *OrganizationSettingWhereInput) P() (predicate.OrganizationSetting, erro if i.ComplianceWebhookTokenContainsFold != nil { predicates = append(predicates, organizationsetting.ComplianceWebhookTokenContainsFold(*i.ComplianceWebhookTokenContainsFold)) } + if i.PaymentMethodAdded != nil { + predicates = append(predicates, organizationsetting.PaymentMethodAddedEQ(*i.PaymentMethodAdded)) + } + if i.PaymentMethodAddedNEQ != nil { + predicates = append(predicates, organizationsetting.PaymentMethodAddedNEQ(*i.PaymentMethodAddedNEQ)) + } + if i.PendingDeletionAt != nil { + predicates = append(predicates, organizationsetting.PendingDeletionAtEQ(*i.PendingDeletionAt)) + } + if i.PendingDeletionAtNEQ != nil { + predicates = append(predicates, organizationsetting.PendingDeletionAtNEQ(*i.PendingDeletionAtNEQ)) + } + if len(i.PendingDeletionAtIn) > 0 { + predicates = append(predicates, organizationsetting.PendingDeletionAtIn(i.PendingDeletionAtIn...)) + } + if len(i.PendingDeletionAtNotIn) > 0 { + predicates = append(predicates, organizationsetting.PendingDeletionAtNotIn(i.PendingDeletionAtNotIn...)) + } + if i.PendingDeletionAtGT != nil { + predicates = append(predicates, organizationsetting.PendingDeletionAtGT(*i.PendingDeletionAtGT)) + } + if i.PendingDeletionAtGTE != nil { + predicates = append(predicates, organizationsetting.PendingDeletionAtGTE(*i.PendingDeletionAtGTE)) + } + if i.PendingDeletionAtLT != nil { + predicates = append(predicates, organizationsetting.PendingDeletionAtLT(*i.PendingDeletionAtLT)) + } + if i.PendingDeletionAtLTE != nil { + predicates = append(predicates, organizationsetting.PendingDeletionAtLTE(*i.PendingDeletionAtLTE)) + } + if i.PendingDeletionAtIsNil { + predicates = append(predicates, organizationsetting.PendingDeletionAtIsNil()) + } + if i.PendingDeletionAtNotNil { + predicates = append(predicates, organizationsetting.PendingDeletionAtNotNil()) + } if i.TagsHas != nil { v := *i.TagsHas diff --git a/internal/ent/generated/history_from_mutation.go b/internal/ent/generated/history_from_mutation.go index c30ffee868..86ee9a3ff3 100644 --- a/internal/ent/generated/history_from_mutation.go +++ b/internal/ent/generated/history_from_mutation.go @@ -15612,6 +15612,10 @@ func (m *OrganizationSettingMutation) CreateHistoryFromCreate(ctx context.Contex create = create.SetPaymentMethodAdded(paymentMethodAdded) } + if pendingDeletionAt, exists := m.PendingDeletionAt(); exists { + create = create.SetNillablePendingDeletionAt(&pendingDeletionAt) + } + _, err := create.Save(ctx) return err @@ -15835,6 +15839,12 @@ func (m *OrganizationSettingMutation) CreateHistoryFromUpdate(ctx context.Contex create = create.SetPaymentMethodAdded(organizationsetting.PaymentMethodAdded) } + if pendingDeletionAt, exists := m.PendingDeletionAt(); exists { + create = create.SetNillablePendingDeletionAt(&pendingDeletionAt) + } else { + create = create.SetNillablePendingDeletionAt(organizationsetting.PendingDeletionAt) + } + if _, err := create.Save(ctx); err != nil { return err } @@ -15902,6 +15912,7 @@ func (m *OrganizationSettingMutation) CreateHistoryFromDelete(ctx context.Contex SetMultifactorAuthEnforced(organizationsetting.MultifactorAuthEnforced). SetComplianceWebhookToken(organizationsetting.ComplianceWebhookToken). SetPaymentMethodAdded(organizationsetting.PaymentMethodAdded). + SetNillablePendingDeletionAt(organizationsetting.PendingDeletionAt). Save(ctx) if err != nil { return err diff --git a/internal/ent/generated/migrate/schema.go b/internal/ent/generated/migrate/schema.go index 0bbc79b76a..d9872c8fa3 100644 --- a/internal/ent/generated/migrate/schema.go +++ b/internal/ent/generated/migrate/schema.go @@ -2209,7 +2209,7 @@ var ( {Name: "risk_rating", Type: field.TypeString, Nullable: true}, {Name: "risk_score", Type: field.TypeInt, Nullable: true}, {Name: "risk_score_coverage", Type: field.TypeInt, Nullable: true}, - {Name: "tier", Type: field.TypeEnum, Nullable: true, Enums: []string{"CRITICAL", "HIGH", "STANDARD", "LOW"}, Default: "STANDARD"}, + {Name: "tier", Type: field.TypeEnum, Nullable: true, Enums: []string{"CRITICAL", "HIGH", "STANDARD", "LOW"}, Default: "LOW"}, {Name: "review_frequency", Type: field.TypeEnum, Nullable: true, Enums: []string{"YEARLY", "QUARTERLY", "BIANNUALLY", "MONTHLY", "NONE"}, Default: "YEARLY"}, {Name: "next_review_at", Type: field.TypeTime, Nullable: true}, {Name: "contract_renewal_at", Type: field.TypeTime, Nullable: true}, @@ -5355,6 +5355,7 @@ var ( {Name: "multifactor_auth_enforced", Type: field.TypeBool, Nullable: true, Default: false}, {Name: "compliance_webhook_token", Type: field.TypeString, Unique: true, Nullable: true}, {Name: "payment_method_added", Type: field.TypeBool, Default: false}, + {Name: "pending_deletion_at", Type: field.TypeTime, Nullable: true}, {Name: "organization_id", Type: field.TypeString, Unique: true, Nullable: true}, } // OrganizationSettingsTable holds the schema information for the "organization_settings" table. @@ -5365,7 +5366,7 @@ var ( ForeignKeys: []*schema.ForeignKey{ { Symbol: "organization_settings_organizations_setting", - Columns: []*schema.Column{OrganizationSettingsColumns[32]}, + Columns: []*schema.Column{OrganizationSettingsColumns[33]}, RefColumns: []*schema.Column{OrganizationsColumns[0]}, OnDelete: schema.SetNull, }, diff --git a/internal/ent/generated/mutation.go b/internal/ent/generated/mutation.go index 1437b7f8ac..6732f24b87 100644 --- a/internal/ent/generated/mutation.go +++ b/internal/ent/generated/mutation.go @@ -166127,6 +166127,7 @@ type OrganizationSettingMutation struct { multifactor_auth_enforced *bool compliance_webhook_token *string payment_method_added *bool + pending_deletion_at *models.DateTime clearedFields map[string]struct{} organization *string clearedorganization bool @@ -167806,6 +167807,55 @@ func (m *OrganizationSettingMutation) ResetPaymentMethodAdded() { m.payment_method_added = nil } +// SetPendingDeletionAt sets the "pending_deletion_at" field. +func (m *OrganizationSettingMutation) SetPendingDeletionAt(mt models.DateTime) { + m.pending_deletion_at = &mt +} + +// PendingDeletionAt returns the value of the "pending_deletion_at" field in the mutation. +func (m *OrganizationSettingMutation) PendingDeletionAt() (r models.DateTime, exists bool) { + v := m.pending_deletion_at + if v == nil { + return + } + return *v, true +} + +// OldPendingDeletionAt returns the old "pending_deletion_at" field's value of the OrganizationSetting entity. +// If the OrganizationSetting object wasn't provided to the builder, the object is fetched from the database. +// An error is returned if the mutation operation is not UpdateOne, or the database query fails. +func (m *OrganizationSettingMutation) OldPendingDeletionAt(ctx context.Context) (v *models.DateTime, err error) { + if !m.op.Is(OpUpdateOne) { + return v, errors.New("OldPendingDeletionAt is only allowed on UpdateOne operations") + } + if m.id == nil || m.oldValue == nil { + return v, errors.New("OldPendingDeletionAt requires an ID field in the mutation") + } + oldValue, err := m.oldValue(ctx) + if err != nil { + return v, fmt.Errorf("querying old value for OldPendingDeletionAt: %w", err) + } + return oldValue.PendingDeletionAt, nil +} + +// ClearPendingDeletionAt clears the value of the "pending_deletion_at" field. +func (m *OrganizationSettingMutation) ClearPendingDeletionAt() { + m.pending_deletion_at = nil + m.clearedFields[organizationsetting.FieldPendingDeletionAt] = struct{}{} +} + +// PendingDeletionAtCleared returns if the "pending_deletion_at" field was cleared in this mutation. +func (m *OrganizationSettingMutation) PendingDeletionAtCleared() bool { + _, ok := m.clearedFields[organizationsetting.FieldPendingDeletionAt] + return ok +} + +// ResetPendingDeletionAt resets all changes to the "pending_deletion_at" field. +func (m *OrganizationSettingMutation) ResetPendingDeletionAt() { + m.pending_deletion_at = nil + delete(m.clearedFields, organizationsetting.FieldPendingDeletionAt) +} + // ClearOrganization clears the "organization" edge to the Organization entity. func (m *OrganizationSettingMutation) ClearOrganization() { m.clearedorganization = true @@ -167921,7 +167971,7 @@ func (m *OrganizationSettingMutation) Type() string { // order to get all numeric fields that were incremented/decremented, call // AddedFields(). func (m *OrganizationSettingMutation) Fields() []string { - fields := make([]string, 0, 32) + fields := make([]string, 0, 33) if m.created_at != nil { fields = append(fields, organizationsetting.FieldCreatedAt) } @@ -168018,6 +168068,9 @@ func (m *OrganizationSettingMutation) Fields() []string { if m.payment_method_added != nil { fields = append(fields, organizationsetting.FieldPaymentMethodAdded) } + if m.pending_deletion_at != nil { + fields = append(fields, organizationsetting.FieldPendingDeletionAt) + } return fields } @@ -168090,6 +168143,8 @@ func (m *OrganizationSettingMutation) Field(name string) (ent.Value, bool) { return m.ComplianceWebhookToken() case organizationsetting.FieldPaymentMethodAdded: return m.PaymentMethodAdded() + case organizationsetting.FieldPendingDeletionAt: + return m.PendingDeletionAt() } return nil, false } @@ -168163,6 +168218,8 @@ func (m *OrganizationSettingMutation) OldField(ctx context.Context, name string) return m.OldComplianceWebhookToken(ctx) case organizationsetting.FieldPaymentMethodAdded: return m.OldPaymentMethodAdded(ctx) + case organizationsetting.FieldPendingDeletionAt: + return m.OldPendingDeletionAt(ctx) } return nil, fmt.Errorf("unknown OrganizationSetting field %s", name) } @@ -168396,6 +168453,13 @@ func (m *OrganizationSettingMutation) SetField(name string, value ent.Value) err } m.SetPaymentMethodAdded(v) return nil + case organizationsetting.FieldPendingDeletionAt: + v, ok := value.(models.DateTime) + if !ok { + return fmt.Errorf("unexpected type %T for field %s", value, name) + } + m.SetPendingDeletionAt(v) + return nil } return fmt.Errorf("unknown OrganizationSetting field %s", name) } @@ -168510,6 +168574,9 @@ func (m *OrganizationSettingMutation) ClearedFields() []string { if m.FieldCleared(organizationsetting.FieldComplianceWebhookToken) { fields = append(fields, organizationsetting.FieldComplianceWebhookToken) } + if m.FieldCleared(organizationsetting.FieldPendingDeletionAt) { + fields = append(fields, organizationsetting.FieldPendingDeletionAt) + } return fields } @@ -168608,6 +168675,9 @@ func (m *OrganizationSettingMutation) ClearField(name string) error { case organizationsetting.FieldComplianceWebhookToken: m.ClearComplianceWebhookToken() return nil + case organizationsetting.FieldPendingDeletionAt: + m.ClearPendingDeletionAt() + return nil } return fmt.Errorf("unknown OrganizationSetting nullable field %s", name) } @@ -168712,6 +168782,9 @@ func (m *OrganizationSettingMutation) ResetField(name string) error { case organizationsetting.FieldPaymentMethodAdded: m.ResetPaymentMethodAdded() return nil + case organizationsetting.FieldPendingDeletionAt: + m.ResetPendingDeletionAt() + return nil } return fmt.Errorf("unknown OrganizationSetting field %s", name) } diff --git a/internal/ent/generated/organizationsetting.go b/internal/ent/generated/organizationsetting.go index 9d42879cd8..e0d13911a3 100644 --- a/internal/ent/generated/organizationsetting.go +++ b/internal/ent/generated/organizationsetting.go @@ -85,6 +85,8 @@ type OrganizationSetting struct { ComplianceWebhookToken string `json:"compliance_webhook_token,omitempty"` // whether or not a payment method has been added to the account PaymentMethodAdded bool `json:"payment_method_added,omitempty"` + // when will this organization be deleted? usually this is after org has not added a payment method afte n period + PendingDeletionAt *models.DateTime `json:"pending_deletion_at,omitempty"` // Edges holds the relations/edges for other nodes in the graph. // The values are being populated by the OrganizationSettingQuery when eager-loading is set. Edges OrganizationSettingEdges `json:"edges"` @@ -131,6 +133,8 @@ func (*OrganizationSetting) scanValues(columns []string) ([]any, error) { values := make([]any, len(columns)) for i := range columns { switch columns[i] { + case organizationsetting.FieldPendingDeletionAt: + values[i] = &sql.NullScanner{S: new(models.DateTime)} case organizationsetting.FieldTags, organizationsetting.FieldDomains, organizationsetting.FieldBillingAddress, organizationsetting.FieldAllowedEmailDomains: values[i] = new([]byte) case organizationsetting.FieldBillingNotificationsEnabled, organizationsetting.FieldAllowMatchingDomainsAutojoin, organizationsetting.FieldIdentityProviderAuthTested, organizationsetting.FieldIdentityProviderLoginEnforced, organizationsetting.FieldMultifactorAuthEnforced, organizationsetting.FieldPaymentMethodAdded: @@ -362,6 +366,13 @@ func (_m *OrganizationSetting) assignValues(columns []string, values []any) erro } else if value.Valid { _m.PaymentMethodAdded = value.Bool } + case organizationsetting.FieldPendingDeletionAt: + if value, ok := values[i].(*sql.NullScanner); !ok { + return fmt.Errorf("unexpected type %T for field pending_deletion_at", values[i]) + } else if value.Valid { + _m.PendingDeletionAt = new(models.DateTime) + *_m.PendingDeletionAt = *value.S.(*models.DateTime) + } default: _m.selectValues.Set(columns[i], values[i]) } @@ -507,6 +518,11 @@ func (_m *OrganizationSetting) String() string { builder.WriteString(", ") builder.WriteString("payment_method_added=") builder.WriteString(fmt.Sprintf("%v", _m.PaymentMethodAdded)) + builder.WriteString(", ") + if v := _m.PendingDeletionAt; v != nil { + builder.WriteString("pending_deletion_at=") + builder.WriteString(fmt.Sprintf("%v", *v)) + } builder.WriteByte(')') return builder.String() } diff --git a/internal/ent/generated/organizationsetting/organizationsetting.go b/internal/ent/generated/organizationsetting/organizationsetting.go index 2cee101781..0bbc5822fb 100644 --- a/internal/ent/generated/organizationsetting/organizationsetting.go +++ b/internal/ent/generated/organizationsetting/organizationsetting.go @@ -82,6 +82,8 @@ const ( FieldComplianceWebhookToken = "compliance_webhook_token" // FieldPaymentMethodAdded holds the string denoting the payment_method_added field in the database. FieldPaymentMethodAdded = "payment_method_added" + // FieldPendingDeletionAt holds the string denoting the pending_deletion_at field in the database. + FieldPendingDeletionAt = "pending_deletion_at" // EdgeOrganization holds the string denoting the organization edge name in mutations. EdgeOrganization = "organization" // EdgeFiles holds the string denoting the files edge name in mutations. @@ -137,6 +139,7 @@ var Columns = []string{ FieldMultifactorAuthEnforced, FieldComplianceWebhookToken, FieldPaymentMethodAdded, + FieldPendingDeletionAt, } var ( @@ -372,6 +375,11 @@ func ByPaymentMethodAdded(opts ...sql.OrderTermOption) OrderOption { return sql.OrderByField(FieldPaymentMethodAdded, opts...).ToFunc() } +// ByPendingDeletionAt orders the results by the pending_deletion_at field. +func ByPendingDeletionAt(opts ...sql.OrderTermOption) OrderOption { + return sql.OrderByField(FieldPendingDeletionAt, opts...).ToFunc() +} + // ByOrganizationField orders the results by organization field. func ByOrganizationField(field string, opts ...sql.OrderTermOption) OrderOption { return func(s *sql.Selector) { diff --git a/internal/ent/generated/organizationsetting/where.go b/internal/ent/generated/organizationsetting/where.go index 38540295f8..4882bd5a73 100644 --- a/internal/ent/generated/organizationsetting/where.go +++ b/internal/ent/generated/organizationsetting/where.go @@ -8,6 +8,7 @@ import ( "entgo.io/ent/dialect/sql" "entgo.io/ent/dialect/sql/sqlgraph" "github.com/theopenlane/core/common/enums" + "github.com/theopenlane/core/common/models" "github.com/theopenlane/core/internal/ent/generated/predicate" "github.com/theopenlane/core/internal/ent/generated/internal" @@ -198,6 +199,11 @@ func PaymentMethodAdded(v bool) predicate.OrganizationSetting { return predicate.OrganizationSetting(sql.FieldEQ(FieldPaymentMethodAdded, v)) } +// PendingDeletionAt applies equality check predicate on the "pending_deletion_at" field. It's identical to PendingDeletionAtEQ. +func PendingDeletionAt(v models.DateTime) predicate.OrganizationSetting { + return predicate.OrganizationSetting(sql.FieldEQ(FieldPendingDeletionAt, v)) +} + // CreatedAtEQ applies the EQ predicate on the "created_at" field. func CreatedAtEQ(v time.Time) predicate.OrganizationSetting { return predicate.OrganizationSetting(sql.FieldEQ(FieldCreatedAt, v)) @@ -1823,6 +1829,56 @@ func PaymentMethodAddedNEQ(v bool) predicate.OrganizationSetting { return predicate.OrganizationSetting(sql.FieldNEQ(FieldPaymentMethodAdded, v)) } +// PendingDeletionAtEQ applies the EQ predicate on the "pending_deletion_at" field. +func PendingDeletionAtEQ(v models.DateTime) predicate.OrganizationSetting { + return predicate.OrganizationSetting(sql.FieldEQ(FieldPendingDeletionAt, v)) +} + +// PendingDeletionAtNEQ applies the NEQ predicate on the "pending_deletion_at" field. +func PendingDeletionAtNEQ(v models.DateTime) predicate.OrganizationSetting { + return predicate.OrganizationSetting(sql.FieldNEQ(FieldPendingDeletionAt, v)) +} + +// PendingDeletionAtIn applies the In predicate on the "pending_deletion_at" field. +func PendingDeletionAtIn(vs ...models.DateTime) predicate.OrganizationSetting { + return predicate.OrganizationSetting(sql.FieldIn(FieldPendingDeletionAt, vs...)) +} + +// PendingDeletionAtNotIn applies the NotIn predicate on the "pending_deletion_at" field. +func PendingDeletionAtNotIn(vs ...models.DateTime) predicate.OrganizationSetting { + return predicate.OrganizationSetting(sql.FieldNotIn(FieldPendingDeletionAt, vs...)) +} + +// PendingDeletionAtGT applies the GT predicate on the "pending_deletion_at" field. +func PendingDeletionAtGT(v models.DateTime) predicate.OrganizationSetting { + return predicate.OrganizationSetting(sql.FieldGT(FieldPendingDeletionAt, v)) +} + +// PendingDeletionAtGTE applies the GTE predicate on the "pending_deletion_at" field. +func PendingDeletionAtGTE(v models.DateTime) predicate.OrganizationSetting { + return predicate.OrganizationSetting(sql.FieldGTE(FieldPendingDeletionAt, v)) +} + +// PendingDeletionAtLT applies the LT predicate on the "pending_deletion_at" field. +func PendingDeletionAtLT(v models.DateTime) predicate.OrganizationSetting { + return predicate.OrganizationSetting(sql.FieldLT(FieldPendingDeletionAt, v)) +} + +// PendingDeletionAtLTE applies the LTE predicate on the "pending_deletion_at" field. +func PendingDeletionAtLTE(v models.DateTime) predicate.OrganizationSetting { + return predicate.OrganizationSetting(sql.FieldLTE(FieldPendingDeletionAt, v)) +} + +// PendingDeletionAtIsNil applies the IsNil predicate on the "pending_deletion_at" field. +func PendingDeletionAtIsNil() predicate.OrganizationSetting { + return predicate.OrganizationSetting(sql.FieldIsNull(FieldPendingDeletionAt)) +} + +// PendingDeletionAtNotNil applies the NotNil predicate on the "pending_deletion_at" field. +func PendingDeletionAtNotNil() predicate.OrganizationSetting { + return predicate.OrganizationSetting(sql.FieldNotNull(FieldPendingDeletionAt)) +} + // HasOrganization applies the HasEdge predicate on the "organization" edge. func HasOrganization() predicate.OrganizationSetting { return predicate.OrganizationSetting(func(s *sql.Selector) { diff --git a/internal/ent/generated/organizationsetting_create.go b/internal/ent/generated/organizationsetting_create.go index 9d81f6d859..005fccea74 100644 --- a/internal/ent/generated/organizationsetting_create.go +++ b/internal/ent/generated/organizationsetting_create.go @@ -448,6 +448,20 @@ func (_c *OrganizationSettingCreate) SetNillablePaymentMethodAdded(v *bool) *Org return _c } +// SetPendingDeletionAt sets the "pending_deletion_at" field. +func (_c *OrganizationSettingCreate) SetPendingDeletionAt(v models.DateTime) *OrganizationSettingCreate { + _c.mutation.SetPendingDeletionAt(v) + return _c +} + +// SetNillablePendingDeletionAt sets the "pending_deletion_at" field if the given value is not nil. +func (_c *OrganizationSettingCreate) SetNillablePendingDeletionAt(v *models.DateTime) *OrganizationSettingCreate { + if v != nil { + _c.SetPendingDeletionAt(*v) + } + return _c +} + // SetID sets the "id" field. func (_c *OrganizationSettingCreate) SetID(v string) *OrganizationSettingCreate { _c.mutation.SetID(v) @@ -795,6 +809,10 @@ func (_c *OrganizationSettingCreate) createSpec() (*OrganizationSetting, *sqlgra _spec.SetField(organizationsetting.FieldPaymentMethodAdded, field.TypeBool, value) _node.PaymentMethodAdded = value } + if value, ok := _c.mutation.PendingDeletionAt(); ok { + _spec.SetField(organizationsetting.FieldPendingDeletionAt, field.TypeTime, value) + _node.PendingDeletionAt = &value + } if nodes := _c.mutation.OrganizationIDs(); len(nodes) > 0 { edge := &sqlgraph.EdgeSpec{ Rel: sqlgraph.O2O, diff --git a/internal/ent/generated/organizationsetting_update.go b/internal/ent/generated/organizationsetting_update.go index e621ac0e1a..692b728712 100644 --- a/internal/ent/generated/organizationsetting_update.go +++ b/internal/ent/generated/organizationsetting_update.go @@ -598,6 +598,26 @@ func (_u *OrganizationSettingUpdate) SetNillablePaymentMethodAdded(v *bool) *Org return _u } +// SetPendingDeletionAt sets the "pending_deletion_at" field. +func (_u *OrganizationSettingUpdate) SetPendingDeletionAt(v models.DateTime) *OrganizationSettingUpdate { + _u.mutation.SetPendingDeletionAt(v) + return _u +} + +// SetNillablePendingDeletionAt sets the "pending_deletion_at" field if the given value is not nil. +func (_u *OrganizationSettingUpdate) SetNillablePendingDeletionAt(v *models.DateTime) *OrganizationSettingUpdate { + if v != nil { + _u.SetPendingDeletionAt(*v) + } + return _u +} + +// ClearPendingDeletionAt clears the value of the "pending_deletion_at" field. +func (_u *OrganizationSettingUpdate) ClearPendingDeletionAt() *OrganizationSettingUpdate { + _u.mutation.ClearPendingDeletionAt() + return _u +} + // SetOrganization sets the "organization" edge to the Organization entity. func (_u *OrganizationSettingUpdate) SetOrganization(v *Organization) *OrganizationSettingUpdate { return _u.SetOrganizationID(v.ID) @@ -933,6 +953,12 @@ func (_u *OrganizationSettingUpdate) sqlSave(ctx context.Context) (_node int, er if value, ok := _u.mutation.PaymentMethodAdded(); ok { _spec.SetField(organizationsetting.FieldPaymentMethodAdded, field.TypeBool, value) } + if value, ok := _u.mutation.PendingDeletionAt(); ok { + _spec.SetField(organizationsetting.FieldPendingDeletionAt, field.TypeTime, value) + } + if _u.mutation.PendingDeletionAtCleared() { + _spec.ClearField(organizationsetting.FieldPendingDeletionAt, field.TypeTime) + } if _u.mutation.OrganizationCleared() { edge := &sqlgraph.EdgeSpec{ Rel: sqlgraph.O2O, @@ -1598,6 +1624,26 @@ func (_u *OrganizationSettingUpdateOne) SetNillablePaymentMethodAdded(v *bool) * return _u } +// SetPendingDeletionAt sets the "pending_deletion_at" field. +func (_u *OrganizationSettingUpdateOne) SetPendingDeletionAt(v models.DateTime) *OrganizationSettingUpdateOne { + _u.mutation.SetPendingDeletionAt(v) + return _u +} + +// SetNillablePendingDeletionAt sets the "pending_deletion_at" field if the given value is not nil. +func (_u *OrganizationSettingUpdateOne) SetNillablePendingDeletionAt(v *models.DateTime) *OrganizationSettingUpdateOne { + if v != nil { + _u.SetPendingDeletionAt(*v) + } + return _u +} + +// ClearPendingDeletionAt clears the value of the "pending_deletion_at" field. +func (_u *OrganizationSettingUpdateOne) ClearPendingDeletionAt() *OrganizationSettingUpdateOne { + _u.mutation.ClearPendingDeletionAt() + return _u +} + // SetOrganization sets the "organization" edge to the Organization entity. func (_u *OrganizationSettingUpdateOne) SetOrganization(v *Organization) *OrganizationSettingUpdateOne { return _u.SetOrganizationID(v.ID) @@ -1963,6 +2009,12 @@ func (_u *OrganizationSettingUpdateOne) sqlSave(ctx context.Context) (_node *Org if value, ok := _u.mutation.PaymentMethodAdded(); ok { _spec.SetField(organizationsetting.FieldPaymentMethodAdded, field.TypeBool, value) } + if value, ok := _u.mutation.PendingDeletionAt(); ok { + _spec.SetField(organizationsetting.FieldPendingDeletionAt, field.TypeTime, value) + } + if _u.mutation.PendingDeletionAtCleared() { + _spec.ClearField(organizationsetting.FieldPendingDeletionAt, field.TypeTime) + } if _u.mutation.OrganizationCleared() { edge := &sqlgraph.EdgeSpec{ Rel: sqlgraph.O2O, diff --git a/internal/ent/historygenerated/entityhistory/entityhistory.go b/internal/ent/historygenerated/entityhistory/entityhistory.go index 4401ac26cf..95cf63c24b 100644 --- a/internal/ent/historygenerated/entityhistory/entityhistory.go +++ b/internal/ent/historygenerated/entityhistory/entityhistory.go @@ -304,7 +304,7 @@ func StatusValidator(s enums.EntityStatus) error { } } -const DefaultTier enums.VendorTier = "STANDARD" +const DefaultTier enums.VendorTier = "LOW" // TierValidator is a validator for the "tier" field enum values. It is called by the builders before save. func TierValidator(t enums.VendorTier) error { diff --git a/internal/ent/historygenerated/entql.go b/internal/ent/historygenerated/entql.go index fb89c4f0d0..8c0cbce81f 100644 --- a/internal/ent/historygenerated/entql.go +++ b/internal/ent/historygenerated/entql.go @@ -1868,6 +1868,7 @@ var schemaGraph = func() *sqlgraph.Schema { organizationsettinghistory.FieldMultifactorAuthEnforced: {Type: field.TypeBool, Column: organizationsettinghistory.FieldMultifactorAuthEnforced}, organizationsettinghistory.FieldComplianceWebhookToken: {Type: field.TypeString, Column: organizationsettinghistory.FieldComplianceWebhookToken}, organizationsettinghistory.FieldPaymentMethodAdded: {Type: field.TypeBool, Column: organizationsettinghistory.FieldPaymentMethodAdded}, + organizationsettinghistory.FieldPendingDeletionAt: {Type: field.TypeTime, Column: organizationsettinghistory.FieldPendingDeletionAt}, }, } graph.Nodes[43] = &sqlgraph.Node{ @@ -11115,6 +11116,11 @@ func (f *OrganizationSettingHistoryFilter) WherePaymentMethodAdded(p entql.BoolP f.Where(p.Field(organizationsettinghistory.FieldPaymentMethodAdded)) } +// WherePendingDeletionAt applies the entql time.Time predicate on the pending_deletion_at field. +func (f *OrganizationSettingHistoryFilter) WherePendingDeletionAt(p entql.TimeP) { + f.Where(p.Field(organizationsettinghistory.FieldPendingDeletionAt)) +} + // addPredicate implements the predicateAdder interface. func (_q *PlatformHistoryQuery) addPredicate(pred func(s *sql.Selector)) { _q.predicates = append(_q.predicates, pred) diff --git a/internal/ent/historygenerated/gql_collection.go b/internal/ent/historygenerated/gql_collection.go index a7b91e4d28..41d4d0f1b4 100644 --- a/internal/ent/historygenerated/gql_collection.go +++ b/internal/ent/historygenerated/gql_collection.go @@ -9314,6 +9314,11 @@ func (_q *OrganizationSettingHistoryQuery) collectField(ctx context.Context, one selectedFields = append(selectedFields, organizationsettinghistory.FieldPaymentMethodAdded) fieldSeen[organizationsettinghistory.FieldPaymentMethodAdded] = struct{}{} } + case "pendingDeletionAt": + if _, ok := fieldSeen[organizationsettinghistory.FieldPendingDeletionAt]; !ok { + selectedFields = append(selectedFields, organizationsettinghistory.FieldPendingDeletionAt) + fieldSeen[organizationsettinghistory.FieldPendingDeletionAt] = struct{}{} + } case "id": case "__typename": default: diff --git a/internal/ent/historygenerated/gql_where_input.go b/internal/ent/historygenerated/gql_where_input.go index 08fb7212f7..e7c70cd5f0 100644 --- a/internal/ent/historygenerated/gql_where_input.go +++ b/internal/ent/historygenerated/gql_where_input.go @@ -54572,6 +54572,22 @@ type OrganizationSettingHistoryWhereInput struct { ComplianceWebhookTokenEqualFold *string `json:"complianceWebhookTokenEqualFold,omitempty"` ComplianceWebhookTokenContainsFold *string `json:"complianceWebhookTokenContainsFold,omitempty"` + // "payment_method_added" field predicates. + PaymentMethodAdded *bool `json:"paymentMethodAdded,omitempty"` + PaymentMethodAddedNEQ *bool `json:"paymentMethodAddedNEQ,omitempty"` + + // "pending_deletion_at" field predicates. + PendingDeletionAt *models.DateTime `json:"pendingDeletionAt,omitempty"` + PendingDeletionAtNEQ *models.DateTime `json:"pendingDeletionAtNEQ,omitempty"` + PendingDeletionAtIn []models.DateTime `json:"pendingDeletionAtIn,omitempty"` + PendingDeletionAtNotIn []models.DateTime `json:"pendingDeletionAtNotIn,omitempty"` + PendingDeletionAtGT *models.DateTime `json:"pendingDeletionAtGT,omitempty"` + PendingDeletionAtGTE *models.DateTime `json:"pendingDeletionAtGTE,omitempty"` + PendingDeletionAtLT *models.DateTime `json:"pendingDeletionAtLT,omitempty"` + PendingDeletionAtLTE *models.DateTime `json:"pendingDeletionAtLTE,omitempty"` + PendingDeletionAtIsNil bool `json:"pendingDeletionAtIsNil,omitempty"` + PendingDeletionAtNotNil bool `json:"pendingDeletionAtNotNil,omitempty"` + // "tags" JSON-string-array predicates. TagsHas *string `json:"tagsHas,omitempty"` @@ -55622,6 +55638,42 @@ func (i *OrganizationSettingHistoryWhereInput) P() (predicate.OrganizationSettin if i.ComplianceWebhookTokenContainsFold != nil { predicates = append(predicates, organizationsettinghistory.ComplianceWebhookTokenContainsFold(*i.ComplianceWebhookTokenContainsFold)) } + if i.PaymentMethodAdded != nil { + predicates = append(predicates, organizationsettinghistory.PaymentMethodAddedEQ(*i.PaymentMethodAdded)) + } + if i.PaymentMethodAddedNEQ != nil { + predicates = append(predicates, organizationsettinghistory.PaymentMethodAddedNEQ(*i.PaymentMethodAddedNEQ)) + } + if i.PendingDeletionAt != nil { + predicates = append(predicates, organizationsettinghistory.PendingDeletionAtEQ(*i.PendingDeletionAt)) + } + if i.PendingDeletionAtNEQ != nil { + predicates = append(predicates, organizationsettinghistory.PendingDeletionAtNEQ(*i.PendingDeletionAtNEQ)) + } + if len(i.PendingDeletionAtIn) > 0 { + predicates = append(predicates, organizationsettinghistory.PendingDeletionAtIn(i.PendingDeletionAtIn...)) + } + if len(i.PendingDeletionAtNotIn) > 0 { + predicates = append(predicates, organizationsettinghistory.PendingDeletionAtNotIn(i.PendingDeletionAtNotIn...)) + } + if i.PendingDeletionAtGT != nil { + predicates = append(predicates, organizationsettinghistory.PendingDeletionAtGT(*i.PendingDeletionAtGT)) + } + if i.PendingDeletionAtGTE != nil { + predicates = append(predicates, organizationsettinghistory.PendingDeletionAtGTE(*i.PendingDeletionAtGTE)) + } + if i.PendingDeletionAtLT != nil { + predicates = append(predicates, organizationsettinghistory.PendingDeletionAtLT(*i.PendingDeletionAtLT)) + } + if i.PendingDeletionAtLTE != nil { + predicates = append(predicates, organizationsettinghistory.PendingDeletionAtLTE(*i.PendingDeletionAtLTE)) + } + if i.PendingDeletionAtIsNil { + predicates = append(predicates, organizationsettinghistory.PendingDeletionAtIsNil()) + } + if i.PendingDeletionAtNotNil { + predicates = append(predicates, organizationsettinghistory.PendingDeletionAtNotNil()) + } if i.TagsHas != nil { v := *i.TagsHas diff --git a/internal/ent/historygenerated/migrate/schema.go b/internal/ent/historygenerated/migrate/schema.go index 5442755ea2..f6267e2220 100644 --- a/internal/ent/historygenerated/migrate/schema.go +++ b/internal/ent/historygenerated/migrate/schema.go @@ -964,7 +964,7 @@ var ( {Name: "risk_rating", Type: field.TypeString, Nullable: true}, {Name: "risk_score", Type: field.TypeInt, Nullable: true}, {Name: "risk_score_coverage", Type: field.TypeInt, Nullable: true}, - {Name: "tier", Type: field.TypeEnum, Nullable: true, Enums: []string{"CRITICAL", "HIGH", "STANDARD", "LOW"}, Default: "STANDARD"}, + {Name: "tier", Type: field.TypeEnum, Nullable: true, Enums: []string{"CRITICAL", "HIGH", "STANDARD", "LOW"}, Default: "LOW"}, {Name: "review_frequency", Type: field.TypeEnum, Nullable: true, Enums: []string{"YEARLY", "QUARTERLY", "BIANNUALLY", "MONTHLY", "NONE"}, Default: "YEARLY"}, {Name: "next_review_at", Type: field.TypeTime, Nullable: true}, {Name: "contract_renewal_at", Type: field.TypeTime, Nullable: true}, @@ -1945,6 +1945,7 @@ var ( {Name: "multifactor_auth_enforced", Type: field.TypeBool, Nullable: true, Default: false}, {Name: "compliance_webhook_token", Type: field.TypeString, Nullable: true}, {Name: "payment_method_added", Type: field.TypeBool, Default: false}, + {Name: "pending_deletion_at", Type: field.TypeTime, Nullable: true}, } // OrganizationSettingHistoryTable holds the schema information for the "organization_setting_history" table. OrganizationSettingHistoryTable = &schema.Table{ diff --git a/internal/ent/historygenerated/mutation.go b/internal/ent/historygenerated/mutation.go index b53e625da1..ca65f3c29c 100644 --- a/internal/ent/historygenerated/mutation.go +++ b/internal/ent/historygenerated/mutation.go @@ -96234,6 +96234,7 @@ type OrganizationSettingHistoryMutation struct { multifactor_auth_enforced *bool compliance_webhook_token *string payment_method_added *bool + pending_deletion_at *models.DateTime clearedFields map[string]struct{} done bool oldValue func(context.Context) (*OrganizationSettingHistory, error) @@ -98029,6 +98030,55 @@ func (m *OrganizationSettingHistoryMutation) ResetPaymentMethodAdded() { m.payment_method_added = nil } +// SetPendingDeletionAt sets the "pending_deletion_at" field. +func (m *OrganizationSettingHistoryMutation) SetPendingDeletionAt(mt models.DateTime) { + m.pending_deletion_at = &mt +} + +// PendingDeletionAt returns the value of the "pending_deletion_at" field in the mutation. +func (m *OrganizationSettingHistoryMutation) PendingDeletionAt() (r models.DateTime, exists bool) { + v := m.pending_deletion_at + if v == nil { + return + } + return *v, true +} + +// OldPendingDeletionAt returns the old "pending_deletion_at" field's value of the OrganizationSettingHistory entity. +// If the OrganizationSettingHistory object wasn't provided to the builder, the object is fetched from the database. +// An error is returned if the mutation operation is not UpdateOne, or the database query fails. +func (m *OrganizationSettingHistoryMutation) OldPendingDeletionAt(ctx context.Context) (v *models.DateTime, err error) { + if !m.op.Is(OpUpdateOne) { + return v, errors.New("OldPendingDeletionAt is only allowed on UpdateOne operations") + } + if m.id == nil || m.oldValue == nil { + return v, errors.New("OldPendingDeletionAt requires an ID field in the mutation") + } + oldValue, err := m.oldValue(ctx) + if err != nil { + return v, fmt.Errorf("querying old value for OldPendingDeletionAt: %w", err) + } + return oldValue.PendingDeletionAt, nil +} + +// ClearPendingDeletionAt clears the value of the "pending_deletion_at" field. +func (m *OrganizationSettingHistoryMutation) ClearPendingDeletionAt() { + m.pending_deletion_at = nil + m.clearedFields[organizationsettinghistory.FieldPendingDeletionAt] = struct{}{} +} + +// PendingDeletionAtCleared returns if the "pending_deletion_at" field was cleared in this mutation. +func (m *OrganizationSettingHistoryMutation) PendingDeletionAtCleared() bool { + _, ok := m.clearedFields[organizationsettinghistory.FieldPendingDeletionAt] + return ok +} + +// ResetPendingDeletionAt resets all changes to the "pending_deletion_at" field. +func (m *OrganizationSettingHistoryMutation) ResetPendingDeletionAt() { + m.pending_deletion_at = nil + delete(m.clearedFields, organizationsettinghistory.FieldPendingDeletionAt) +} + // Where appends a list predicates to the OrganizationSettingHistoryMutation builder. func (m *OrganizationSettingHistoryMutation) Where(ps ...predicate.OrganizationSettingHistory) { m.predicates = append(m.predicates, ps...) @@ -98063,7 +98113,7 @@ func (m *OrganizationSettingHistoryMutation) Type() string { // order to get all numeric fields that were incremented/decremented, call // AddedFields(). func (m *OrganizationSettingHistoryMutation) Fields() []string { - fields := make([]string, 0, 35) + fields := make([]string, 0, 36) if m.history_time != nil { fields = append(fields, organizationsettinghistory.FieldHistoryTime) } @@ -98169,6 +98219,9 @@ func (m *OrganizationSettingHistoryMutation) Fields() []string { if m.payment_method_added != nil { fields = append(fields, organizationsettinghistory.FieldPaymentMethodAdded) } + if m.pending_deletion_at != nil { + fields = append(fields, organizationsettinghistory.FieldPendingDeletionAt) + } return fields } @@ -98247,6 +98300,8 @@ func (m *OrganizationSettingHistoryMutation) Field(name string) (ent.Value, bool return m.ComplianceWebhookToken() case organizationsettinghistory.FieldPaymentMethodAdded: return m.PaymentMethodAdded() + case organizationsettinghistory.FieldPendingDeletionAt: + return m.PendingDeletionAt() } return nil, false } @@ -98326,6 +98381,8 @@ func (m *OrganizationSettingHistoryMutation) OldField(ctx context.Context, name return m.OldComplianceWebhookToken(ctx) case organizationsettinghistory.FieldPaymentMethodAdded: return m.OldPaymentMethodAdded(ctx) + case organizationsettinghistory.FieldPendingDeletionAt: + return m.OldPendingDeletionAt(ctx) } return nil, fmt.Errorf("unknown OrganizationSettingHistory field %s", name) } @@ -98580,6 +98637,13 @@ func (m *OrganizationSettingHistoryMutation) SetField(name string, value ent.Val } m.SetPaymentMethodAdded(v) return nil + case organizationsettinghistory.FieldPendingDeletionAt: + v, ok := value.(models.DateTime) + if !ok { + return fmt.Errorf("unexpected type %T for field %s", value, name) + } + m.SetPendingDeletionAt(v) + return nil } return fmt.Errorf("unknown OrganizationSettingHistory field %s", name) } @@ -98697,6 +98761,9 @@ func (m *OrganizationSettingHistoryMutation) ClearedFields() []string { if m.FieldCleared(organizationsettinghistory.FieldComplianceWebhookToken) { fields = append(fields, organizationsettinghistory.FieldComplianceWebhookToken) } + if m.FieldCleared(organizationsettinghistory.FieldPendingDeletionAt) { + fields = append(fields, organizationsettinghistory.FieldPendingDeletionAt) + } return fields } @@ -98798,6 +98865,9 @@ func (m *OrganizationSettingHistoryMutation) ClearField(name string) error { case organizationsettinghistory.FieldComplianceWebhookToken: m.ClearComplianceWebhookToken() return nil + case organizationsettinghistory.FieldPendingDeletionAt: + m.ClearPendingDeletionAt() + return nil } return fmt.Errorf("unknown OrganizationSettingHistory nullable field %s", name) } @@ -98911,6 +98981,9 @@ func (m *OrganizationSettingHistoryMutation) ResetField(name string) error { case organizationsettinghistory.FieldPaymentMethodAdded: m.ResetPaymentMethodAdded() return nil + case organizationsettinghistory.FieldPendingDeletionAt: + m.ResetPendingDeletionAt() + return nil } return fmt.Errorf("unknown OrganizationSettingHistory field %s", name) } diff --git a/internal/ent/historygenerated/organizationsettinghistory.go b/internal/ent/historygenerated/organizationsettinghistory.go index 881ff2fe4c..6d84008df4 100644 --- a/internal/ent/historygenerated/organizationsettinghistory.go +++ b/internal/ent/historygenerated/organizationsettinghistory.go @@ -93,7 +93,9 @@ type OrganizationSettingHistory struct { ComplianceWebhookToken string `json:"compliance_webhook_token,omitempty"` // whether or not a payment method has been added to the account PaymentMethodAdded bool `json:"payment_method_added,omitempty"` - selectValues sql.SelectValues + // when will this organization be deleted? usually this is after org has not added a payment method afte n period + PendingDeletionAt *models.DateTime `json:"pending_deletion_at,omitempty"` + selectValues sql.SelectValues } // scanValues returns the types for scanning values from sql.Rows. @@ -101,6 +103,8 @@ func (*OrganizationSettingHistory) scanValues(columns []string) ([]any, error) { values := make([]any, len(columns)) for i := range columns { switch columns[i] { + case organizationsettinghistory.FieldPendingDeletionAt: + values[i] = &sql.NullScanner{S: new(models.DateTime)} case organizationsettinghistory.FieldTags, organizationsettinghistory.FieldDomains, organizationsettinghistory.FieldBillingAddress, organizationsettinghistory.FieldAllowedEmailDomains: values[i] = new([]byte) case organizationsettinghistory.FieldOperation: @@ -352,6 +356,13 @@ func (_m *OrganizationSettingHistory) assignValues(columns []string, values []an } else if value.Valid { _m.PaymentMethodAdded = value.Bool } + case organizationsettinghistory.FieldPendingDeletionAt: + if value, ok := values[i].(*sql.NullScanner); !ok { + return fmt.Errorf("unexpected type %T for field pending_deletion_at", values[i]) + } else if value.Valid { + _m.PendingDeletionAt = new(models.DateTime) + *_m.PendingDeletionAt = *value.S.(*models.DateTime) + } default: _m.selectValues.Set(columns[i], values[i]) } @@ -496,6 +507,11 @@ func (_m *OrganizationSettingHistory) String() string { builder.WriteString(", ") builder.WriteString("payment_method_added=") builder.WriteString(fmt.Sprintf("%v", _m.PaymentMethodAdded)) + builder.WriteString(", ") + if v := _m.PendingDeletionAt; v != nil { + builder.WriteString("pending_deletion_at=") + builder.WriteString(fmt.Sprintf("%v", *v)) + } builder.WriteByte(')') return builder.String() } diff --git a/internal/ent/historygenerated/organizationsettinghistory/organizationsettinghistory.go b/internal/ent/historygenerated/organizationsettinghistory/organizationsettinghistory.go index 45f9a08b68..001ad7cb65 100644 --- a/internal/ent/historygenerated/organizationsettinghistory/organizationsettinghistory.go +++ b/internal/ent/historygenerated/organizationsettinghistory/organizationsettinghistory.go @@ -90,6 +90,8 @@ const ( FieldComplianceWebhookToken = "compliance_webhook_token" // FieldPaymentMethodAdded holds the string denoting the payment_method_added field in the database. FieldPaymentMethodAdded = "payment_method_added" + // FieldPendingDeletionAt holds the string denoting the pending_deletion_at field in the database. + FieldPendingDeletionAt = "pending_deletion_at" // Table holds the table name of the organizationsettinghistory in the database. Table = "organization_setting_history" ) @@ -132,6 +134,7 @@ var Columns = []string{ FieldMultifactorAuthEnforced, FieldComplianceWebhookToken, FieldPaymentMethodAdded, + FieldPendingDeletionAt, } // ValidColumn reports if the column name is valid (part of the table columns). @@ -378,6 +381,11 @@ func ByPaymentMethodAdded(opts ...sql.OrderTermOption) OrderOption { return sql.OrderByField(FieldPaymentMethodAdded, opts...).ToFunc() } +// ByPendingDeletionAt orders the results by the pending_deletion_at field. +func ByPendingDeletionAt(opts ...sql.OrderTermOption) OrderOption { + return sql.OrderByField(FieldPendingDeletionAt, opts...).ToFunc() +} + var ( // history.OpType must implement graphql.Marshaler. _ graphql.Marshaler = (*history.OpType)(nil) diff --git a/internal/ent/historygenerated/organizationsettinghistory/where.go b/internal/ent/historygenerated/organizationsettinghistory/where.go index 9cc8e61d73..660887d8b1 100644 --- a/internal/ent/historygenerated/organizationsettinghistory/where.go +++ b/internal/ent/historygenerated/organizationsettinghistory/where.go @@ -9,6 +9,7 @@ import ( "entgo.io/ent/dialect/sql" "github.com/theopenlane/core/common/enums" + "github.com/theopenlane/core/common/models" "github.com/theopenlane/core/internal/ent/historygenerated/predicate" "github.com/theopenlane/entx/history" ) @@ -208,6 +209,11 @@ func PaymentMethodAdded(v bool) predicate.OrganizationSettingHistory { return predicate.OrganizationSettingHistory(sql.FieldEQ(FieldPaymentMethodAdded, v)) } +// PendingDeletionAt applies equality check predicate on the "pending_deletion_at" field. It's identical to PendingDeletionAtEQ. +func PendingDeletionAt(v models.DateTime) predicate.OrganizationSettingHistory { + return predicate.OrganizationSettingHistory(sql.FieldEQ(FieldPendingDeletionAt, v)) +} + // HistoryTimeEQ applies the EQ predicate on the "history_time" field. func HistoryTimeEQ(v time.Time) predicate.OrganizationSettingHistory { return predicate.OrganizationSettingHistory(sql.FieldEQ(FieldHistoryTime, v)) @@ -1968,6 +1974,56 @@ func PaymentMethodAddedNEQ(v bool) predicate.OrganizationSettingHistory { return predicate.OrganizationSettingHistory(sql.FieldNEQ(FieldPaymentMethodAdded, v)) } +// PendingDeletionAtEQ applies the EQ predicate on the "pending_deletion_at" field. +func PendingDeletionAtEQ(v models.DateTime) predicate.OrganizationSettingHistory { + return predicate.OrganizationSettingHistory(sql.FieldEQ(FieldPendingDeletionAt, v)) +} + +// PendingDeletionAtNEQ applies the NEQ predicate on the "pending_deletion_at" field. +func PendingDeletionAtNEQ(v models.DateTime) predicate.OrganizationSettingHistory { + return predicate.OrganizationSettingHistory(sql.FieldNEQ(FieldPendingDeletionAt, v)) +} + +// PendingDeletionAtIn applies the In predicate on the "pending_deletion_at" field. +func PendingDeletionAtIn(vs ...models.DateTime) predicate.OrganizationSettingHistory { + return predicate.OrganizationSettingHistory(sql.FieldIn(FieldPendingDeletionAt, vs...)) +} + +// PendingDeletionAtNotIn applies the NotIn predicate on the "pending_deletion_at" field. +func PendingDeletionAtNotIn(vs ...models.DateTime) predicate.OrganizationSettingHistory { + return predicate.OrganizationSettingHistory(sql.FieldNotIn(FieldPendingDeletionAt, vs...)) +} + +// PendingDeletionAtGT applies the GT predicate on the "pending_deletion_at" field. +func PendingDeletionAtGT(v models.DateTime) predicate.OrganizationSettingHistory { + return predicate.OrganizationSettingHistory(sql.FieldGT(FieldPendingDeletionAt, v)) +} + +// PendingDeletionAtGTE applies the GTE predicate on the "pending_deletion_at" field. +func PendingDeletionAtGTE(v models.DateTime) predicate.OrganizationSettingHistory { + return predicate.OrganizationSettingHistory(sql.FieldGTE(FieldPendingDeletionAt, v)) +} + +// PendingDeletionAtLT applies the LT predicate on the "pending_deletion_at" field. +func PendingDeletionAtLT(v models.DateTime) predicate.OrganizationSettingHistory { + return predicate.OrganizationSettingHistory(sql.FieldLT(FieldPendingDeletionAt, v)) +} + +// PendingDeletionAtLTE applies the LTE predicate on the "pending_deletion_at" field. +func PendingDeletionAtLTE(v models.DateTime) predicate.OrganizationSettingHistory { + return predicate.OrganizationSettingHistory(sql.FieldLTE(FieldPendingDeletionAt, v)) +} + +// PendingDeletionAtIsNil applies the IsNil predicate on the "pending_deletion_at" field. +func PendingDeletionAtIsNil() predicate.OrganizationSettingHistory { + return predicate.OrganizationSettingHistory(sql.FieldIsNull(FieldPendingDeletionAt)) +} + +// PendingDeletionAtNotNil applies the NotNil predicate on the "pending_deletion_at" field. +func PendingDeletionAtNotNil() predicate.OrganizationSettingHistory { + return predicate.OrganizationSettingHistory(sql.FieldNotNull(FieldPendingDeletionAt)) +} + // And groups predicates with the AND operator between them. func And(predicates ...predicate.OrganizationSettingHistory) predicate.OrganizationSettingHistory { return predicate.OrganizationSettingHistory(sql.AndPredicates(predicates...)) diff --git a/internal/ent/historygenerated/organizationsettinghistory_create.go b/internal/ent/historygenerated/organizationsettinghistory_create.go index 03e9dc3d84..4c84d5a475 100644 --- a/internal/ent/historygenerated/organizationsettinghistory_create.go +++ b/internal/ent/historygenerated/organizationsettinghistory_create.go @@ -483,6 +483,20 @@ func (_c *OrganizationSettingHistoryCreate) SetNillablePaymentMethodAdded(v *boo return _c } +// SetPendingDeletionAt sets the "pending_deletion_at" field. +func (_c *OrganizationSettingHistoryCreate) SetPendingDeletionAt(v models.DateTime) *OrganizationSettingHistoryCreate { + _c.mutation.SetPendingDeletionAt(v) + return _c +} + +// SetNillablePendingDeletionAt sets the "pending_deletion_at" field if the given value is not nil. +func (_c *OrganizationSettingHistoryCreate) SetNillablePendingDeletionAt(v *models.DateTime) *OrganizationSettingHistoryCreate { + if v != nil { + _c.SetPendingDeletionAt(*v) + } + return _c +} + // SetID sets the "id" field. func (_c *OrganizationSettingHistoryCreate) SetID(v string) *OrganizationSettingHistoryCreate { _c.mutation.SetID(v) @@ -819,6 +833,10 @@ func (_c *OrganizationSettingHistoryCreate) createSpec() (*OrganizationSettingHi _spec.SetField(organizationsettinghistory.FieldPaymentMethodAdded, field.TypeBool, value) _node.PaymentMethodAdded = value } + if value, ok := _c.mutation.PendingDeletionAt(); ok { + _spec.SetField(organizationsettinghistory.FieldPendingDeletionAt, field.TypeTime, value) + _node.PendingDeletionAt = &value + } return _node, _spec } diff --git a/internal/ent/historygenerated/organizationsettinghistory_update.go b/internal/ent/historygenerated/organizationsettinghistory_update.go index 587ab1385c..83f7f34ab7 100644 --- a/internal/ent/historygenerated/organizationsettinghistory_update.go +++ b/internal/ent/historygenerated/organizationsettinghistory_update.go @@ -598,6 +598,26 @@ func (_u *OrganizationSettingHistoryUpdate) SetNillablePaymentMethodAdded(v *boo return _u } +// SetPendingDeletionAt sets the "pending_deletion_at" field. +func (_u *OrganizationSettingHistoryUpdate) SetPendingDeletionAt(v models.DateTime) *OrganizationSettingHistoryUpdate { + _u.mutation.SetPendingDeletionAt(v) + return _u +} + +// SetNillablePendingDeletionAt sets the "pending_deletion_at" field if the given value is not nil. +func (_u *OrganizationSettingHistoryUpdate) SetNillablePendingDeletionAt(v *models.DateTime) *OrganizationSettingHistoryUpdate { + if v != nil { + _u.SetPendingDeletionAt(*v) + } + return _u +} + +// ClearPendingDeletionAt clears the value of the "pending_deletion_at" field. +func (_u *OrganizationSettingHistoryUpdate) ClearPendingDeletionAt() *OrganizationSettingHistoryUpdate { + _u.mutation.ClearPendingDeletionAt() + return _u +} + // Mutation returns the OrganizationSettingHistoryMutation object of the builder. func (_u *OrganizationSettingHistoryUpdate) Mutation() *OrganizationSettingHistoryMutation { return _u.mutation @@ -870,6 +890,12 @@ func (_u *OrganizationSettingHistoryUpdate) sqlSave(ctx context.Context) (_node if value, ok := _u.mutation.PaymentMethodAdded(); ok { _spec.SetField(organizationsettinghistory.FieldPaymentMethodAdded, field.TypeBool, value) } + if value, ok := _u.mutation.PendingDeletionAt(); ok { + _spec.SetField(organizationsettinghistory.FieldPendingDeletionAt, field.TypeTime, value) + } + if _u.mutation.PendingDeletionAtCleared() { + _spec.ClearField(organizationsettinghistory.FieldPendingDeletionAt, field.TypeTime) + } _spec.Node.Schema = _u.schemaConfig.OrganizationSettingHistory ctx = internal.NewSchemaConfigContext(ctx, _u.schemaConfig) _spec.AddModifiers(_u.modifiers...) @@ -1456,6 +1482,26 @@ func (_u *OrganizationSettingHistoryUpdateOne) SetNillablePaymentMethodAdded(v * return _u } +// SetPendingDeletionAt sets the "pending_deletion_at" field. +func (_u *OrganizationSettingHistoryUpdateOne) SetPendingDeletionAt(v models.DateTime) *OrganizationSettingHistoryUpdateOne { + _u.mutation.SetPendingDeletionAt(v) + return _u +} + +// SetNillablePendingDeletionAt sets the "pending_deletion_at" field if the given value is not nil. +func (_u *OrganizationSettingHistoryUpdateOne) SetNillablePendingDeletionAt(v *models.DateTime) *OrganizationSettingHistoryUpdateOne { + if v != nil { + _u.SetPendingDeletionAt(*v) + } + return _u +} + +// ClearPendingDeletionAt clears the value of the "pending_deletion_at" field. +func (_u *OrganizationSettingHistoryUpdateOne) ClearPendingDeletionAt() *OrganizationSettingHistoryUpdateOne { + _u.mutation.ClearPendingDeletionAt() + return _u +} + // Mutation returns the OrganizationSettingHistoryMutation object of the builder. func (_u *OrganizationSettingHistoryUpdateOne) Mutation() *OrganizationSettingHistoryMutation { return _u.mutation @@ -1758,6 +1804,12 @@ func (_u *OrganizationSettingHistoryUpdateOne) sqlSave(ctx context.Context) (_no if value, ok := _u.mutation.PaymentMethodAdded(); ok { _spec.SetField(organizationsettinghistory.FieldPaymentMethodAdded, field.TypeBool, value) } + if value, ok := _u.mutation.PendingDeletionAt(); ok { + _spec.SetField(organizationsettinghistory.FieldPendingDeletionAt, field.TypeTime, value) + } + if _u.mutation.PendingDeletionAtCleared() { + _spec.ClearField(organizationsettinghistory.FieldPendingDeletionAt, field.TypeTime) + } _spec.Node.Schema = _u.schemaConfig.OrganizationSettingHistory ctx = internal.NewSchemaConfigContext(ctx, _u.schemaConfig) _spec.AddModifiers(_u.modifiers...) diff --git a/internal/ent/hooks/contextx/context.go b/internal/ent/hooks/contextx/context.go new file mode 100644 index 0000000000..08b5ec8540 --- /dev/null +++ b/internal/ent/hooks/contextx/context.go @@ -0,0 +1,22 @@ +package contextx + +import "context" + +// SkipCustomEnumDeleteKey is the context key used to skip the "in use" errors check during enum deletion. +// This is used during organization cascade deletion where the deletion order is handled by EdgeCleanup. +// else the custom deletion by default will check if the enum is being used by another other object. +// But with this, we can just skip the check because when the org itself is deleted, it cascades to delete the +// custom enums too +type SkipCustomEnumDeleteKey string + +const ( + // SkipCustomEnumInUseCheck is the context value that triggers skipping the "in use" check/error during enum deletion. + SkipCustomEnumInUseCheck SkipCustomEnumDeleteKey = "custom_enum_cascade_delete_operation" +) + +// WithSkipEnumInUseCheck returns a new context with the skip flag set for custom enums deletion. +// This should be used when deleting CustomTypeEnums as part of a cascade delete +// where the deletion order is handled by EdgeCleanup. +func WithSkipEnumInUseCheck(ctx context.Context) context.Context { + return context.WithValue(ctx, SkipCustomEnumInUseCheck, true) +} diff --git a/internal/ent/hooks/customenums.go b/internal/ent/hooks/customenums.go index 4305a69be3..85bffdfcc2 100644 --- a/internal/ent/hooks/customenums.go +++ b/internal/ent/hooks/customenums.go @@ -22,6 +22,7 @@ import ( "github.com/theopenlane/core/internal/ent/generated/migrate" "github.com/theopenlane/core/internal/ent/generated/predicate" "github.com/theopenlane/core/internal/ent/generated/privacy" + "github.com/theopenlane/core/internal/ent/hooks/contextx" "github.com/theopenlane/core/internal/ent/privacy/utils" "github.com/theopenlane/core/pkg/logx" ) @@ -249,6 +250,12 @@ func HookCustomTypeEnumDelete() ent.Hook { return next.Mutate(ctx, m) } + // skip the "in use" error/check when deleting via organization cascade + // the organization edge cleanup needs to cascade deletes + if ctx.Value(contextx.SkipCustomEnumInUseCheck) == true { + return next.Mutate(ctx, m) + } + client := m.Client() enums, err := client.CustomTypeEnum.Query(). Where(customtypeenum.IDIn(ids...)). diff --git a/internal/ent/hooks/listeners_entitlements.go b/internal/ent/hooks/listeners_entitlements.go index efa92e776e..d570f3be5f 100644 --- a/internal/ent/hooks/listeners_entitlements.go +++ b/internal/ent/hooks/listeners_entitlements.go @@ -9,6 +9,8 @@ import ( "entgo.io/ent" "github.com/rs/zerolog" "github.com/samber/lo" + "github.com/theopenlane/entx" + "github.com/theopenlane/iam/auth" "github.com/theopenlane/core/common/models" "github.com/theopenlane/core/internal/ent/eventqueue" @@ -19,8 +21,6 @@ import ( "github.com/theopenlane/core/pkg/entitlements" "github.com/theopenlane/core/pkg/gala" "github.com/theopenlane/core/pkg/logx" - "github.com/theopenlane/entx" - "github.com/theopenlane/iam/auth" ) // RegisterGalaEntitlementListeners registers entitlement mutation listeners on Gala. @@ -78,6 +78,13 @@ func handleOrganizationDeleteGala(ctx gala.HandlerContext, payload eventqueue.Mu return nil } + cleanupContext := entgen.NewContext(inv.Context(), inv.client) + if err := entgen.OrganizationEdgeCleanup(cleanupContext, inv.orgID); err != nil { + inv.Logger().Error().Err(err).Str("organization_id", inv.orgID). + Msg("failed to cascade delete organization edges") + return err + } + org, err := inv.client.Organization.Query().Where( organization.And( organization.ID(inv.orgID), diff --git a/internal/ent/interceptors/organization.go b/internal/ent/interceptors/organization.go index 6631f2cfa8..1f28dd92a0 100644 --- a/internal/ent/interceptors/organization.go +++ b/internal/ent/interceptors/organization.go @@ -20,6 +20,10 @@ import ( // InterceptorOrganization is middleware to change the Organization query func InterceptorOrganization() ent.Interceptor { return intercept.TraverseFunc(func(ctx context.Context, q intercept.Query) error { + if auth.IsSystemAdminFromContext(ctx) { + return nil + } + // by pass checks on invite or pre-allowed request if _, allow := privacy.DecisionFromContext(ctx); allow { return nil diff --git a/internal/ent/interceptors/organizationsetting.go b/internal/ent/interceptors/organizationsetting.go index 990b7603cd..f6a8d1132c 100644 --- a/internal/ent/interceptors/organizationsetting.go +++ b/internal/ent/interceptors/organizationsetting.go @@ -17,6 +17,10 @@ import ( // InterceptorOrganizationSetting is middleware to change the org setting query func InterceptorOrganizationSetting() ent.Interceptor { return intercept.TraverseFunc(func(ctx context.Context, q intercept.Query) error { + if auth.IsSystemAdminFromContext(ctx) { + return nil + } + if _, allow := privacy.DecisionFromContext(ctx); allow { return nil } diff --git a/internal/ent/interceptors/orgmembers.go b/internal/ent/interceptors/orgmembers.go index 9e80b9e5d2..ef7b44f4d2 100644 --- a/internal/ent/interceptors/orgmembers.go +++ b/internal/ent/interceptors/orgmembers.go @@ -17,6 +17,10 @@ import ( // TraverseOrgMembers is middleware to change the Org Members query func TraverseOrgMembers() ent.Interceptor { return intercept.TraverseFunc(func(ctx context.Context, q intercept.Query) error { + if auth.IsSystemAdminFromContext(ctx) { + return nil + } + // bypass filter if the request is internal and already set to allowed if _, allow := privacy.DecisionFromContext(ctx); allow { return nil diff --git a/internal/ent/schema/control.go b/internal/ent/schema/control.go index 14af2991dd..5baddf8aa2 100644 --- a/internal/ent/schema/control.go +++ b/internal/ent/schema/control.go @@ -269,6 +269,14 @@ func (Control) Modules() []models.OrgModule { // Annotations of the Control func (c Control) Annotations() []schema.Annotation { return []schema.Annotation{ + entx.CascadeThroughAnnotationField( + []entx.ThroughCleanup{ + { + Field: "Control", + Through: "FindingControl", + }, + }, + ), entfga.SelfAccessChecks(), entx.NewExportable( entx.WithOrgOwned(), diff --git a/internal/ent/schema/entity.go b/internal/ent/schema/entity.go index 29ce3de1f5..90f456fe77 100644 --- a/internal/ent/schema/entity.go +++ b/internal/ent/schema/entity.go @@ -242,6 +242,7 @@ func (Entity) Fields() []ent.Field { GoType(enums.VendorTier("")). Default(enums.VendorTierStandard.String()). Optional(). + Default(enums.VendorRiskImpactLow.String()). Annotations( entgql.OrderField("tier"), ), diff --git a/internal/ent/schema/organization.go b/internal/ent/schema/organization.go index a0f791ce40..fb1c198642 100644 --- a/internal/ent/schema/organization.go +++ b/internal/ent/schema/organization.go @@ -663,8 +663,10 @@ func (Organization) Policy() ent.Policy { rule.AllowIfContextHasPrivacyTokenOfType[*token.OrgInviteToken](), // Allow invite tokens to query the org ID they are invited to rule.AllowIfContextHasPrivacyTokenOfType[*token.SignUpToken](), // Allow sign-up tokens to query the org ID they are subscribing to policy.CheckOrgReadAccess(), // access based on query and auth context + rule.AllowQueryIfSystemAdmin(), ), policy.WithMutationRules( + rule.AllowMutationIfSystemAdmin(), rule.HasOrgMutationAccess(), // Requires edit for Update, and delete for Delete mutations policy.AllowCreate(), // Allow all other users (e.g. a user with a JWT should be able to create a new org) ), diff --git a/internal/ent/schema/organizationsetting.go b/internal/ent/schema/organizationsetting.go index 26d7043e69..4455b9b0ce 100644 --- a/internal/ent/schema/organizationsetting.go +++ b/internal/ent/schema/organizationsetting.go @@ -9,16 +9,18 @@ import ( "entgo.io/ent/schema" "entgo.io/ent/schema/field" "github.com/gertd/go-pluralize" + "github.com/theopenlane/entx" + "github.com/theopenlane/iam/entfga" + "github.com/theopenlane/utils/keygen" + "github.com/theopenlane/core/common/enums" "github.com/theopenlane/core/common/models" "github.com/theopenlane/core/internal/ent/generated" "github.com/theopenlane/core/internal/ent/hooks" "github.com/theopenlane/core/internal/ent/interceptors" "github.com/theopenlane/core/internal/ent/privacy/policy" + "github.com/theopenlane/core/internal/ent/privacy/rule" "github.com/theopenlane/core/internal/ent/validator" - "github.com/theopenlane/entx" - "github.com/theopenlane/iam/entfga" - "github.com/theopenlane/utils/keygen" ) // OrganizationSetting holds the schema definition for the OrganizationSetting entity @@ -151,12 +153,18 @@ func (OrganizationSetting) Fields() []ent.Field { }), field.Bool("payment_method_added"). Annotations( - entgql.Skip(entgql.SkipMutationCreateInput | - entgql.SkipMutationUpdateInput | - entgql.SkipWhereInput | entgql.SkipOrderField), + entgql.Skip(entgql.SkipMutationCreateInput | entgql.SkipMutationUpdateInput | entgql.SkipOrderField), ). Default(false). Comment("whether or not a payment method has been added to the account"), + field.Time("pending_deletion_at"). + Comment("when will this organization be deleted? usually this is after org has not added a payment method afte n period"). + GoType(models.DateTime{}). + Optional(). + Nillable(). + Annotations( + entgql.Skip(entgql.SkipMutationCreateInput), + ), } } @@ -208,8 +216,10 @@ func (OrganizationSetting) Policy() ent.Policy { return policy.NewPolicy( policy.WithQueryRules( policy.CheckOrgReadAccess(), // access based on auth context + rule.AllowQueryIfSystemAdmin(), ), policy.WithMutationRules( + rule.AllowMutationIfSystemAdmin(), entfga.CheckEditAccess[*generated.OrganizationSettingMutation](), policy.CheckOrgWriteAccess(), // access based on auth context ), diff --git a/internal/ent/schema/orgmembership.go b/internal/ent/schema/orgmembership.go index 35addd8217..ea1510a044 100644 --- a/internal/ent/schema/orgmembership.go +++ b/internal/ent/schema/orgmembership.go @@ -138,6 +138,9 @@ func (OrgMembership) Interceptors() []ent.Interceptor { // Policy of the OrgMembership func (OrgMembership) Policy() ent.Policy { return policy.NewPolicy( + policy.WithQueryRules( + rule.AllowQueryIfSystemAdmin(), + ), policy.WithOnMutationRules( ent.OpDelete|ent.OpDeleteOne, rule.AllowSelfOrgMembershipDelete(), diff --git a/internal/graphapi/checksum/.history_schema_checksum b/internal/graphapi/checksum/.history_schema_checksum index 97610cdba0..060ade269a 100644 --- a/internal/graphapi/checksum/.history_schema_checksum +++ b/internal/graphapi/checksum/.history_schema_checksum @@ -1 +1 @@ -bcacda1d4a8ae92761e174060987fc3e4c19e4ceb516fda184b843f341d99024 \ No newline at end of file +947c0b1732674b99aa75bd490565fa19ad342c11b323c89ccd656ddbdd5b9868 \ No newline at end of file diff --git a/internal/graphapi/checksum/.schema_checksum b/internal/graphapi/checksum/.schema_checksum index 7b207d0454..980f5cea95 100644 --- a/internal/graphapi/checksum/.schema_checksum +++ b/internal/graphapi/checksum/.schema_checksum @@ -1 +1 @@ -0e0d528d43e2b315b075769dcc2e52bdfb95ac22ea6fd9f07ce1e49784f1a439 \ No newline at end of file +e139e4383429611be882aa6eae8a7ffd55c2113d5a167d37713110f400f0a28e \ No newline at end of file diff --git a/internal/graphapi/clientschema/checksum/.schema_checksum b/internal/graphapi/clientschema/checksum/.schema_checksum index 727a115b82..a22bb276db 100644 --- a/internal/graphapi/clientschema/checksum/.schema_checksum +++ b/internal/graphapi/clientschema/checksum/.schema_checksum @@ -1 +1 @@ -393a9c38fb15931d5b869494f3f67b034fbb60e5021d1032f13dc89aa0c36919 \ No newline at end of file +f84c7d2d274ac44db953a38f4d62b994c33b3ea88c0ea12f51d9bea7425801e6 \ No newline at end of file diff --git a/internal/graphapi/clientschema/schema.graphql b/internal/graphapi/clientschema/schema.graphql index 6e253400d4..839a26f4ef 100644 --- a/internal/graphapi/clientschema/schema.graphql +++ b/internal/graphapi/clientschema/schema.graphql @@ -55802,6 +55802,10 @@ type OrganizationSetting implements Node { whether or not a payment method has been added to the account """ paymentMethodAdded: Boolean! + """ + when will this organization be deleted? usually this is after org has not added a payment method afte n period + """ + pendingDeletionAt: DateTime organization: Organization files( """ @@ -56355,6 +56359,24 @@ input OrganizationSettingWhereInput { complianceWebhookTokenEqualFold: String complianceWebhookTokenContainsFold: String """ + payment_method_added field predicates + """ + paymentMethodAdded: Boolean + paymentMethodAddedNEQ: Boolean + """ + pending_deletion_at field predicates + """ + pendingDeletionAt: DateTime + pendingDeletionAtNEQ: DateTime + pendingDeletionAtIn: [DateTime!] + pendingDeletionAtNotIn: [DateTime!] + pendingDeletionAtGT: DateTime + pendingDeletionAtGTE: DateTime + pendingDeletionAtLT: DateTime + pendingDeletionAtLTE: DateTime + pendingDeletionAtIsNil: Boolean + pendingDeletionAtNotNil: Boolean + """ organization edge predicates """ hasOrganization: Boolean @@ -90684,6 +90706,11 @@ input UpdateOrganizationSettingInput { """ complianceWebhookToken: String clearComplianceWebhookToken: Boolean + """ + when will this organization be deleted? usually this is after org has not added a payment method afte n period + """ + pendingDeletionAt: DateTime + clearPendingDeletionAt: Boolean organizationID: ID clearOrganization: Boolean addFileIDs: [ID!] diff --git a/internal/graphapi/generated/ent.generated.go b/internal/graphapi/generated/ent.generated.go index 2870922905..0048a6f23d 100644 --- a/internal/graphapi/generated/ent.generated.go +++ b/internal/graphapi/generated/ent.generated.go @@ -88569,6 +88569,8 @@ func (ec *executionContext) fieldContext_File_organizationSetting(_ context.Cont return ec.fieldContext_OrganizationSetting_complianceWebhookToken(ctx, field) case "paymentMethodAdded": return ec.fieldContext_OrganizationSetting_paymentMethodAdded(ctx, field) + case "pendingDeletionAt": + return ec.fieldContext_OrganizationSetting_pendingDeletionAt(ctx, field) case "organization": return ec.fieldContext_OrganizationSetting_organization(ctx, field) case "files": @@ -130537,6 +130539,8 @@ func (ec *executionContext) fieldContext_Organization_setting(_ context.Context, return ec.fieldContext_OrganizationSetting_complianceWebhookToken(ctx, field) case "paymentMethodAdded": return ec.fieldContext_OrganizationSetting_paymentMethodAdded(ctx, field) + case "pendingDeletionAt": + return ec.fieldContext_OrganizationSetting_pendingDeletionAt(ctx, field) case "organization": return ec.fieldContext_OrganizationSetting_organization(ctx, field) case "files": @@ -135827,6 +135831,35 @@ func (ec *executionContext) fieldContext_OrganizationSetting_paymentMethodAdded( return fc, nil } +func (ec *executionContext) _OrganizationSetting_pendingDeletionAt(ctx context.Context, field graphql.CollectedField, obj *generated.OrganizationSetting) (ret graphql.Marshaler) { + return graphql.ResolveField( + ctx, + ec.OperationContext, + field, + ec.fieldContext_OrganizationSetting_pendingDeletionAt, + func(ctx context.Context) (any, error) { + return obj.PendingDeletionAt, nil + }, + nil, + ec.marshalODateTime2ᚖgithubᚗcomᚋtheopenlaneᚋcoreᚋcommonᚋmodelsᚐDateTime, + true, + false, + ) +} + +func (ec *executionContext) fieldContext_OrganizationSetting_pendingDeletionAt(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "OrganizationSetting", + Field: field, + IsMethod: false, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return nil, errors.New("field of type DateTime does not have child fields") + }, + } + return fc, nil +} + func (ec *executionContext) _OrganizationSetting_organization(ctx context.Context, field graphql.CollectedField, obj *generated.OrganizationSetting) (ret graphql.Marshaler) { return graphql.ResolveField( ctx, @@ -136334,6 +136367,8 @@ func (ec *executionContext) fieldContext_OrganizationSettingEdge_node(_ context. return ec.fieldContext_OrganizationSetting_complianceWebhookToken(ctx, field) case "paymentMethodAdded": return ec.fieldContext_OrganizationSetting_paymentMethodAdded(ctx, field) + case "pendingDeletionAt": + return ec.fieldContext_OrganizationSetting_pendingDeletionAt(ctx, field) case "organization": return ec.fieldContext_OrganizationSetting_organization(ctx, field) case "files": @@ -160345,6 +160380,8 @@ func (ec *executionContext) fieldContext_Query_organizationSetting(ctx context.C return ec.fieldContext_OrganizationSetting_complianceWebhookToken(ctx, field) case "paymentMethodAdded": return ec.fieldContext_OrganizationSetting_paymentMethodAdded(ctx, field) + case "pendingDeletionAt": + return ec.fieldContext_OrganizationSetting_pendingDeletionAt(ctx, field) case "organization": return ec.fieldContext_OrganizationSetting_organization(ctx, field) case "files": @@ -345581,7 +345618,7 @@ func (ec *executionContext) unmarshalInputOrganizationSettingWhereInput(ctx cont asMap[k] = v } - fieldsInOrder := [...]string{"not", "and", "or", "id", "idNEQ", "idIn", "idNotIn", "idGT", "idGTE", "idLT", "idLTE", "idEqualFold", "idContainsFold", "createdAt", "createdAtNEQ", "createdAtIn", "createdAtNotIn", "createdAtGT", "createdAtGTE", "createdAtLT", "createdAtLTE", "createdAtIsNil", "createdAtNotNil", "updatedAt", "updatedAtNEQ", "updatedAtIn", "updatedAtNotIn", "updatedAtGT", "updatedAtGTE", "updatedAtLT", "updatedAtLTE", "updatedAtIsNil", "updatedAtNotNil", "createdBy", "createdByNEQ", "createdByIn", "createdByNotIn", "createdByGT", "createdByGTE", "createdByLT", "createdByLTE", "createdByContains", "createdByHasPrefix", "createdByHasSuffix", "createdByIsNil", "createdByNotNil", "createdByEqualFold", "createdByContainsFold", "updatedBy", "updatedByNEQ", "updatedByIn", "updatedByNotIn", "updatedByGT", "updatedByGTE", "updatedByLT", "updatedByLTE", "updatedByContains", "updatedByHasPrefix", "updatedByHasSuffix", "updatedByIsNil", "updatedByNotNil", "updatedByEqualFold", "updatedByContainsFold", "billingContact", "billingContactNEQ", "billingContactIn", "billingContactNotIn", "billingContactGT", "billingContactGTE", "billingContactLT", "billingContactLTE", "billingContactContains", "billingContactHasPrefix", "billingContactHasSuffix", "billingContactIsNil", "billingContactNotNil", "billingContactEqualFold", "billingContactContainsFold", "billingEmail", "billingEmailNEQ", "billingEmailIn", "billingEmailNotIn", "billingEmailGT", "billingEmailGTE", "billingEmailLT", "billingEmailLTE", "billingEmailContains", "billingEmailHasPrefix", "billingEmailHasSuffix", "billingEmailIsNil", "billingEmailNotNil", "billingEmailEqualFold", "billingEmailContainsFold", "billingPhone", "billingPhoneNEQ", "billingPhoneIn", "billingPhoneNotIn", "billingPhoneGT", "billingPhoneGTE", "billingPhoneLT", "billingPhoneLTE", "billingPhoneContains", "billingPhoneHasPrefix", "billingPhoneHasSuffix", "billingPhoneIsNil", "billingPhoneNotNil", "billingPhoneEqualFold", "billingPhoneContainsFold", "taxIdentifier", "taxIdentifierNEQ", "taxIdentifierIn", "taxIdentifierNotIn", "taxIdentifierGT", "taxIdentifierGTE", "taxIdentifierLT", "taxIdentifierLTE", "taxIdentifierContains", "taxIdentifierHasPrefix", "taxIdentifierHasSuffix", "taxIdentifierIsNil", "taxIdentifierNotNil", "taxIdentifierEqualFold", "taxIdentifierContainsFold", "geoLocation", "geoLocationNEQ", "geoLocationIn", "geoLocationNotIn", "geoLocationIsNil", "geoLocationNotNil", "organizationID", "organizationIDNEQ", "organizationIDIn", "organizationIDNotIn", "organizationIDGT", "organizationIDGTE", "organizationIDLT", "organizationIDLTE", "organizationIDContains", "organizationIDHasPrefix", "organizationIDHasSuffix", "organizationIDIsNil", "organizationIDNotNil", "organizationIDEqualFold", "organizationIDContainsFold", "billingNotificationsEnabled", "billingNotificationsEnabledNEQ", "allowMatchingDomainsAutojoin", "allowMatchingDomainsAutojoinNEQ", "allowMatchingDomainsAutojoinIsNil", "allowMatchingDomainsAutojoinNotNil", "identityProvider", "identityProviderNEQ", "identityProviderIn", "identityProviderNotIn", "identityProviderIsNil", "identityProviderNotNil", "identityProviderClientID", "identityProviderClientIDNEQ", "identityProviderClientIDIn", "identityProviderClientIDNotIn", "identityProviderClientIDGT", "identityProviderClientIDGTE", "identityProviderClientIDLT", "identityProviderClientIDLTE", "identityProviderClientIDContains", "identityProviderClientIDHasPrefix", "identityProviderClientIDHasSuffix", "identityProviderClientIDIsNil", "identityProviderClientIDNotNil", "identityProviderClientIDEqualFold", "identityProviderClientIDContainsFold", "identityProviderClientSecret", "identityProviderClientSecretNEQ", "identityProviderClientSecretIn", "identityProviderClientSecretNotIn", "identityProviderClientSecretGT", "identityProviderClientSecretGTE", "identityProviderClientSecretLT", "identityProviderClientSecretLTE", "identityProviderClientSecretContains", "identityProviderClientSecretHasPrefix", "identityProviderClientSecretHasSuffix", "identityProviderClientSecretIsNil", "identityProviderClientSecretNotNil", "identityProviderClientSecretEqualFold", "identityProviderClientSecretContainsFold", "identityProviderMetadataEndpoint", "identityProviderMetadataEndpointNEQ", "identityProviderMetadataEndpointIn", "identityProviderMetadataEndpointNotIn", "identityProviderMetadataEndpointGT", "identityProviderMetadataEndpointGTE", "identityProviderMetadataEndpointLT", "identityProviderMetadataEndpointLTE", "identityProviderMetadataEndpointContains", "identityProviderMetadataEndpointHasPrefix", "identityProviderMetadataEndpointHasSuffix", "identityProviderMetadataEndpointIsNil", "identityProviderMetadataEndpointNotNil", "identityProviderMetadataEndpointEqualFold", "identityProviderMetadataEndpointContainsFold", "identityProviderAuthTested", "identityProviderAuthTestedNEQ", "identityProviderEntityID", "identityProviderEntityIDNEQ", "identityProviderEntityIDIn", "identityProviderEntityIDNotIn", "identityProviderEntityIDGT", "identityProviderEntityIDGTE", "identityProviderEntityIDLT", "identityProviderEntityIDLTE", "identityProviderEntityIDContains", "identityProviderEntityIDHasPrefix", "identityProviderEntityIDHasSuffix", "identityProviderEntityIDIsNil", "identityProviderEntityIDNotNil", "identityProviderEntityIDEqualFold", "identityProviderEntityIDContainsFold", "oidcDiscoveryEndpoint", "oidcDiscoveryEndpointNEQ", "oidcDiscoveryEndpointIn", "oidcDiscoveryEndpointNotIn", "oidcDiscoveryEndpointGT", "oidcDiscoveryEndpointGTE", "oidcDiscoveryEndpointLT", "oidcDiscoveryEndpointLTE", "oidcDiscoveryEndpointContains", "oidcDiscoveryEndpointHasPrefix", "oidcDiscoveryEndpointHasSuffix", "oidcDiscoveryEndpointIsNil", "oidcDiscoveryEndpointNotNil", "oidcDiscoveryEndpointEqualFold", "oidcDiscoveryEndpointContainsFold", "samlSigninURL", "samlSigninURLNEQ", "samlSigninURLIn", "samlSigninURLNotIn", "samlSigninURLGT", "samlSigninURLGTE", "samlSigninURLLT", "samlSigninURLLTE", "samlSigninURLContains", "samlSigninURLHasPrefix", "samlSigninURLHasSuffix", "samlSigninURLIsNil", "samlSigninURLNotNil", "samlSigninURLEqualFold", "samlSigninURLContainsFold", "samlIssuer", "samlIssuerNEQ", "samlIssuerIn", "samlIssuerNotIn", "samlIssuerGT", "samlIssuerGTE", "samlIssuerLT", "samlIssuerLTE", "samlIssuerContains", "samlIssuerHasPrefix", "samlIssuerHasSuffix", "samlIssuerIsNil", "samlIssuerNotNil", "samlIssuerEqualFold", "samlIssuerContainsFold", "samlCert", "samlCertNEQ", "samlCertIn", "samlCertNotIn", "samlCertGT", "samlCertGTE", "samlCertLT", "samlCertLTE", "samlCertContains", "samlCertHasPrefix", "samlCertHasSuffix", "samlCertIsNil", "samlCertNotNil", "samlCertEqualFold", "samlCertContainsFold", "identityProviderLoginEnforced", "identityProviderLoginEnforcedNEQ", "multifactorAuthEnforced", "multifactorAuthEnforcedNEQ", "multifactorAuthEnforcedIsNil", "multifactorAuthEnforcedNotNil", "complianceWebhookToken", "complianceWebhookTokenNEQ", "complianceWebhookTokenIn", "complianceWebhookTokenNotIn", "complianceWebhookTokenGT", "complianceWebhookTokenGTE", "complianceWebhookTokenLT", "complianceWebhookTokenLTE", "complianceWebhookTokenContains", "complianceWebhookTokenHasPrefix", "complianceWebhookTokenHasSuffix", "complianceWebhookTokenIsNil", "complianceWebhookTokenNotNil", "complianceWebhookTokenEqualFold", "complianceWebhookTokenContainsFold", "hasOrganization", "hasOrganizationWith", "hasFiles", "hasFilesWith", "tagsHas", "domainsHas", "allowedEmailDomainsHas"} + fieldsInOrder := [...]string{"not", "and", "or", "id", "idNEQ", "idIn", "idNotIn", "idGT", "idGTE", "idLT", "idLTE", "idEqualFold", "idContainsFold", "createdAt", "createdAtNEQ", "createdAtIn", "createdAtNotIn", "createdAtGT", "createdAtGTE", "createdAtLT", "createdAtLTE", "createdAtIsNil", "createdAtNotNil", "updatedAt", "updatedAtNEQ", "updatedAtIn", "updatedAtNotIn", "updatedAtGT", "updatedAtGTE", "updatedAtLT", "updatedAtLTE", "updatedAtIsNil", "updatedAtNotNil", "createdBy", "createdByNEQ", "createdByIn", "createdByNotIn", "createdByGT", "createdByGTE", "createdByLT", "createdByLTE", "createdByContains", "createdByHasPrefix", "createdByHasSuffix", "createdByIsNil", "createdByNotNil", "createdByEqualFold", "createdByContainsFold", "updatedBy", "updatedByNEQ", "updatedByIn", "updatedByNotIn", "updatedByGT", "updatedByGTE", "updatedByLT", "updatedByLTE", "updatedByContains", "updatedByHasPrefix", "updatedByHasSuffix", "updatedByIsNil", "updatedByNotNil", "updatedByEqualFold", "updatedByContainsFold", "billingContact", "billingContactNEQ", "billingContactIn", "billingContactNotIn", "billingContactGT", "billingContactGTE", "billingContactLT", "billingContactLTE", "billingContactContains", "billingContactHasPrefix", "billingContactHasSuffix", "billingContactIsNil", "billingContactNotNil", "billingContactEqualFold", "billingContactContainsFold", "billingEmail", "billingEmailNEQ", "billingEmailIn", "billingEmailNotIn", "billingEmailGT", "billingEmailGTE", "billingEmailLT", "billingEmailLTE", "billingEmailContains", "billingEmailHasPrefix", "billingEmailHasSuffix", "billingEmailIsNil", "billingEmailNotNil", "billingEmailEqualFold", "billingEmailContainsFold", "billingPhone", "billingPhoneNEQ", "billingPhoneIn", "billingPhoneNotIn", "billingPhoneGT", "billingPhoneGTE", "billingPhoneLT", "billingPhoneLTE", "billingPhoneContains", "billingPhoneHasPrefix", "billingPhoneHasSuffix", "billingPhoneIsNil", "billingPhoneNotNil", "billingPhoneEqualFold", "billingPhoneContainsFold", "taxIdentifier", "taxIdentifierNEQ", "taxIdentifierIn", "taxIdentifierNotIn", "taxIdentifierGT", "taxIdentifierGTE", "taxIdentifierLT", "taxIdentifierLTE", "taxIdentifierContains", "taxIdentifierHasPrefix", "taxIdentifierHasSuffix", "taxIdentifierIsNil", "taxIdentifierNotNil", "taxIdentifierEqualFold", "taxIdentifierContainsFold", "geoLocation", "geoLocationNEQ", "geoLocationIn", "geoLocationNotIn", "geoLocationIsNil", "geoLocationNotNil", "organizationID", "organizationIDNEQ", "organizationIDIn", "organizationIDNotIn", "organizationIDGT", "organizationIDGTE", "organizationIDLT", "organizationIDLTE", "organizationIDContains", "organizationIDHasPrefix", "organizationIDHasSuffix", "organizationIDIsNil", "organizationIDNotNil", "organizationIDEqualFold", "organizationIDContainsFold", "billingNotificationsEnabled", "billingNotificationsEnabledNEQ", "allowMatchingDomainsAutojoin", "allowMatchingDomainsAutojoinNEQ", "allowMatchingDomainsAutojoinIsNil", "allowMatchingDomainsAutojoinNotNil", "identityProvider", "identityProviderNEQ", "identityProviderIn", "identityProviderNotIn", "identityProviderIsNil", "identityProviderNotNil", "identityProviderClientID", "identityProviderClientIDNEQ", "identityProviderClientIDIn", "identityProviderClientIDNotIn", "identityProviderClientIDGT", "identityProviderClientIDGTE", "identityProviderClientIDLT", "identityProviderClientIDLTE", "identityProviderClientIDContains", "identityProviderClientIDHasPrefix", "identityProviderClientIDHasSuffix", "identityProviderClientIDIsNil", "identityProviderClientIDNotNil", "identityProviderClientIDEqualFold", "identityProviderClientIDContainsFold", "identityProviderClientSecret", "identityProviderClientSecretNEQ", "identityProviderClientSecretIn", "identityProviderClientSecretNotIn", "identityProviderClientSecretGT", "identityProviderClientSecretGTE", "identityProviderClientSecretLT", "identityProviderClientSecretLTE", "identityProviderClientSecretContains", "identityProviderClientSecretHasPrefix", "identityProviderClientSecretHasSuffix", "identityProviderClientSecretIsNil", "identityProviderClientSecretNotNil", "identityProviderClientSecretEqualFold", "identityProviderClientSecretContainsFold", "identityProviderMetadataEndpoint", "identityProviderMetadataEndpointNEQ", "identityProviderMetadataEndpointIn", "identityProviderMetadataEndpointNotIn", "identityProviderMetadataEndpointGT", "identityProviderMetadataEndpointGTE", "identityProviderMetadataEndpointLT", "identityProviderMetadataEndpointLTE", "identityProviderMetadataEndpointContains", "identityProviderMetadataEndpointHasPrefix", "identityProviderMetadataEndpointHasSuffix", "identityProviderMetadataEndpointIsNil", "identityProviderMetadataEndpointNotNil", "identityProviderMetadataEndpointEqualFold", "identityProviderMetadataEndpointContainsFold", "identityProviderAuthTested", "identityProviderAuthTestedNEQ", "identityProviderEntityID", "identityProviderEntityIDNEQ", "identityProviderEntityIDIn", "identityProviderEntityIDNotIn", "identityProviderEntityIDGT", "identityProviderEntityIDGTE", "identityProviderEntityIDLT", "identityProviderEntityIDLTE", "identityProviderEntityIDContains", "identityProviderEntityIDHasPrefix", "identityProviderEntityIDHasSuffix", "identityProviderEntityIDIsNil", "identityProviderEntityIDNotNil", "identityProviderEntityIDEqualFold", "identityProviderEntityIDContainsFold", "oidcDiscoveryEndpoint", "oidcDiscoveryEndpointNEQ", "oidcDiscoveryEndpointIn", "oidcDiscoveryEndpointNotIn", "oidcDiscoveryEndpointGT", "oidcDiscoveryEndpointGTE", "oidcDiscoveryEndpointLT", "oidcDiscoveryEndpointLTE", "oidcDiscoveryEndpointContains", "oidcDiscoveryEndpointHasPrefix", "oidcDiscoveryEndpointHasSuffix", "oidcDiscoveryEndpointIsNil", "oidcDiscoveryEndpointNotNil", "oidcDiscoveryEndpointEqualFold", "oidcDiscoveryEndpointContainsFold", "samlSigninURL", "samlSigninURLNEQ", "samlSigninURLIn", "samlSigninURLNotIn", "samlSigninURLGT", "samlSigninURLGTE", "samlSigninURLLT", "samlSigninURLLTE", "samlSigninURLContains", "samlSigninURLHasPrefix", "samlSigninURLHasSuffix", "samlSigninURLIsNil", "samlSigninURLNotNil", "samlSigninURLEqualFold", "samlSigninURLContainsFold", "samlIssuer", "samlIssuerNEQ", "samlIssuerIn", "samlIssuerNotIn", "samlIssuerGT", "samlIssuerGTE", "samlIssuerLT", "samlIssuerLTE", "samlIssuerContains", "samlIssuerHasPrefix", "samlIssuerHasSuffix", "samlIssuerIsNil", "samlIssuerNotNil", "samlIssuerEqualFold", "samlIssuerContainsFold", "samlCert", "samlCertNEQ", "samlCertIn", "samlCertNotIn", "samlCertGT", "samlCertGTE", "samlCertLT", "samlCertLTE", "samlCertContains", "samlCertHasPrefix", "samlCertHasSuffix", "samlCertIsNil", "samlCertNotNil", "samlCertEqualFold", "samlCertContainsFold", "identityProviderLoginEnforced", "identityProviderLoginEnforcedNEQ", "multifactorAuthEnforced", "multifactorAuthEnforcedNEQ", "multifactorAuthEnforcedIsNil", "multifactorAuthEnforcedNotNil", "complianceWebhookToken", "complianceWebhookTokenNEQ", "complianceWebhookTokenIn", "complianceWebhookTokenNotIn", "complianceWebhookTokenGT", "complianceWebhookTokenGTE", "complianceWebhookTokenLT", "complianceWebhookTokenLTE", "complianceWebhookTokenContains", "complianceWebhookTokenHasPrefix", "complianceWebhookTokenHasSuffix", "complianceWebhookTokenIsNil", "complianceWebhookTokenNotNil", "complianceWebhookTokenEqualFold", "complianceWebhookTokenContainsFold", "paymentMethodAdded", "paymentMethodAddedNEQ", "pendingDeletionAt", "pendingDeletionAtNEQ", "pendingDeletionAtIn", "pendingDeletionAtNotIn", "pendingDeletionAtGT", "pendingDeletionAtGTE", "pendingDeletionAtLT", "pendingDeletionAtLTE", "pendingDeletionAtIsNil", "pendingDeletionAtNotNil", "hasOrganization", "hasOrganizationWith", "hasFiles", "hasFilesWith", "tagsHas", "domainsHas", "allowedEmailDomainsHas"} for _, k := range fieldsInOrder { v, ok := asMap[k] if !ok { @@ -347681,6 +347718,90 @@ func (ec *executionContext) unmarshalInputOrganizationSettingWhereInput(ctx cont return it, err } it.ComplianceWebhookTokenContainsFold = data + case "paymentMethodAdded": + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("paymentMethodAdded")) + data, err := ec.unmarshalOBoolean2ᚖbool(ctx, v) + if err != nil { + return it, err + } + it.PaymentMethodAdded = data + case "paymentMethodAddedNEQ": + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("paymentMethodAddedNEQ")) + data, err := ec.unmarshalOBoolean2ᚖbool(ctx, v) + if err != nil { + return it, err + } + it.PaymentMethodAddedNEQ = data + case "pendingDeletionAt": + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("pendingDeletionAt")) + data, err := ec.unmarshalODateTime2ᚖgithubᚗcomᚋtheopenlaneᚋcoreᚋcommonᚋmodelsᚐDateTime(ctx, v) + if err != nil { + return it, err + } + it.PendingDeletionAt = data + case "pendingDeletionAtNEQ": + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("pendingDeletionAtNEQ")) + data, err := ec.unmarshalODateTime2ᚖgithubᚗcomᚋtheopenlaneᚋcoreᚋcommonᚋmodelsᚐDateTime(ctx, v) + if err != nil { + return it, err + } + it.PendingDeletionAtNEQ = data + case "pendingDeletionAtIn": + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("pendingDeletionAtIn")) + data, err := ec.unmarshalODateTime2ᚕgithubᚗcomᚋtheopenlaneᚋcoreᚋcommonᚋmodelsᚐDateTimeᚄ(ctx, v) + if err != nil { + return it, err + } + it.PendingDeletionAtIn = data + case "pendingDeletionAtNotIn": + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("pendingDeletionAtNotIn")) + data, err := ec.unmarshalODateTime2ᚕgithubᚗcomᚋtheopenlaneᚋcoreᚋcommonᚋmodelsᚐDateTimeᚄ(ctx, v) + if err != nil { + return it, err + } + it.PendingDeletionAtNotIn = data + case "pendingDeletionAtGT": + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("pendingDeletionAtGT")) + data, err := ec.unmarshalODateTime2ᚖgithubᚗcomᚋtheopenlaneᚋcoreᚋcommonᚋmodelsᚐDateTime(ctx, v) + if err != nil { + return it, err + } + it.PendingDeletionAtGT = data + case "pendingDeletionAtGTE": + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("pendingDeletionAtGTE")) + data, err := ec.unmarshalODateTime2ᚖgithubᚗcomᚋtheopenlaneᚋcoreᚋcommonᚋmodelsᚐDateTime(ctx, v) + if err != nil { + return it, err + } + it.PendingDeletionAtGTE = data + case "pendingDeletionAtLT": + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("pendingDeletionAtLT")) + data, err := ec.unmarshalODateTime2ᚖgithubᚗcomᚋtheopenlaneᚋcoreᚋcommonᚋmodelsᚐDateTime(ctx, v) + if err != nil { + return it, err + } + it.PendingDeletionAtLT = data + case "pendingDeletionAtLTE": + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("pendingDeletionAtLTE")) + data, err := ec.unmarshalODateTime2ᚖgithubᚗcomᚋtheopenlaneᚋcoreᚋcommonᚋmodelsᚐDateTime(ctx, v) + if err != nil { + return it, err + } + it.PendingDeletionAtLTE = data + case "pendingDeletionAtIsNil": + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("pendingDeletionAtIsNil")) + data, err := ec.unmarshalOBoolean2bool(ctx, v) + if err != nil { + return it, err + } + it.PendingDeletionAtIsNil = data + case "pendingDeletionAtNotNil": + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("pendingDeletionAtNotNil")) + data, err := ec.unmarshalOBoolean2bool(ctx, v) + if err != nil { + return it, err + } + it.PendingDeletionAtNotNil = data case "hasOrganization": ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("hasOrganization")) data, err := ec.unmarshalOBoolean2ᚖbool(ctx, v) @@ -428544,7 +428665,7 @@ func (ec *executionContext) unmarshalInputUpdateOrganizationSettingInput(ctx con asMap[k] = v } - fieldsInOrder := [...]string{"tags", "appendTags", "clearTags", "domains", "appendDomains", "clearDomains", "billingContact", "clearBillingContact", "billingEmail", "clearBillingEmail", "billingPhone", "clearBillingPhone", "billingAddress", "clearBillingAddress", "taxIdentifier", "clearTaxIdentifier", "geoLocation", "clearGeoLocation", "billingNotificationsEnabled", "allowedEmailDomains", "appendAllowedEmailDomains", "clearAllowedEmailDomains", "allowMatchingDomainsAutojoin", "clearAllowMatchingDomainsAutojoin", "identityProvider", "clearIdentityProvider", "identityProviderClientID", "clearIdentityProviderClientID", "identityProviderClientSecret", "clearIdentityProviderClientSecret", "identityProviderMetadataEndpoint", "clearIdentityProviderMetadataEndpoint", "identityProviderEntityID", "clearIdentityProviderEntityID", "oidcDiscoveryEndpoint", "clearOidcDiscoveryEndpoint", "samlSigninURL", "clearSamlSigninURL", "samlIssuer", "clearSamlIssuer", "samlCert", "clearSamlCert", "identityProviderLoginEnforced", "multifactorAuthEnforced", "clearMultifactorAuthEnforced", "complianceWebhookToken", "clearComplianceWebhookToken", "organizationID", "clearOrganization", "addFileIDs", "removeFileIDs", "clearFiles"} + fieldsInOrder := [...]string{"tags", "appendTags", "clearTags", "domains", "appendDomains", "clearDomains", "billingContact", "clearBillingContact", "billingEmail", "clearBillingEmail", "billingPhone", "clearBillingPhone", "billingAddress", "clearBillingAddress", "taxIdentifier", "clearTaxIdentifier", "geoLocation", "clearGeoLocation", "billingNotificationsEnabled", "allowedEmailDomains", "appendAllowedEmailDomains", "clearAllowedEmailDomains", "allowMatchingDomainsAutojoin", "clearAllowMatchingDomainsAutojoin", "identityProvider", "clearIdentityProvider", "identityProviderClientID", "clearIdentityProviderClientID", "identityProviderClientSecret", "clearIdentityProviderClientSecret", "identityProviderMetadataEndpoint", "clearIdentityProviderMetadataEndpoint", "identityProviderEntityID", "clearIdentityProviderEntityID", "oidcDiscoveryEndpoint", "clearOidcDiscoveryEndpoint", "samlSigninURL", "clearSamlSigninURL", "samlIssuer", "clearSamlIssuer", "samlCert", "clearSamlCert", "identityProviderLoginEnforced", "multifactorAuthEnforced", "clearMultifactorAuthEnforced", "complianceWebhookToken", "clearComplianceWebhookToken", "pendingDeletionAt", "clearPendingDeletionAt", "organizationID", "clearOrganization", "addFileIDs", "removeFileIDs", "clearFiles"} for _, k := range fieldsInOrder { v, ok := asMap[k] if !ok { @@ -428880,6 +429001,20 @@ func (ec *executionContext) unmarshalInputUpdateOrganizationSettingInput(ctx con return it, err } it.ClearComplianceWebhookToken = data + case "pendingDeletionAt": + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("pendingDeletionAt")) + data, err := ec.unmarshalODateTime2ᚖgithubᚗcomᚋtheopenlaneᚋcoreᚋcommonᚋmodelsᚐDateTime(ctx, v) + if err != nil { + return it, err + } + it.PendingDeletionAt = data + case "clearPendingDeletionAt": + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("clearPendingDeletionAt")) + data, err := ec.unmarshalOBoolean2bool(ctx, v) + if err != nil { + return it, err + } + it.ClearPendingDeletionAt = data case "organizationID": ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("organizationID")) data, err := ec.unmarshalOID2ᚖstring(ctx, v) @@ -498666,6 +498801,8 @@ func (ec *executionContext) _OrganizationSetting(ctx context.Context, sel ast.Se if out.Values[i] == graphql.Null { atomic.AddUint32(&out.Invalids, 1) } + case "pendingDeletionAt": + out.Values[i] = ec._OrganizationSetting_pendingDeletionAt(ctx, field, obj) case "organization": field := field diff --git a/internal/graphapi/generated/organizationsetting.generated.go b/internal/graphapi/generated/organizationsetting.generated.go index 53d3c5fc30..625231ca2a 100644 --- a/internal/graphapi/generated/organizationsetting.generated.go +++ b/internal/graphapi/generated/organizationsetting.generated.go @@ -114,6 +114,8 @@ func (ec *executionContext) fieldContext_OrganizationSettingBulkCreatePayload_or return ec.fieldContext_OrganizationSetting_complianceWebhookToken(ctx, field) case "paymentMethodAdded": return ec.fieldContext_OrganizationSetting_paymentMethodAdded(ctx, field) + case "pendingDeletionAt": + return ec.fieldContext_OrganizationSetting_pendingDeletionAt(ctx, field) case "organization": return ec.fieldContext_OrganizationSetting_organization(ctx, field) case "files": @@ -298,6 +300,8 @@ func (ec *executionContext) fieldContext_OrganizationSettingBulkUpdatePayload_or return ec.fieldContext_OrganizationSetting_complianceWebhookToken(ctx, field) case "paymentMethodAdded": return ec.fieldContext_OrganizationSetting_paymentMethodAdded(ctx, field) + case "pendingDeletionAt": + return ec.fieldContext_OrganizationSetting_pendingDeletionAt(ctx, field) case "organization": return ec.fieldContext_OrganizationSetting_organization(ctx, field) case "files": @@ -424,6 +428,8 @@ func (ec *executionContext) fieldContext_OrganizationSettingCreatePayload_organi return ec.fieldContext_OrganizationSetting_complianceWebhookToken(ctx, field) case "paymentMethodAdded": return ec.fieldContext_OrganizationSetting_paymentMethodAdded(ctx, field) + case "pendingDeletionAt": + return ec.fieldContext_OrganizationSetting_pendingDeletionAt(ctx, field) case "organization": return ec.fieldContext_OrganizationSetting_organization(ctx, field) case "files": @@ -550,6 +556,8 @@ func (ec *executionContext) fieldContext_OrganizationSettingUpdatePayload_organi return ec.fieldContext_OrganizationSetting_complianceWebhookToken(ctx, field) case "paymentMethodAdded": return ec.fieldContext_OrganizationSetting_paymentMethodAdded(ctx, field) + case "pendingDeletionAt": + return ec.fieldContext_OrganizationSetting_pendingDeletionAt(ctx, field) case "organization": return ec.fieldContext_OrganizationSetting_organization(ctx, field) case "files": diff --git a/internal/graphapi/generated/root_.generated.go b/internal/graphapi/generated/root_.generated.go index 8b72f3daa1..28e52b17f7 100644 --- a/internal/graphapi/generated/root_.generated.go +++ b/internal/graphapi/generated/root_.generated.go @@ -4538,6 +4538,7 @@ type ComplexityRoot struct { Organization func(childComplexity int) int OrganizationID func(childComplexity int) int PaymentMethodAdded func(childComplexity int) int + PendingDeletionAt func(childComplexity int) int SamlCert func(childComplexity int) int SamlIssuer func(childComplexity int) int SamlSigninURL func(childComplexity int) int @@ -35189,6 +35190,13 @@ func (e *executableSchema) Complexity(ctx context.Context, typeName, field strin return e.ComplexityRoot.OrganizationSetting.PaymentMethodAdded(childComplexity), true + case "OrganizationSetting.pendingDeletionAt": + if e.ComplexityRoot.OrganizationSetting.PendingDeletionAt == nil { + break + } + + return e.ComplexityRoot.OrganizationSetting.PendingDeletionAt(childComplexity), true + case "OrganizationSetting.samlCert": if e.ComplexityRoot.OrganizationSetting.SamlCert == nil { break @@ -103179,6 +103187,10 @@ type OrganizationSetting implements Node { whether or not a payment method has been added to the account """ paymentMethodAdded: Boolean! + """ + when will this organization be deleted? usually this is after org has not added a payment method afte n period + """ + pendingDeletionAt: DateTime organization: Organization files( """ @@ -103666,6 +103678,24 @@ input OrganizationSettingWhereInput { complianceWebhookTokenEqualFold: String complianceWebhookTokenContainsFold: String """ + payment_method_added field predicates + """ + paymentMethodAdded: Boolean + paymentMethodAddedNEQ: Boolean + """ + pending_deletion_at field predicates + """ + pendingDeletionAt: DateTime + pendingDeletionAtNEQ: DateTime + pendingDeletionAtIn: [DateTime!] + pendingDeletionAtNotIn: [DateTime!] + pendingDeletionAtGT: DateTime + pendingDeletionAtGTE: DateTime + pendingDeletionAtLT: DateTime + pendingDeletionAtLTE: DateTime + pendingDeletionAtIsNil: Boolean + pendingDeletionAtNotNil: Boolean + """ organization edge predicates """ hasOrganization: Boolean @@ -133748,6 +133778,11 @@ input UpdateOrganizationSettingInput { """ complianceWebhookToken: String clearComplianceWebhookToken: Boolean + """ + when will this organization be deleted? usually this is after org has not added a payment method afte n period + """ + pendingDeletionAt: DateTime + clearPendingDeletionAt: Boolean organizationID: ID clearOrganization: Boolean addFileIDs: [ID!] diff --git a/internal/graphapi/historygenerated/ent.generated.go b/internal/graphapi/historygenerated/ent.generated.go index 761652fe09..c5586cd4fd 100644 --- a/internal/graphapi/historygenerated/ent.generated.go +++ b/internal/graphapi/historygenerated/ent.generated.go @@ -47099,6 +47099,35 @@ func (ec *executionContext) fieldContext_OrganizationSettingHistory_paymentMetho return fc, nil } +func (ec *executionContext) _OrganizationSettingHistory_pendingDeletionAt(ctx context.Context, field graphql.CollectedField, obj *historygenerated.OrganizationSettingHistory) (ret graphql.Marshaler) { + return graphql.ResolveField( + ctx, + ec.OperationContext, + field, + ec.fieldContext_OrganizationSettingHistory_pendingDeletionAt, + func(ctx context.Context) (any, error) { + return obj.PendingDeletionAt, nil + }, + nil, + ec.marshalODateTime2ᚖgithubᚗcomᚋtheopenlaneᚋcoreᚋcommonᚋmodelsᚐDateTime, + true, + false, + ) +} + +func (ec *executionContext) fieldContext_OrganizationSettingHistory_pendingDeletionAt(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "OrganizationSettingHistory", + Field: field, + IsMethod: false, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return nil, errors.New("field of type DateTime does not have child fields") + }, + } + return fc, nil +} + func (ec *executionContext) _OrganizationSettingHistoryConnection_edges(ctx context.Context, field graphql.CollectedField, obj *historygenerated.OrganizationSettingHistoryConnection) (ret graphql.Marshaler) { return graphql.ResolveField( ctx, @@ -47294,6 +47323,8 @@ func (ec *executionContext) fieldContext_OrganizationSettingHistoryEdge_node(_ c return ec.fieldContext_OrganizationSettingHistory_complianceWebhookToken(ctx, field) case "paymentMethodAdded": return ec.fieldContext_OrganizationSettingHistory_paymentMethodAdded(ctx, field) + case "pendingDeletionAt": + return ec.fieldContext_OrganizationSettingHistory_pendingDeletionAt(ctx, field) } return nil, fmt.Errorf("no field named %q was found under type OrganizationSettingHistory", field.Name) }, @@ -173667,7 +173698,7 @@ func (ec *executionContext) unmarshalInputOrganizationSettingHistoryWhereInput(c asMap[k] = v } - fieldsInOrder := [...]string{"not", "and", "or", "id", "idNEQ", "idIn", "idNotIn", "idGT", "idGTE", "idLT", "idLTE", "idEqualFold", "idContainsFold", "historyTime", "historyTimeNEQ", "historyTimeIn", "historyTimeNotIn", "historyTimeGT", "historyTimeGTE", "historyTimeLT", "historyTimeLTE", "ref", "refNEQ", "refIn", "refNotIn", "refGT", "refGTE", "refLT", "refLTE", "refContains", "refHasPrefix", "refHasSuffix", "refIsNil", "refNotNil", "refEqualFold", "refContainsFold", "operation", "operationNEQ", "operationIn", "operationNotIn", "createdAt", "createdAtNEQ", "createdAtIn", "createdAtNotIn", "createdAtGT", "createdAtGTE", "createdAtLT", "createdAtLTE", "createdAtIsNil", "createdAtNotNil", "updatedAt", "updatedAtNEQ", "updatedAtIn", "updatedAtNotIn", "updatedAtGT", "updatedAtGTE", "updatedAtLT", "updatedAtLTE", "updatedAtIsNil", "updatedAtNotNil", "createdBy", "createdByNEQ", "createdByIn", "createdByNotIn", "createdByGT", "createdByGTE", "createdByLT", "createdByLTE", "createdByContains", "createdByHasPrefix", "createdByHasSuffix", "createdByIsNil", "createdByNotNil", "createdByEqualFold", "createdByContainsFold", "updatedBy", "updatedByNEQ", "updatedByIn", "updatedByNotIn", "updatedByGT", "updatedByGTE", "updatedByLT", "updatedByLTE", "updatedByContains", "updatedByHasPrefix", "updatedByHasSuffix", "updatedByIsNil", "updatedByNotNil", "updatedByEqualFold", "updatedByContainsFold", "billingContact", "billingContactNEQ", "billingContactIn", "billingContactNotIn", "billingContactGT", "billingContactGTE", "billingContactLT", "billingContactLTE", "billingContactContains", "billingContactHasPrefix", "billingContactHasSuffix", "billingContactIsNil", "billingContactNotNil", "billingContactEqualFold", "billingContactContainsFold", "billingEmail", "billingEmailNEQ", "billingEmailIn", "billingEmailNotIn", "billingEmailGT", "billingEmailGTE", "billingEmailLT", "billingEmailLTE", "billingEmailContains", "billingEmailHasPrefix", "billingEmailHasSuffix", "billingEmailIsNil", "billingEmailNotNil", "billingEmailEqualFold", "billingEmailContainsFold", "billingPhone", "billingPhoneNEQ", "billingPhoneIn", "billingPhoneNotIn", "billingPhoneGT", "billingPhoneGTE", "billingPhoneLT", "billingPhoneLTE", "billingPhoneContains", "billingPhoneHasPrefix", "billingPhoneHasSuffix", "billingPhoneIsNil", "billingPhoneNotNil", "billingPhoneEqualFold", "billingPhoneContainsFold", "taxIdentifier", "taxIdentifierNEQ", "taxIdentifierIn", "taxIdentifierNotIn", "taxIdentifierGT", "taxIdentifierGTE", "taxIdentifierLT", "taxIdentifierLTE", "taxIdentifierContains", "taxIdentifierHasPrefix", "taxIdentifierHasSuffix", "taxIdentifierIsNil", "taxIdentifierNotNil", "taxIdentifierEqualFold", "taxIdentifierContainsFold", "geoLocation", "geoLocationNEQ", "geoLocationIn", "geoLocationNotIn", "geoLocationIsNil", "geoLocationNotNil", "organizationID", "organizationIDNEQ", "organizationIDIn", "organizationIDNotIn", "organizationIDGT", "organizationIDGTE", "organizationIDLT", "organizationIDLTE", "organizationIDContains", "organizationIDHasPrefix", "organizationIDHasSuffix", "organizationIDIsNil", "organizationIDNotNil", "organizationIDEqualFold", "organizationIDContainsFold", "billingNotificationsEnabled", "billingNotificationsEnabledNEQ", "allowMatchingDomainsAutojoin", "allowMatchingDomainsAutojoinNEQ", "allowMatchingDomainsAutojoinIsNil", "allowMatchingDomainsAutojoinNotNil", "identityProvider", "identityProviderNEQ", "identityProviderIn", "identityProviderNotIn", "identityProviderIsNil", "identityProviderNotNil", "identityProviderClientID", "identityProviderClientIDNEQ", "identityProviderClientIDIn", "identityProviderClientIDNotIn", "identityProviderClientIDGT", "identityProviderClientIDGTE", "identityProviderClientIDLT", "identityProviderClientIDLTE", "identityProviderClientIDContains", "identityProviderClientIDHasPrefix", "identityProviderClientIDHasSuffix", "identityProviderClientIDIsNil", "identityProviderClientIDNotNil", "identityProviderClientIDEqualFold", "identityProviderClientIDContainsFold", "identityProviderClientSecret", "identityProviderClientSecretNEQ", "identityProviderClientSecretIn", "identityProviderClientSecretNotIn", "identityProviderClientSecretGT", "identityProviderClientSecretGTE", "identityProviderClientSecretLT", "identityProviderClientSecretLTE", "identityProviderClientSecretContains", "identityProviderClientSecretHasPrefix", "identityProviderClientSecretHasSuffix", "identityProviderClientSecretIsNil", "identityProviderClientSecretNotNil", "identityProviderClientSecretEqualFold", "identityProviderClientSecretContainsFold", "identityProviderMetadataEndpoint", "identityProviderMetadataEndpointNEQ", "identityProviderMetadataEndpointIn", "identityProviderMetadataEndpointNotIn", "identityProviderMetadataEndpointGT", "identityProviderMetadataEndpointGTE", "identityProviderMetadataEndpointLT", "identityProviderMetadataEndpointLTE", "identityProviderMetadataEndpointContains", "identityProviderMetadataEndpointHasPrefix", "identityProviderMetadataEndpointHasSuffix", "identityProviderMetadataEndpointIsNil", "identityProviderMetadataEndpointNotNil", "identityProviderMetadataEndpointEqualFold", "identityProviderMetadataEndpointContainsFold", "identityProviderAuthTested", "identityProviderAuthTestedNEQ", "identityProviderEntityID", "identityProviderEntityIDNEQ", "identityProviderEntityIDIn", "identityProviderEntityIDNotIn", "identityProviderEntityIDGT", "identityProviderEntityIDGTE", "identityProviderEntityIDLT", "identityProviderEntityIDLTE", "identityProviderEntityIDContains", "identityProviderEntityIDHasPrefix", "identityProviderEntityIDHasSuffix", "identityProviderEntityIDIsNil", "identityProviderEntityIDNotNil", "identityProviderEntityIDEqualFold", "identityProviderEntityIDContainsFold", "oidcDiscoveryEndpoint", "oidcDiscoveryEndpointNEQ", "oidcDiscoveryEndpointIn", "oidcDiscoveryEndpointNotIn", "oidcDiscoveryEndpointGT", "oidcDiscoveryEndpointGTE", "oidcDiscoveryEndpointLT", "oidcDiscoveryEndpointLTE", "oidcDiscoveryEndpointContains", "oidcDiscoveryEndpointHasPrefix", "oidcDiscoveryEndpointHasSuffix", "oidcDiscoveryEndpointIsNil", "oidcDiscoveryEndpointNotNil", "oidcDiscoveryEndpointEqualFold", "oidcDiscoveryEndpointContainsFold", "samlSigninURL", "samlSigninURLNEQ", "samlSigninURLIn", "samlSigninURLNotIn", "samlSigninURLGT", "samlSigninURLGTE", "samlSigninURLLT", "samlSigninURLLTE", "samlSigninURLContains", "samlSigninURLHasPrefix", "samlSigninURLHasSuffix", "samlSigninURLIsNil", "samlSigninURLNotNil", "samlSigninURLEqualFold", "samlSigninURLContainsFold", "samlIssuer", "samlIssuerNEQ", "samlIssuerIn", "samlIssuerNotIn", "samlIssuerGT", "samlIssuerGTE", "samlIssuerLT", "samlIssuerLTE", "samlIssuerContains", "samlIssuerHasPrefix", "samlIssuerHasSuffix", "samlIssuerIsNil", "samlIssuerNotNil", "samlIssuerEqualFold", "samlIssuerContainsFold", "samlCert", "samlCertNEQ", "samlCertIn", "samlCertNotIn", "samlCertGT", "samlCertGTE", "samlCertLT", "samlCertLTE", "samlCertContains", "samlCertHasPrefix", "samlCertHasSuffix", "samlCertIsNil", "samlCertNotNil", "samlCertEqualFold", "samlCertContainsFold", "identityProviderLoginEnforced", "identityProviderLoginEnforcedNEQ", "multifactorAuthEnforced", "multifactorAuthEnforcedNEQ", "multifactorAuthEnforcedIsNil", "multifactorAuthEnforcedNotNil", "complianceWebhookToken", "complianceWebhookTokenNEQ", "complianceWebhookTokenIn", "complianceWebhookTokenNotIn", "complianceWebhookTokenGT", "complianceWebhookTokenGTE", "complianceWebhookTokenLT", "complianceWebhookTokenLTE", "complianceWebhookTokenContains", "complianceWebhookTokenHasPrefix", "complianceWebhookTokenHasSuffix", "complianceWebhookTokenIsNil", "complianceWebhookTokenNotNil", "complianceWebhookTokenEqualFold", "complianceWebhookTokenContainsFold"} + fieldsInOrder := [...]string{"not", "and", "or", "id", "idNEQ", "idIn", "idNotIn", "idGT", "idGTE", "idLT", "idLTE", "idEqualFold", "idContainsFold", "historyTime", "historyTimeNEQ", "historyTimeIn", "historyTimeNotIn", "historyTimeGT", "historyTimeGTE", "historyTimeLT", "historyTimeLTE", "ref", "refNEQ", "refIn", "refNotIn", "refGT", "refGTE", "refLT", "refLTE", "refContains", "refHasPrefix", "refHasSuffix", "refIsNil", "refNotNil", "refEqualFold", "refContainsFold", "operation", "operationNEQ", "operationIn", "operationNotIn", "createdAt", "createdAtNEQ", "createdAtIn", "createdAtNotIn", "createdAtGT", "createdAtGTE", "createdAtLT", "createdAtLTE", "createdAtIsNil", "createdAtNotNil", "updatedAt", "updatedAtNEQ", "updatedAtIn", "updatedAtNotIn", "updatedAtGT", "updatedAtGTE", "updatedAtLT", "updatedAtLTE", "updatedAtIsNil", "updatedAtNotNil", "createdBy", "createdByNEQ", "createdByIn", "createdByNotIn", "createdByGT", "createdByGTE", "createdByLT", "createdByLTE", "createdByContains", "createdByHasPrefix", "createdByHasSuffix", "createdByIsNil", "createdByNotNil", "createdByEqualFold", "createdByContainsFold", "updatedBy", "updatedByNEQ", "updatedByIn", "updatedByNotIn", "updatedByGT", "updatedByGTE", "updatedByLT", "updatedByLTE", "updatedByContains", "updatedByHasPrefix", "updatedByHasSuffix", "updatedByIsNil", "updatedByNotNil", "updatedByEqualFold", "updatedByContainsFold", "billingContact", "billingContactNEQ", "billingContactIn", "billingContactNotIn", "billingContactGT", "billingContactGTE", "billingContactLT", "billingContactLTE", "billingContactContains", "billingContactHasPrefix", "billingContactHasSuffix", "billingContactIsNil", "billingContactNotNil", "billingContactEqualFold", "billingContactContainsFold", "billingEmail", "billingEmailNEQ", "billingEmailIn", "billingEmailNotIn", "billingEmailGT", "billingEmailGTE", "billingEmailLT", "billingEmailLTE", "billingEmailContains", "billingEmailHasPrefix", "billingEmailHasSuffix", "billingEmailIsNil", "billingEmailNotNil", "billingEmailEqualFold", "billingEmailContainsFold", "billingPhone", "billingPhoneNEQ", "billingPhoneIn", "billingPhoneNotIn", "billingPhoneGT", "billingPhoneGTE", "billingPhoneLT", "billingPhoneLTE", "billingPhoneContains", "billingPhoneHasPrefix", "billingPhoneHasSuffix", "billingPhoneIsNil", "billingPhoneNotNil", "billingPhoneEqualFold", "billingPhoneContainsFold", "taxIdentifier", "taxIdentifierNEQ", "taxIdentifierIn", "taxIdentifierNotIn", "taxIdentifierGT", "taxIdentifierGTE", "taxIdentifierLT", "taxIdentifierLTE", "taxIdentifierContains", "taxIdentifierHasPrefix", "taxIdentifierHasSuffix", "taxIdentifierIsNil", "taxIdentifierNotNil", "taxIdentifierEqualFold", "taxIdentifierContainsFold", "geoLocation", "geoLocationNEQ", "geoLocationIn", "geoLocationNotIn", "geoLocationIsNil", "geoLocationNotNil", "organizationID", "organizationIDNEQ", "organizationIDIn", "organizationIDNotIn", "organizationIDGT", "organizationIDGTE", "organizationIDLT", "organizationIDLTE", "organizationIDContains", "organizationIDHasPrefix", "organizationIDHasSuffix", "organizationIDIsNil", "organizationIDNotNil", "organizationIDEqualFold", "organizationIDContainsFold", "billingNotificationsEnabled", "billingNotificationsEnabledNEQ", "allowMatchingDomainsAutojoin", "allowMatchingDomainsAutojoinNEQ", "allowMatchingDomainsAutojoinIsNil", "allowMatchingDomainsAutojoinNotNil", "identityProvider", "identityProviderNEQ", "identityProviderIn", "identityProviderNotIn", "identityProviderIsNil", "identityProviderNotNil", "identityProviderClientID", "identityProviderClientIDNEQ", "identityProviderClientIDIn", "identityProviderClientIDNotIn", "identityProviderClientIDGT", "identityProviderClientIDGTE", "identityProviderClientIDLT", "identityProviderClientIDLTE", "identityProviderClientIDContains", "identityProviderClientIDHasPrefix", "identityProviderClientIDHasSuffix", "identityProviderClientIDIsNil", "identityProviderClientIDNotNil", "identityProviderClientIDEqualFold", "identityProviderClientIDContainsFold", "identityProviderClientSecret", "identityProviderClientSecretNEQ", "identityProviderClientSecretIn", "identityProviderClientSecretNotIn", "identityProviderClientSecretGT", "identityProviderClientSecretGTE", "identityProviderClientSecretLT", "identityProviderClientSecretLTE", "identityProviderClientSecretContains", "identityProviderClientSecretHasPrefix", "identityProviderClientSecretHasSuffix", "identityProviderClientSecretIsNil", "identityProviderClientSecretNotNil", "identityProviderClientSecretEqualFold", "identityProviderClientSecretContainsFold", "identityProviderMetadataEndpoint", "identityProviderMetadataEndpointNEQ", "identityProviderMetadataEndpointIn", "identityProviderMetadataEndpointNotIn", "identityProviderMetadataEndpointGT", "identityProviderMetadataEndpointGTE", "identityProviderMetadataEndpointLT", "identityProviderMetadataEndpointLTE", "identityProviderMetadataEndpointContains", "identityProviderMetadataEndpointHasPrefix", "identityProviderMetadataEndpointHasSuffix", "identityProviderMetadataEndpointIsNil", "identityProviderMetadataEndpointNotNil", "identityProviderMetadataEndpointEqualFold", "identityProviderMetadataEndpointContainsFold", "identityProviderAuthTested", "identityProviderAuthTestedNEQ", "identityProviderEntityID", "identityProviderEntityIDNEQ", "identityProviderEntityIDIn", "identityProviderEntityIDNotIn", "identityProviderEntityIDGT", "identityProviderEntityIDGTE", "identityProviderEntityIDLT", "identityProviderEntityIDLTE", "identityProviderEntityIDContains", "identityProviderEntityIDHasPrefix", "identityProviderEntityIDHasSuffix", "identityProviderEntityIDIsNil", "identityProviderEntityIDNotNil", "identityProviderEntityIDEqualFold", "identityProviderEntityIDContainsFold", "oidcDiscoveryEndpoint", "oidcDiscoveryEndpointNEQ", "oidcDiscoveryEndpointIn", "oidcDiscoveryEndpointNotIn", "oidcDiscoveryEndpointGT", "oidcDiscoveryEndpointGTE", "oidcDiscoveryEndpointLT", "oidcDiscoveryEndpointLTE", "oidcDiscoveryEndpointContains", "oidcDiscoveryEndpointHasPrefix", "oidcDiscoveryEndpointHasSuffix", "oidcDiscoveryEndpointIsNil", "oidcDiscoveryEndpointNotNil", "oidcDiscoveryEndpointEqualFold", "oidcDiscoveryEndpointContainsFold", "samlSigninURL", "samlSigninURLNEQ", "samlSigninURLIn", "samlSigninURLNotIn", "samlSigninURLGT", "samlSigninURLGTE", "samlSigninURLLT", "samlSigninURLLTE", "samlSigninURLContains", "samlSigninURLHasPrefix", "samlSigninURLHasSuffix", "samlSigninURLIsNil", "samlSigninURLNotNil", "samlSigninURLEqualFold", "samlSigninURLContainsFold", "samlIssuer", "samlIssuerNEQ", "samlIssuerIn", "samlIssuerNotIn", "samlIssuerGT", "samlIssuerGTE", "samlIssuerLT", "samlIssuerLTE", "samlIssuerContains", "samlIssuerHasPrefix", "samlIssuerHasSuffix", "samlIssuerIsNil", "samlIssuerNotNil", "samlIssuerEqualFold", "samlIssuerContainsFold", "samlCert", "samlCertNEQ", "samlCertIn", "samlCertNotIn", "samlCertGT", "samlCertGTE", "samlCertLT", "samlCertLTE", "samlCertContains", "samlCertHasPrefix", "samlCertHasSuffix", "samlCertIsNil", "samlCertNotNil", "samlCertEqualFold", "samlCertContainsFold", "identityProviderLoginEnforced", "identityProviderLoginEnforcedNEQ", "multifactorAuthEnforced", "multifactorAuthEnforcedNEQ", "multifactorAuthEnforcedIsNil", "multifactorAuthEnforcedNotNil", "complianceWebhookToken", "complianceWebhookTokenNEQ", "complianceWebhookTokenIn", "complianceWebhookTokenNotIn", "complianceWebhookTokenGT", "complianceWebhookTokenGTE", "complianceWebhookTokenLT", "complianceWebhookTokenLTE", "complianceWebhookTokenContains", "complianceWebhookTokenHasPrefix", "complianceWebhookTokenHasSuffix", "complianceWebhookTokenIsNil", "complianceWebhookTokenNotNil", "complianceWebhookTokenEqualFold", "complianceWebhookTokenContainsFold", "paymentMethodAdded", "paymentMethodAddedNEQ", "pendingDeletionAt", "pendingDeletionAtNEQ", "pendingDeletionAtIn", "pendingDeletionAtNotIn", "pendingDeletionAtGT", "pendingDeletionAtGTE", "pendingDeletionAtLT", "pendingDeletionAtLTE", "pendingDeletionAtIsNil", "pendingDeletionAtNotNil"} for _, k := range fieldsInOrder { v, ok := asMap[k] if !ok { @@ -175956,6 +175987,90 @@ func (ec *executionContext) unmarshalInputOrganizationSettingHistoryWhereInput(c return it, err } it.ComplianceWebhookTokenContainsFold = data + case "paymentMethodAdded": + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("paymentMethodAdded")) + data, err := ec.unmarshalOBoolean2ᚖbool(ctx, v) + if err != nil { + return it, err + } + it.PaymentMethodAdded = data + case "paymentMethodAddedNEQ": + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("paymentMethodAddedNEQ")) + data, err := ec.unmarshalOBoolean2ᚖbool(ctx, v) + if err != nil { + return it, err + } + it.PaymentMethodAddedNEQ = data + case "pendingDeletionAt": + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("pendingDeletionAt")) + data, err := ec.unmarshalODateTime2ᚖgithubᚗcomᚋtheopenlaneᚋcoreᚋcommonᚋmodelsᚐDateTime(ctx, v) + if err != nil { + return it, err + } + it.PendingDeletionAt = data + case "pendingDeletionAtNEQ": + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("pendingDeletionAtNEQ")) + data, err := ec.unmarshalODateTime2ᚖgithubᚗcomᚋtheopenlaneᚋcoreᚋcommonᚋmodelsᚐDateTime(ctx, v) + if err != nil { + return it, err + } + it.PendingDeletionAtNEQ = data + case "pendingDeletionAtIn": + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("pendingDeletionAtIn")) + data, err := ec.unmarshalODateTime2ᚕgithubᚗcomᚋtheopenlaneᚋcoreᚋcommonᚋmodelsᚐDateTimeᚄ(ctx, v) + if err != nil { + return it, err + } + it.PendingDeletionAtIn = data + case "pendingDeletionAtNotIn": + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("pendingDeletionAtNotIn")) + data, err := ec.unmarshalODateTime2ᚕgithubᚗcomᚋtheopenlaneᚋcoreᚋcommonᚋmodelsᚐDateTimeᚄ(ctx, v) + if err != nil { + return it, err + } + it.PendingDeletionAtNotIn = data + case "pendingDeletionAtGT": + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("pendingDeletionAtGT")) + data, err := ec.unmarshalODateTime2ᚖgithubᚗcomᚋtheopenlaneᚋcoreᚋcommonᚋmodelsᚐDateTime(ctx, v) + if err != nil { + return it, err + } + it.PendingDeletionAtGT = data + case "pendingDeletionAtGTE": + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("pendingDeletionAtGTE")) + data, err := ec.unmarshalODateTime2ᚖgithubᚗcomᚋtheopenlaneᚋcoreᚋcommonᚋmodelsᚐDateTime(ctx, v) + if err != nil { + return it, err + } + it.PendingDeletionAtGTE = data + case "pendingDeletionAtLT": + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("pendingDeletionAtLT")) + data, err := ec.unmarshalODateTime2ᚖgithubᚗcomᚋtheopenlaneᚋcoreᚋcommonᚋmodelsᚐDateTime(ctx, v) + if err != nil { + return it, err + } + it.PendingDeletionAtLT = data + case "pendingDeletionAtLTE": + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("pendingDeletionAtLTE")) + data, err := ec.unmarshalODateTime2ᚖgithubᚗcomᚋtheopenlaneᚋcoreᚋcommonᚋmodelsᚐDateTime(ctx, v) + if err != nil { + return it, err + } + it.PendingDeletionAtLTE = data + case "pendingDeletionAtIsNil": + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("pendingDeletionAtIsNil")) + data, err := ec.unmarshalOBoolean2bool(ctx, v) + if err != nil { + return it, err + } + it.PendingDeletionAtIsNil = data + case "pendingDeletionAtNotNil": + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("pendingDeletionAtNotNil")) + data, err := ec.unmarshalOBoolean2bool(ctx, v) + if err != nil { + return it, err + } + it.PendingDeletionAtNotNil = data } } return it, nil @@ -257901,6 +258016,8 @@ func (ec *executionContext) _OrganizationSettingHistory(ctx context.Context, sel if out.Values[i] == graphql.Null { out.Invalids++ } + case "pendingDeletionAt": + out.Values[i] = ec._OrganizationSettingHistory_pendingDeletionAt(ctx, field, obj) default: panic("unknown field " + strconv.Quote(field.Name)) } diff --git a/internal/graphapi/historygenerated/root_.generated.go b/internal/graphapi/historygenerated/root_.generated.go index fbd7b532ba..070f4b6504 100644 --- a/internal/graphapi/historygenerated/root_.generated.go +++ b/internal/graphapi/historygenerated/root_.generated.go @@ -1793,6 +1793,7 @@ type ComplexityRoot struct { Operation func(childComplexity int) int OrganizationID func(childComplexity int) int PaymentMethodAdded func(childComplexity int) int + PendingDeletionAt func(childComplexity int) int Ref func(childComplexity int) int SamlCert func(childComplexity int) int SamlIssuer func(childComplexity int) int @@ -13008,6 +13009,13 @@ func (e *executableSchema) Complexity(ctx context.Context, typeName, field strin return e.ComplexityRoot.OrganizationSettingHistory.PaymentMethodAdded(childComplexity), true + case "OrganizationSettingHistory.pendingDeletionAt": + if e.ComplexityRoot.OrganizationSettingHistory.PendingDeletionAt == nil { + break + } + + return e.ComplexityRoot.OrganizationSettingHistory.PendingDeletionAt(childComplexity), true + case "OrganizationSettingHistory.ref": if e.ComplexityRoot.OrganizationSettingHistory.Ref == nil { break @@ -44575,6 +44583,10 @@ type OrganizationSettingHistory implements Node { whether or not a payment method has been added to the account """ paymentMethodAdded: Boolean! + """ + when will this organization be deleted? usually this is after org has not added a payment method afte n period + """ + pendingDeletionAt: DateTime } """ A connection to a list of items. @@ -45074,6 +45086,24 @@ input OrganizationSettingHistoryWhereInput { complianceWebhookTokenNotNil: Boolean complianceWebhookTokenEqualFold: String complianceWebhookTokenContainsFold: String + """ + payment_method_added field predicates + """ + paymentMethodAdded: Boolean + paymentMethodAddedNEQ: Boolean + """ + pending_deletion_at field predicates + """ + pendingDeletionAt: DateTime + pendingDeletionAtNEQ: DateTime + pendingDeletionAtIn: [DateTime!] + pendingDeletionAtNotIn: [DateTime!] + pendingDeletionAtGT: DateTime + pendingDeletionAtGTE: DateTime + pendingDeletionAtLT: DateTime + pendingDeletionAtLTE: DateTime + pendingDeletionAtIsNil: Boolean + pendingDeletionAtNotNil: Boolean } """ Information about pagination in a connection. diff --git a/internal/graphapi/historyschema/checksum/.history_schema_checksum b/internal/graphapi/historyschema/checksum/.history_schema_checksum index 7856002b04..9ec071f8b9 100644 --- a/internal/graphapi/historyschema/checksum/.history_schema_checksum +++ b/internal/graphapi/historyschema/checksum/.history_schema_checksum @@ -1 +1 @@ -e153490787d9e7f6680c52c3c0ea8969b2b80c4ff771416230884b8f7b1aacc1 \ No newline at end of file +4356fe8000c4c7c46902f55a4bfdc9ad5d831e9ede3ebcc31c2b48c2be73c21f \ No newline at end of file diff --git a/internal/graphapi/historyschema/schema.graphql b/internal/graphapi/historyschema/schema.graphql index 07eadfc15b..eb5acd5ba1 100644 --- a/internal/graphapi/historyschema/schema.graphql +++ b/internal/graphapi/historyschema/schema.graphql @@ -22462,6 +22462,10 @@ type OrganizationSettingHistory implements Node { whether or not a payment method has been added to the account """ paymentMethodAdded: Boolean! + """ + when will this organization be deleted? usually this is after org has not added a payment method afte n period + """ + pendingDeletionAt: DateTime } """ A connection to a list of items. @@ -22961,6 +22965,24 @@ input OrganizationSettingHistoryWhereInput { complianceWebhookTokenNotNil: Boolean complianceWebhookTokenEqualFold: String complianceWebhookTokenContainsFold: String + """ + payment_method_added field predicates + """ + paymentMethodAdded: Boolean + paymentMethodAddedNEQ: Boolean + """ + pending_deletion_at field predicates + """ + pendingDeletionAt: DateTime + pendingDeletionAtNEQ: DateTime + pendingDeletionAtIn: [DateTime!] + pendingDeletionAtNotIn: [DateTime!] + pendingDeletionAtGT: DateTime + pendingDeletionAtGTE: DateTime + pendingDeletionAtLT: DateTime + pendingDeletionAtLTE: DateTime + pendingDeletionAtIsNil: Boolean + pendingDeletionAtNotNil: Boolean } """ Information about pagination in a connection. diff --git a/internal/graphapi/organization.resolvers.go b/internal/graphapi/organization.resolvers.go index e38f22c235..b7dd714b22 100644 --- a/internal/graphapi/organization.resolvers.go +++ b/internal/graphapi/organization.resolvers.go @@ -74,7 +74,7 @@ func (r *mutationResolver) UpdateOrganization(ctx context.Context, id string, in // DeleteOrganization is the resolver for the deleteOrganization field. func (r *mutationResolver) DeleteOrganization(ctx context.Context, id string) (*model.OrganizationDeletePayload, error) { - if auth.GetAuthTypeFromContext(ctx) != auth.JWTAuthentication { + if auth.GetAuthTypeFromContext(ctx) != auth.JWTAuthentication && !auth.IsSystemAdminFromContext(ctx) { logx.FromContext(ctx).Info().Msg("organization attempted to be deleted with non-JWT auth type") return nil, common.ErrResourceNotAccessibleWithToken @@ -86,12 +86,6 @@ func (r *mutationResolver) DeleteOrganization(ctx context.Context, id string) (* return nil, parseRequestError(ctx, err, common.Action{Action: common.ActionDelete, Object: "organization"}) } - if err := generated.OrganizationEdgeCleanup(ctx, id); err != nil { - logx.FromContext(ctx).Error().Str("organization_id", id).Err(err).Msg("failed to cascade delete organization edges") - - return nil, common.NewCascadeDeleteError(ctx, err) - } - return &model.OrganizationDeletePayload{ DeletedID: id, }, nil diff --git a/internal/graphapi/organization_test.go b/internal/graphapi/organization_test.go index 79b0d82481..1040d54ec8 100644 --- a/internal/graphapi/organization_test.go +++ b/internal/graphapi/organization_test.go @@ -4,6 +4,7 @@ import ( "context" "strings" "testing" + "time" "github.com/99designs/gqlgen/graphql" "github.com/brianvoe/gofakeit/v7" @@ -25,6 +26,21 @@ import ( "github.com/theopenlane/core/internal/graphapi/testclient" ) +func waitForCondition(t *testing.T, condition func() bool, msg string) { + t.Helper() + + deadline := time.Now().Add(5 * time.Second) + for time.Now().Before(deadline) { + if condition() { + return + } + + time.Sleep(100 * time.Millisecond) + } + + t.Fatalf("timed out waiting for condition: %s", msg) +} + func TestQueryOrganization(t *testing.T) { // create another user for this test // so it doesn't interfere with the other tests @@ -939,6 +955,8 @@ func TestMutationDeleteOrganization(t *testing.T) { } func TestMutationOrganizationCascadeDelete(t *testing.T) { + suite.enableGalaForTestSuite(t) + // create another user for this test // so it doesn't interfere with the other tests orgUser := suite.userBuilder(context.Background(), t) @@ -965,28 +983,22 @@ func TestMutationOrganizationCascadeDelete(t *testing.T) { assert.ErrorContains(t, err, notFoundErrorMsg) - _, err = suite.client.api.GetOrganizationByID(reqCtx, childOrg.ID) + waitForCondition(t, func() bool { + _, err := suite.client.api.GetOrganizationByID(reqCtx, childOrg.ID) + return err != nil && strings.Contains(err.Error(), notFoundErrorMsg) + }, "child org should be deleted by async edge cleanup") - assert.ErrorContains(t, err, notFoundErrorMsg) + waitForCondition(t, func() bool { + _, err := suite.client.api.GetGroupByID(reqCtx, group1.ID) + return err != nil && strings.Contains(err.Error(), notFoundErrorMsg) + }, "group should be deleted by async edge cleanup") - _, err = suite.client.api.GetGroupByID(reqCtx, group1.ID) - assert.ErrorContains(t, err, notFoundErrorMsg) - - // allow after tuples have been deleted + // verify the parent org is soft-deleted (not hard-deleted) by querying the db directly ctx := privacy.DecisionContext(reqCtx, privacy.Allow) ctx = entx.SkipSoftDelete(ctx) - o, err := suite.client.api.GetOrganizationByID(ctx, org.ID) - - assert.NilError(t, err) - assert.Equal(t, o.Organization.ID, org.ID) - - // allow after tuples have been deleted - ctx = privacy.DecisionContext(ctx, privacy.Allow) - ctx = entx.SkipSoftDelete(ctx) - - co, err := suite.client.api.GetOrganizationByID(ctx, childOrg.ID) + o, err := suite.client.db.Organization.Get(ctx, org.ID) assert.NilError(t, err) - - assert.Equal(t, co.Organization.ID, childOrg.ID) + assert.Equal(t, o.ID, org.ID) + assert.Assert(t, !o.DeletedAt.IsZero()) } diff --git a/internal/graphapi/query/organization.graphql b/internal/graphapi/query/organization.graphql index d0e9bfb2f0..cc01a4c457 100644 --- a/internal/graphapi/query/organization.graphql +++ b/internal/graphapi/query/organization.graphql @@ -149,6 +149,8 @@ query GetAllOrganizations { taxIdentifier geoLocation tags + paymentMethodAdded + pendingDeletionAt } orgSubscriptions { stripeSubscriptionStatus diff --git a/internal/graphapi/query/organizationsetting.graphql b/internal/graphapi/query/organizationsetting.graphql index a9fad8c26a..af472f062c 100644 --- a/internal/graphapi/query/organizationsetting.graphql +++ b/internal/graphapi/query/organizationsetting.graphql @@ -59,6 +59,7 @@ query GetOrganizationSettingByID ($organizationSettingId: ID!) { oidcDiscoveryEndpoint organizationID paymentMethodAdded + pendingDeletionAt samlCert samlIssuer samlSigninURL @@ -134,6 +135,7 @@ mutation UpdateOrganizationSetting ($updateOrganizationSettingId: ID!, $input: U oidcDiscoveryEndpoint organizationID paymentMethodAdded + pendingDeletionAt samlCert samlIssuer samlSigninURL diff --git a/internal/graphapi/schema/ent.graphql b/internal/graphapi/schema/ent.graphql index 05c7512b22..2f5e5f6116 100644 --- a/internal/graphapi/schema/ent.graphql +++ b/internal/graphapi/schema/ent.graphql @@ -45817,6 +45817,10 @@ type OrganizationSetting implements Node { whether or not a payment method has been added to the account """ paymentMethodAdded: Boolean! + """ + when will this organization be deleted? usually this is after org has not added a payment method afte n period + """ + pendingDeletionAt: DateTime organization: Organization files( """ @@ -46304,6 +46308,24 @@ input OrganizationSettingWhereInput { complianceWebhookTokenEqualFold: String complianceWebhookTokenContainsFold: String """ + payment_method_added field predicates + """ + paymentMethodAdded: Boolean + paymentMethodAddedNEQ: Boolean + """ + pending_deletion_at field predicates + """ + pendingDeletionAt: DateTime + pendingDeletionAtNEQ: DateTime + pendingDeletionAtIn: [DateTime!] + pendingDeletionAtNotIn: [DateTime!] + pendingDeletionAtGT: DateTime + pendingDeletionAtGTE: DateTime + pendingDeletionAtLT: DateTime + pendingDeletionAtLTE: DateTime + pendingDeletionAtIsNil: Boolean + pendingDeletionAtNotNil: Boolean + """ organization edge predicates """ hasOrganization: Boolean @@ -76386,6 +76408,11 @@ input UpdateOrganizationSettingInput { """ complianceWebhookToken: String clearComplianceWebhookToken: Boolean + """ + when will this organization be deleted? usually this is after org has not added a payment method afte n period + """ + pendingDeletionAt: DateTime + clearPendingDeletionAt: Boolean organizationID: ID clearOrganization: Boolean addFileIDs: [ID!] diff --git a/internal/graphapi/schemahistory/ent.graphql b/internal/graphapi/schemahistory/ent.graphql index 61228edf7c..029983e7b5 100644 --- a/internal/graphapi/schemahistory/ent.graphql +++ b/internal/graphapi/schemahistory/ent.graphql @@ -22368,6 +22368,10 @@ type OrganizationSettingHistory implements Node { whether or not a payment method has been added to the account """ paymentMethodAdded: Boolean! + """ + when will this organization be deleted? usually this is after org has not added a payment method afte n period + """ + pendingDeletionAt: DateTime } """ A connection to a list of items. @@ -22867,6 +22871,24 @@ input OrganizationSettingHistoryWhereInput { complianceWebhookTokenNotNil: Boolean complianceWebhookTokenEqualFold: String complianceWebhookTokenContainsFold: String + """ + payment_method_added field predicates + """ + paymentMethodAdded: Boolean + paymentMethodAddedNEQ: Boolean + """ + pending_deletion_at field predicates + """ + pendingDeletionAt: DateTime + pendingDeletionAtNEQ: DateTime + pendingDeletionAtIn: [DateTime!] + pendingDeletionAtNotIn: [DateTime!] + pendingDeletionAtGT: DateTime + pendingDeletionAtGTE: DateTime + pendingDeletionAtLT: DateTime + pendingDeletionAtLTE: DateTime + pendingDeletionAtIsNil: Boolean + pendingDeletionAtNotNil: Boolean } """ Information about pagination in a connection. diff --git a/internal/graphapi/testclient/checksum/.client_checksum b/internal/graphapi/testclient/checksum/.client_checksum index 7876a16261..051f129d98 100644 --- a/internal/graphapi/testclient/checksum/.client_checksum +++ b/internal/graphapi/testclient/checksum/.client_checksum @@ -1 +1 @@ -5220d33ee0d466f36e0033c0645d2d72608e0aa2505455071af32e1701e19c47 \ No newline at end of file +579f0fc1090104e3d7dbb99fb7ab53c18ecb5cfb25fb0cc540171aca4db7b420 \ No newline at end of file diff --git a/internal/graphapi/testclient/graphclient.go b/internal/graphapi/testclient/graphclient.go index 5f82059265..d3b2042c14 100644 --- a/internal/graphapi/testclient/graphclient.go +++ b/internal/graphapi/testclient/graphclient.go @@ -78913,21 +78913,23 @@ func (t *GetAllOrganizations_Organizations_Edges_Node_Members) GetTotalCount() i } type GetAllOrganizations_Organizations_Edges_Node_Setting struct { - AllowMatchingDomainsAutojoin *bool "json:\"allowMatchingDomainsAutojoin,omitempty\" graphql:\"allowMatchingDomainsAutojoin\"" - AllowedEmailDomains []string "json:\"allowedEmailDomains,omitempty\" graphql:\"allowedEmailDomains\"" - BillingAddress *models.Address "json:\"billingAddress,omitempty\" graphql:\"billingAddress\"" - BillingContact *string "json:\"billingContact,omitempty\" graphql:\"billingContact\"" - BillingEmail *string "json:\"billingEmail,omitempty\" graphql:\"billingEmail\"" - BillingPhone *string "json:\"billingPhone,omitempty\" graphql:\"billingPhone\"" - CreatedAt *time.Time "json:\"createdAt,omitempty\" graphql:\"createdAt\"" - CreatedBy *string "json:\"createdBy,omitempty\" graphql:\"createdBy\"" - Domains []string "json:\"domains,omitempty\" graphql:\"domains\"" - GeoLocation *enums.Region "json:\"geoLocation,omitempty\" graphql:\"geoLocation\"" - ID string "json:\"id\" graphql:\"id\"" - Tags []string "json:\"tags,omitempty\" graphql:\"tags\"" - TaxIdentifier *string "json:\"taxIdentifier,omitempty\" graphql:\"taxIdentifier\"" - UpdatedAt *time.Time "json:\"updatedAt,omitempty\" graphql:\"updatedAt\"" - UpdatedBy *string "json:\"updatedBy,omitempty\" graphql:\"updatedBy\"" + AllowMatchingDomainsAutojoin *bool "json:\"allowMatchingDomainsAutojoin,omitempty\" graphql:\"allowMatchingDomainsAutojoin\"" + AllowedEmailDomains []string "json:\"allowedEmailDomains,omitempty\" graphql:\"allowedEmailDomains\"" + BillingAddress *models.Address "json:\"billingAddress,omitempty\" graphql:\"billingAddress\"" + BillingContact *string "json:\"billingContact,omitempty\" graphql:\"billingContact\"" + BillingEmail *string "json:\"billingEmail,omitempty\" graphql:\"billingEmail\"" + BillingPhone *string "json:\"billingPhone,omitempty\" graphql:\"billingPhone\"" + CreatedAt *time.Time "json:\"createdAt,omitempty\" graphql:\"createdAt\"" + CreatedBy *string "json:\"createdBy,omitempty\" graphql:\"createdBy\"" + Domains []string "json:\"domains,omitempty\" graphql:\"domains\"" + GeoLocation *enums.Region "json:\"geoLocation,omitempty\" graphql:\"geoLocation\"" + ID string "json:\"id\" graphql:\"id\"" + PaymentMethodAdded bool "json:\"paymentMethodAdded\" graphql:\"paymentMethodAdded\"" + PendingDeletionAt *models.DateTime "json:\"pendingDeletionAt,omitempty\" graphql:\"pendingDeletionAt\"" + Tags []string "json:\"tags,omitempty\" graphql:\"tags\"" + TaxIdentifier *string "json:\"taxIdentifier,omitempty\" graphql:\"taxIdentifier\"" + UpdatedAt *time.Time "json:\"updatedAt,omitempty\" graphql:\"updatedAt\"" + UpdatedBy *string "json:\"updatedBy,omitempty\" graphql:\"updatedBy\"" } func (t *GetAllOrganizations_Organizations_Edges_Node_Setting) GetAllowMatchingDomainsAutojoin() *bool { @@ -78996,6 +78998,18 @@ func (t *GetAllOrganizations_Organizations_Edges_Node_Setting) GetID() string { } return t.ID } +func (t *GetAllOrganizations_Organizations_Edges_Node_Setting) GetPaymentMethodAdded() bool { + if t == nil { + t = &GetAllOrganizations_Organizations_Edges_Node_Setting{} + } + return t.PaymentMethodAdded +} +func (t *GetAllOrganizations_Organizations_Edges_Node_Setting) GetPendingDeletionAt() *models.DateTime { + if t == nil { + t = &GetAllOrganizations_Organizations_Edges_Node_Setting{} + } + return t.PendingDeletionAt +} func (t *GetAllOrganizations_Organizations_Edges_Node_Setting) GetTags() []string { if t == nil { t = &GetAllOrganizations_Organizations_Edges_Node_Setting{} @@ -81223,6 +81237,7 @@ type GetOrganizationSettingByID_OrganizationSetting struct { Organization *GetOrganizationSettingByID_OrganizationSetting_Organization "json:\"organization,omitempty\" graphql:\"organization\"" OrganizationID *string "json:\"organizationID,omitempty\" graphql:\"organizationID\"" PaymentMethodAdded bool "json:\"paymentMethodAdded\" graphql:\"paymentMethodAdded\"" + PendingDeletionAt *models.DateTime "json:\"pendingDeletionAt,omitempty\" graphql:\"pendingDeletionAt\"" SamlCert *string "json:\"samlCert,omitempty\" graphql:\"samlCert\"" SamlIssuer *string "json:\"samlIssuer,omitempty\" graphql:\"samlIssuer\"" SamlSigninURL *string "json:\"samlSigninURL,omitempty\" graphql:\"samlSigninURL\"" @@ -81382,6 +81397,12 @@ func (t *GetOrganizationSettingByID_OrganizationSetting) GetPaymentMethodAdded() } return t.PaymentMethodAdded } +func (t *GetOrganizationSettingByID_OrganizationSetting) GetPendingDeletionAt() *models.DateTime { + if t == nil { + t = &GetOrganizationSettingByID_OrganizationSetting{} + } + return t.PendingDeletionAt +} func (t *GetOrganizationSettingByID_OrganizationSetting) GetSamlCert() *string { if t == nil { t = &GetOrganizationSettingByID_OrganizationSetting{} @@ -81681,6 +81702,7 @@ type UpdateOrganizationSetting_UpdateOrganizationSetting_OrganizationSetting str Organization *UpdateOrganizationSetting_UpdateOrganizationSetting_OrganizationSetting_Organization "json:\"organization,omitempty\" graphql:\"organization\"" OrganizationID *string "json:\"organizationID,omitempty\" graphql:\"organizationID\"" PaymentMethodAdded bool "json:\"paymentMethodAdded\" graphql:\"paymentMethodAdded\"" + PendingDeletionAt *models.DateTime "json:\"pendingDeletionAt,omitempty\" graphql:\"pendingDeletionAt\"" SamlCert *string "json:\"samlCert,omitempty\" graphql:\"samlCert\"" SamlIssuer *string "json:\"samlIssuer,omitempty\" graphql:\"samlIssuer\"" SamlSigninURL *string "json:\"samlSigninURL,omitempty\" graphql:\"samlSigninURL\"" @@ -81840,6 +81862,12 @@ func (t *UpdateOrganizationSetting_UpdateOrganizationSetting_OrganizationSetting } return t.PaymentMethodAdded } +func (t *UpdateOrganizationSetting_UpdateOrganizationSetting_OrganizationSetting) GetPendingDeletionAt() *models.DateTime { + if t == nil { + t = &UpdateOrganizationSetting_UpdateOrganizationSetting_OrganizationSetting{} + } + return t.PendingDeletionAt +} func (t *UpdateOrganizationSetting_UpdateOrganizationSetting_OrganizationSetting) GetSamlCert() *string { if t == nil { t = &UpdateOrganizationSetting_UpdateOrganizationSetting_OrganizationSetting{} @@ -184990,6 +185018,8 @@ const GetAllOrganizationsDocument = `query GetAllOrganizations { taxIdentifier geoLocation tags + paymentMethodAdded + pendingDeletionAt } orgSubscriptions { stripeSubscriptionStatus @@ -185474,6 +185504,7 @@ const GetOrganizationSettingByIDDocument = `query GetOrganizationSettingByID ($o oidcDiscoveryEndpoint organizationID paymentMethodAdded + pendingDeletionAt samlCert samlIssuer samlSigninURL @@ -185587,6 +185618,7 @@ const UpdateOrganizationSettingDocument = `mutation UpdateOrganizationSetting ($ oidcDiscoveryEndpoint organizationID paymentMethodAdded + pendingDeletionAt samlCert samlIssuer samlSigninURL diff --git a/internal/graphapi/testclient/models.go b/internal/graphapi/testclient/models.go index b6d0f65ba6..7befbd9eb1 100644 --- a/internal/graphapi/testclient/models.go +++ b/internal/graphapi/testclient/models.go @@ -25482,9 +25482,11 @@ type OrganizationSetting struct { // unique token used to receive compliance webhook events ComplianceWebhookToken *string `json:"complianceWebhookToken,omitempty"` // whether or not a payment method has been added to the account - PaymentMethodAdded bool `json:"paymentMethodAdded"` - Organization *Organization `json:"organization,omitempty"` - Files *FileConnection `json:"files"` + PaymentMethodAdded bool `json:"paymentMethodAdded"` + // when will this organization be deleted? usually this is after org has not added a payment method afte n period + PendingDeletionAt *models.DateTime `json:"pendingDeletionAt,omitempty"` + Organization *Organization `json:"organization,omitempty"` + Files *FileConnection `json:"files"` } func (OrganizationSetting) IsNode() {} @@ -25885,6 +25887,20 @@ type OrganizationSettingWhereInput struct { ComplianceWebhookTokenNotNil *bool `json:"complianceWebhookTokenNotNil,omitempty"` ComplianceWebhookTokenEqualFold *string `json:"complianceWebhookTokenEqualFold,omitempty"` ComplianceWebhookTokenContainsFold *string `json:"complianceWebhookTokenContainsFold,omitempty"` + // payment_method_added field predicates + PaymentMethodAdded *bool `json:"paymentMethodAdded,omitempty"` + PaymentMethodAddedNeq *bool `json:"paymentMethodAddedNEQ,omitempty"` + // pending_deletion_at field predicates + PendingDeletionAt *models.DateTime `json:"pendingDeletionAt,omitempty"` + PendingDeletionAtNeq *models.DateTime `json:"pendingDeletionAtNEQ,omitempty"` + PendingDeletionAtIn []*models.DateTime `json:"pendingDeletionAtIn,omitempty"` + PendingDeletionAtNotIn []*models.DateTime `json:"pendingDeletionAtNotIn,omitempty"` + PendingDeletionAtGt *models.DateTime `json:"pendingDeletionAtGT,omitempty"` + PendingDeletionAtGte *models.DateTime `json:"pendingDeletionAtGTE,omitempty"` + PendingDeletionAtLt *models.DateTime `json:"pendingDeletionAtLT,omitempty"` + PendingDeletionAtLte *models.DateTime `json:"pendingDeletionAtLTE,omitempty"` + PendingDeletionAtIsNil *bool `json:"pendingDeletionAtIsNil,omitempty"` + PendingDeletionAtNotNil *bool `json:"pendingDeletionAtNotNil,omitempty"` // organization edge predicates HasOrganization *bool `json:"hasOrganization,omitempty"` HasOrganizationWith []*OrganizationWhereInput `json:"hasOrganizationWith,omitempty"` @@ -42569,13 +42585,16 @@ type UpdateOrganizationSettingInput struct { MultifactorAuthEnforced *bool `json:"multifactorAuthEnforced,omitempty"` ClearMultifactorAuthEnforced *bool `json:"clearMultifactorAuthEnforced,omitempty"` // unique token used to receive compliance webhook events - ComplianceWebhookToken *string `json:"complianceWebhookToken,omitempty"` - ClearComplianceWebhookToken *bool `json:"clearComplianceWebhookToken,omitempty"` - OrganizationID *string `json:"organizationID,omitempty"` - ClearOrganization *bool `json:"clearOrganization,omitempty"` - AddFileIDs []string `json:"addFileIDs,omitempty"` - RemoveFileIDs []string `json:"removeFileIDs,omitempty"` - ClearFiles *bool `json:"clearFiles,omitempty"` + ComplianceWebhookToken *string `json:"complianceWebhookToken,omitempty"` + ClearComplianceWebhookToken *bool `json:"clearComplianceWebhookToken,omitempty"` + // when will this organization be deleted? usually this is after org has not added a payment method afte n period + PendingDeletionAt *models.DateTime `json:"pendingDeletionAt,omitempty"` + ClearPendingDeletionAt *bool `json:"clearPendingDeletionAt,omitempty"` + OrganizationID *string `json:"organizationID,omitempty"` + ClearOrganization *bool `json:"clearOrganization,omitempty"` + AddFileIDs []string `json:"addFileIDs,omitempty"` + RemoveFileIDs []string `json:"removeFileIDs,omitempty"` + ClearFiles *bool `json:"clearFiles,omitempty"` } // UpdatePersonalAccessTokenInput is used for update PersonalAccessToken object. diff --git a/internal/graphapi/tools_test.go b/internal/graphapi/tools_test.go index 7d9fdb4166..801c657723 100644 --- a/internal/graphapi/tools_test.go +++ b/internal/graphapi/tools_test.go @@ -4,6 +4,7 @@ import ( "context" "encoding/json" "flag" + "fmt" "net/http" "net/http/httptest" "os" @@ -17,6 +18,7 @@ import ( "github.com/mcuadros/go-defaults" "github.com/rs/zerolog" "github.com/rs/zerolog/log" + "github.com/samber/do/v2" "github.com/stretchr/testify/mock" "github.com/stretchr/testify/require" "github.com/stripe/stripe-go/v84" @@ -89,6 +91,7 @@ type GraphTestSuite struct { ofgaTF *fgatest.OpenFGATestFixture stripeMockBackend *mocks.MockStripeBackend cacheRefreshServer *httptest.Server + galaRuntime *gala.Gala } // client contains all the clients the test need to interact with @@ -256,6 +259,10 @@ func (suite *GraphTestSuite) SetupSuite(t *testing.T) { db, err := entdb.NewTestClient(ctx, suite.tf, jobOpts, nil, opts) requireNoError(t, err) + db.Use(hooks.EmitGalaEventHook(func() *gala.Gala { + return suite.galaRuntime + })) + c.objectStore, c.mockProvider, err = coreutils.MockStorageServiceWithValidationAndProvider(t, nil, validators.MimeTypeValidator) requireNoError(t, err) @@ -275,6 +282,14 @@ func (suite *GraphTestSuite) SetupSuite(t *testing.T) { } func (suite *GraphTestSuite) TearDownSuite(t *testing.T) { + if suite.galaRuntime != nil { + err := suite.galaRuntime.StopWorkers(context.Background()) + requireNoError(t, err) + + err = suite.galaRuntime.Close() + requireNoError(t, err) + } + // close the database connection err := suite.client.db.Close() requireNoError(t, err) @@ -292,6 +307,50 @@ func (suite *GraphTestSuite) TearDownSuite(t *testing.T) { } } +func (suite *GraphTestSuite) enableGalaForTestSuite(t *testing.T) { + t.Helper() + + if suite.galaRuntime != nil { + return + } + + runtime, err := gala.NewGala(context.Background(), gala.Config{ + Enabled: true, + ConnectionURI: suite.tf.URI, + QueueName: fmt.Sprintf("graphapi_test_%d", time.Now().UnixNano()), + WorkerCount: 1, + RunMigrations: true, + FetchCooldown: time.Millisecond, + FetchPollInterval: 10 * time.Millisecond, + }) + require.NoError(t, err) + + do.ProvideValue(runtime.Injector(), runtime) + do.ProvideValue(runtime.Injector(), suite.client.db) + + _, err = hooks.RegisterGalaEntitlementListeners(runtime.Registry()) + require.NoError(t, err) + + err = runtime.StartWorkers(context.Background()) + require.NoError(t, err) + + suite.galaRuntime = runtime + + t.Cleanup(func() { + if suite.galaRuntime == nil { + return + } + + err := suite.galaRuntime.StopWorkers(context.Background()) + require.NoError(t, err) + + err = suite.galaRuntime.Close() + require.NoError(t, err) + + suite.galaRuntime = nil + }) +} + // expectUpload sets up the mock object store to expect an upload and related operations func expectUpload(t *testing.T, mockProvider *mock_shared.MockProvider, expectedUploads []graphql.Upload) { assert.Assert(t, mockProvider != nil) diff --git a/internal/integrations/operations/ingest_generated.go b/internal/integrations/operations/ingest_generated.go index f203dc38fd..316b35a694 100644 --- a/internal/integrations/operations/ingest_generated.go +++ b/internal/integrations/operations/ingest_generated.go @@ -4,6 +4,7 @@ package operations import ( "context" "encoding/json" + "strings" "github.com/samber/do/v2" "github.com/samber/lo" @@ -11,6 +12,7 @@ import ( ent "github.com/theopenlane/core/internal/ent/generated" "github.com/theopenlane/core/internal/ent/integrationgenerated" "github.com/theopenlane/core/pkg/gala" + "github.com/theopenlane/core/pkg/logx" "github.com/theopenlane/utils/contextx" ) @@ -239,6 +241,8 @@ func emitTyped[TInput any, TEvent any]( ) error { var input TInput if err := json.Unmarshal(payload, &input); err != nil { + logx.FromContext(ctx).Error().Str("topic", string(topic.Name)).Str("integration", integration.Family).Err(err).Msg("integrations: error emitting type") + return ErrIngestMappedDocumentInvalid } @@ -260,6 +264,8 @@ func persistTyped[TInput any]( ) error { var input TInput if err := json.Unmarshal(payload, &input); err != nil { + logx.FromContext(ctx).Error().Err(err).Msg("integrations: error persisting type") + return ErrIngestMappedDocumentInvalid } @@ -350,7 +356,7 @@ func buildIngestMetadata(integration *ent.Integration, operationName string, rec // buildIngestHeaders assembles Gala message headers for one ingest record func buildIngestHeaders(record mappedIngestRecord, metadata integrationgenerated.IntegrationIngestMetadata) gala.Headers { - tags := []string{record.Schema} + tags := []string{metadata.DefinitionID, "schema_" + strings.ToLower(record.Schema)} if metadata.Source != "" { tags = append(tags, string(metadata.Source)) } diff --git a/internal/integrations/operations/ingest_generated_test.go b/internal/integrations/operations/ingest_generated_test.go index a09bf7327e..a1514f49db 100644 --- a/internal/integrations/operations/ingest_generated_test.go +++ b/internal/integrations/operations/ingest_generated_test.go @@ -182,8 +182,17 @@ func TestBuildIngestHeaders(t *testing.T) { if _, ok := headers.Properties["delivery_id"]; ok { t.Fatal("expected delivery_id to be omitted when empty") } - if len(headers.Tags) != 2 { - t.Fatalf("expected 2 tags, got %d", len(headers.Tags)) + if len(headers.Tags) != 3 { + t.Fatalf("expected 3 tags, got %d: %v", len(headers.Tags), headers.Tags) + } + if headers.Tags[0] != "def-001" { + t.Fatalf("expected first tag %q, got %q", "def-001", headers.Tags[0]) + } + if headers.Tags[1] != "schema_finding" { + t.Fatalf("expected second tag %q, got %q", "schema_finding", headers.Tags[1]) + } + if headers.Tags[2] != string(integrationgenerated.IntegrationIngestSourceWebhook) { + t.Fatalf("expected third tag %q, got %q", string(integrationgenerated.IntegrationIngestSourceWebhook), headers.Tags[2]) } }) @@ -195,11 +204,14 @@ func TestBuildIngestHeaders(t *testing.T) { headers := buildIngestHeaders(record, metadata) - if len(headers.Tags) != 1 { - t.Fatalf("expected 1 tag, got %d: %v", len(headers.Tags), headers.Tags) + if len(headers.Tags) != 2 { + t.Fatalf("expected 2 tags, got %d: %v", len(headers.Tags), headers.Tags) + } + if headers.Tags[0] != "" { + t.Fatalf("expected first tag to be empty definition id, got %q", headers.Tags[0]) } - if headers.Tags[0] != "asset" { - t.Fatalf("expected tag %q, got %q", "asset", headers.Tags[0]) + if headers.Tags[1] != "schema_asset" { + t.Fatalf("expected second tag %q, got %q", "schema_asset", headers.Tags[1]) } }) }