Skip to content

Commit

Permalink
reviews: rename LevelReview to Review
Browse files Browse the repository at this point in the history
  • Loading branch information
rr- committed Jul 9, 2023
1 parent 4e39884 commit 4ef4463
Show file tree
Hide file tree
Showing 16 changed files with 72 additions and 52 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

from trcustoms.levels.models import Level
from trcustoms.ratings import get_level_rating_class, get_review_rating_class
from trcustoms.reviews.models import LevelReview
from trcustoms.reviews.models import Review
from trcustoms.signals import disable_signals
from trcustoms.users.models import User

Expand Down Expand Up @@ -54,16 +54,16 @@ def fix_level_ratings(self) -> None:

def fix_review_ratings(self) -> None:
with tqdm(
desc="Review ratings", total=LevelReview.objects.count()
desc="Review ratings", total=Review.objects.count()
) as progress:
review_map = defaultdict(list)
for review in LevelReview.objects.all():
for review in Review.objects.all():
rating_class = get_review_rating_class(review)
rating_class_id = rating_class.id if rating_class else None
review_map[rating_class_id].append(review.id)
progress.update()

for rating_class_id, review_ids in review_map.items():
LevelReview.objects.filter(id__in=review_ids).update(
Review.objects.filter(id__in=review_ids).update(
rating_class_id=rating_class_id
)
4 changes: 2 additions & 2 deletions backend/trcustoms/config/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
from trcustoms.levels.consts import FeatureType
from trcustoms.levels.models import Level, LevelDifficulty, LevelDuration
from trcustoms.levels.serializers import FeaturedLevelsSerializer
from trcustoms.reviews.models import LevelReview, ReviewTemplateQuestion
from trcustoms.reviews.models import Review, ReviewTemplateQuestion
from trcustoms.tags.models import Tag
from trcustoms.tasks.update_featured_levels import get_featured_level
from trcustoms.walkthroughs.consts import WalkthroughStatus
Expand Down Expand Up @@ -82,7 +82,7 @@ def get_config_data():
),
stats=dict(
total_levels=Level.objects.filter(is_approved=True).count(),
total_reviews=LevelReview.objects.all().count(),
total_reviews=Review.objects.all().count(),
total_walkthroughs=Walkthrough.objects.filter(
status=WalkthroughStatus.APPROVED,
level__is_approved=True,
Expand Down
6 changes: 3 additions & 3 deletions backend/trcustoms/mails.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

from trcustoms.celery import app as celery_app
from trcustoms.levels.models import Level
from trcustoms.reviews.models import LevelReview
from trcustoms.reviews.models import Review
from trcustoms.users.models import User
from trcustoms.walkthroughs.models import Walkthrough

Expand Down Expand Up @@ -190,7 +190,7 @@ def send_level_rejected_mail(level: Level, reason: str) -> None:
)


def send_review_submission_mail(review: LevelReview) -> None:
def send_review_submission_mail(review: Review) -> None:
link = f"{settings.HOST_SITE}/levels/{review.level.id}"
for username, email in get_level_authors(review.level):
send_mail.delay(
Expand All @@ -206,7 +206,7 @@ def send_review_submission_mail(review: LevelReview) -> None:
)


def send_review_update_mail(review: LevelReview) -> None:
def send_review_update_mail(review: Review) -> None:
link = f"{settings.HOST_SITE}/levels/{review.level.id}"
for username, email in get_level_authors(review.level):
send_mail.delay(
Expand Down
4 changes: 2 additions & 2 deletions backend/trcustoms/permissions.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

from trcustoms.levels.models import Level
from trcustoms.playlists.models import PlaylistItem
from trcustoms.reviews.models import LevelReview
from trcustoms.reviews.models import Review
from trcustoms.users.models import User, UserPermission
from trcustoms.walkthroughs.models import Walkthrough

Expand Down Expand Up @@ -50,7 +50,7 @@ def has_object_permission(self, request, view, obj) -> bool:
obj.uploader == request.user
or obj.authors.filter(id=request.user.id).exists()
)
case LevelReview():
case Review():
result = obj.author == request.user
case Walkthrough():
result = obj.author == request.user
Expand Down
6 changes: 3 additions & 3 deletions backend/trcustoms/ratings.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
from trcustoms.common.models import RatingClass
from trcustoms.levels.models import Level
from trcustoms.reviews.consts import ReviewType
from trcustoms.reviews.models import LevelReview, ReviewTemplateQuestion
from trcustoms.reviews.models import Review, ReviewTemplateQuestion


@cache
Expand All @@ -17,7 +17,7 @@ def get_max_review_score() -> int:
).aggregate(Sum("value"))["value__sum"]


