@@ -341,12 +341,15 @@ class PromoFeedSerializer(rest_framework.serializers.ModelSerializer):
341341 company_name = rest_framework .serializers .CharField (source = 'company.name' )
342342 active = rest_framework .serializers .BooleanField (source = 'is_active' )
343343 is_activated_by_user = rest_framework .serializers .SerializerMethodField ()
344- is_liked_by_user = rest_framework .serializers .SerializerMethodField ()
345344 like_count = rest_framework .serializers .IntegerField (
346345 source = 'get_like_count' ,
347346 read_only = True ,
348347 )
349- comment_count = rest_framework .serializers .SerializerMethodField ()
348+ comment_count = rest_framework .serializers .IntegerField (
349+ source = 'get_comment_count' ,
350+ read_only = True ,
351+ )
352+ is_liked_by_user = rest_framework .serializers .SerializerMethodField ()
350353
351354 class Meta :
352355 model = business .models .Promo
@@ -365,18 +368,23 @@ class Meta:
365368
366369 read_only_fields = fields
367370
368- def get_is_activated_by_user (self , obj ) -> bool :
369- # TODO:
371+ def get_is_liked_by_user (self , obj : business .models .Promo ) -> bool :
372+ request = self .context .get ('request' )
373+ if (
374+ request
375+ and hasattr (request , 'user' )
376+ and request .user .is_authenticated
377+ ):
378+ return user .models .PromoLike .objects .filter (
379+ promo = obj ,
380+ user = request .user ,
381+ ).exists ()
370382 return False
371383
372- def get_is_liked_by_user (self , obj ) -> bool :
384+ def get_is_activated_by_user (self , obj ) -> bool :
373385 # TODO:
374386 return False
375387
376- def get_comment_count (self , obj ) -> int :
377- # TODO:
378- return 0
379-
380388
381389class UserPromoDetailSerializer (rest_framework .serializers .ModelSerializer ):
382390 """
@@ -406,8 +414,11 @@ class UserPromoDetailSerializer(rest_framework.serializers.ModelSerializer):
406414 source = 'get_like_count' ,
407415 read_only = True ,
408416 )
417+ comment_count = rest_framework .serializers .IntegerField (
418+ source = 'get_comment_count' ,
419+ read_only = True ,
420+ )
409421 is_liked_by_user = rest_framework .serializers .SerializerMethodField ()
410- comment_count = rest_framework .serializers .SerializerMethodField ()
411422
412423 class Meta :
413424 model = business .models .Promo
@@ -420,8 +431,8 @@ class Meta:
420431 'active' ,
421432 'is_activated_by_user' ,
422433 'like_count' ,
423- 'is_liked_by_user' ,
424434 'comment_count' ,
435+ 'is_liked_by_user' ,
425436 )
426437 read_only_fields = fields
427438
@@ -442,6 +453,64 @@ def get_is_activated_by_user(self, obj) -> bool:
442453 # TODO:
443454 return False
444455
445- def get_comment_count (self , obj ) -> int :
446- # TODO:
447- return 0
456+
457+ class UserAuthorSerializer (rest_framework .serializers .ModelSerializer ):
458+ name = rest_framework .serializers .CharField (
459+ read_only = True ,
460+ min_length = 1 ,
461+ max_length = 100 ,
462+ )
463+ surname = rest_framework .serializers .CharField (
464+ read_only = True ,
465+ min_length = 1 ,
466+ max_length = 120 ,
467+ )
468+ avatar_url = rest_framework .serializers .URLField (
469+ read_only = True ,
470+ max_length = 350 ,
471+ allow_null = True ,
472+ )
473+
474+ class Meta :
475+ model = user .models .User
476+ fields = ('name' , 'surname' , 'avatar_url' )
477+
478+
479+ class CommentSerializer (rest_framework .serializers .ModelSerializer ):
480+ id = rest_framework .serializers .UUIDField (read_only = True )
481+ text = rest_framework .serializers .CharField (
482+ min_length = user .constants .COMMENT_TEXT_MIN_LENGTH ,
483+ max_length = user .constants .COMMENT_TEXT_MAX_LENGTH ,
484+ )
485+ date = rest_framework .serializers .DateTimeField (
486+ source = 'created_at' ,
487+ read_only = True ,
488+ format = '%Y-%m-%dT%H:%M:%S%z' ,
489+ )
490+ author = UserAuthorSerializer (read_only = True )
491+
492+ class Meta :
493+ model = user .models .PromoComment
494+ fields = ('id' , 'text' , 'date' , 'author' )
495+
496+
497+ class CommentCreateSerializer (rest_framework .serializers .ModelSerializer ):
498+ text = rest_framework .serializers .CharField (
499+ min_length = user .constants .COMMENT_TEXT_MIN_LENGTH ,
500+ max_length = user .constants .COMMENT_TEXT_MAX_LENGTH ,
501+ )
502+
503+ class Meta :
504+ model = user .models .PromoComment
505+ fields = ('text' ,)
506+
507+
508+ class CommentUpdateSerializer (rest_framework .serializers .ModelSerializer ):
509+ text = rest_framework .serializers .CharField (
510+ min_length = user .constants .COMMENT_TEXT_MIN_LENGTH ,
511+ max_length = user .constants .COMMENT_TEXT_MAX_LENGTH ,
512+ )
513+
514+ class Meta :
515+ model = user .models .PromoComment
516+ fields = ('text' ,)
0 commit comments