20
20
from rest_framework .response import Response
21
21
from rest_framework .validators import UniqueValidator
22
22
23
+ from accounts .serializers import CustomUserSerializer
24
+
23
25
logger = getLogger (__name__ )
24
26
usermodel = get_user_model ()
25
27
@@ -328,6 +330,25 @@ def get_task_by_id(task_id):
328
330
return None , None
329
331
330
332
333
+ class Invitation (models .Model ):
334
+ household = models .ForeignKey ("Household" , on_delete = models .CASCADE )
335
+ sender = models .ForeignKey (
336
+ settings .AUTH_USER_MODEL ,
337
+ related_name = "sent_invitations" ,
338
+ on_delete = models .CASCADE ,
339
+ )
340
+ recipient = models .ForeignKey (
341
+ settings .AUTH_USER_MODEL ,
342
+ related_name = "received_invitations" ,
343
+ on_delete = models .CASCADE ,
344
+ )
345
+ accepted = models .BooleanField (default = False )
346
+ timestamp = models .DateTimeField (auto_now_add = True )
347
+
348
+ def __str__ (self ):
349
+ return f"Invitation from { self .sender } to { self .recipient } for { self .household } "
350
+
351
+
331
352
# Serializers have to live here, to avoid circular imports :(
332
353
333
354
@@ -336,7 +357,9 @@ class ScheduledTaskSerializer(serializers.ModelSerializer):
336
357
next_due = serializers .SerializerMethodField ()
337
358
last_due = serializers .SerializerMethodField ()
338
359
mean_completion_time = serializers .SerializerMethodField ()
339
- description = serializers .CharField (required = False , allow_blank = True , validators = [validate_profanity ])
360
+ description = serializers .CharField (
361
+ required = False , allow_blank = True , validators = [validate_profanity ]
362
+ )
340
363
341
364
class Meta :
342
365
model = ScheduledTask
@@ -358,7 +381,9 @@ def get_mean_completion_time(self, obj):
358
381
class FlexibleTaskSerializer (serializers .ModelSerializer ):
359
382
staleness = serializers .SerializerMethodField ()
360
383
mean_completion_time = serializers .SerializerMethodField ()
361
- description = serializers .CharField (required = False , allow_blank = True , validators = [validate_profanity ])
384
+ description = serializers .CharField (
385
+ required = False , allow_blank = True , validators = [validate_profanity ]
386
+ )
362
387
363
388
class Meta :
364
389
model = FlexibleTask
@@ -488,7 +513,11 @@ class Meta:
488
513
489
514
class CreateHouseholdSerializer (serializers .ModelSerializer ):
490
515
name = serializers .CharField (
491
- max_length = 255 , validators = [UniqueValidator (queryset = Household .objects .all ()), validate_profanity ]
516
+ max_length = 255 ,
517
+ validators = [
518
+ UniqueValidator (queryset = Household .objects .all ()),
519
+ validate_profanity ,
520
+ ],
492
521
)
493
522
494
523
class Meta :
@@ -498,3 +527,21 @@ class Meta:
498
527
def create (self , validated_data ):
499
528
logger .info (f"Creating household with name: { validated_data ['name' ]} " )
500
529
return Household .objects .create (name = validated_data ["name" ])
530
+
531
+
532
+ class InvitationSerializer (serializers .ModelSerializer ):
533
+ sender = CustomUserSerializer (read_only = True )
534
+ recipient = CustomUserSerializer (read_only = True )
535
+ household = HouseholdSerializer (read_only = True )
536
+
537
+ class Meta :
538
+ model = Invitation
539
+ fields = ["id" , "household" , "sender" , "recipient" , "accepted" , "timestamp" ]
540
+
541
+ def create (self , validated_data ):
542
+ # Custom create method, if needed. Might be useful if I ever add push notifications.
543
+ return super ().create (validated_data )
544
+
545
+ def update (self , instance , validated_data ):
546
+ # Custom update method, if needed. Could push notification when invite is accepted
547
+ return super ().update (instance , validated_data )
0 commit comments