Add initial database migration
This commit is contained in:
parent
7345774860
commit
56169de014
2 changed files with 438 additions and 0 deletions
438
src/servala/core/migrations/0001_initial.py
Normal file
438
src/servala/core/migrations/0001_initial.py
Normal file
|
@ -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",
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
]
|
0
src/servala/core/migrations/__init__.py
Normal file
0
src/servala/core/migrations/__init__.py
Normal file
Loading…
Add table
Add a link
Reference in a new issue