from django.conf import settings from django.db import models class FeatureFlag(models.Model): slug = models.SlugField(max_length=100) name = models.CharField(max_length=200) description = models.TextField(blank=True) is_active = models.BooleanField(default=False) rollout_percentage = models.PositiveSmallIntegerField(default=100, help_text="0-100. 100 = all users") tenant_id = models.UUIDField(null=True, blank=True, help_text="Null = global. Value = tenant-specific") environments = models.JSONField(default=list, help_text='["production", "staging"] or [] = all') category = models.CharField(max_length=50, blank=True, help_text="Grouping for UI") metadata = models.JSONField(default=dict) class Meta: db_table = "features_flag" unique_together = [("slug", "tenant_id")] class FeatureFlagOverride(models.Model): flag = models.ForeignKey(FeatureFlag, on_delete=models.CASCADE, related_name="overrides") user = models.ForeignKey( settings.AUTH_USER_MODEL, on_delete=models.CASCADE, null=True, blank=True, related_name="+", ) group = models.ForeignKey( "auth.Group", on_delete=models.CASCADE, null=True, blank=True, related_name="+", ) is_enabled = models.BooleanField() class Meta: db_table = "features_override" unique_together = [("flag", "user"), ("flag", "group")]