accounts/apps/core/models.py
2026-03-17 15:03:58 +03:30

38 lines
1.4 KiB
Python

from django.db import models
from django.db.models import TextChoices
from django.utils.translation import gettext_lazy as _
from apps.gooyal_oauth2.settings import oauth2_settings
from utils.clients.sms.sms import BaseSMSClient
from utils.models import BaseModel
from utils.clients.sms.payam_sms.client import PayamSMSClient
from utils.clients.sms.mobin_sms.client import MobinSMSClient
from utils.clients.sms.fake.client import FakeClient
import logging
logger = logging.getLogger(__name__)
class SMSClienChoises(TextChoices):
FAKE = "fake", _("fake")
PAYAM_SMS = 'payam_sms', _('payam_sms')
MOBIN_SMS = 'mobin_sms', _('mobin_sms')
class SMSPolicy(BaseModel):
application = models.ForeignKey(oauth2_settings.APPLICATION_MODEL, on_delete=models.PROTECT,
related_name='+', null=True, blank=True, unique=True)
preferred = models.CharField(max_length=16, choices=SMSClienChoises.choices, default=SMSClienChoises.FAKE)
def __str__(self):
return self.get_preferred_display()
@staticmethod
def get_client() -> BaseSMSClient:
policy = SMSPolicy.objects.get_or_create(application=None)[0]
if policy.preferred == SMSClienChoises.MOBIN_SMS:
return MobinSMSClient()
elif policy.preferred == SMSClienChoises.PAYAM_SMS:
return PayamSMSClient()
else:
return FakeClient()