mirror of
https://github.com/usmannasir/cyberpanel.git
synced 2025-12-17 05:49:42 +01:00
Fix migration: use raw SQL for tables since existing models lack migrations
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
# Generated migration for email filtering features
|
# Generated migration for email filtering features
|
||||||
|
# Uses raw SQL since existing email models weren't created via Django migrations
|
||||||
|
|
||||||
from django.db import migrations, models
|
from django.db import migrations
|
||||||
import django.db.models.deletion
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
@@ -12,69 +12,50 @@ class Migration(migrations.Migration):
|
|||||||
]
|
]
|
||||||
|
|
||||||
operations = [
|
operations = [
|
||||||
migrations.CreateModel(
|
migrations.RunSQL(
|
||||||
name='CatchAllEmail',
|
sql="""
|
||||||
fields=[
|
CREATE TABLE IF NOT EXISTS `e_catchall` (
|
||||||
('domain', models.OneToOneField(
|
`domain_id` varchar(50) NOT NULL PRIMARY KEY,
|
||||||
on_delete=django.db.models.deletion.CASCADE,
|
`destination` varchar(255) NOT NULL,
|
||||||
primary_key=True,
|
`enabled` tinyint(1) NOT NULL DEFAULT 1,
|
||||||
serialize=False,
|
CONSTRAINT `fk_catchall_domain` FOREIGN KEY (`domain_id`) REFERENCES `e_domains` (`domain`) ON DELETE CASCADE
|
||||||
to='mailServer.Domains'
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||||
)),
|
""",
|
||||||
('destination', models.CharField(max_length=255)),
|
reverse_sql="DROP TABLE IF EXISTS `e_catchall`;"
|
||||||
('enabled', models.BooleanField(default=True)),
|
|
||||||
],
|
|
||||||
options={
|
|
||||||
'db_table': 'e_catchall',
|
|
||||||
},
|
|
||||||
),
|
),
|
||||||
migrations.CreateModel(
|
migrations.RunSQL(
|
||||||
name='EmailServerSettings',
|
sql="""
|
||||||
fields=[
|
CREATE TABLE IF NOT EXISTS `e_server_settings` (
|
||||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
`id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||||
('plus_addressing_enabled', models.BooleanField(default=False)),
|
`plus_addressing_enabled` tinyint(1) NOT NULL DEFAULT 0,
|
||||||
('plus_addressing_delimiter', models.CharField(default='+', max_length=1)),
|
`plus_addressing_delimiter` varchar(1) NOT NULL DEFAULT '+'
|
||||||
],
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||||
options={
|
""",
|
||||||
'db_table': 'e_server_settings',
|
reverse_sql="DROP TABLE IF EXISTS `e_server_settings`;"
|
||||||
},
|
|
||||||
),
|
),
|
||||||
migrations.CreateModel(
|
migrations.RunSQL(
|
||||||
name='PlusAddressingOverride',
|
sql="""
|
||||||
fields=[
|
CREATE TABLE IF NOT EXISTS `e_plus_override` (
|
||||||
('domain', models.OneToOneField(
|
`domain_id` varchar(50) NOT NULL PRIMARY KEY,
|
||||||
on_delete=django.db.models.deletion.CASCADE,
|
`enabled` tinyint(1) NOT NULL DEFAULT 1,
|
||||||
primary_key=True,
|
CONSTRAINT `fk_plus_override_domain` FOREIGN KEY (`domain_id`) REFERENCES `e_domains` (`domain`) ON DELETE CASCADE
|
||||||
serialize=False,
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||||
to='mailServer.Domains'
|
""",
|
||||||
)),
|
reverse_sql="DROP TABLE IF EXISTS `e_plus_override`;"
|
||||||
('enabled', models.BooleanField(default=True)),
|
|
||||||
],
|
|
||||||
options={
|
|
||||||
'db_table': 'e_plus_override',
|
|
||||||
},
|
|
||||||
),
|
),
|
||||||
migrations.CreateModel(
|
migrations.RunSQL(
|
||||||
name='PatternForwarding',
|
sql="""
|
||||||
fields=[
|
CREATE TABLE IF NOT EXISTS `e_pattern_forwarding` (
|
||||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
`id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||||
('pattern', models.CharField(max_length=255)),
|
`domain_id` varchar(50) NOT NULL,
|
||||||
('destination', models.CharField(max_length=255)),
|
`pattern` varchar(255) NOT NULL,
|
||||||
('pattern_type', models.CharField(
|
`destination` varchar(255) NOT NULL,
|
||||||
choices=[('wildcard', 'Wildcard'), ('regex', 'Regular Expression')],
|
`pattern_type` varchar(20) NOT NULL DEFAULT 'wildcard',
|
||||||
default='wildcard',
|
`priority` int(11) NOT NULL DEFAULT 100,
|
||||||
max_length=20
|
`enabled` tinyint(1) NOT NULL DEFAULT 1,
|
||||||
)),
|
CONSTRAINT `fk_pattern_domain` FOREIGN KEY (`domain_id`) REFERENCES `e_domains` (`domain`) ON DELETE CASCADE
|
||||||
('priority', models.IntegerField(default=100)),
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||||
('enabled', models.BooleanField(default=True)),
|
""",
|
||||||
('domain', models.ForeignKey(
|
reverse_sql="DROP TABLE IF EXISTS `e_pattern_forwarding`;"
|
||||||
on_delete=django.db.models.deletion.CASCADE,
|
|
||||||
to='mailServer.Domains'
|
|
||||||
)),
|
|
||||||
],
|
|
||||||
options={
|
|
||||||
'db_table': 'e_pattern_forwarding',
|
|
||||||
'ordering': ['priority'],
|
|
||||||
},
|
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -56,12 +56,13 @@ class Pipeprograms(models.Model):
|
|||||||
|
|
||||||
class CatchAllEmail(models.Model):
|
class CatchAllEmail(models.Model):
|
||||||
"""Stores catch-all email configuration per domain"""
|
"""Stores catch-all email configuration per domain"""
|
||||||
domain = models.OneToOneField(Domains, on_delete=models.CASCADE, primary_key=True)
|
domain = models.OneToOneField(Domains, on_delete=models.CASCADE, primary_key=True, db_column='domain_id')
|
||||||
destination = models.CharField(max_length=255)
|
destination = models.CharField(max_length=255)
|
||||||
enabled = models.BooleanField(default=True)
|
enabled = models.BooleanField(default=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
db_table = 'e_catchall'
|
db_table = 'e_catchall'
|
||||||
|
managed = False
|
||||||
|
|
||||||
|
|
||||||
class EmailServerSettings(models.Model):
|
class EmailServerSettings(models.Model):
|
||||||
@@ -71,6 +72,7 @@ class EmailServerSettings(models.Model):
|
|||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
db_table = 'e_server_settings'
|
db_table = 'e_server_settings'
|
||||||
|
managed = False
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_settings(cls):
|
def get_settings(cls):
|
||||||
@@ -80,11 +82,12 @@ class EmailServerSettings(models.Model):
|
|||||||
|
|
||||||
class PlusAddressingOverride(models.Model):
|
class PlusAddressingOverride(models.Model):
|
||||||
"""Per-domain plus-addressing override"""
|
"""Per-domain plus-addressing override"""
|
||||||
domain = models.OneToOneField(Domains, on_delete=models.CASCADE, primary_key=True)
|
domain = models.OneToOneField(Domains, on_delete=models.CASCADE, primary_key=True, db_column='domain_id')
|
||||||
enabled = models.BooleanField(default=True)
|
enabled = models.BooleanField(default=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
db_table = 'e_plus_override'
|
db_table = 'e_plus_override'
|
||||||
|
managed = False
|
||||||
|
|
||||||
|
|
||||||
class PatternForwarding(models.Model):
|
class PatternForwarding(models.Model):
|
||||||
@@ -94,7 +97,7 @@ class PatternForwarding(models.Model):
|
|||||||
('regex', 'Regular Expression'),
|
('regex', 'Regular Expression'),
|
||||||
]
|
]
|
||||||
|
|
||||||
domain = models.ForeignKey(Domains, on_delete=models.CASCADE)
|
domain = models.ForeignKey(Domains, on_delete=models.CASCADE, db_column='domain_id')
|
||||||
pattern = models.CharField(max_length=255)
|
pattern = models.CharField(max_length=255)
|
||||||
destination = models.CharField(max_length=255)
|
destination = models.CharField(max_length=255)
|
||||||
pattern_type = models.CharField(max_length=20, choices=PATTERN_TYPES, default='wildcard')
|
pattern_type = models.CharField(max_length=20, choices=PATTERN_TYPES, default='wildcard')
|
||||||
@@ -103,4 +106,5 @@ class PatternForwarding(models.Model):
|
|||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
db_table = 'e_pattern_forwarding'
|
db_table = 'e_pattern_forwarding'
|
||||||
|
managed = False
|
||||||
ordering = ['priority']
|
ordering = ['priority']
|
||||||
Reference in New Issue
Block a user