🗃️(models) add MailDomain, MailDomainAccess and Mailbox models

Additional app and models to handle email addresses creation in Desk.
This commit is contained in:
Marie PUPO JEAMMET
2024-04-08 21:29:26 +02:00
committed by Marie
parent a1f9cf0854
commit cca6c77f00
11 changed files with 383 additions and 0 deletions

View File

@@ -0,0 +1,88 @@
"""
Declare and configure the models for the People additional application : mailbox_manager
"""
from django.conf import settings
from django.core import validators
from django.db import models
from django.utils.translation import gettext_lazy as _
from core.models import BaseModel, RoleChoices
class MailDomain(BaseModel):
"""Domain names from which we will create email addresses (mailboxes)."""
name = models.CharField(
_("name"), max_length=150, null=False, blank=False, unique=True
)
class Meta:
db_table = "people_mail_domain"
verbose_name = _("Mail domain")
verbose_name_plural = _("Mail domains")
def __str__(self):
return self.name
class MailDomainAccess(BaseModel):
"""Allow to manage users' accesses to mail domains."""
user = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
related_name="mail_domain_accesses",
null=False,
blank=False,
)
domain = models.ForeignKey(
MailDomain,
on_delete=models.CASCADE,
related_name="mail_domain_accesses",
null=False,
blank=False,
)
role = models.CharField(
max_length=20, choices=RoleChoices.choices, default=RoleChoices.MEMBER
)
class Meta:
db_table = "people_mail_domain_accesses"
verbose_name = _("User/mail domain relation")
verbose_name_plural = _("User/mail domain relations")
unique_together = ("user", "domain")
def __str__(self):
return f"Access of user {self.user!s} on domain {self.domain:s}."
class Mailbox(BaseModel):
"""Mailboxes for users from mail domain."""
local_part = models.CharField(
_("local_part"),
max_length=150,
null=False,
blank=False,
validators=[validators.RegexValidator(regex="^[a-zA-Z0-9_.+-]+$")],
)
domain = models.ForeignKey(
MailDomain,
on_delete=models.CASCADE,
related_name="mail_domain",
null=False,
blank=False,
)
secondary_email = models.EmailField(
_("secondary email address"), null=False, blank=False
)
class Meta:
db_table = "people_mail_box"
verbose_name = _("Mailbox")
verbose_name_plural = _("Mailboxes")
unique_together = ("local_part", "domain")
def __str__(self):
return f"{self.local_part!s}@{self.domain.name:s}."