41 lines
1.4 KiB
Python
41 lines
1.4 KiB
Python
from django.contrib.contenttypes.models import ContentType
|
|
from django.db import models
|
|
from django.utils import timezone
|
|
|
|
from users.models import APIdentity
|
|
|
|
from .common import Piece, VisibilityType
|
|
|
|
|
|
class Like(Piece): # TODO remove
|
|
owner = models.ForeignKey(APIdentity, on_delete=models.PROTECT)
|
|
visibility = models.PositiveSmallIntegerField(
|
|
choices=VisibilityType.choices, default=0, null=False
|
|
) # type:ignore
|
|
created_time = models.DateTimeField(default=timezone.now)
|
|
edited_time = models.DateTimeField(auto_now=True)
|
|
target = models.ForeignKey(Piece, on_delete=models.CASCADE, related_name="likes")
|
|
|
|
@staticmethod
|
|
def user_liked_piece(owner, piece):
|
|
return Like.objects.filter(owner=owner, target=piece).exists()
|
|
|
|
@staticmethod
|
|
def user_like_piece(owner, piece):
|
|
if not piece:
|
|
return
|
|
like = Like.objects.filter(owner=owner, target=piece).first()
|
|
if not like:
|
|
like = Like.objects.create(owner=owner, target=piece)
|
|
return like
|
|
|
|
@staticmethod
|
|
def user_unlike_piece(owner, piece):
|
|
if not piece:
|
|
return
|
|
Like.objects.filter(owner=owner, target=piece).delete()
|
|
|
|
@staticmethod
|
|
def user_likes_by_class(owner, cls):
|
|
ctype_id = ContentType.objects.get_for_model(cls)
|
|
return Like.objects.filter(owner=owner, target__polymorphic_ctype=ctype_id)
|