diff --git a/backend/igny8_core/modules/system/migrations/0007_add_module_enable_settings.py b/backend/igny8_core/modules/system/migrations/0007_add_module_enable_settings.py new file mode 100644 index 00000000..2a03b28d --- /dev/null +++ b/backend/igny8_core/modules/system/migrations/0007_add_module_enable_settings.py @@ -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'), + ), + ] + diff --git a/backend/igny8_core/modules/system/models.py b/backend/igny8_core/modules/system/models.py index 219412bc..2d21480d 100644 --- a/backend/igny8_core/modules/system/models.py +++ b/backend/igny8_core/modules/system/models.py @@ -6,7 +6,7 @@ from igny8_core.auth.models import AccountBaseModel # Import settings models from .settings_models import ( - SystemSettings, AccountSettings, UserSettings, ModuleSettings, AISettings + SystemSettings, AccountSettings, UserSettings, ModuleSettings, ModuleEnableSettings, AISettings ) diff --git a/backend/igny8_core/modules/system/settings_admin.py b/backend/igny8_core/modules/system/settings_admin.py index a6a0ded6..bf5ffeea 100644 --- a/backend/igny8_core/modules/system/settings_admin.py +++ b/backend/igny8_core/modules/system/settings_admin.py @@ -3,7 +3,7 @@ Settings Models Admin """ from django.contrib import admin 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) diff --git a/backend/igny8_core/modules/system/settings_models.py b/backend/igny8_core/modules/system/settings_models.py index 075678e7..f2ec58d4 100644 --- a/backend/igny8_core/modules/system/settings_models.py +++ b/backend/igny8_core/modules/system/settings_models.py @@ -92,6 +92,46 @@ class ModuleSettings(BaseSettings): 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) # We'll create it as a separate model that can reference IntegrationSettings class AISettings(AccountBaseModel): diff --git a/backend/igny8_core/modules/system/settings_serializers.py b/backend/igny8_core/modules/system/settings_serializers.py index 7bc10e9a..6233b893 100644 --- a/backend/igny8_core/modules/system/settings_serializers.py +++ b/backend/igny8_core/modules/system/settings_serializers.py @@ -2,7 +2,7 @@ Serializers for Settings Models """ 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 diff --git a/backend/igny8_core/modules/system/settings_views.py b/backend/igny8_core/modules/system/settings_views.py index 18da126f..67863ed4 100644 --- a/backend/igny8_core/modules/system/settings_views.py +++ b/backend/igny8_core/modules/system/settings_views.py @@ -13,7 +13,7 @@ from igny8_core.api.authentication import JWTAuthentication, CSRFExemptSessionAu from igny8_core.api.pagination import CustomPageNumberPagination from igny8_core.api.throttles import DebugScopedRateThrottle 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 ( SystemSettingsSerializer, AccountSettingsSerializer, UserSettingsSerializer, ModuleSettingsSerializer, AISettingsSerializer