add: add dashboard apis

This commit is contained in:
behruz-dev
2025-09-03 16:45:03 +05:00
parent 1befa6625f
commit 47dd917ed0
3 changed files with 59 additions and 2 deletions

View File

@@ -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}}

View File

@@ -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()),
]
))
]

View 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'
)