move things into different files
This commit is contained in:
66
fedireads/models/activity.py
Normal file
66
fedireads/models/activity.py
Normal file
@ -0,0 +1,66 @@
|
||||
''' models for storing different kinds of Activities '''
|
||||
from django.contrib.postgres.fields import JSONField
|
||||
from django.core.validators import MaxValueValidator, MinValueValidator
|
||||
from django.db import models
|
||||
from model_utils.managers import InheritanceManager
|
||||
|
||||
|
||||
class Activity(models.Model):
|
||||
''' basic fields for storing activities '''
|
||||
uuid = models.CharField(max_length=255, unique=True)
|
||||
user = models.ForeignKey('User', on_delete=models.PROTECT)
|
||||
content = JSONField(max_length=5000)
|
||||
# the activitypub activity type (Create, Add, Follow, ...)
|
||||
activity_type = models.CharField(max_length=255)
|
||||
# custom types internal to fedireads (Review, Shelve, ...)
|
||||
fedireads_type = models.CharField(max_length=255, blank=True, null=True)
|
||||
created_date = models.DateTimeField(auto_now_add=True)
|
||||
updated_date = models.DateTimeField(auto_now=True)
|
||||
objects = InheritanceManager()
|
||||
|
||||
|
||||
class ShelveActivity(Activity):
|
||||
''' someone put a book on a shelf '''
|
||||
book = models.ForeignKey('Book', on_delete=models.PROTECT)
|
||||
shelf = models.ForeignKey('Shelf', on_delete=models.PROTECT)
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
if not self.activity_type:
|
||||
self.activity_type = 'Add'
|
||||
self.fedireads_type = 'Shelve'
|
||||
super().save(*args, **kwargs)
|
||||
|
||||
|
||||
class FollowActivity(Activity):
|
||||
''' record follow requests sent out '''
|
||||
followed = models.ForeignKey(
|
||||
'User',
|
||||
related_name='followed',
|
||||
on_delete=models.PROTECT
|
||||
)
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
self.activity_type = 'Follow'
|
||||
super().save(*args, **kwargs)
|
||||
|
||||
|
||||
class Review(Activity):
|
||||
''' a book review '''
|
||||
book = models.ForeignKey('Book', on_delete=models.PROTECT)
|
||||
name = models.CharField(max_length=255)
|
||||
rating = models.IntegerField(default=0, validators=[MinValueValidator(0), MaxValueValidator(5)])
|
||||
review_content = models.TextField(blank=True, null=True)
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
self.activity_type = 'Article'
|
||||
self.fedireads_type = 'Review'
|
||||
super().save(*args, **kwargs)
|
||||
|
||||
|
||||
class Note(Activity):
|
||||
''' reply to a review, etc '''
|
||||
def save(self, *args, **kwargs):
|
||||
self.activity_type = 'Note'
|
||||
super().save(*args, **kwargs)
|
||||
|
||||
|
Reference in New Issue
Block a user