lib.itmens/journal/models/like.py

43 lines
1.4 KiB
Python
Raw Normal View History

from django.contrib.contenttypes.models import ContentType
from django.db import connection, models
from django.utils import timezone
from django.utils.translation import gettext_lazy as _
2023-07-20 21:59:49 -04:00
from users.models import APIdentity
from .common import Piece
2023-07-20 21:59:49 -04:00
class Like(Piece): # TODO remove
owner = models.ForeignKey(APIdentity, on_delete=models.PROTECT)
visibility = models.PositiveSmallIntegerField(
default=0
) # 0: Public / 1: Follower only / 2: Self only
created_time = models.DateTimeField(default=timezone.now)
2023-11-20 19:31:31 -05:00
edited_time = models.DateTimeField(auto_now=True)
target = models.ForeignKey(Piece, on_delete=models.CASCADE, related_name="likes")
@staticmethod
2023-07-20 21:59:49 -04:00
def user_liked_piece(owner, piece):
2023-08-13 18:00:10 -04:00
return Like.objects.filter(owner=owner, target=piece).exists()
@staticmethod
2023-07-20 21:59:49 -04:00
def user_like_piece(owner, piece):
if not piece:
return
2023-08-13 18:00:10 -04:00
like = Like.objects.filter(owner=owner, target=piece).first()
if not like:
2023-08-13 18:00:10 -04:00
like = Like.objects.create(owner=owner, target=piece)
return like
@staticmethod
2023-07-20 21:59:49 -04:00
def user_unlike_piece(owner, piece):
if not piece:
return
2023-08-13 18:00:10 -04:00
Like.objects.filter(owner=owner, target=piece).delete()
@staticmethod
2023-07-20 21:59:49 -04:00
def user_likes_by_class(owner, cls):
ctype_id = ContentType.objects.get_for_model(cls)
2023-08-13 18:00:10 -04:00
return Like.objects.filter(owner=owner, target__polymorphic_ctype=ctype_id)