From b60ed3e31ecedb8d308681e38af77cdc5eb9d504 Mon Sep 17 00:00:00 2001 From: mohsentaba Date: Thu, 22 Oct 2026 09:26:58 +0330 Subject: [PATCH] refactor(share links): refactor share links and turn it to a property value instead of store it in the DB --- apps/hadis/models/hadis.py | 29 ++++++++++++++++++++++++++--- apps/hadis/models/transmitter.py | 11 +++++++++-- 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/apps/hadis/models/hadis.py b/apps/hadis/models/hadis.py index c64e6ef..b8fcc75 100644 --- a/apps/hadis/models/hadis.py +++ b/apps/hadis/models/hadis.py @@ -175,6 +175,7 @@ class Hadis(LowercaseSlugMixin, models.Model): links = models.JSONField(verbose_name=_('links'), null=True, blank=True, default=dict) tags = models.ManyToManyField("HadisTag", related_name="hadis_overview", verbose_name=_('tags'), blank=True) + #فیلد شر لینک رو بعد حذف باید کنیم تا ای پی ای کرش نکنه. share_link = models.CharField(max_length=255, verbose_name=_('share link'), null=True, blank=True) explanation = models.JSONField(default = list , verbose_name=_('Explanation')) # explanations = models.JSONField(default = list , verbose_name=_('Explanations')) @@ -196,6 +197,12 @@ class Hadis(LowercaseSlugMixin, models.Model): if not title: title = f"Hadis {self.number}" return f"{self.number} - {title}" + + @property + def share_link(self): + if self.slug: + return f"{settings.DOVODI_DOMAIN}/arguments/hadith/{self.slug}" + return None def clean(self): super().clean() @@ -299,7 +306,7 @@ class Hadis(LowercaseSlugMixin, models.Model): # Lowercase the slug and generate/update share_link before saving if self.slug: self.slug = self.slug.lower() - self.share_link = f"{settings.DOVODI_DOMAIN}/arguments/hadith/{self.slug}" + # self.share_link = f"{settings.DOVODI_DOMAIN}/arguments/hadith/{self.slug}" # Reset embedded_in if text or translation changes if self.pk: @@ -504,6 +511,7 @@ class HadisCorrection(models.Model): priority = models.IntegerField(default=0, verbose_name=_('priority')) created_at = models.DateTimeField(auto_now_add=True, verbose_name=_("created at")) updated_at = models.DateTimeField(auto_now=True, verbose_name=_("updated at")) + #حذف شه بعد share_link = models.CharField(max_length=255, verbose_name=_('share link'), null=True, blank=True) embedded_in = models.JSONField(default=list, blank=True) normalized_text = models.TextField(blank=True, null=True, verbose_name=_('normalized text for search')) @@ -522,8 +530,8 @@ class HadisCorrection(models.Model): from utils.slug import build_slug_for_instance build_slug_for_instance(self, source_field='title') - if self.slug and self.hadis and self.hadis.slug: - self.share_link = f"{settings.DOVODI_DOMAIN}/arguments/hadith/{self.hadis.slug}/corrections/{self.slug}" + # if self.slug and self.hadis and self.hadis.slug: + # self.share_link = f"{settings.DOVODI_DOMAIN}/arguments/hadith/{self.hadis.slug}/corrections/{self.slug}" # Track 'text' instead of 'description' if self.pk: @@ -542,6 +550,13 @@ class HadisCorrection(models.Model): ) super().save(*args, **kwargs) + + @property + def share_link(self): + if self.slug and self.hadis_id and self.hadis and self.hadis.slug: + #https://dovodi.newhorizonco.uk/arguments/hadith/excellence-of-character-56?tab=text-corrections + return f"{settings.DOVODI_DOMAIN}/arguments/hadith/{self.hadis.slug}?tab=text-corrections" + return None def get_title(self, lang): if not self.title or not isinstance(self.title, list): return None @@ -578,6 +593,14 @@ class HadisInterpretation(models.Model): created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) + @property + def share_link(self): + cat_slug = self.category.slug if (self.category_id and self.category) else self.slug + if cat_slug: + #https://dovodi.newhorizonco.uk/arguments/hadith/excellence-of-character-56?tab=explanation + return f"{settings.DOVODI_DOMAIN}/arguments/hadith/{self.slug}?tab=explanation"i + return None + class Meta: verbose_name = _("Hadis Interpretation") verbose_name_plural = _("Hadis Interpretations") diff --git a/apps/hadis/models/transmitter.py b/apps/hadis/models/transmitter.py index 8527013..0523a54 100644 --- a/apps/hadis/models/transmitter.py +++ b/apps/hadis/models/transmitter.py @@ -1055,6 +1055,7 @@ class TransmitterOriginalText(models.Model): title = models.JSONField(default = list , verbose_name=_('Title')) text = models.TextField(default='', blank=True, verbose_name=_('Text')) translation = models.JSONField(verbose_name=_('translation'), default=list) + # must delete later share_link = models.CharField(max_length=255, verbose_name=_('share link'), null=True, blank=True) embedded_in = models.JSONField(default=list, blank=True) order = models.IntegerField(default=0, verbose_name=_('order')) @@ -1067,6 +1068,12 @@ class TransmitterOriginalText(models.Model): verbose_name = _('Transmitter Original Text') verbose_name_plural = _('Transmitter Original Text') ordering = ('order', 'id') + + @property + def share_link(self): + if self.slug and self.transmitter_id and self.transmitter and self.transmitter.slug: + return f"{settings.DOVODI_DOMAIN}/arguments/narrators/{self.transmitter.slug}?tab=orginal-text" + return None def __str__(self): title = None @@ -1114,8 +1121,8 @@ class TransmitterOriginalText(models.Model): build_slug_for_instance(self, source_field='title') # Generate/update share_link before saving - if self.slug and self.transmitter and self.transmitter.slug: - self.share_link = f"{settings.DOVODI_DOMAIN}/arguments/narrators/{self.transmitter.slug}/original-texts/{self.slug}" + # if self.slug and self.transmitter and self.transmitter.slug: + # self.share_link = f"{settings.DOVODI_DOMAIN}/arguments/narrators/{self.transmitter.slug}/original-texts/{self.slug}" # Reset embedded_in if text or translation changes if self.pk: