Skip to content

Commit

Permalink
Merge pull request #14 from Abramov0Alexandr/feature
Browse files Browse the repository at this point in the history
Feature
  • Loading branch information
Abramov0Alexandr committed Sep 28, 2023
2 parents 4abdab4 + d02007b commit 6793d60
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 17 deletions.
6 changes: 4 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -76,11 +76,13 @@
- password: Пароль для входа.
- password_confirmation: Подтверждение пароля.
- is_seller: Оставьте поле пустым или укажите false, чтобы зарегистрироваться как обычный пользователь.
- phone (необязательно): Номер телефона пользователя.


2. Регистрация в качестве продавца:
- email: Ваша почта.
- shop_name: Название магазина.
- shop_preview (необязательно): Лого или превью магазина.
- password: Пароль для входа.
- password_confirmation: Подтверждение пароля.
- is_seller: Укажите true, чтобы зарегистрироваться как продавец.
Expand All @@ -103,7 +105,7 @@
- Снятие или вывод товара в продажу (доступно только продавцам).


## Схемы моделей и их взаимосвязей
## Схемы моделей и их взаимосвязи
Полная схема моделей

![Полная схема моделей](models_schemes/full_scheme.png)
Expand Down Expand Up @@ -133,6 +135,6 @@ Marketplace API распространяется по [MIT License](https://open

Автор: [Alexandr Abramov <https://github.com/Abramov0Alexandr>]

Связь: [alexandr.abramovv@gmail.com]https://github.com/Abramov0Alexandr)
Связь: [alexandr.abramovv@gmail.com <https://github.com/Abramov0Alexandr>]

GitHub: [https://github.com/Abramov0Alexandr]
14 changes: 8 additions & 6 deletions products/urls.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
from django.urls import path
from .apps import ProductsConfig
from .views import ProductCreateView, ProductDetailView, ProductListView, ProductDeleteView, ChangeProductSaleStatus
from . import views


app_name = ProductsConfig.name


urlpatterns = [
path('create/', ProductCreateView.as_view(), name='create-product'),
path('list/', ProductListView.as_view(), name='products-list'),
path('change_status/<int:pk>/', ChangeProductSaleStatus.as_view(), name='change-status'),
path('detail/<int:pk>/', ProductDetailView.as_view(), name='product-detail'),
path('delete/<int:pk>/', ProductDeleteView.as_view(), name='product-delete'),
path('create/', views.ProductCreateView.as_view(), name='create-product'),
path('list/', views.ProductListView.as_view(), name='products-list'),
path('change_status/<int:pk>/', views.ChangeProductSaleStatus.as_view(), name='change-sale-status'),
path('edit_product/<int:pk>/', views.ProductUpdateView.as_view(), name='edit-product'),
path('detail/<int:pk>/', views.ProductDetailView.as_view(), name='product-detail'),
path('delete/<int:pk>/', views.ProductDeleteView.as_view(), name='product-delete'),
]
41 changes: 32 additions & 9 deletions products/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,21 +24,24 @@ def perform_create(self, serializer):
new_product.save()


class ProductListView(generics.ListCreateAPIView):
class ProductListView(generics.ListAPIView):
"""
Контроллер для просмотра размещенных на площадке товарах.
Доступ к контроллеру имеется только у суперпользователя и пользователей со статусом "Продавец".
Каждый продавец видит список только своих товаров, суперпользователь видит все размещенные товары.
Суперпользователь видит все размещенные на маркетплейсы товары, даже те, которые сняты с продажи.
Продавец видит список всех своих товаров.
Обычный пользователь может видеть все товары, которые находятся в активной продаже.
"""

serializer_class = ProductSerializer
permission_classes = [IsSeller | IsSuperUser]

def get_queryset(self):
if self.request.user.is_superuser:
return Product.objects.all()

return Product.objects.filter(seller=self.request.user)
if self.request.user.is_seller:
return Product.objects.filter(seller=self.request.user)

return Product.objects.filter(is_active_sale=True)


class ChangeProductSaleStatus(generics.UpdateAPIView):
Expand Down Expand Up @@ -83,16 +86,36 @@ def update(self, request, *args, **kwargs):
return Response(response_message)


class ProductUpdateView(generics.UpdateAPIView):
"""
Контроллер для редактирования информации о товаре.
В отличие от ChangeProductSaleStatus, данный контроллер позволяет менять не только статус продажи,
но и любую иную информацию. Доступ к контроллеру имеет владелец магазина или суперпользователь.
"""

serializer_class = ProductSerializer
queryset = Product.objects.all()
permission_classes = [IsShopOwner | IsSuperUser]


class ProductDetailView(generics.RetrieveAPIView):
"""
Контроллер для просмотра детальной информации о товаре.
Информацию о товаре может просмотреть только тот продавец, который разместил данный товар.
Суперпользователь может просматривать детальную информацию всех размещенных товаров.
Суперпользователь может просматривать все размещенные на маркетплейсы товары, даже те, которые сняты с продажи.
Продавец может просматривать информацию только о своих товарах.
Обычный пользователь может просматривать информацию только о тех товарах, которые находятся в активной продаже.
"""

queryset = Product.objects.all()
serializer_class = ProductSerializer
permission_classes = [IsShopOwner | IsSuperUser]

def get_queryset(self):
if self.request.user.is_superuser:
return Product.objects.all()

if self.request.user.is_seller:
return Product.objects.filter(seller=self.request.user)

return Product.objects.filter(is_active_sale=True)


class ProductDeleteView(generics.DestroyAPIView):
Expand Down

0 comments on commit 6793d60

Please sign in to comment.