diff --git a/app/alias_utils.py b/app/alias_utils.py index e9506055..d3c00b8c 100644 --- a/app/alias_utils.py +++ b/app/alias_utils.py @@ -142,14 +142,17 @@ def try_auto_create_catch_all_domain(address: str) -> Optional[Alias]: def delete_alias(alias: Alias, user: User): - Alias.delete(alias.id) - db.session.commit() - + """ + Delete an alias and add it to either global or domain trash + Should be used instead of Alias.delete, DomainDeletedAlias.create, DeletedAlias.create + """ # save deleted alias to either global or domain trash if alias.custom_domain_id: try: - DomainDeletedAlias.create( - user_id=user.id, email=alias.email, domain_id=alias.custom_domain_id + db.session.add( + DomainDeletedAlias( + user_id=user.id, email=alias.email, domain_id=alias.custom_domain_id + ) ) db.session.commit() except IntegrityError: @@ -161,8 +164,11 @@ def delete_alias(alias: Alias, user: User): db.session.rollback() else: try: - DeletedAlias.create(email=alias.email) + db.session.add(DeletedAlias(email=alias.email)) db.session.commit() except IntegrityError: LOG.exception("alias %s has been added before to DeletedAlias", alias.email) db.session.rollback() + + Alias.query.filter(Alias.id == alias.id).delete() + db.session.commit() diff --git a/app/models.py b/app/models.py index ecd9c584..a7b4220f 100644 --- a/app/models.py +++ b/app/models.py @@ -13,7 +13,7 @@ from sqlalchemy import text, desc, CheckConstraint, and_, func from sqlalchemy.exc import IntegrityError from sqlalchemy_utils import ArrowType -from app import s3 +from app import s3, alias_utils from app.config import ( MAX_NB_EMAIL_FREE_PLAN, URL, @@ -870,6 +870,10 @@ class Alias(db.Model, ModelMixin): mailbox_id=mailbox_id or user.default_mailbox_id, ) + @classmethod + def delete(cls, obj_id): + raise Exception("should use delete_alias(alias,user) instead") + @classmethod def create_new_random( cls, @@ -1292,6 +1296,10 @@ class DeletedAlias(db.Model, ModelMixin): email = db.Column(db.String(256), unique=True, nullable=False) + @classmethod + def create(cls, **kw): + raise Exception("should use delete_alias(alias,user) instead") + def __repr__(self): return f"" @@ -1411,6 +1419,10 @@ class DomainDeletedAlias(db.Model, ModelMixin): ) user_id = db.Column(db.ForeignKey(User.id, ondelete="cascade"), nullable=False) + @classmethod + def create(cls, **kw): + raise Exception("should use delete_alias(alias,user) instead") + class LifetimeCoupon(db.Model, ModelMixin): code = db.Column(db.String(128), nullable=False, unique=True)