X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/32e632734c0a8390775bb8661edc78c2045cf5f3..f59de09387c7ceb7d6ab2ccf6ea25cb4be8dacb5:/src/social/models.py?ds=sidebyside diff --git a/src/social/models.py b/src/social/models.py index c41a78f67..45ee0f4a6 100644 --- a/src/social/models.py +++ b/src/social/models.py @@ -277,6 +277,11 @@ class Progress(Syncable, models.Model): return super().save(*args, **kwargs) +class ActiveManager(models.Manager): + def get_queryset(self): + return super().get_queryset().filter(deleted=False) + + class UserList(Syncable, models.Model): slug = models.SlugField(unique=True) user = models.ForeignKey(User, models.CASCADE) @@ -289,7 +294,10 @@ class UserList(Syncable, models.Model): reported_timestamp = models.DateTimeField() syncable_fields = ['name', 'public', 'deleted'] - + + objects = ActiveManager() + all_objects = models.Manager() + def get_absolute_url(self): return reverse( 'tagged_object_list', @@ -351,7 +359,7 @@ class UserList(Syncable, models.Model): # merge? lists = list(cls.objects.filter(user=user, favorites=True)) for l in lists[1:]: - t.userlistitem_set.all().update( + l.userlistitem_set.all().update( list=lists[0] ) l.delete() @@ -365,14 +373,23 @@ class UserList(Syncable, models.Model): return ls.userlistitem_set.filter(deleted=False, book=book).exists() def append(self, book): - # TODO: check for duplicates? n = now() - item = self.userlistitem_set.create( + items = self.userlistitem_set.filter( book=book, - order=(self.userlistitem_set.aggregate(m=models.Max('order'))['m'] or 0) + 1, - updated_at=n, - reported_timestamp=n, ) + if items.exists(): + items.update( + deleted=False, + reported_timestamp=n, + ) + item = items.first() + else: + item = self.userlistitem_set.create( + book=book, + order=(self.userlistitem_set.aggregate(m=models.Max('order'))['m'] or 0) + 1, + updated_at=n, + reported_timestamp=n, + ) book.update_popularity() return item @@ -401,11 +418,11 @@ class UserList(Syncable, models.Model): class UserListItem(Syncable, models.Model): list = models.ForeignKey(UserList, models.CASCADE) uuid = models.UUIDField(unique=True, default=uuid.uuid4, editable=False, blank=True) - order = models.IntegerField() + order = models.IntegerField(default=0) deleted = models.BooleanField(default=False) created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) - reported_timestamp = models.DateTimeField() + reported_timestamp = models.DateTimeField(default=now) book = models.ForeignKey('catalogue.Book', models.SET_NULL, null=True, blank=True) fragment = models.ForeignKey('catalogue.Fragment', models.SET_NULL, null=True, blank=True) @@ -416,6 +433,14 @@ class UserListItem(Syncable, models.Model): syncable_fields = ['order', 'deleted', 'book', 'fragment', 'quote', 'bookmark', 'note'] + objects = ActiveManager() + all_objects = models.Manager() + + def save(self, *args, **kwargs): + if not self.order: + self.order = self.list.userlistitem_set.all().count() + 1 + super().save(*args, **kwargs) + @classmethod def create_from_data(cls, user, data): if data.get('favorites'):