def get_review_score(review: LevelReview) -> float:
def get_review_score(review: Review) -> float:
if review.review_type == ReviewType.TRLE:
return (
mean(
Expand Down Expand Up @@ -80,7 +80,7 @@ def get_level_rating_class(level: Level) -> RatingClass:
return get_rating_class(RatingClassSubject.LEVEL, average, count)


def get_review_rating_class(review: LevelReview) -> RatingClass:
def get_review_rating_class(review: Review) -> RatingClass:
ratings = [get_review_score(review)]
if not ratings:
return None
Expand Down
6 changes: 3 additions & 3 deletions backend/trcustoms/reviews/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,14 @@
from trcustoms.audit_logs.mixins import AuditLogAdminMixin
from trcustoms.ratings import get_review_score
from trcustoms.reviews.models import (
LevelReview,
Review,
ReviewTemplateAnswer,
ReviewTemplateQuestion,
)


@admin.register(LevelReview)
class LevelReviewAdmin(AuditLogAdminMixin, admin.ModelAdmin):
@admin.register(Review)
class ReviewAdmin(AuditLogAdminMixin, admin.ModelAdmin):
ordering = ["-created"]
list_display = [
"id",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Generated by Django 4.2.3 on 2023-07-09 23:15

from django.conf import settings
from django.db import migrations


class Migration(migrations.Migration):
dependencies = [
("levels", "0014_auto_20230509_1033"),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
("common", "0002_alter_country_options"),
("reviews", "0004_auto_20230313_1706"),
]

operations = [
migrations.RenameModel(
old_name="LevelReview",
new_name="Review",
),
]
2 changes: 1 addition & 1 deletion backend/trcustoms/reviews/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ class Meta:
"level_name": instance.level.name,
},
)
class LevelReview(DatesInfo):
class Review(DatesInfo):
position = models.IntegerField(default=0)

level = models.ForeignKey(
Expand Down
12 changes: 6 additions & 6 deletions backend/trcustoms/reviews/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
from trcustoms.permissions import get_permissions
from trcustoms.reviews.consts import ReviewType
from trcustoms.reviews.models import (
LevelReview,
Review,
ReviewTemplateAnswer,
ReviewTemplateQuestion,
)
Expand All @@ -31,7 +31,7 @@ class Meta:
]


class LevelReviewListingSerializer(serializers.ModelSerializer):
class ReviewListingSerializer(serializers.ModelSerializer):
author = ReviewAuthorSerializer(
read_only=True,
default=serializers.CreateOnlyDefault(
Expand All @@ -42,7 +42,7 @@ class LevelReviewListingSerializer(serializers.ModelSerializer):
rating_class = RatingClassNestedSerializer(read_only=True)

class Meta:
model = LevelReview
model = Review
fields = [
"id",
"author",
Expand All @@ -54,7 +54,7 @@ class Meta:
]


class LevelReviewDetailsSerializer(LevelReviewListingSerializer):
class ReviewDetailsSerializer(ReviewListingSerializer):
level_id = serializers.PrimaryKeyRelatedField(
write_only=True, source="level", queryset=Level.objects.all()
)
Expand All @@ -65,8 +65,8 @@ class LevelReviewDetailsSerializer(LevelReviewListingSerializer):
)

class Meta:
model = LevelReview
fields = LevelReviewListingSerializer.Meta.fields + [
model = Review
fields = ReviewListingSerializer.Meta.fields + [
"answers",
"answer_ids",
"level_id",
Expand Down
14 changes: 7 additions & 7 deletions backend/trcustoms/reviews/signals.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,20 +7,20 @@
from django.dispatch import receiver

from trcustoms.ratings import get_level_rating_class, get_review_rating_class
from trcustoms.reviews.models import LevelReview
from trcustoms.reviews.models import Review
from trcustoms.signals import disable_signals


@receiver(pre_save, sender=LevelReview)
@receiver(pre_save, sender=Review)
def handle_review_pre_save(sender, instance, **kwargs):
if instance.id:
instance._old_level = LevelReview.objects.get(id=instance.id).level
instance._old_level = Review.objects.get(id=instance.id).level
else:
instance.position = instance.level.reviews.count() + 1


@receiver(post_save, sender=LevelReview)
@receiver(m2m_changed, sender=LevelReview.answers.through)
@receiver(post_save, sender=Review)
@receiver(m2m_changed, sender=Review.answers.through)
def handle_review_creation_and_updates(sender, instance, **kwargs):
with disable_signals():
instance.rating_class = get_review_rating_class(instance)
Expand All @@ -35,7 +35,7 @@ def handle_review_creation_and_updates(sender, instance, **kwargs):
author.update_reviewed_level_count()


@receiver(post_delete, sender=LevelReview)
@receiver(post_delete, sender=Review)
def handle_review_deletion(sender, instance, **kwargs):
level = instance.level
level.rating_class = get_level_rating_class(level)
Expand All @@ -49,4 +49,4 @@ def handle_review_deletion(sender, instance, **kwargs):
):
if position != review.position:
# do not trigger modification time changes
LevelReview.objects.filter(pk=review.pk).update(position=position)
Review.objects.filter(pk=review.pk).update(position=position)
4 changes: 2 additions & 2 deletions backend/trcustoms/reviews/tests/factories.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

from trcustoms.levels.tests.factories import LevelFactory
from trcustoms.reviews.models import (
LevelReview,
Review,
ReviewTemplateAnswer,
ReviewTemplateQuestion,
)
Expand Down Expand Up @@ -30,7 +30,7 @@ class Meta:

class ReviewFactory(factory.django.DjangoModelFactory):
class Meta:
model = LevelReview
model = Review

author = factory.SubFactory(UserFactory)
level = factory.SubFactory(LevelFactory)
6 changes: 3 additions & 3 deletions backend/trcustoms/reviews/tests/test_review_create.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from rest_framework.test import APIClient

from trcustoms.levels.tests.factories import LevelFactory
from trcustoms.reviews.models import LevelReview
from trcustoms.reviews.models import Review
from trcustoms.reviews.tests.factories import (
ReviewFactory,
ReviewTemplateAnswerFactory,
Expand Down Expand Up @@ -104,7 +104,7 @@ def test_review_creation_rating_classes(
},
)
data = response.json()
review = LevelReview.objects.get(pk=data["id"])
review = Review.objects.get(pk=data["id"])

assert review.answers.count() == 1
assert review.answers.first().points == 10
Expand Down Expand Up @@ -263,7 +263,7 @@ def test_review_creation_updates_position(
)
data = response.json()
review1.refresh_from_db()
review2 = LevelReview.objects.get(pk=data["id"])
review2 = Review.objects.get(pk=data["id"])

assert response.status_code == status.HTTP_201_CREATED, data
assert review1.position == 1
Expand Down
4 changes: 2 additions & 2 deletions backend/trcustoms/reviews/tests/test_review_delete.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
from rest_framework.test import APIClient

from trcustoms.levels.tests.factories import LevelFactory
from trcustoms.reviews.models import LevelReview
from trcustoms.reviews.models import Review
from trcustoms.reviews.tests.factories import ReviewFactory
from trcustoms.users.tests.factories import UserFactory

Expand Down Expand Up @@ -54,4 +54,4 @@ def test_review_deletion_updates_position(
assert review3.position == 2
assert review1.last_updated == review1_last_updated
assert review3.last_updated == review3_last_updated
assert not LevelReview.objects.filter(pk=review2.pk).exists()
assert not Review.objects.filter(pk=review2.pk).exists()
20 changes: 10 additions & 10 deletions backend/trcustoms/reviews/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,16 +12,16 @@
HasPermission,
IsAccessingOwnResource,
)
from trcustoms.reviews.models import LevelReview
from trcustoms.reviews.models import Review
from trcustoms.reviews.serializers import (
LevelReviewDetailsSerializer,
LevelReviewListingSerializer,
ReviewDetailsSerializer,
ReviewListingSerializer,
)
from trcustoms.users.models import UserPermission
from trcustoms.utils import parse_ints


class LevelReviewViewSet(
class ReviewViewSet(
AuditLogModelWatcherMixin,
PermissionsMixin,
MultiSerializerMixin,
Expand All @@ -32,7 +32,7 @@ class LevelReviewViewSet(
mixins.DestroyModelMixin,
viewsets.GenericViewSet,
):
queryset = LevelReview.objects.all().prefetch_related(
queryset = Review.objects.all().prefetch_related(
"rating_class",
"author",
"author__picture",
Expand Down Expand Up @@ -71,12 +71,12 @@ class LevelReviewViewSet(
],
}

serializer_class = LevelReviewListingSerializer
serializer_class = ReviewListingSerializer
serializer_class_by_action = {
"retrieve": LevelReviewDetailsSerializer,
"update": LevelReviewDetailsSerializer,
"partial_update": LevelReviewDetailsSerializer,
"create": LevelReviewDetailsSerializer,
"retrieve": ReviewDetailsSerializer,
"update": ReviewDetailsSerializer,
"partial_update": ReviewDetailsSerializer,
"create": ReviewDetailsSerializer,
}

def get_object(self):
Expand Down
4 changes: 2 additions & 2 deletions backend/trcustoms/tasks/delete_unreferenced_files.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
from trcustoms.celery import app, logger
from trcustoms.levels.models import Level
from trcustoms.news.models import News
from trcustoms.reviews.models import LevelReview
from trcustoms.reviews.models import Review
from trcustoms.uploads.consts import UploadType
from trcustoms.uploads.models import UploadedFile
from trcustoms.users.models import User
Expand All @@ -29,7 +29,7 @@ def collect_user_links() -> Iterable[str]:
yield from collect_links(user["bio"])
for level in Level.objects.values("description"):
yield from collect_links(level["description"])
for review in LevelReview.objects.values("text"):
for review in Review.objects.values("text"):
yield from collect_links(review["text"])
for walkthrough in Walkthrough.objects.values("text"):
yield from collect_links(walkthrough["text"])
Expand Down
4 changes: 2 additions & 2 deletions backend/trcustoms/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
from trcustoms.levels.views import LevelFileViewSet, LevelViewSet
from trcustoms.news.views import NewsViewSet
from trcustoms.playlists.views import PlaylistItemViewSet
from trcustoms.reviews.views import LevelReviewViewSet
from trcustoms.reviews.views import ReviewViewSet
from trcustoms.tags.views import (
TagDetailView,
TagListView,
Expand All @@ -46,7 +46,7 @@
router.register(r"levels", LevelViewSet)
router.register(r"level_engines", EngineViewSet)
router.register(r"level_files", LevelFileViewSet)
router.register(r"reviews", LevelReviewViewSet)
router.register(r"reviews", ReviewViewSet)
router.register(r"walkthroughs", WalkthroughViewSet)

urlpatterns = [
Expand Down

0 comments on commit 4ef4463

Please sign in to comment.