Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(flags): Set up initial backend for feature management #26628

Open
wants to merge 61 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
61 commits
Select commit Hold shift + click to select a range
0846ff6
feat(flags): Set up initial UI-reorganization for feature management
havenbarnes Nov 22, 2024
b345652
tweak
havenbarnes Nov 22, 2024
0e42571
properly handle New Feature / New Flag -> Cancel navigation
havenbarnes Nov 23, 2024
7bd1ee1
Merge branch 'master' of https://github.com/PostHog/posthog into feat…
havenbarnes Nov 23, 2024
32a11e2
handle breadcrumbs properly based on ff
havenbarnes Nov 23, 2024
3c45f0e
Merge branch 'master' of https://github.com/PostHog/posthog into feat…
havenbarnes Nov 25, 2024
e2300bc
Merge branch 'master' into feature-management-ui-setup
havenbarnes Nov 25, 2024
0a2294a
Merge branch 'master' of https://github.com/PostHog/posthog into feat…
havenbarnes Nov 26, 2024
b2c36b8
cleanup
havenbarnes Nov 26, 2024
745bad1
tweak
havenbarnes Nov 26, 2024
b20b91c
Merge branch 'feature-management-ui-setup' of https://github.com/Post…
havenbarnes Nov 26, 2024
dbba27e
tweak
havenbarnes Nov 26, 2024
4419ec0
tweak
havenbarnes Nov 26, 2024
c07d6d4
Merge branch 'master' of https://github.com/PostHog/posthog into feat…
havenbarnes Dec 2, 2024
e98fc0d
Re-worked with master-detail pattern
havenbarnes Dec 3, 2024
3d35964
tweak
havenbarnes Dec 3, 2024
75181d7
Merge branch 'master' of https://github.com/PostHog/posthog into feat…
havenbarnes Dec 3, 2024
0bef6a7
tweak
havenbarnes Dec 3, 2024
00a837b
stash
havenbarnes Dec 3, 2024
8f1e249
Merge branch 'master' of https://github.com/PostHog/posthog into feat…
havenbarnes Dec 3, 2024
19719f4
stash
havenbarnes Dec 3, 2024
38a761f
Merge branch 'master' of https://github.com/PostHog/posthog into feat…
havenbarnes Dec 3, 2024
9008eb5
Initial endpoints, still needs tests and FE integration
havenbarnes Dec 4, 2024
31fa157
Merge branch 'master' of https://github.com/PostHog/posthog into feat…
havenbarnes Dec 4, 2024
c0d5fdf
Merge branch 'feature-management-ui-setup' of https://github.com/Post…
havenbarnes Dec 4, 2024
199b552
Add tests for feature viewset
havenbarnes Dec 4, 2024
00b3f8b
tweak
havenbarnes Dec 4, 2024
a51dd17
Update query snapshots
github-actions[bot] Dec 4, 2024
38a52c9
tweak
havenbarnes Dec 4, 2024
8902068
Update query snapshots
github-actions[bot] Dec 4, 2024
5c077e8
Merge branch 'feature-management-backend-setup' of https://github.com…
havenbarnes Dec 4, 2024
f70dfb8
Update query snapshots
github-actions[bot] Dec 4, 2024
a3a7a3c
Update query snapshots
github-actions[bot] Dec 4, 2024
6c3e7f8
address comment
havenbarnes Dec 5, 2024
050d44f
Merge branch 'feature-management-backend-setup' of https://github.com…
havenbarnes Dec 5, 2024
aad2381
Merge branch 'master' of https://github.com/PostHog/posthog into feat…
havenbarnes Dec 5, 2024
d1985e5
Merge branch 'feature-management-ui-setup' of https://github.com/Post…
havenbarnes Dec 5, 2024
ca7ead8
Merge branch 'master' of https://github.com/PostHog/posthog into feat…
havenbarnes Dec 6, 2024
fe74f58
Merge branch 'master' of https://github.com/PostHog/posthog into feat…
havenbarnes Dec 9, 2024
3cd9fc5
Merge branch 'master' of https://github.com/PostHog/posthog into feat…
havenbarnes Dec 9, 2024
a32bb35
tweak
havenbarnes Dec 9, 2024
3cb58ee
adjust feature management schema / migration
havenbarnes Dec 9, 2024
4c9e59e
Merge branch 'master' of https://github.com/PostHog/posthog into feat…
havenbarnes Dec 9, 2024
2ed5491
rm unnecessary diffs
havenbarnes Dec 9, 2024
36b654d
rm unnecessary diffs
havenbarnes Dec 9, 2024
9887ea4
rm unnecessary diffs
havenbarnes Dec 9, 2024
6ec3092
Update query snapshots
github-actions[bot] Dec 9, 2024
4e4ce63
Update query snapshots
github-actions[bot] Dec 9, 2024
3e0f000
Merge branch 'master' of https://github.com/PostHog/posthog into feat…
havenbarnes Dec 9, 2024
18a45ff
Merge branch 'feature-management-backend-setup' of https://github.com…
havenbarnes Dec 9, 2024
4adbf16
rm unnecessary diffs
havenbarnes Dec 9, 2024
c7fdde6
Update query snapshots
github-actions[bot] Dec 9, 2024
6a5bf26
Update query snapshots
github-actions[bot] Dec 9, 2024
6ca7b96
tweak
havenbarnes Dec 9, 2024
3db21f0
Merge branch 'feature-management-backend-setup' of https://github.com…
havenbarnes Dec 9, 2024
49d23d8
tweak
havenbarnes Dec 9, 2024
a1141c2
fix typecheck and tests
havenbarnes Dec 9, 2024
084a4f7
Merge branch 'master' into feature-management-backend-setup
havenbarnes Dec 10, 2024
cace516
fix typecheck and tests
havenbarnes Dec 10, 2024
0f7deeb
Merge branch 'feature-management-backend-setup' of https://github.com…
havenbarnes Dec 10, 2024
701eed7
Update query snapshots
github-actions[bot] Dec 10, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions posthog/api/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
error_tracking,
event_definition,
exports,
feature,
feature_flag,
hog_function,
hog_function_template,
Expand Down Expand Up @@ -159,6 +160,12 @@ def register_grandfathered_environment_nested_viewset(
"project_activity_log",
["project_id"],
)
projects_router.register(
r"features",
feature.FeatureViewSet,
"project_feature_management",
["project_id"],
)
project_feature_flags_router = projects_router.register(
r"feature_flags",
feature_flag.FeatureFlagViewSet,
Expand Down
9 changes: 1 addition & 8 deletions posthog/api/early_access_feature.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,14 +30,7 @@ class MinimalEarlyAccessFeatureSerializer(serializers.ModelSerializer):

class Meta:
model = EarlyAccessFeature
fields = [
"id",
"name",
"description",
"stage",
"documentationUrl",
"flagKey",
]
fields = ["id", "name", "description", "stage", "documentationUrl", "flagKey"]
read_only_fields = fields


Expand Down
106 changes: 106 additions & 0 deletions posthog/api/feature.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
from rest_framework import viewsets, serializers
from rest_framework.response import Response
from rest_framework.decorators import action
from django.db.models import QuerySet
from posthog.models import Feature
from posthog.api.routing import TeamAndOrgViewSetMixin
from posthog.api.forbid_destroy_model import ForbidDestroyModel
from posthog.rbac.access_control_api_mixin import AccessControlViewSetMixin


class FeatureSerializer(serializers.ModelSerializer):
class Meta:
model = Feature
fields = [
"id",
"name",
"description",
"documentation_url",
"issue_url",
"primary_early_access_feature_id",
"created_at",
"updated_at",
"archived",
"deleted",
]

def create(self, validated_data):
validated_data["team_id"] = self.context["team_id"]
return super().create(validated_data)

def get_primary_early_access_feature(self, feature: Feature):
from posthog.api.early_access_feature import EarlyAccessFeatureSerializer

return EarlyAccessFeatureSerializer(feature.primary_early_access_feature, context=self.context).data

def get_early_access_features(self, feature: Feature):
from posthog.api.early_access_feature import EarlyAccessFeatureSerializer

return EarlyAccessFeatureSerializer(feature.earlyaccessfeature_set, many=True).data

def get_experiments(self, feature: Feature):
from posthog.api.web_experiment import WebExperimentsAPISerializer

return WebExperimentsAPISerializer(feature.experiment_set, many=True).data

def get_feature_flags(self, feature: Feature):
from posthog.api.feature_flag import MinimalFeatureFlagSerializer

return MinimalFeatureFlagSerializer(feature.featureflag_set, context=self.context, many=True).data


class FeatureViewSet(TeamAndOrgViewSetMixin, AccessControlViewSetMixin, ForbidDestroyModel, viewsets.ModelViewSet):
scope_object = "feature"
queryset = Feature.objects.all()
serializer_class = FeatureSerializer

def safely_get_queryset(self, queryset) -> QuerySet:
# Base queryset with team filtering
queryset = Feature.objects.filter(team_id=self.team_id)

if self.action == "primary_early_access_feature":
queryset = queryset.select_related("primary_early_access_feature")
elif self.action == "experiments":
queryset = queryset.prefetch_related("experiment_set")
elif self.action == "early_access_features":
queryset = queryset.prefetch_related("earlyaccessfeature_set")
elif self.action == "feature_flags":
queryset = queryset.prefetch_related("featureflag_set")

return queryset

@action(detail=True, methods=["get"])
def primary_early_access_feature(self, request, pk=None, **kwargs):
"""
Get primary feature flag associated with a specific feature.
"""
feature = self.get_object()
primary_early_access_feature = FeatureSerializer().get_primary_early_access_feature(feature)
return Response(primary_early_access_feature)

@action(detail=True, methods=["get"])
def feature_flags(self, request, pk=None, **kwargs):
"""
Get all feature flags associated with a specific feature.
"""
feature = self.get_object()
flags = FeatureSerializer().get_feature_flags(feature)
return Response(flags)

@action(detail=True, methods=["get"])
def experiments(self, request, pk=None, **kwargs):
"""
Get experiments associated with a specific feature.
"""
feature = self.get_object()
experiments = FeatureSerializer().get_experiments(feature)
return Response(experiments)

@action(detail=True, methods=["get"])
def early_access_features(self, request, pk=None, **kwargs):
"""
Get early access features associated with a specific feature.
"""
feature = self.get_object()
early_access_features = FeatureSerializer().get_early_access_features(feature)
return Response(early_access_features)
1 change: 1 addition & 0 deletions posthog/api/test/__snapshots__/test_api_docs.ambr
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
'/home/runner/work/posthog/posthog/posthog/api/exports.py: Warning [ExportedAssetViewSet > ExportedAssetSerializer]: unable to resolve type hint for function "filename". Consider using a type hint or @extend_schema_field. Defaulting to string.',
'/home/runner/work/posthog/posthog/posthog/api/exports.py: Warning [ExportedAssetViewSet > ExportedAssetSerializer]: unable to resolve type hint for function "has_content". Consider using a type hint or @extend_schema_field. Defaulting to string.',
'/home/runner/work/posthog/posthog/posthog/api/exports.py: Warning [ExportedAssetViewSet]: could not derive type of path parameter "project_id" because model "posthog.models.exported_asset.ExportedAsset" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".',
'/home/runner/work/posthog/posthog/posthog/api/feature.py: Warning [FeatureViewSet]: could not derive type of path parameter "project_id" because model "posthog.models.feature.Feature" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".',
'/home/runner/work/posthog/posthog/posthog/api/feature_flag.py: Warning [FeatureFlagViewSet]: could not derive type of path parameter "project_id" because model "posthog.models.feature_flag.feature_flag.FeatureFlag" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".',
'/home/runner/work/posthog/posthog/posthog/api/insight.py: Warning [EnterpriseInsightsViewSet > InsightSerializer]: unable to resolve type hint for function "get_cache_target_age". Consider using a type hint or @extend_schema_field. Defaulting to string.',
'/home/runner/work/posthog/posthog/posthog/api/insight.py: Warning [EnterpriseInsightsViewSet > InsightSerializer]: unable to resolve type hint for function "get_columns". Consider using a type hint or @extend_schema_field. Defaulting to string.',
Expand Down
12 changes: 8 additions & 4 deletions posthog/api/test/__snapshots__/test_decide.ambr
Original file line number Diff line number Diff line change
Expand Up @@ -773,7 +773,8 @@
"posthog_featureflag"."performed_rollback",
"posthog_featureflag"."ensure_experience_continuity",
"posthog_featureflag"."usage_dashboard_id",
"posthog_featureflag"."has_enriched_analytics"
"posthog_featureflag"."has_enriched_analytics",
"posthog_featureflag"."feature_management_id"
FROM "posthog_featureflag"
WHERE ("posthog_featureflag"."active"
AND NOT "posthog_featureflag"."deleted"
Expand Down Expand Up @@ -1675,7 +1676,8 @@
"posthog_featureflag"."performed_rollback",
"posthog_featureflag"."ensure_experience_continuity",
"posthog_featureflag"."usage_dashboard_id",
"posthog_featureflag"."has_enriched_analytics"
"posthog_featureflag"."has_enriched_analytics",
"posthog_featureflag"."feature_management_id"
FROM "posthog_featureflag"
WHERE ("posthog_featureflag"."active"
AND NOT "posthog_featureflag"."deleted"
Expand Down Expand Up @@ -2363,7 +2365,8 @@
"posthog_featureflag"."performed_rollback",
"posthog_featureflag"."ensure_experience_continuity",
"posthog_featureflag"."usage_dashboard_id",
"posthog_featureflag"."has_enriched_analytics"
"posthog_featureflag"."has_enriched_analytics",
"posthog_featureflag"."feature_management_id"
FROM "posthog_featureflag"
WHERE ("posthog_featureflag"."active"
AND NOT "posthog_featureflag"."deleted"
Expand Down Expand Up @@ -2449,7 +2452,8 @@
"posthog_featureflag"."performed_rollback",
"posthog_featureflag"."ensure_experience_continuity",
"posthog_featureflag"."usage_dashboard_id",
"posthog_featureflag"."has_enriched_analytics"
"posthog_featureflag"."has_enriched_analytics",
"posthog_featureflag"."feature_management_id"
FROM "posthog_featureflag"
WHERE ("posthog_featureflag"."active"
AND NOT "posthog_featureflag"."deleted"
Expand Down
10 changes: 7 additions & 3 deletions posthog/api/test/__snapshots__/test_early_access_feature.ambr
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,8 @@
"posthog_featureflag"."performed_rollback",
"posthog_featureflag"."ensure_experience_continuity",
"posthog_featureflag"."usage_dashboard_id",
"posthog_featureflag"."has_enriched_analytics"
"posthog_featureflag"."has_enriched_analytics",
"posthog_featureflag"."feature_management_id"
FROM "posthog_featureflag"
WHERE ("posthog_featureflag"."active"
AND NOT "posthog_featureflag"."deleted"
Expand Down Expand Up @@ -333,6 +334,7 @@
"posthog_earlyaccessfeature"."stage",
"posthog_earlyaccessfeature"."documentation_url",
"posthog_earlyaccessfeature"."created_at",
"posthog_earlyaccessfeature"."feature_management_id",
"posthog_featureflag"."id",
"posthog_featureflag"."key",
"posthog_featureflag"."name",
Expand All @@ -347,7 +349,8 @@
"posthog_featureflag"."performed_rollback",
"posthog_featureflag"."ensure_experience_continuity",
"posthog_featureflag"."usage_dashboard_id",
"posthog_featureflag"."has_enriched_analytics"
"posthog_featureflag"."has_enriched_analytics",
"posthog_featureflag"."feature_management_id"
FROM "posthog_earlyaccessfeature"
INNER JOIN "posthog_team" ON ("posthog_earlyaccessfeature"."team_id" = "posthog_team"."id")
LEFT OUTER JOIN "posthog_featureflag" ON ("posthog_earlyaccessfeature"."feature_flag_id" = "posthog_featureflag"."id")
Expand Down Expand Up @@ -570,7 +573,8 @@
"posthog_featureflag"."performed_rollback",
"posthog_featureflag"."ensure_experience_continuity",
"posthog_featureflag"."usage_dashboard_id",
"posthog_featureflag"."has_enriched_analytics"
"posthog_featureflag"."has_enriched_analytics",
"posthog_featureflag"."feature_management_id"
FROM "posthog_featureflag"
WHERE ("posthog_featureflag"."active"
AND NOT "posthog_featureflag"."deleted"
Expand Down
22 changes: 15 additions & 7 deletions posthog/api/test/__snapshots__/test_feature_flag.ambr
Original file line number Diff line number Diff line change
Expand Up @@ -360,7 +360,8 @@
"posthog_featureflag"."performed_rollback",
"posthog_featureflag"."ensure_experience_continuity",
"posthog_featureflag"."usage_dashboard_id",
"posthog_featureflag"."has_enriched_analytics"
"posthog_featureflag"."has_enriched_analytics",
"posthog_featureflag"."feature_management_id"
FROM "posthog_featureflag"
INNER JOIN "posthog_team" ON ("posthog_featureflag"."team_id" = "posthog_team"."id")
WHERE ("posthog_featureflag"."key" = 'some-feature2'
Expand Down Expand Up @@ -554,7 +555,8 @@
"posthog_featureflag"."performed_rollback",
"posthog_featureflag"."ensure_experience_continuity",
"posthog_featureflag"."usage_dashboard_id",
"posthog_featureflag"."has_enriched_analytics"
"posthog_featureflag"."has_enriched_analytics",
"posthog_featureflag"."feature_management_id"
FROM "posthog_featureflag"
INNER JOIN "posthog_team" ON ("posthog_featureflag"."team_id" = "posthog_team"."id")
WHERE ("posthog_featureflag"."key" = 'some-feature-new'
Expand Down Expand Up @@ -832,7 +834,8 @@
"posthog_featureflag"."performed_rollback",
"posthog_featureflag"."ensure_experience_continuity",
"posthog_featureflag"."usage_dashboard_id",
"posthog_featureflag"."has_enriched_analytics"
"posthog_featureflag"."has_enriched_analytics",
"posthog_featureflag"."feature_management_id"
FROM "posthog_featureflag"
INNER JOIN "posthog_team" ON ("posthog_featureflag"."team_id" = "posthog_team"."id")
WHERE ("posthog_featureflag"."key" = 'some-feature2'
Expand Down Expand Up @@ -1043,7 +1046,8 @@
"posthog_featureflag"."performed_rollback",
"posthog_featureflag"."ensure_experience_continuity",
"posthog_featureflag"."usage_dashboard_id",
"posthog_featureflag"."has_enriched_analytics"
"posthog_featureflag"."has_enriched_analytics",
"posthog_featureflag"."feature_management_id"
FROM "posthog_featureflag"
INNER JOIN "posthog_team" ON ("posthog_featureflag"."team_id" = "posthog_team"."id")
WHERE ("posthog_featureflag"."key" = 'some-feature-new'
Expand Down Expand Up @@ -1103,7 +1107,8 @@
"posthog_featureflag"."performed_rollback",
"posthog_featureflag"."ensure_experience_continuity",
"posthog_featureflag"."usage_dashboard_id",
"posthog_featureflag"."has_enriched_analytics"
"posthog_featureflag"."has_enriched_analytics",
"posthog_featureflag"."feature_management_id"
FROM "posthog_featureflag"
INNER JOIN "posthog_team" ON ("posthog_featureflag"."team_id" = "posthog_team"."id")
WHERE ("posthog_featureflag"."key" = 'some-feature2'
Expand Down Expand Up @@ -1568,7 +1573,8 @@
"posthog_experiment"."type",
"posthog_experiment"."variants",
"posthog_experiment"."metrics",
"posthog_experiment"."metrics_secondary"
"posthog_experiment"."metrics_secondary",
"posthog_experiment"."feature_management_id"
FROM "posthog_experiment"
WHERE "posthog_experiment"."exposure_cohort_id" = 99999
'''
Expand Down Expand Up @@ -1769,6 +1775,7 @@
"posthog_featureflag"."ensure_experience_continuity",
"posthog_featureflag"."usage_dashboard_id",
"posthog_featureflag"."has_enriched_analytics",
"posthog_featureflag"."feature_management_id",
"posthog_user"."id",
"posthog_user"."password",
"posthog_user"."last_login",
Expand Down Expand Up @@ -1828,7 +1835,8 @@
"posthog_featureflag"."performed_rollback",
"posthog_featureflag"."ensure_experience_continuity",
"posthog_featureflag"."usage_dashboard_id",
"posthog_featureflag"."has_enriched_analytics"
"posthog_featureflag"."has_enriched_analytics",
"posthog_featureflag"."feature_management_id"
FROM "posthog_featureflag"
INNER JOIN "posthog_team" ON ("posthog_featureflag"."team_id" = "posthog_team"."id")
WHERE ("posthog_featureflag"."key" = 'some-feature'
Expand Down
24 changes: 16 additions & 8 deletions posthog/api/test/__snapshots__/test_organization_feature_flag.ambr
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,8 @@
"posthog_featureflag"."performed_rollback",
"posthog_featureflag"."ensure_experience_continuity",
"posthog_featureflag"."usage_dashboard_id",
"posthog_featureflag"."has_enriched_analytics"
"posthog_featureflag"."has_enriched_analytics",
"posthog_featureflag"."feature_management_id"
FROM "posthog_featureflag"
WHERE ("posthog_featureflag"."active"
AND NOT "posthog_featureflag"."deleted"
Expand Down Expand Up @@ -863,7 +864,8 @@
"posthog_featureflag"."performed_rollback",
"posthog_featureflag"."ensure_experience_continuity",
"posthog_featureflag"."usage_dashboard_id",
"posthog_featureflag"."has_enriched_analytics"
"posthog_featureflag"."has_enriched_analytics",
"posthog_featureflag"."feature_management_id"
FROM "posthog_featureflag"
INNER JOIN "posthog_team" ON ("posthog_featureflag"."team_id" = "posthog_team"."id")
WHERE ("posthog_featureflag"."key" = 'copied-flag-key'
Expand Down Expand Up @@ -1202,7 +1204,8 @@
"posthog_featureflag"."performed_rollback",
"posthog_featureflag"."ensure_experience_continuity",
"posthog_featureflag"."usage_dashboard_id",
"posthog_featureflag"."has_enriched_analytics"
"posthog_featureflag"."has_enriched_analytics",
"posthog_featureflag"."feature_management_id"
FROM "posthog_featureflag"
WHERE ("posthog_featureflag"."active"
AND NOT "posthog_featureflag"."deleted"
Expand Down Expand Up @@ -1525,7 +1528,8 @@
"posthog_experiment"."type",
"posthog_experiment"."variants",
"posthog_experiment"."metrics",
"posthog_experiment"."metrics_secondary"
"posthog_experiment"."metrics_secondary",
"posthog_experiment"."feature_management_id"
FROM "posthog_experiment"
WHERE "posthog_experiment"."feature_flag_id" = 99999
'''
Expand Down Expand Up @@ -1574,7 +1578,8 @@
"posthog_earlyaccessfeature"."description",
"posthog_earlyaccessfeature"."stage",
"posthog_earlyaccessfeature"."documentation_url",
"posthog_earlyaccessfeature"."created_at"
"posthog_earlyaccessfeature"."created_at",
"posthog_earlyaccessfeature"."feature_management_id"
FROM "posthog_earlyaccessfeature"
WHERE "posthog_earlyaccessfeature"."feature_flag_id" = 99999
'''
Expand Down Expand Up @@ -1926,7 +1931,8 @@
"posthog_featureflag"."performed_rollback",
"posthog_featureflag"."ensure_experience_continuity",
"posthog_featureflag"."usage_dashboard_id",
"posthog_featureflag"."has_enriched_analytics"
"posthog_featureflag"."has_enriched_analytics",
"posthog_featureflag"."feature_management_id"
FROM "posthog_featureflag"
INNER JOIN "posthog_team" ON ("posthog_featureflag"."team_id" = "posthog_team"."id")
WHERE (NOT "posthog_featureflag"."deleted"
Expand Down Expand Up @@ -2281,7 +2287,8 @@
"posthog_featureflag"."performed_rollback",
"posthog_featureflag"."ensure_experience_continuity",
"posthog_featureflag"."usage_dashboard_id",
"posthog_featureflag"."has_enriched_analytics"
"posthog_featureflag"."has_enriched_analytics",
"posthog_featureflag"."feature_management_id"
FROM "posthog_featureflag"
INNER JOIN "posthog_team" ON ("posthog_featureflag"."team_id" = "posthog_team"."id")
WHERE ("posthog_featureflag"."deleted"
Expand Down Expand Up @@ -2442,7 +2449,8 @@
"posthog_featureflag"."performed_rollback",
"posthog_featureflag"."ensure_experience_continuity",
"posthog_featureflag"."usage_dashboard_id",
"posthog_featureflag"."has_enriched_analytics"
"posthog_featureflag"."has_enriched_analytics",
"posthog_featureflag"."feature_management_id"
FROM "posthog_featureflag"
WHERE (NOT "posthog_featureflag"."deleted"
AND "posthog_featureflag"."key" = 'key-1'
Expand Down
Loading
Loading