From ad561427989731719fd74930f8061584b1b902c9 Mon Sep 17 00:00:00 2001 From: Sacha Al Himdani Date: Fri, 29 Aug 2025 16:03:33 +0200 Subject: [PATCH] Use datum filter everywhere Signed-off-by: Sacha Al Himdani --- .../graph/__generated__/DatumGraphListQuery.graphql.ts | 3 +-- apps/console/src/pages/organizations/data/DataPage.tsx | 2 +- .../src/pages/organizations/data/DatumDetailsPage.tsx | 6 +++++- .../data/__generated__/DataListQuery.graphql.ts | 5 ++--- .../data/__generated__/DataPageFragment.graphql.ts | 9 ++------- pkg/coredata/datum.go | 5 ++++- pkg/probo/datum_service.go | 3 ++- pkg/server/api/console/v1/types/datum.go | 3 +++ pkg/server/api/console/v1/v1_resolver.go | 9 +++++++-- 9 files changed, 27 insertions(+), 18 deletions(-) diff --git a/apps/console/src/hooks/graph/__generated__/DatumGraphListQuery.graphql.ts b/apps/console/src/hooks/graph/__generated__/DatumGraphListQuery.graphql.ts index c688c1ee9..8085074c2 100644 --- a/apps/console/src/hooks/graph/__generated__/DatumGraphListQuery.graphql.ts +++ b/apps/console/src/hooks/graph/__generated__/DatumGraphListQuery.graphql.ts @@ -1,5 +1,5 @@ /** - * @generated SignedSource<<453e3cd4a7a9fdbacd183d097ec95a05>> + * @generated SignedSource<<7e67f2a3d41fbea46b7b8447595302a5>> * @lightSyntaxTransform * @nogrep */ @@ -316,7 +316,6 @@ return { "alias": null, "args": (v5/*: any*/), "filters": [ - "orderBy", "filter" ], "handle": "connection", diff --git a/apps/console/src/pages/organizations/data/DataPage.tsx b/apps/console/src/pages/organizations/data/DataPage.tsx index 26d4425a1..4dc6329bc 100644 --- a/apps/console/src/pages/organizations/data/DataPage.tsx +++ b/apps/console/src/pages/organizations/data/DataPage.tsx @@ -54,7 +54,7 @@ const paginatedDataFragment = graphql` before: $before orderBy: $order filter: { snapshotId: $snapshotId } - ) @connection(key: "DataPage_data") { + ) @connection(key: "DataPage_data", filters: ["filter"]) { __id edges { node { diff --git a/apps/console/src/pages/organizations/data/DatumDetailsPage.tsx b/apps/console/src/pages/organizations/data/DatumDetailsPage.tsx index 0e8428d03..caddc7ec0 100644 --- a/apps/console/src/pages/organizations/data/DatumDetailsPage.tsx +++ b/apps/console/src/pages/organizations/data/DatumDetailsPage.tsx @@ -59,7 +59,11 @@ export default function DatumDetailsPage(props: Props) { const deleteDatum = useDeleteDatum( datumEntry, - ConnectionHandler.getConnectionID(organizationId, "DataPage_data"), + ConnectionHandler.getConnectionID( + organizationId, + "DataPage_data", + { filter: { snapshotId: snapshotId || null } } + ), ); const vendors = datumEntry?.vendors?.edges.map(edge => edge.node) ?? []; diff --git a/apps/console/src/pages/organizations/data/__generated__/DataListQuery.graphql.ts b/apps/console/src/pages/organizations/data/__generated__/DataListQuery.graphql.ts index 552ad6c15..4e9ed4661 100644 --- a/apps/console/src/pages/organizations/data/__generated__/DataListQuery.graphql.ts +++ b/apps/console/src/pages/organizations/data/__generated__/DataListQuery.graphql.ts @@ -1,5 +1,5 @@ /** - * @generated SignedSource<<8364d9457b59a3ef50b508ab55991638>> + * @generated SignedSource<<2000fd2ccfcf4b832c51ff71b0326fef>> * @lightSyntaxTransform * @nogrep */ @@ -394,7 +394,6 @@ return { "alias": null, "args": (v15/*: any*/), "filters": [ - "orderBy", "filter" ], "handle": "connection", @@ -422,6 +421,6 @@ return { }; })(); -(node as any).hash = "a60d9b34a83df89eb59ffcd359903ce8"; +(node as any).hash = "5d3069a0d856613ccb854033b5b1f14e"; export default node; diff --git a/apps/console/src/pages/organizations/data/__generated__/DataPageFragment.graphql.ts b/apps/console/src/pages/organizations/data/__generated__/DataPageFragment.graphql.ts index d9f5a6dd6..1f5c8f857 100644 --- a/apps/console/src/pages/organizations/data/__generated__/DataPageFragment.graphql.ts +++ b/apps/console/src/pages/organizations/data/__generated__/DataPageFragment.graphql.ts @@ -1,5 +1,5 @@ /** - * @generated SignedSource<<17f6d8607b6d2a1b575e1251019b8375>> + * @generated SignedSource<<9619ee8f74aea67be931f8c40a8815c8>> * @lightSyntaxTransform * @nogrep */ @@ -143,11 +143,6 @@ return { ], "kind": "ObjectValue", "name": "filter" - }, - { - "kind": "Variable", - "name": "orderBy", - "variableName": "order" } ], "concreteType": "DatumConnection", @@ -334,6 +329,6 @@ return { }; })(); -(node as any).hash = "a60d9b34a83df89eb59ffcd359903ce8"; +(node as any).hash = "5d3069a0d856613ccb854033b5b1f14e"; export default node; diff --git a/pkg/coredata/datum.go b/pkg/coredata/datum.go index 958111ade..c45449830 100644 --- a/pkg/coredata/datum.go +++ b/pkg/coredata/datum.go @@ -153,6 +153,7 @@ func (d *Data) CountByOrganizationID( conn pg.Conn, scope Scoper, organizationID gid.GID, + filter *DatumFilter, ) (int, error) { q := ` SELECT @@ -162,12 +163,14 @@ FROM WHERE %s AND organization_id = @organization_id + AND %s ` - q = fmt.Sprintf(q, scope.SQLFragment()) + q = fmt.Sprintf(q, scope.SQLFragment(), filter.SQLFragment()) args := pgx.StrictNamedArgs{"organization_id": organizationID} maps.Copy(args, scope.SQLArguments()) + maps.Copy(args, filter.SQLArguments()) row := conn.QueryRow(ctx, q, args) diff --git a/pkg/probo/datum_service.go b/pkg/probo/datum_service.go index e37d0f3c3..48cb764b6 100644 --- a/pkg/probo/datum_service.go +++ b/pkg/probo/datum_service.go @@ -88,6 +88,7 @@ func (s DatumService) GetByOwnerID( func (s DatumService) CountForOrganizationID( ctx context.Context, organizationID gid.GID, + filter *coredata.DatumFilter, ) (int, error) { var count int @@ -95,7 +96,7 @@ func (s DatumService) CountForOrganizationID( ctx, func(conn pg.Conn) (err error) { data := coredata.Data{} - count, err = data.CountByOrganizationID(ctx, conn, s.svc.scope, organizationID) + count, err = data.CountByOrganizationID(ctx, conn, s.svc.scope, organizationID, filter) if err != nil { return fmt.Errorf("cannot count data: %w", err) } diff --git a/pkg/server/api/console/v1/types/datum.go b/pkg/server/api/console/v1/types/datum.go index ca5c90c42..95331ba1e 100644 --- a/pkg/server/api/console/v1/types/datum.go +++ b/pkg/server/api/console/v1/types/datum.go @@ -30,6 +30,7 @@ type ( Resolver any ParentID gid.GID + Filter *DatumFilter } ) @@ -37,6 +38,7 @@ func NewDataConnection( p *page.Page[*coredata.Datum, coredata.DatumOrderField], parentType any, parentID gid.GID, + filter *DatumFilter, ) *DatumConnection { edges := make([]*DatumEdge, len(p.Data)) for i, datum := range p.Data { @@ -49,6 +51,7 @@ func NewDataConnection( Resolver: parentType, ParentID: parentID, + Filter: filter, } } diff --git a/pkg/server/api/console/v1/v1_resolver.go b/pkg/server/api/console/v1/v1_resolver.go index 43fedf7a1..20510ef01 100644 --- a/pkg/server/api/console/v1/v1_resolver.go +++ b/pkg/server/api/console/v1/v1_resolver.go @@ -558,7 +558,12 @@ func (r *datumConnectionResolver) TotalCount(ctx context.Context, obj *types.Dat switch obj.Resolver.(type) { case *organizationResolver: - count, err := prb.Data.CountForOrganizationID(ctx, obj.ParentID) + datumFilter := coredata.NewDatumFilter(nil) + if obj.Filter != nil { + datumFilter = coredata.NewDatumFilter(&obj.Filter.SnapshotID) + } + + count, err := prb.Data.CountForOrganizationID(ctx, obj.ParentID, datumFilter) if err != nil { return 0, fmt.Errorf("cannot count data: %w", err) } @@ -3672,7 +3677,7 @@ func (r *organizationResolver) Data(ctx context.Context, obj *types.Organization panic(fmt.Errorf("cannot list organization data: %w", err)) } - return types.NewDataConnection(page, r, obj.ID), nil + return types.NewDataConnection(page, r, obj.ID, filter), nil } // Audits is the resolver for the audits field.