1
0
Fork 0

Follow/unfollow behavior

Fixes #23
This commit is contained in:
Mouse Reeve 2020-02-18 22:44:13 -08:00
parent 14d300162d
commit 95bfb61cf3
10 changed files with 138 additions and 102 deletions

View file

@ -1,5 +1,5 @@
''' bring all the models into the app namespace '''
from .book import Shelf, ShelfBook, Book, Author
from .user import User, FederatedServer
from .user import User, UserRelationship, FederatedServer
from .activity import Status, Review

View file

@ -34,7 +34,12 @@ class User(AbstractUser):
# name is your display name, which you can change at will
name = models.CharField(max_length=100, blank=True, null=True)
avatar = models.ImageField(upload_to='avatars/', blank=True, null=True)
followers = models.ManyToManyField('self', symmetrical=False)
followers = models.ManyToManyField(
'self',
symmetrical=False,
through='UserRelationship',
through_fields=('user_subject', 'user_object')
)
@property
def absolute_id(self):
@ -43,6 +48,29 @@ class User(AbstractUser):
return 'https://%s/%s/%s' % (DOMAIN, model_name, self.localname)
class UserRelationship(FedireadsModel):
''' many-to-many through table for followers '''
user_subject = models.ForeignKey(
'User',
on_delete=models.PROTECT,
related_name='user_subject'
)
user_object = models.ForeignKey(
'User',
on_delete=models.PROTECT,
related_name='user_object'
)
# follow or follow_request for pending TODO: blocking?
status = models.CharField(max_length=100, default='follows', null=True)
relationship_id = models.CharField(max_length=100)
@property
def absolute_id(self):
''' use shelf identifier as absolute id '''
base_path = self.user_subject.absolute_id
return '%s#%s/%d' % (base_path, self.status, self.id)
class FederatedServer(FedireadsModel):
''' store which server's we federate with '''
server_name = models.CharField(max_length=255, unique=True)