models.py 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. from django.apps import apps
  2. from django.db import models
  3. from django.urls import reverse
  4. import pendulum
  5. from scrobbles.dataclasses import LifeEventLogData
  6. from scrobbles.mixins import ScrobblableMixin
  7. BNULL = {"blank": True, "null": True}
  8. class LifeEvent(ScrobblableMixin):
  9. COMPLETION_PERCENT = 100
  10. description = models.TextField(**BNULL)
  11. def __str__(self):
  12. return self.title
  13. def get_absolute_url(self):
  14. return reverse(
  15. "life-events:life-event_detail", kwargs={"slug": self.uuid}
  16. )
  17. @property
  18. def logdata_cls(self):
  19. return LifeEventLogData
  20. @classmethod
  21. def find_or_create(cls, title: str) -> "LifeEvent":
  22. return cls.objects.filter(title=title).first()
  23. def scrobble_for_user(self, user_id):
  24. Scrobble = apps.get_model("scrobbles", "Scrobble")
  25. return Scrobble.objects.create(
  26. user_id=user_id, life_event=self, timestamp=pendulum.now()
  27. )
  28. def scrobbles(self, user_id):
  29. Scrobble = apps.get_model("scrobbles", "Scrobble")
  30. return Scrobble.objects.filter(
  31. user_id=user_id, life_event=self
  32. ).order_by("-timestamp")