diff --git a/core/apps/accounts/admin/__init__.py b/core/apps/accounts/admin/__init__.py index 6e3a821..a57453a 100644 --- a/core/apps/accounts/admin/__init__.py +++ b/core/apps/accounts/admin/__init__.py @@ -1,2 +1,3 @@ from .core import * # noqa from .user import * # noqa +from .others import * # noqa diff --git a/core/apps/accounts/admin/others.py b/core/apps/accounts/admin/others.py new file mode 100644 index 0000000..1be9174 --- /dev/null +++ b/core/apps/accounts/admin/others.py @@ -0,0 +1,12 @@ +from django.contrib import admin +from unfold.admin import ModelAdmin + +from core.apps.accounts.models import SearchHistory + + +@admin.register(SearchHistory) +class SearchHistoryAdmin(ModelAdmin): + list_display = ( + "id", + "__str__", + ) diff --git a/core/apps/api/permissions/__init__.py b/core/apps/api/permissions/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/core/apps/api/serializers/__init__.py b/core/apps/api/serializers/__init__.py index d63c50f..5da6a0a 100644 --- a/core/apps/api/serializers/__init__.py +++ b/core/apps/api/serializers/__init__.py @@ -1 +1,2 @@ from .category import * # noqa +from .search import * # noqa diff --git a/core/apps/api/serializers/search/__init__.py b/core/apps/api/serializers/search/__init__.py new file mode 100644 index 0000000..afeb2e5 --- /dev/null +++ b/core/apps/api/serializers/search/__init__.py @@ -0,0 +1 @@ +from .search import * # noqa diff --git a/core/apps/api/serializers/search/search.py b/core/apps/api/serializers/search/search.py new file mode 100644 index 0000000..f815e7f --- /dev/null +++ b/core/apps/api/serializers/search/search.py @@ -0,0 +1,27 @@ +from rest_framework import serializers +from core.apps.accounts.models import SearchHistory + + +class BaseSearchHistorySerializer(serializers.ModelSerializer): + class Meta: + model = SearchHistory + fields = [ + "value", + ] + + +class ListSearchHistorySerializer(BaseSearchHistorySerializer): + class Meta(BaseSearchHistorySerializer.Meta): ... + + +class RetrieveSearchHistorySerializer(BaseSearchHistorySerializer): + class Meta(BaseSearchHistorySerializer.Meta): ... + + +class CreateSearchHistorySerializer(BaseSearchHistorySerializer): + class Meta(BaseSearchHistorySerializer.Meta): ... + + def create(self, validated_data): + validated_data['user'] = self.context['request'].user + history = SearchHistory.objects.create(**validated_data) + return history diff --git a/core/apps/api/urls.py b/core/apps/api/urls.py index bbbe74f..76446df 100644 --- a/core/apps/api/urls.py +++ b/core/apps/api/urls.py @@ -1,8 +1,9 @@ from django.urls import include, path from rest_framework.routers import DefaultRouter -from core.apps.api.views import CategoryViewSet +from core.apps.api.views import CategoryViewSet, SearchHistoryViewSet router = DefaultRouter() router.register("category", CategoryViewSet, basename="category") +router.register("search-history", SearchHistoryViewSet, basename="search-history") urlpatterns = [path("", include(router.urls))] diff --git a/core/apps/api/views/__init__.py b/core/apps/api/views/__init__.py index d63c50f..5da6a0a 100644 --- a/core/apps/api/views/__init__.py +++ b/core/apps/api/views/__init__.py @@ -1 +1,2 @@ from .category import * # noqa +from .search import * # noqa diff --git a/core/apps/api/views/search/__init__.py b/core/apps/api/views/search/__init__.py new file mode 100644 index 0000000..afeb2e5 --- /dev/null +++ b/core/apps/api/views/search/__init__.py @@ -0,0 +1 @@ +from .search import * # noqa diff --git a/core/apps/api/views/search/search.py b/core/apps/api/views/search/search.py new file mode 100644 index 0000000..8ac3d2f --- /dev/null +++ b/core/apps/api/views/search/search.py @@ -0,0 +1,29 @@ +from rest_framework import mixins +from rest_framework.viewsets import GenericViewSet +from django_core.mixins.base import BaseViewSetMixin +from drf_spectacular.utils import extend_schema +from rest_framework.permissions import IsAuthenticated +from core.apps.accounts.models import SearchHistory +from core.apps.api.serializers.search import ( + ListSearchHistorySerializer, + RetrieveSearchHistorySerializer, + CreateSearchHistorySerializer, + +) + + +@extend_schema(tags=['Search']) +class SearchHistoryViewSet(BaseViewSetMixin, mixins.ListModelMixin, mixins.CreateModelMixin, + mixins.DestroyModelMixin, GenericViewSet): + serializer_class = ListSearchHistorySerializer + permission_classes = [IsAuthenticated] + http_method_names = ['get', 'post', 'delete'] + action_permission_classes = {} + action_serializer_class = { + 'list': ListSearchHistorySerializer, + 'create': CreateSearchHistorySerializer, + } + + def get_queryset(self): + queryset = SearchHistory.objects.filter(user=self.request.user) + return queryset