diff --git a/src/servala/core/migrations/0001_initial.py b/src/servala/core/migrations/0001_initial.py new file mode 100644 index 0000000..f5e5295 --- /dev/null +++ b/src/servala/core/migrations/0001_initial.py @@ -0,0 +1,438 @@ +# Generated by Django 5.2b1 on 2025-03-16 08:05 + +import django.db.models.deletion +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name="BillingEntity", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("name", models.CharField(max_length=100, verbose_name="Name")), + ( + "description", + models.TextField(blank=True, verbose_name="Description"), + ), + ( + "erp_reference", + models.CharField( + blank=True, max_length=100, verbose_name="ERP reference" + ), + ), + ], + ), + migrations.CreateModel( + name="CloudProvider", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("name", models.CharField(max_length=100, verbose_name="Name")), + ( + "description", + models.TextField(blank=True, verbose_name="Description"), + ), + ( + "logo", + models.ImageField( + blank=True, + null=True, + upload_to="public/service_providers", + verbose_name="Logo", + ), + ), + ( + "external_links", + models.JSONField(blank=True, verbose_name="External links"), + ), + ], + ), + migrations.CreateModel( + name="OrganizationOrigin", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("name", models.CharField(max_length=100, verbose_name="Name")), + ( + "description", + models.TextField(blank=True, verbose_name="Description"), + ), + ], + ), + migrations.CreateModel( + name="User", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("password", models.CharField(max_length=128, verbose_name="password")), + ( + "last_login", + models.DateTimeField( + blank=True, null=True, verbose_name="last login" + ), + ), + ( + "email", + models.EmailField( + max_length=254, unique=True, verbose_name="Email address" + ), + ), + ( + "first_name", + models.CharField( + blank=True, max_length=30, verbose_name="First name" + ), + ), + ( + "last_name", + models.CharField( + blank=True, max_length=30, verbose_name="Last name" + ), + ), + ( + "company", + models.CharField( + blank=True, max_length=100, verbose_name="Company" + ), + ), + ( + "is_staff", + models.BooleanField( + default=False, + help_text="Staff users can log into this admin site.", + verbose_name="Is staff", + ), + ), + ( + "is_superuser", + models.BooleanField( + default=False, + help_text="Superusers have all permissions without explicitly assigning them. Use with caution.", + verbose_name="Is superuser", + ), + ), + ], + options={ + "abstract": False, + }, + ), + migrations.CreateModel( + name="ControlPlane", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("name", models.CharField(max_length=100, verbose_name="Name")), + ( + "description", + models.TextField(blank=True, verbose_name="Description"), + ), + ( + "k8s_api_endpoint", + models.URLField(verbose_name="Kubernetes API endpoint"), + ), + ("api_credentials", models.JSONField(verbose_name="API credentials")), + ( + "cloud_provider", + models.ForeignKey( + on_delete=django.db.models.deletion.PROTECT, + related_name="control_planes", + to="core.cloudprovider", + verbose_name="Cloud provider", + ), + ), + ], + ), + migrations.CreateModel( + name="Organization", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("name", models.CharField(max_length=100, verbose_name="Name")), + ( + "billing_entity", + models.ForeignKey( + on_delete=django.db.models.deletion.PROTECT, + related_name="organizations", + to="core.billingentity", + verbose_name="Billing entity", + ), + ), + ], + ), + migrations.CreateModel( + name="OrganizationMembership", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ( + "date_joined", + models.DateTimeField(auto_now_add=True, verbose_name="Date joined"), + ), + ( + "role", + models.CharField( + choices=[ + ("member", "Member"), + ("admin", "Administrator"), + ("owner", "Owner"), + ], + default="member", + max_length=20, + verbose_name="Role", + ), + ), + ( + "organization", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="memberships", + to="core.organization", + verbose_name="Organization", + ), + ), + ( + "user", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="organization_memberships", + to=settings.AUTH_USER_MODEL, + verbose_name="User", + ), + ), + ], + ), + migrations.AddField( + model_name="organization", + name="members", + field=models.ManyToManyField( + related_name="organizations", + through="core.OrganizationMembership", + to=settings.AUTH_USER_MODEL, + verbose_name="Members", + ), + ), + migrations.AddField( + model_name="organization", + name="origin", + field=models.ForeignKey( + on_delete=django.db.models.deletion.PROTECT, + related_name="organizations", + to="core.organizationorigin", + verbose_name="Origin", + ), + ), + migrations.CreateModel( + name="ServiceCategory", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("name", models.CharField(max_length=100, verbose_name="Name")), + ( + "description", + models.TextField(blank=True, verbose_name="Description"), + ), + ( + "logo", + models.ImageField( + blank=True, + null=True, + upload_to="public/service_categories", + verbose_name="Logo", + ), + ), + ( + "parent", + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name="children", + to="core.servicecategory", + verbose_name="Parent", + ), + ), + ], + ), + migrations.CreateModel( + name="Service", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("name", models.CharField(max_length=100, verbose_name="Name")), + ( + "description", + models.TextField(blank=True, verbose_name="Description"), + ), + ( + "logo", + models.ImageField( + blank=True, + null=True, + upload_to="public/services", + verbose_name="Logo", + ), + ), + ( + "external_links", + models.JSONField(blank=True, verbose_name="External links"), + ), + ( + "category", + models.ForeignKey( + on_delete=django.db.models.deletion.PROTECT, + related_name="services", + to="core.servicecategory", + verbose_name="Category", + ), + ), + ], + ), + migrations.CreateModel( + name="ServiceOffering", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ( + "description", + models.TextField(blank=True, verbose_name="Description"), + ), + ( + "control_plane", + models.ManyToManyField( + related_name="offerings", + to="core.controlplane", + verbose_name="Control plane", + ), + ), + ( + "provider", + models.ForeignKey( + on_delete=django.db.models.deletion.PROTECT, + related_name="offerings", + to="core.cloudprovider", + verbose_name="Providers", + ), + ), + ( + "service", + models.ForeignKey( + on_delete=django.db.models.deletion.PROTECT, + related_name="offerings", + to="core.service", + verbose_name="Services", + ), + ), + ], + ), + migrations.CreateModel( + name="Plan", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("name", models.CharField(max_length=100, verbose_name="Name")), + ( + "description", + models.TextField(blank=True, verbose_name="Description"), + ), + ("features", models.JSONField(verbose_name="Features")), + ("pricing", models.JSONField(verbose_name="Pricing")), + ("term", models.DurationField(verbose_name="Term")), + ( + "service_offering", + models.ForeignKey( + on_delete=django.db.models.deletion.PROTECT, + related_name="plans", + to="core.serviceoffering", + verbose_name="Service offering", + ), + ), + ], + ), + ] diff --git a/src/servala/core/migrations/__init__.py b/src/servala/core/migrations/__init__.py new file mode 100644 index 0000000..e69de29