Skip to content

Commit 31f8c88

Browse files
booking expiry logic/reviews model suggestions per Ethan
1 parent ffb5b8b commit 31f8c88

File tree

2 files changed

+7
-13
lines changed

2 files changed

+7
-13
lines changed

backend/apps/bookings/models.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ class Booking(models.Model):
2929
session_end_time = models.DateTimeField(null=True)
3030
booking_status = models.CharField(max_length=20, choices=BOOKING_STATUS_TYPES, default=PENDING)
3131
session_price = models.DecimalField(max_digits=10, decimal_places=2)
32-
student = models.ForeignKey(User, on_delete=models.CASCADE, related_name="student")
32+
student = models.ForeignKey(User, on_delete=models.CASCADE, related_name="student_bookings")
3333
tutor = models.ForeignKey(User, on_delete=models.CASCADE, related_name="tutor")
3434
description = models.TextField(null=True, blank=True)
3535
payment_gateway_ref = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
@@ -48,17 +48,21 @@ def is_paid(self):
4848
return self.payment_gateway_ref is not None
4949

5050
def reschedule_booking(self, new_date):
51+
if self.session_date < now():
52+
return False
5153
self.session_date = new_date
5254
self.save()
5355

5456
def cancel_booking(self):
5557
if self.session_date < now():
5658
return False
5759
self.booking_status = self.REJECTED
58-
self.save()
60+
self.save(update_fields=['booking_status'])
5961
return True
6062

6163
def booking_duration(self):
64+
if not self.session_end_time:
65+
return timedelta(0)
6266
return self.session_end_time - self.session_date
6367

6468
@classmethod
@@ -94,6 +98,7 @@ def __str__(self):
9498

9599
class Meta:
96100
ordering = ['-created_at'] # Sort reviews by most recent first
101+
unique_together = ('tutor', 'reviewer')
97102

98103
def is_valid_review(self):
99104
"""Checks if the review has a valid rating and comments."""

backend/apps/bookings/serializers.py

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,3 @@ class Meta:
2323
model = Review
2424
fields = ['tutor', 'reviewer', 'rating', 'feedback', 'created_at', 'is_visible', 'is_moderated']
2525
read_only_fields = ['created_at', 'is_visible', 'is_moderated']
26-
27-
# tutor = models.ForeignKey(User, on_delete=models.CASCADE)
28-
# reviewer = models.ForeignKey(User, on_delete=models.CASCADE)
29-
# rating = models.PositiveSmallIntegerField(validators=[MinValueValidator(1), MaxValueValidator(5)])
30-
# feedback = models.TextField(null=True, blank=True)
31-
# created_at = models.DateTimeField(auto_now_add=True)
32-
#
33-
# is_visible = models.BooleanField(default=True) # Whether the review is visible to others
34-
# is_moderated = models.BooleanField(
35-
# default=False) # Whether the review has been moderated (e.g., checked for inappropriate content)
36-

0 commit comments

Comments
 (0)