From fc245a481d9adf2621de1873783c32ada3f76d2f Mon Sep 17 00:00:00 2001 From: Radek Czajka Date: Wed, 26 Nov 2025 15:10:24 +0100 Subject: [PATCH 1/1] Prevent userlist duplicates --- src/social/models.py | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/social/models.py b/src/social/models.py index c41a78f67..862db4cdd 100644 --- a/src/social/models.py +++ b/src/social/models.py @@ -365,14 +365,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 -- 2.20.1