Browse Source

refactor(share links): refactor share links and turn it to a property value instead of store it in the DB

master
Mohsen Taba 1 week ago
parent
commit
b60ed3e31e
  1. 29
      apps/hadis/models/hadis.py
  2. 11
      apps/hadis/models/transmitter.py

29
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'))
@ -197,6 +198,12 @@ class Hadis(LowercaseSlugMixin, models.Model):
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()
if self.category:
@ -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:
@ -543,6 +551,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
for tr in self.title:
@ -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")

11
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'))
@ -1068,6 +1069,12 @@ class TransmitterOriginalText(models.Model):
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
if self.title:
@ -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:

Loading…
Cancel
Save