Add Mailbox model, GenEmail.mailbox_id column

This commit is contained in:
Son NK 2020-02-10 23:11:09 +07:00
parent 6ad395f24f
commit eca2422be4
2 changed files with 66 additions and 1 deletions

View File

@ -17,7 +17,7 @@ from app.config import (
AVATAR_URL_EXPIRATION,
JOB_ONBOARDING_1,
)
from app.email_utils import get_email_name
from app.extensions import db
from app.log import LOG
from app.oauth_models import Scope
@ -478,7 +478,13 @@ class GenEmail(db.Model, ModelMixin):
note = db.Column(db.Text, default=None, nullable=True)
# an alias can be owned by another mailbox
mailbox_id = db.Column(
db.ForeignKey("mailbox.id", ondelete="cascade"), nullable=True, default=None
)
user = db.relationship(User)
mailbox = db.relationship('Mailbox')
@classmethod
def create_new(cls, user_id, prefix, note=None):
@ -626,6 +632,8 @@ class ForwardEmail(db.Model, ModelMixin):
def website_send_to(self):
"""return the email address with name.
to use when user wants to send an email from the alias"""
from app.email_utils import get_email_name
if self.website_from:
name = get_email_name(self.website_from)
if name:
@ -799,3 +807,17 @@ class Job(db.Model, ModelMixin):
def __repr__(self):
return f"<Job {self.id} {self.name} {self.payload}>"
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)
verified = db.Column(db.Boolean, default=False, nullable=False)
user = db.relationship(User)
def nb_alias(self):
return GenEmail.filter_by(mailbox_id=self.id).count()
def __repr__(self):
return f"<Mailbox {self.email}>"

View File

@ -0,0 +1,43 @@
"""empty message
Revision ID: 6664d75ce3d4
Revises: b9f849432543
Create Date: 2020-02-10 23:10:09.134369
"""
import sqlalchemy_utils
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision = '6664d75ce3d4'
down_revision = 'b9f849432543'
branch_labels = None
depends_on = None
def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.create_table('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('user_id', sa.Integer(), nullable=False),
sa.Column('email', sa.String(length=256), nullable=False),
sa.Column('verified', sa.Boolean(), nullable=False),
sa.ForeignKeyConstraint(['user_id'], ['users.id'], ondelete='cascade'),
sa.PrimaryKeyConstraint('id'),
sa.UniqueConstraint('email')
)
op.add_column('gen_email', sa.Column('mailbox_id', sa.Integer(), nullable=True))
op.create_foreign_key(None, 'gen_email', 'mailbox', ['mailbox_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', 'mailbox_id')
op.drop_table('mailbox')
# ### end Alembic commands ###