From f8e896541db2b5e3a76430963435a0147063d3ec Mon Sep 17 00:00:00 2001 From: Son NK <> Date: Thu, 7 May 2020 21:46:16 +0200 Subject: [PATCH] replace Mailbox.email unique constraint by (email, user_id) --- app/models.py | 4 ++- .../versions/2020_050721_925b93d92809_.py | 31 +++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 migrations/versions/2020_050721_925b93d92809_.py diff --git a/app/models.py b/app/models.py index c40b25e6..ee2c3e8c 100644 --- a/app/models.py +++ b/app/models.py @@ -1114,7 +1114,7 @@ class Job(db.Model, ModelMixin): class Mailbox(db.Model, ModelMixin): user_id = db.Column(db.ForeignKey(User.id, ondelete="cascade"), nullable=False) - email = db.Column(db.String(256), unique=True, nullable=False) + email = db.Column(db.String(256), nullable=False) verified = db.Column(db.Boolean, default=False, nullable=False) # used when user wants to update mailbox email @@ -1123,6 +1123,8 @@ class Mailbox(db.Model, ModelMixin): pgp_public_key = db.Column(db.Text, nullable=True) pgp_finger_print = db.Column(db.String(512), nullable=True) + __table_args__ = (db.UniqueConstraint("user_id", "email", name="uq_mailbox_user"),) + def nb_alias(self): return Alias.filter_by(mailbox_id=self.id).count() diff --git a/migrations/versions/2020_050721_925b93d92809_.py b/migrations/versions/2020_050721_925b93d92809_.py new file mode 100644 index 00000000..d9a99728 --- /dev/null +++ b/migrations/versions/2020_050721_925b93d92809_.py @@ -0,0 +1,31 @@ +"""empty message + +Revision ID: 925b93d92809 +Revises: 026e7a782ed6 +Create Date: 2020-05-07 21:42:05.406865 + +""" +import sqlalchemy_utils +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = '925b93d92809' +down_revision = '026e7a782ed6' +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.create_unique_constraint('uq_mailbox_user', 'mailbox', ['user_id', 'email']) + op.drop_constraint('mailbox_email_key', 'mailbox', type_='unique') + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.create_unique_constraint('mailbox_email_key', 'mailbox', ['email']) + op.drop_constraint('uq_mailbox_user', 'mailbox', type_='unique') + # ### end Alembic commands ###