🐛(backend) fix dimail call despite mailbox creation failure on our side

When we try to create a duplicate email, a request
to dimail is sent despite a reject on our side.
To solve this issue, we call mailbox creation first
to benefit from validation of our Django model.

Mailbox creation try was called too late after dimail call.
So in attempt to create a duplicated email a request
to dimail was sent despite a failure in our side.
This commit is contained in:
Sabrina Demagny
2024-12-26 19:15:36 +01:00
parent a58152b9a9
commit 151f030582
3 changed files with 64 additions and 8 deletions

View File

@@ -35,8 +35,7 @@ class MailboxSerializer(serializers.ModelSerializer):
"""
Override create function to fire a request on mailbox creation.
"""
mailbox_status = enums.MailDomainStatusChoices.PENDING
mailbox = super().create(validated_data)
if validated_data["domain"].status == enums.MailDomainStatusChoices.ENABLED:
client = DimailAPIClient()
# send new mailbox request to dimail
@@ -48,8 +47,8 @@ class MailboxSerializer(serializers.ModelSerializer):
mailbox_data = json.loads(
response.content.decode("utf-8").replace("'", '"')
)
mailbox_status = enums.MailDomainStatusChoices.ENABLED
mailbox.status = enums.MailDomainStatusChoices.ENABLED
mailbox.save()
# send confirmation email
client.notify_mailbox_creation(
@@ -57,7 +56,7 @@ class MailboxSerializer(serializers.ModelSerializer):
)
# actually save mailbox on our database
return models.Mailbox.objects.create(**validated_data, status=mailbox_status)
return mailbox
class MailDomainSerializer(serializers.ModelSerializer):