From 7b70c8499d57d18ef6f7c6746acdaaadb41637db Mon Sep 17 00:00:00 2001 From: Her Email Date: Wed, 22 Nov 2023 22:29:38 -0500 Subject: [PATCH] fix mark time edge case --- common/setup.py | 2 +- journal/models/mark.py | 6 ++---- journal/models/shelf.py | 10 +++++++++- journal/views/mark.py | 9 ++++++++- 4 files changed, 20 insertions(+), 7 deletions(-) diff --git a/common/setup.py b/common/setup.py index 93ae883e..66f4a4ca 100644 --- a/common/setup.py +++ b/common/setup.py @@ -109,7 +109,7 @@ class Setup: } ) else: - logger.debug(f"Default relay is disabled.") + logger.info(f"Default relay is disabled.") else: if relay_follow: logger.debug( diff --git a/journal/models/mark.py b/journal/models/mark.py index 8272cd02..1d594841 100644 --- a/journal/models/mark.py +++ b/journal/models/mark.py @@ -194,14 +194,12 @@ class Mark: self.shelfmember.visibility = visibility shelfmember_changed = True # retract most recent post about this status when visibility changed - latest_post = self.shelfmember.latest_post - if latest_post: - Takahe.delete_posts([latest_post.pk]) + if self.shelfmember.latest_post: + Takahe.delete_posts([self.shelfmember.latest_post.pk]) if created_time and created_time != self.shelfmember.created_time: self.shelfmember.created_time = created_time log_entry.timestamp = created_time log_entry.save(update_fields=["timestamp"]) - self.shelfmember.change_timestamp(created_time) shelfmember_changed = True if shelfmember_changed: self.shelfmember.save() diff --git a/journal/models/shelf.py b/journal/models/shelf.py index c959c008..fe8f596a 100644 --- a/journal/models/shelf.py +++ b/journal/models/shelf.py @@ -137,7 +137,7 @@ class ShelfMember(ListMember): return log def log_and_delete(self): - ShelfLogEntry.objects.create( + ShelfLogEntry.objects.get_or_create( owner=self.owner, shelf_type=None, item=self.item, @@ -180,6 +180,14 @@ class ShelfLogEntry(models.Model): "takahe.Post", related_name="log_entries", through="ShelfLogEntryPost" ) + class Meta: + constraints = [ + models.UniqueConstraint( + fields=["owner", "item", "timestamp", "shelf_type"], + name="unique_shelf_log_entry", + ), + ] + def __str__(self): return f"{self.owner}:{self.shelf_type}:{self.item.uuid}:{self.timestamp}" diff --git a/journal/views/mark.py b/journal/views/mark.py index f8ff53ef..5ddde9af 100644 --- a/journal/views/mark.py +++ b/journal/views/mark.py @@ -131,7 +131,14 @@ def mark(request: AuthedHttpRequest, item_uuid): ) mark_date = None if request.POST.get("mark_anotherday"): - dt = parse_datetime(request.POST.get("mark_date", "") + " 20:00:00") + shelf_time_offset = { + ShelfType.WISHLIST: " 20:00:00", + ShelfType.PROGRESS: " 21:00:00", + ShelfType.COMPLETE: " 22:00:00", + } + dt = parse_datetime( + request.POST.get("mark_date", "") + shelf_time_offset[status] + ) mark_date = ( dt.replace(tzinfo=timezone.get_current_timezone()) if dt else None )