Phase 0: Add ModuleEnableSettings model and migration
- Created ModuleEnableSettings model with enabled flags for all modules - Added migration for ModuleEnableSettings - Updated imports across system module files
This commit is contained in:
@@ -0,0 +1,37 @@
|
|||||||
|
# Generated manually for Phase 0: Module Enable Settings
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('igny8_core_modules_system', '0006_alter_systemstatus_unique_together_and_more'),
|
||||||
|
('igny8_core_auth', '0008_passwordresettoken_alter_industry_options_and_more'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='ModuleEnableSettings',
|
||||||
|
fields=[
|
||||||
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('planner_enabled', models.BooleanField(default=True, help_text='Enable Planner module')),
|
||||||
|
('writer_enabled', models.BooleanField(default=True, help_text='Enable Writer module')),
|
||||||
|
('thinker_enabled', models.BooleanField(default=True, help_text='Enable Thinker module')),
|
||||||
|
('automation_enabled', models.BooleanField(default=True, help_text='Enable Automation module')),
|
||||||
|
('site_builder_enabled', models.BooleanField(default=True, help_text='Enable Site Builder module')),
|
||||||
|
('linker_enabled', models.BooleanField(default=True, help_text='Enable Linker module')),
|
||||||
|
('optimizer_enabled', models.BooleanField(default=True, help_text='Enable Optimizer module')),
|
||||||
|
('publisher_enabled', models.BooleanField(default=True, help_text='Enable Publisher module')),
|
||||||
|
('account', models.ForeignKey(on_delete=models.CASCADE, to='igny8_core_auth.account', db_column='tenant_id')),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'db_table': 'igny8_module_enable_settings',
|
||||||
|
},
|
||||||
|
),
|
||||||
|
migrations.AddConstraint(
|
||||||
|
model_name='moduleenablesettings',
|
||||||
|
constraint=models.UniqueConstraint(fields=('account',), name='unique_account_module_enable_settings'),
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
||||||
@@ -6,7 +6,7 @@ from igny8_core.auth.models import AccountBaseModel
|
|||||||
|
|
||||||
# Import settings models
|
# Import settings models
|
||||||
from .settings_models import (
|
from .settings_models import (
|
||||||
SystemSettings, AccountSettings, UserSettings, ModuleSettings, AISettings
|
SystemSettings, AccountSettings, UserSettings, ModuleSettings, ModuleEnableSettings, AISettings
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ Settings Models Admin
|
|||||||
"""
|
"""
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
from igny8_core.admin.base import AccountAdminMixin
|
from igny8_core.admin.base import AccountAdminMixin
|
||||||
from .settings_models import SystemSettings, AccountSettings, UserSettings, ModuleSettings, AISettings
|
from .settings_models import SystemSettings, AccountSettings, UserSettings, ModuleSettings, ModuleEnableSettings, AISettings
|
||||||
|
|
||||||
|
|
||||||
@admin.register(SystemSettings)
|
@admin.register(SystemSettings)
|
||||||
|
|||||||
@@ -92,6 +92,46 @@ class ModuleSettings(BaseSettings):
|
|||||||
return f"ModuleSetting: {self.module_name} - {self.key}"
|
return f"ModuleSetting: {self.module_name} - {self.key}"
|
||||||
|
|
||||||
|
|
||||||
|
class ModuleEnableSettings(AccountBaseModel):
|
||||||
|
"""Module enable/disable settings per account"""
|
||||||
|
planner_enabled = models.BooleanField(default=True, help_text="Enable Planner module")
|
||||||
|
writer_enabled = models.BooleanField(default=True, help_text="Enable Writer module")
|
||||||
|
thinker_enabled = models.BooleanField(default=True, help_text="Enable Thinker module")
|
||||||
|
automation_enabled = models.BooleanField(default=True, help_text="Enable Automation module")
|
||||||
|
site_builder_enabled = models.BooleanField(default=True, help_text="Enable Site Builder module")
|
||||||
|
linker_enabled = models.BooleanField(default=True, help_text="Enable Linker module")
|
||||||
|
optimizer_enabled = models.BooleanField(default=True, help_text="Enable Optimizer module")
|
||||||
|
publisher_enabled = models.BooleanField(default=True, help_text="Enable Publisher module")
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
db_table = 'igny8_module_enable_settings'
|
||||||
|
unique_together = [['account']] # One record per account
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
account = getattr(self, 'account', None)
|
||||||
|
return f"ModuleEnableSettings: {account.name if account else 'No Account'}"
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def get_or_create_for_account(cls, account):
|
||||||
|
"""Get or create module enable settings for an account"""
|
||||||
|
settings, created = cls.objects.get_or_create(account=account)
|
||||||
|
return settings
|
||||||
|
|
||||||
|
def is_module_enabled(self, module_name):
|
||||||
|
"""Check if a module is enabled"""
|
||||||
|
mapping = {
|
||||||
|
'planner': self.planner_enabled,
|
||||||
|
'writer': self.writer_enabled,
|
||||||
|
'thinker': self.thinker_enabled,
|
||||||
|
'automation': self.automation_enabled,
|
||||||
|
'site_builder': self.site_builder_enabled,
|
||||||
|
'linker': self.linker_enabled,
|
||||||
|
'optimizer': self.optimizer_enabled,
|
||||||
|
'publisher': self.publisher_enabled,
|
||||||
|
}
|
||||||
|
return mapping.get(module_name, True) # Default to enabled if unknown
|
||||||
|
|
||||||
|
|
||||||
# AISettings extends IntegrationSettings (which already exists)
|
# AISettings extends IntegrationSettings (which already exists)
|
||||||
# We'll create it as a separate model that can reference IntegrationSettings
|
# We'll create it as a separate model that can reference IntegrationSettings
|
||||||
class AISettings(AccountBaseModel):
|
class AISettings(AccountBaseModel):
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
Serializers for Settings Models
|
Serializers for Settings Models
|
||||||
"""
|
"""
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
from .settings_models import SystemSettings, AccountSettings, UserSettings, ModuleSettings, AISettings
|
from .settings_models import SystemSettings, AccountSettings, UserSettings, ModuleSettings, ModuleEnableSettings, AISettings
|
||||||
from .validators import validate_settings_schema
|
from .validators import validate_settings_schema
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ from igny8_core.api.authentication import JWTAuthentication, CSRFExemptSessionAu
|
|||||||
from igny8_core.api.pagination import CustomPageNumberPagination
|
from igny8_core.api.pagination import CustomPageNumberPagination
|
||||||
from igny8_core.api.throttles import DebugScopedRateThrottle
|
from igny8_core.api.throttles import DebugScopedRateThrottle
|
||||||
from igny8_core.api.permissions import IsAuthenticatedAndActive, HasTenantAccess, IsAdminOrOwner
|
from igny8_core.api.permissions import IsAuthenticatedAndActive, HasTenantAccess, IsAdminOrOwner
|
||||||
from .settings_models import SystemSettings, AccountSettings, UserSettings, ModuleSettings, AISettings
|
from .settings_models import SystemSettings, AccountSettings, UserSettings, ModuleSettings, ModuleEnableSettings, AISettings
|
||||||
from .settings_serializers import (
|
from .settings_serializers import (
|
||||||
SystemSettingsSerializer, AccountSettingsSerializer, UserSettingsSerializer,
|
SystemSettingsSerializer, AccountSettingsSerializer, UserSettingsSerializer,
|
||||||
ModuleSettingsSerializer, AISettingsSerializer
|
ModuleSettingsSerializer, AISettingsSerializer
|
||||||
|
|||||||
Reference in New Issue
Block a user