Create AutoCreateRule, AutoCreateRuleMailbox model

This commit is contained in:
Son Nguyen Kim 2021-09-20 18:23:19 +02:00
parent 0055ca976b
commit f36f8b94e2
2 changed files with 98 additions and 0 deletions

View File

@ -1875,10 +1875,57 @@ class CustomDomain(db.Model, ModelMixin):
return domain
@property
def auto_create_rules(self):
return sorted(self._auto_create_rules, key=lambda rule: rule.order)
def __repr__(self):
return f"<Custom Domain {self.domain}>"
class AutoCreateRule(db.Model, ModelMixin):
"""Alias auto creation rule for custom domain"""
__table_args__ = (
db.UniqueConstraint(
"custom_domain_id", "order", name="uq_auto_create_rule_order"
),
)
custom_domain_id = db.Column(
db.ForeignKey(CustomDomain.id, ondelete="cascade"), nullable=False
)
# an alias is auto created if it matches the regex
regex = db.Column(db.String(512), nullable=False)
# the order in which rules are evaluated in case there are multiple rules
order = db.Column(db.Integer, default=0, nullable=False)
custom_domain = db.relationship(CustomDomain, backref="_auto_create_rules")
mailboxes = db.relationship(
"Mailbox", secondary="auto_create_rule__mailbox", lazy="joined"
)
class AutoCreateRuleMailbox(db.Model, ModelMixin):
"""store auto create rule - mailbox association"""
__tablename__ = "auto_create_rule__mailbox"
__table_args__ = (
db.UniqueConstraint(
"auto_create_rule_id", "mailbox_id", name="uq_auto_create_rule_mailbox"
),
)
auto_create_rule_id = db.Column(
db.ForeignKey(AutoCreateRule.id, ondelete="cascade"), nullable=False
)
mailbox_id = db.Column(
db.ForeignKey("mailbox.id", ondelete="cascade"), nullable=False
)
class DomainDeletedAlias(db.Model, ModelMixin):
"""Store all deleted alias for a domain"""

View File

@ -0,0 +1,51 @@
"""empty message
Revision ID: cf1e8c1bc737
Revises: d8c55e79da54
Create Date: 2021-09-20 18:14:17.798925
"""
import sqlalchemy_utils
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision = 'cf1e8c1bc737'
down_revision = 'd8c55e79da54'
branch_labels = None
depends_on = None
def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.create_table('auto_create_rule',
sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
sa.Column('created_at', sqlalchemy_utils.types.arrow.ArrowType(), nullable=False),
sa.Column('updated_at', sqlalchemy_utils.types.arrow.ArrowType(), nullable=True),
sa.Column('custom_domain_id', sa.Integer(), nullable=False),
sa.Column('regex', sa.String(length=512), nullable=False),
sa.Column('order', sa.Integer(), nullable=False),
sa.ForeignKeyConstraint(['custom_domain_id'], ['custom_domain.id'], ondelete='cascade'),
sa.PrimaryKeyConstraint('id'),
sa.UniqueConstraint('custom_domain_id', 'order', name='uq_auto_create_rule_order')
)
op.create_table('auto_create_rule__mailbox',
sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
sa.Column('created_at', sqlalchemy_utils.types.arrow.ArrowType(), nullable=False),
sa.Column('updated_at', sqlalchemy_utils.types.arrow.ArrowType(), nullable=True),
sa.Column('auto_create_rule_id', sa.Integer(), nullable=False),
sa.Column('mailbox_id', sa.Integer(), nullable=False),
sa.ForeignKeyConstraint(['auto_create_rule_id'], ['auto_create_rule.id'], ondelete='cascade'),
sa.ForeignKeyConstraint(['mailbox_id'], ['mailbox.id'], ondelete='cascade'),
sa.PrimaryKeyConstraint('id'),
sa.UniqueConstraint('auto_create_rule_id', 'mailbox_id', name='uq_auto_create_rule_mailbox')
)
# ### end Alembic commands ###
def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.drop_table('auto_create_rule__mailbox')
op.drop_table('auto_create_rule')
# ### end Alembic commands ###