* Moved GlobalSettings to core app

This commit is contained in:
Phil Zhitnikov 2024-05-25 03:21:59 +04:00
parent 466b45539d
commit 2397433772
7 changed files with 57 additions and 42 deletions

23
core/serializers.py Normal file
View File

@ -0,0 +1,23 @@
from rest_framework import serializers
from core.models import GlobalSettings
from poizonstore.utils import PriceField
class GlobalSettingsSerializer(serializers.ModelSerializer):
yuan_rate = PriceField(source='full_yuan_rate', read_only=True)
yuan_rate_commission = PriceField()
chinadelivery = PriceField(source='delivery_price_CN')
commission = PriceField(source='commission_rub')
pickup = serializers.CharField(source='pickup_address')
class Meta:
model = GlobalSettings
fields = ('yuan_rate', 'yuan_rate_last_updated', 'yuan_rate_commission', 'commission', 'chinadelivery', 'pickup', 'time_to_buy')
read_only_fields = ('yuan_rate_last_updated',)
class AnonymousGlobalSettingsSerializer(GlobalSettingsSerializer):
class Meta:
model = GlobalSettingsSerializer.Meta.model
fields = tuple(set(GlobalSettingsSerializer.Meta.fields) - {'yuan_rate_commission', 'yuan_rate_last_updated'})

11
core/urls.py Normal file
View File

@ -0,0 +1,11 @@
from django.urls import path
from rest_framework.routers import DefaultRouter
from . import views
router = DefaultRouter()
urlpatterns = [
path("settings/", views.GlobalSettingsAPI.as_view()),
] + router.urls

View File

@ -1,3 +1,20 @@
from django.shortcuts import render from rest_framework import generics
# Create your views here. from account.permissions import IsManager, ReadOnly
from core.models import GlobalSettings
from core.serializers import GlobalSettingsSerializer, AnonymousGlobalSettingsSerializer
class GlobalSettingsAPI(generics.RetrieveUpdateAPIView):
serializer_class = GlobalSettingsSerializer
permission_classes = [IsManager | ReadOnly]
def get_serializer_class(self):
if getattr(self.request.user, 'is_manager', False):
return GlobalSettingsSerializer
# Anonymous users can view only a certain set of fields
return AnonymousGlobalSettingsSerializer
def get_object(self):
return GlobalSettings.load()

View File

@ -26,6 +26,7 @@ urlpatterns = [
path('__debug__/', include('debug_toolbar.urls')), path('__debug__/', include('debug_toolbar.urls')),
path('', include('store.urls')), path('', include('store.urls')),
path('', include('account.urls')), path('', include('account.urls')),
path('', include('core.urls')),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) \ ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) \
+ static(settings.STATIC_URL) + static(settings.STATIC_URL)

View File

