Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
24 changes: 24 additions & 0 deletions main/config/migrations/0001_initial.py
Original file line number Diff line number Diff line change
@@ -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')),
],
),
]
Original file line number Diff line number Diff line change
@@ -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,
),
]
5 changes: 5 additions & 0 deletions main/installation/models.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
from django.db import models



# Create your models here.


Expand All @@ -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"]
Expand Down
15 changes: 14 additions & 1 deletion main/installation/views.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,29 @@
# 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
from installation.serializers import InstallationSerializer
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 []


3 changes: 1 addition & 2 deletions main/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
ALLOWED_HOSTS = []



DJANGO_APPS = [
"django.contrib.admin",
"django.contrib.auth",
Expand All @@ -31,6 +30,7 @@
"app_version",
"apps",
"category",
"config",
"app_settings",
"developer_profiles",
"installation",
Expand All @@ -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": [
Expand Down