infrasynth-backend-kit/infrasynth/billing/migrations/0001_initial.py
2026-08-28 14:38:47 -05:00

199 lines
8.5 KiB
Python

# Generated by Django 5.2.16 on 2026-07-31 01:19
import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
import infrasynth.shared.enums
class Migration(migrations.Migration):
initial = True
dependencies = [
("infrasynth_files", "0001_initial"),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(
name="PaymentGateway",
fields=[
("slug", models.SlugField(max_length=100, primary_key=True, serialize=False)),
("display_name", models.CharField(max_length=200)),
("gateway_class", models.CharField(max_length=500)),
("config", models.JSONField(default=dict)),
("is_active", models.BooleanField(default=True)),
("supported_currencies", models.JSONField(default=list)),
("webhook_secret", models.CharField(blank=True, max_length=500)),
],
options={
"db_table": "billing_gateway",
},
),
migrations.CreateModel(
name="Invoice",
fields=[
("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
("external_id", models.CharField(blank=True, max_length=255)),
("invoice_number", models.CharField(max_length=100, unique=True)),
("amount", models.DecimalField(decimal_places=2, max_digits=12)),
("currency", models.CharField(default="USD", max_length=3)),
("tax_amount", models.DecimalField(decimal_places=2, default=0, max_digits=12)),
("tax_name", models.CharField(blank=True, max_length=100)),
("status", models.CharField(choices=infrasynth.shared.enums.InvoiceStatus.choices, max_length=20)),
("due_date", models.DateTimeField(blank=True, null=True)),
("paid_at", models.DateTimeField(blank=True, null=True)),
("line_items", models.JSONField(default=list)),
("metadata", models.JSONField(default=dict)),
(
"pdf_file",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name="+",
to="infrasynth_files.storedfile",
),
),
(
"user",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE, related_name="+", to=settings.AUTH_USER_MODEL
),
),
(
"gateway",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name="+",
to="infrasynth_billing.paymentgateway",
),
),
],
options={
"db_table": "billing_invoice",
},
),
migrations.CreateModel(
name="BillingPlan",
fields=[
("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
("slug", models.SlugField(max_length=100, unique=True)),
("name", models.CharField(max_length=200)),
("description", models.TextField(blank=True)),
("price_amount", models.DecimalField(decimal_places=2, max_digits=12)),
("price_currency", models.CharField(default="USD", max_length=3)),
("interval", models.CharField(choices=infrasynth.shared.enums.BillingInterval.choices, max_length=20)),
("trial_days", models.IntegerField(default=0)),
("features", models.JSONField(default=list)),
("is_active", models.BooleanField(default=True)),
("external_id", models.CharField(blank=True, max_length=255)),
(
"gateway",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name="+",
to="infrasynth_billing.paymentgateway",
),
),
],
options={
"db_table": "billing_plan",
},
),
migrations.CreateModel(
name="PaymentTransaction",
fields=[
("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
("external_id", models.CharField(blank=True, max_length=255)),
("amount", models.DecimalField(decimal_places=2, max_digits=12)),
("currency", models.CharField(default="USD", max_length=3)),
("status", models.CharField(blank=True, max_length=50)),
("payment_method", models.CharField(blank=True, max_length=100)),
("metadata", models.JSONField(default=dict)),
("created_at", models.DateTimeField(auto_now_add=True)),
(
"gateway",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name="+",
to="infrasynth_billing.paymentgateway",
),
),
(
"invoice",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name="+",
to="infrasynth_billing.invoice",
),
),
],
options={
"db_table": "billing_transaction",
},
),
migrations.CreateModel(
name="Subscription",
fields=[
("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
("external_id", models.CharField(blank=True, max_length=255)),
("status", models.CharField(choices=infrasynth.shared.enums.SubscriptionStatus.choices, max_length=20)),
("current_period_start", models.DateTimeField(blank=True, null=True)),
("current_period_end", models.DateTimeField(blank=True, null=True)),
("cancel_at_period_end", models.BooleanField(default=False)),
("cancelled_at", models.DateTimeField(blank=True, null=True)),
("trial_end", models.DateTimeField(blank=True, null=True)),
("metadata", models.JSONField(default=dict)),
(
"gateway",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name="+",
to="infrasynth_billing.paymentgateway",
),
),
(
"plan",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name="+",
to="infrasynth_billing.billingplan",
),
),
(
"user",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE, related_name="+", to=settings.AUTH_USER_MODEL
),
),
],
options={
"db_table": "billing_subscription",
},
),
migrations.AddField(
model_name="invoice",
name="subscription",
field=models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name="+",
to="infrasynth_billing.subscription",
),
),
]