Browse Source

Add Directory model and add directory_id column to GenEmail

Son NK 5 years ago
parent
commit
5a57e3bc44
2 changed files with 60 additions and 0 deletions
  1. 18 0
      app/models.py
  2. 42 0
      migrations/versions/2020_010821_ba6f13ccbabb_.py

+ 18 - 0
app/models.py

@@ -439,6 +439,11 @@ class GenEmail(db.Model, ModelMixin):
         db.Boolean, nullable=False, default=False, server_default="0"
     )
 
+    # to know whether an alias belongs to a directory
+    directory_id = db.Column(
+        db.ForeignKey("directory.id", ondelete="cascade"), nullable=True
+    )
+
     user = db.relationship(User)
 
     @classmethod
@@ -725,3 +730,16 @@ class CustomDomain(db.Model, ModelMixin):
 class LifetimeCoupon(db.Model, ModelMixin):
     code = db.Column(db.String(128), nullable=False, unique=True)
     nb_used = db.Column(db.Integer, nullable=False)
+
+
+class Directory(db.Model, ModelMixin):
+    user_id = db.Column(db.ForeignKey(User.id, ondelete="cascade"), nullable=False)
+    name = db.Column(db.String(128), unique=True, nullable=False)
+
+    user = db.relationship(User)
+
+    def nb_alias(self):
+        return GenEmail.filter_by(directory_id=self.id).count()
+
+    def __repr__(self):
+        return f"<Directory {self.name}>"

+ 42 - 0
migrations/versions/2020_010821_ba6f13ccbabb_.py

@@ -0,0 +1,42 @@
+"""empty message
+
+Revision ID: ba6f13ccbabb
+Revises: d29cca963221
+Create Date: 2020-01-08 21:23:06.288453
+
+"""
+import sqlalchemy_utils
+from alembic import op
+import sqlalchemy as sa
+
+
+# revision identifiers, used by Alembic.
+revision = 'ba6f13ccbabb'
+down_revision = 'd29cca963221'
+branch_labels = None
+depends_on = None
+
+
+def upgrade():
+    # ### commands auto generated by Alembic - please adjust! ###
+    op.create_table('directory',
+    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('user_id', sa.Integer(), nullable=False),
+    sa.Column('name', sa.String(length=128), nullable=False),
+    sa.ForeignKeyConstraint(['user_id'], ['users.id'], ondelete='cascade'),
+    sa.PrimaryKeyConstraint('id'),
+    sa.UniqueConstraint('name')
+    )
+    op.add_column('gen_email', sa.Column('directory_id', sa.Integer(), nullable=True))
+    op.create_foreign_key(None, 'gen_email', 'directory', ['directory_id'], ['id'], ondelete='cascade')
+    # ### end Alembic commands ###
+
+
+def downgrade():
+    # ### commands auto generated by Alembic - please adjust! ###
+    op.drop_constraint(None, 'gen_email', type_='foreignkey')
+    op.drop_column('gen_email', 'directory_id')
+    op.drop_table('directory')
+    # ### end Alembic commands ###