浏览代码

replace Mailbox.email unique constraint by (email, user_id)

Son NK 5 年之前
父节点
当前提交
f8e896541d
共有 2 个文件被更改,包括 34 次插入1 次删除
  1. 3 1
      app/models.py
  2. 31 0
      migrations/versions/2020_050721_925b93d92809_.py

+ 3 - 1
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()
 

+ 31 - 0
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 ###