diff --git a/main/config/migrations/0001_initial.py b/main/config/migrations/0001_initial.py new file mode 100644 index 0000000..aff2205 --- /dev/null +++ b/main/config/migrations/0001_initial.py @@ -0,0 +1,24 @@ +# Generated by Django 5.2.8 on 2025-12-06 13:37 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('apps', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='Config', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('data', models.JSONField()), + ('app', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='configs', to='apps.app')), + ], + ), + ] diff --git a/main/installation/migrations/0002_installation_active_installation_config_and_more.py b/main/installation/migrations/0002_installation_active_installation_config_and_more.py new file mode 100644 index 0000000..e58ebe4 --- /dev/null +++ b/main/installation/migrations/0002_installation_active_installation_config_and_more.py @@ -0,0 +1,33 @@ +# Generated by Django 5.2.8 on 2025-12-06 13:37 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('config', '0001_initial'), + ('installation', '0001_initial'), + ('users', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='installation', + name='active', + field=models.BooleanField(default=True), + ), + migrations.AddField( + model_name='installation', + name='config', + field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.DO_NOTHING, to='config.config'), + preserve_default=False, + ), + migrations.AddField( + model_name='installation', + name='installed_by', + field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.DO_NOTHING, to='users.user'), + preserve_default=False, + ), + ] diff --git a/main/installation/models.py b/main/installation/models.py index 96eb1f5..088fc54 100644 --- a/main/installation/models.py +++ b/main/installation/models.py @@ -1,5 +1,7 @@ from django.db import models + + # Create your models here. @@ -13,6 +15,9 @@ class Installation(models.Model): related_name="installations", ) installed_at = models.DateTimeField(auto_now_add=True) + config = models.ForeignKey("config.Config", on_delete=models.DO_NOTHING) + active = models.BooleanField(default=True) + installed_by = models.ForeignKey("users.User", on_delete=models.DO_NOTHING) class Meta: unique_together = ["app", "organization"] diff --git a/main/installation/views.py b/main/installation/views.py index 5481f7f..bb71021 100644 --- a/main/installation/views.py +++ b/main/installation/views.py @@ -1,4 +1,5 @@ # Create your views here. +from drf_spectacular.utils import extend_schema_view, extend_schema from rest_framework.viewsets import ModelViewSet from installation.models import Installation @@ -6,11 +7,23 @@ from permissions import IsDeveloper +@extend_schema_view( + create=extend_schema( + summary="Create new installation", + description="Create a new installation from user", + ), + retrieve=extend_schema( + summary="Retrieve installation", + description="Retrieve installation", + ), +) class InstallationsViewSet(ModelViewSet): serializer_class = InstallationSerializer queryset = Installation.objects.all() def get_permissions(self): - if self.action == "retrieve": + if self.action in {"retrieve"}: return [IsDeveloper()] return [] + + diff --git a/main/settings.py b/main/settings.py index 45e2006..e9ad7ae 100644 --- a/main/settings.py +++ b/main/settings.py @@ -11,7 +11,6 @@ ALLOWED_HOSTS = [] - DJANGO_APPS = [ "django.contrib.admin", "django.contrib.auth", @@ -31,6 +30,7 @@ "app_version", "apps", "category", + "config", "app_settings", "developer_profiles", "installation", @@ -44,7 +44,6 @@ INSTALLED_APPS = DJANGO_APPS + THIRD_PARTY_APPS + LOCAL_APPS - REST_FRAMEWORK = { "DEFAULT_SCHEMA_CLASS": "drf_spectacular.openapi.AutoSchema", "DEFAULT_AUTHENTICATION_CLASSES": [