mirror of
https://github.com/pacnpal/thrillwiki_django_no_react.git
synced 2025-12-30 08:27:00 -05:00
feat: Implement MFA authentication, add ride statistics model, and update various services, APIs, and tests across the application.
This commit is contained in:
@@ -1,9 +1,10 @@
|
||||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class ReviewsConfig(AppConfig):
|
||||
default_auto_field = "django.db.models.BigAutoField"
|
||||
name = "apps.reviews"
|
||||
verbose_name = "User Reviews"
|
||||
|
||||
def ready(self):
|
||||
import apps.reviews.signals
|
||||
pass
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
from django.db import models
|
||||
import pghistory
|
||||
from django.conf import settings
|
||||
from django.contrib.contenttypes.fields import GenericForeignKey
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
from django.db import models
|
||||
|
||||
from apps.core.history import TrackedModel
|
||||
import pghistory
|
||||
|
||||
|
||||
@pghistory.track()
|
||||
class Review(TrackedModel):
|
||||
@@ -13,7 +15,7 @@ class Review(TrackedModel):
|
||||
related_name="reviews",
|
||||
help_text="User who wrote the review",
|
||||
)
|
||||
|
||||
|
||||
# Generic relation to target object (Park, Ride, etc.)
|
||||
content_type = models.ForeignKey(
|
||||
ContentType,
|
||||
@@ -30,14 +32,14 @@ class Review(TrackedModel):
|
||||
db_index=True,
|
||||
)
|
||||
text = models.TextField(blank=True, help_text="Review text (optional)")
|
||||
|
||||
|
||||
# Metadata
|
||||
is_public = models.BooleanField(
|
||||
default=True,
|
||||
default=True,
|
||||
help_text="Whether this review is visible to others"
|
||||
)
|
||||
helpful_votes = models.PositiveIntegerField(
|
||||
default=0,
|
||||
default=0,
|
||||
help_text="Number of users who found this helpful"
|
||||
)
|
||||
|
||||
|
||||
@@ -1,10 +1,13 @@
|
||||
from rest_framework import serializers
|
||||
from .models import Review
|
||||
|
||||
from apps.accounts.serializers import UserSerializer
|
||||
|
||||
from .models import Review
|
||||
|
||||
|
||||
class ReviewSerializer(serializers.ModelSerializer):
|
||||
user = UserSerializer(read_only=True)
|
||||
|
||||
|
||||
class Meta:
|
||||
model = Review
|
||||
fields = [
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
from django.db.models.signals import post_save, post_delete
|
||||
from django.dispatch import receiver
|
||||
from django.db.models import Avg
|
||||
from django.db.models.signals import post_delete, post_save
|
||||
from django.dispatch import receiver
|
||||
|
||||
from .models import Review
|
||||
|
||||
|
||||
@receiver(post_save, sender=Review)
|
||||
@receiver(post_delete, sender=Review)
|
||||
def update_average_rating(sender, instance, **kwargs):
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
from django.urls import path, include
|
||||
from django.urls import include, path
|
||||
from rest_framework.routers import DefaultRouter
|
||||
|
||||
from .views import ReviewViewSet
|
||||
|
||||
router = DefaultRouter()
|
||||
|
||||
@@ -1,8 +1,11 @@
|
||||
from rest_framework import viewsets, permissions, filters
|
||||
from django_filters.rest_framework import DjangoFilterBackend
|
||||
from rest_framework import filters, permissions, viewsets
|
||||
|
||||
from apps.core.permissions import IsOwnerOrReadOnly
|
||||
|
||||
from .models import Review
|
||||
from .serializers import ReviewSerializer
|
||||
from apps.core.permissions import IsOwnerOrReadOnly
|
||||
|
||||
|
||||
class ReviewViewSet(viewsets.ModelViewSet):
|
||||
queryset = Review.objects.filter(is_public=True)
|
||||
@@ -14,8 +17,8 @@ class ReviewViewSet(viewsets.ModelViewSet):
|
||||
ordering = ["-created_at"]
|
||||
|
||||
def get_queryset(self):
|
||||
# Users can see their own non-public reviews?
|
||||
# Standard queryset is public only.
|
||||
# Users can see their own non-public reviews?
|
||||
# Standard queryset is public only.
|
||||
# But if we want authors to see their own pending/private reviews:
|
||||
qs = Review.objects.filter(is_public=True)
|
||||
if self.request.user.is_authenticated:
|
||||
|
||||
Reference in New Issue
Block a user