add: add dashboard apis
This commit is contained in:
@@ -9,7 +9,7 @@ class UserSerializer(serializers.ModelSerializer):
|
|||||||
class Meta:
|
class Meta:
|
||||||
model = User
|
model = User
|
||||||
fields = [
|
fields = [
|
||||||
'id', 'first_name', 'last_name', 'username', 'password'
|
'id', 'first_name', 'last_name', 'username', 'password', 'last_login', 'date_joined'
|
||||||
]
|
]
|
||||||
extra_kwargs = {'id': {'read_only': True}, 'password': {'write_only': True}}
|
extra_kwargs = {'id': {'read_only': True}, 'password': {'write_only': True}}
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ from core.apps.admin_panel.views import unity as unity_views
|
|||||||
from core.apps.admin_panel.views import category as category_views
|
from core.apps.admin_panel.views import category as category_views
|
||||||
from core.apps.admin_panel.views import product as product_views
|
from core.apps.admin_panel.views import product as product_views
|
||||||
from core.apps.admin_panel.views import order as order_views
|
from core.apps.admin_panel.views import order as order_views
|
||||||
|
from core.apps.admin_panel.views import dashboard as dashboard_views
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path('user/', include(
|
path('user/', include(
|
||||||
@@ -59,5 +59,11 @@ urlpatterns = [
|
|||||||
[
|
[
|
||||||
path('list/', order_views.OrderListApiView.as_view()),
|
path('list/', order_views.OrderListApiView.as_view()),
|
||||||
]
|
]
|
||||||
|
)),
|
||||||
|
path('dashboard/', include(
|
||||||
|
[
|
||||||
|
path('statistics/', dashboard_views.DashboardApiView.as_view()),
|
||||||
|
path('recent_activity/', dashboard_views.RecentActivityApiView.as_view()),
|
||||||
|
]
|
||||||
))
|
))
|
||||||
]
|
]
|
||||||
51
core/apps/admin_panel/views/dashboard.py
Normal file
51
core/apps/admin_panel/views/dashboard.py
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
from django.db.models import Sum
|
||||||
|
from django.utils import timezone
|
||||||
|
|
||||||
|
from rest_framework import generics, views
|
||||||
|
from rest_framework.permissions import IsAdminUser
|
||||||
|
|
||||||
|
from core.apps.orders.models import Order
|
||||||
|
from core.apps.accounts.models import User
|
||||||
|
from core.apps.admin_panel.serializers.user import UserSerializer
|
||||||
|
from core.apps.products.models import Product, Category
|
||||||
|
from core.apps.shared.mixins.response import ResponseMixin
|
||||||
|
|
||||||
|
|
||||||
|
class DashboardApiView(views.APIView, ResponseMixin):
|
||||||
|
permission_classes = [IsAdminUser]
|
||||||
|
|
||||||
|
def get(self, request):
|
||||||
|
products = Product.objects.count()
|
||||||
|
users = User.objects.count()
|
||||||
|
orders = Order.objects.count()
|
||||||
|
total_price = (
|
||||||
|
Order.objects.\
|
||||||
|
filter(created_at__month=timezone.now().month)\
|
||||||
|
.aggregate(total_price=Sum('total_price'))
|
||||||
|
)
|
||||||
|
categories = Category.objects.count()
|
||||||
|
return self.success_response(
|
||||||
|
data={
|
||||||
|
'products': products,
|
||||||
|
'users': users,
|
||||||
|
'orders': orders,
|
||||||
|
'total_price': total_price,
|
||||||
|
'categories': categories
|
||||||
|
},
|
||||||
|
message='dashboard uchun malumotlar statistikasi'
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class RecentActivityApiView(generics.GenericAPIView, ResponseMixin):
|
||||||
|
serializer_class = UserSerializer
|
||||||
|
queryset = User.objects.order_by('last_login')
|
||||||
|
permission_classes = [IsAdminUser]
|
||||||
|
|
||||||
|
def get(self, request):
|
||||||
|
users = self.queryset[:6]
|
||||||
|
serializer = self.serializer_class(users, many=True)
|
||||||
|
return self.success_response(
|
||||||
|
data=serializer.data,
|
||||||
|
message='oxirgi kirishlar'
|
||||||
|
)
|
||||||
|
|
||||||
Reference in New Issue
Block a user