@ -6,7 +6,6 @@ from account.models.bonus import BonusProgram
from account.serializers import UserSerializer from account.serializers import UserSerializer
from utils.exceptions import CRMException from utils.exceptions import CRMException
from store.models import Checklist, Category, PaymentMethod, Promocode, Image, Gift from store.models import Checklist, Category, PaymentMethod, Promocode, Image, Gift
from core.models import GlobalSettings
from store.utils import get_primary_key_related_model from store.utils import get_primary_key_related_model
from poizonstore.utils import PriceField from poizonstore.utils import PriceField
@ -240,25 +239,6 @@ class ClientUpdateChecklistSerializer(ClientChecklistSerializerMixin, ChecklistS
read_only_fields = tuple(set(ChecklistSerializer.Meta.fields) - writable_fields) read_only_fields = tuple(set(ChecklistSerializer.Meta.fields) - writable_fields)
class GlobalSettingsSerializer(serializers.ModelSerializer):
yuan_rate = PriceField(source='full_yuan_rate', read_only=True)
yuan_rate_commission = PriceField()
chinadelivery = PriceField(source='delivery_price_CN')
commission = PriceField(source='commission_rub')
pickup = serializers.CharField(source='pickup_address')
class Meta:
model = GlobalSettings
fields = ('yuan_rate', 'yuan_rate_last_updated', 'yuan_rate_commission', 'commission', 'chinadelivery', 'pickup', 'time_to_buy')
read_only_fields = ('yuan_rate_last_updated',)
class AnonymousGlobalSettingsSerializer(GlobalSettingsSerializer):
class Meta:
model = GlobalSettingsSerializer.Meta.model
fields = tuple(set(GlobalSettingsSerializer.Meta.fields) - {'yuan_rate_commission', 'yuan_rate_last_updated'})
class PaymentMethodSerializer(serializers.ModelSerializer): class PaymentMethodSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = PaymentMethod model = PaymentMethod

View File

@ -16,6 +16,5 @@ router.register(r'category', views.CategoryAPI, basename='category')
router.register(r'settings/payment', views.PaymentMethodsAPI, basename='payment') router.register(r'settings/payment', views.PaymentMethodsAPI, basename='payment')
urlpatterns = [ urlpatterns = [
path("settings/", views.GlobalSettingsAPI.as_view()),
] + router.urls ] + router.urls

View File

@ -5,7 +5,7 @@ import requests
from django.conf import settings from django.conf import settings
from django.db.models import F, Count, Sum from django.db.models import F, Count, Sum
from django_filters.rest_framework import DjangoFilterBackend from django_filters.rest_framework import DjangoFilterBackend
from rest_framework import generics, permissions, mixins, status, viewsets from rest_framework import permissions, mixins, status, viewsets
from rest_framework.decorators import action from rest_framework.decorators import action
from rest_framework.exceptions import NotFound from rest_framework.exceptions import NotFound
from rest_framework.filters import SearchFilter from rest_framework.filters import SearchFilter
@ -19,9 +19,8 @@ from store.filters import GiftFilter, ChecklistFilter
from store.models import Checklist, Category, PaymentMethod, Promocode, Gift from store.models import Checklist, Category, PaymentMethod, Promocode, Gift
from core.models import GlobalSettings from core.models import GlobalSettings
from store.serializers import (ChecklistSerializer, CategorySerializer, CategoryFullSerializer, from store.serializers import (ChecklistSerializer, CategorySerializer, CategoryFullSerializer,
PaymentMethodSerializer, AnonymousGlobalSettingsSerializer, GlobalSettingsSerializer, PaymentMethodSerializer, PromocodeSerializer, ClientUpdateChecklistSerializer,
PromocodeSerializer, ClientUpdateChecklistSerializer, GiftSerializer, GiftSerializer, ClientCreateChecklistSerializer)
ClientCreateChecklistSerializer)
from account.permissions import ReadOnly, IsManager, IsAdmin from account.permissions import ReadOnly, IsManager, IsAdmin
@ -125,21 +124,6 @@ class CategoryAPI(mixins.ListModelMixin, mixins.RetrieveModelMixin, mixins.Updat
return Response(CategoryFullSerializer(categories_qs, many=True).data) return Response(CategoryFullSerializer(categories_qs, many=True).data)
class GlobalSettingsAPI(generics.RetrieveUpdateAPIView):
serializer_class = GlobalSettingsSerializer
permission_classes = [IsManager | ReadOnly]
def get_serializer_class(self):
if getattr(self.request.user, 'is_manager', False):
return GlobalSettingsSerializer
# Anonymous users can view only a certain set of fields
return AnonymousGlobalSettingsSerializer
def get_object(self):
return GlobalSettings.load()
class PaymentMethodsAPI(mixins.ListModelMixin, mixins.UpdateModelMixin, viewsets.GenericViewSet): class PaymentMethodsAPI(mixins.ListModelMixin, mixins.UpdateModelMixin, viewsets.GenericViewSet):
serializer_class = PaymentMethodSerializer serializer_class = PaymentMethodSerializer
permission_classes = [IsManager | ReadOnly] permission_classes = [IsManager | ReadOnly]