add: add dashboard apis
This commit is contained in:
@@ -9,7 +9,7 @@ class UserSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = User
|
||||
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}}
|
||||
|
||||
|
||||
@@ -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 product as product_views
|
||||
from core.apps.admin_panel.views import order as order_views
|
||||
|
||||
from core.apps.admin_panel.views import dashboard as dashboard_views
|
||||
|
||||
urlpatterns = [
|
||||
path('user/', include(
|
||||
@@ -59,5 +59,11 @@ urlpatterns = [
|
||||
[
|
||||
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