@@ -943,6 +943,25 @@ class TipRotationState(models.Model):
943943 def __str__ (self ):
944944 return f"{ self .lock } @ { self .rotated_at or 'never' } (idx={ self .last_index } )"
945945
946+ class UserDeletionRequest (models .Model ):
947+ user = models .OneToOneField (
948+ settings .AUTH_USER_MODEL ,
949+ on_delete = models .CASCADE ,
950+ related_name = 'deletion_request'
951+ )
952+ requested_at = models .DateTimeField (default = timezone .now )
953+ scheduled_for = models .DateTimeField ()
954+ is_executed = models .BooleanField (default = False )
955+ executed_at = models .DateTimeField (blank = True , null = True )
956+
957+ def __str__ (self ):
958+ return f"Deletion request for { self .user .email } scheduled for { self .scheduled_for } "
959+
960+ class Meta :
961+ verbose_name = "User Deletion Request"
962+ verbose_name_plural = "User Deletion Requests"
963+ ordering = ['-requested_at' ]
964+
946965class UserDevice (models .Model ):
947966 user = models .ForeignKey (
948967 settings .AUTH_USER_MODEL ,
@@ -958,32 +977,3 @@ class UserDevice(models.Model):
958977
959978 def __str__ (self ):
960979 return f"{ self .user .email } - { self .device_name } ({ self .ip_address } )"
961-
962- class Resource (models .Model ):
963- class Category (models .TextChoices ):
964- WHITEPAPER = "whitepaper" , "Whitepaper"
965- CHECKLIST = "checklist" , "Checklist / Guide"
966- INFOGRAPH = "infographic" , "Infographic"
967- CASESTUDY = "casestudy" , "Case Study"
968- OTHER = "other" , "Other"
969-
970- title = models .CharField (max_length = 180 )
971- slug = models .SlugField (max_length = 200 , unique = True , blank = True )
972- summary = models .TextField (max_length = 600 , help_text = "Short 1–3 line description." )
973- category = models .CharField (max_length = 20 , choices = Category .choices , default = Category .OTHER )
974- file = models .FileField (upload_to = "resources/files/" )
975- cover = models .ImageField (upload_to = "resources/covers/" , blank = True , null = True )
976- is_published = models .BooleanField (default = True )
977- published_at = models .DateTimeField (auto_now_add = True )
978- updated_at = models .DateTimeField (auto_now = True )
979-
980- class Meta :
981- ordering = ["-published_at" ]
982-
983- def save (self , * args , ** kwargs ):
984- if not self .slug :
985- self .slug = slugify (self .title )[:190 ]
986- return super ().save (* args , ** kwargs )
987-
988- def __str__ (self ):
989- return self .title
0 commit comments