1
- from EcommerceInventory .Helpers import CustomPageNumberPagination , renderResponse
2
- from ProductServices .models import Products
1
+ from UserServices .models import Users
2
+ from EcommerceInventory .Helpers import CommonListAPIMixin , CustomPageNumberPagination , renderResponse
3
+ from ProductServices .models import ProductQuestions , ProductReviews , Products
3
4
from rest_framework import generics
4
5
from rest_framework import serializers
5
6
from rest_framework .permissions import IsAuthenticated
6
7
from rest_framework_simplejwt .authentication import JWTAuthentication
7
8
from django .db .models import Q
8
9
from django .db import models
9
10
11
+ class ProductReviewSerializer (serializers .ModelSerializer ):
12
+ review_user_id = serializers .SerializerMethodField ()
13
+ class Meta :
14
+ model = ProductReviews
15
+ fields = '__all__'
16
+
17
+ def get_review_user_id (self ,obj ):
18
+ return "#" + str (obj .review_user_id .id )+ " " + obj .review_user_id .username
19
+
20
+ class ProductQuestionSerializer (serializers .ModelSerializer ):
21
+ question_user_id = serializers .SerializerMethodField ()
22
+ answer_user_id = serializers .SerializerMethodField ()
23
+ class Meta :
24
+ model = ProductQuestions
25
+ fields = '__all__'
26
+
27
+ def get_question_user_id (self ,obj ):
28
+ return "#" + str (obj .question_user_id .id )+ " " + obj .question_user_id .username
29
+
30
+ def get_answer_user_id (self ,obj ):
31
+ return "#" + str (obj .answer_user_id .id )+ " " + obj .answer_user_id .username
32
+
10
33
class ProductSerializer (serializers .ModelSerializer ):
11
34
category_id = serializers .SerializerMethodField ()
12
35
domain_user_id = serializers .SerializerMethodField ()
@@ -33,41 +56,91 @@ class ProductListView(generics.ListAPIView):
33
56
34
57
def get_queryset (self ):
35
58
queryset = Products .objects .filter (domain_user_id = self .request .user .domain_user_id .id )
36
- search_query = self .request .query_params .get ('search' ,None )
37
-
38
- if search_query :
39
- search_conditions = Q ()
59
+ return queryset
60
+
61
+ @CommonListAPIMixin .common_list_decorator (ProductSerializer )
62
+ def list (self ,request ,* args ,** kwargs ):
63
+ return super ().list (request ,* args ,** kwargs )
40
64
41
- for field in Products ._meta .get_fields ():
42
- if isinstance (field ,(models .CharField ,models .TextField )):
43
- search_conditions |= Q (** {f"{ field .name } __icontains" :search_query })
44
- queryset = queryset .filter (search_conditions )
45
65
46
- ordering = self .request .query_params .get ('ordering' ,None )
66
+ class ProductReviewListView (generics .ListAPIView ):
67
+ serializer_class = ProductReviewSerializer
68
+ authentication_classes = [JWTAuthentication ]
69
+ permission_classes = [IsAuthenticated ]
70
+ pagination_class = CustomPageNumberPagination
47
71
48
- if ordering :
49
- queryset = queryset .order_by (ordering )
72
+ def get_queryset (self ):
73
+ queryset = ProductReviews .objects .filter (domain_user_id = self .request .user .domain_user_id .id ,product_id = self .kwargs ['product_id' ])
74
+ return queryset
75
+
76
+ @CommonListAPIMixin .common_list_decorator (ProductReviewSerializer )
77
+ def list (self ,request ,* args ,** kwargs ):
78
+ return super ().list (request ,* args ,** kwargs )
79
+
80
+ class ProductQuestionsListView (generics .ListAPIView ):
81
+ serializer_class = ProductQuestionSerializer
82
+ authentication_classes = [JWTAuthentication ]
83
+ permission_classes = [IsAuthenticated ]
84
+ pagination_class = CustomPageNumberPagination
50
85
86
+ def get_queryset (self ):
87
+ queryset = ProductQuestions .objects .filter (domain_user_id = self .request .user .domain_user_id .id ,product_id = self .kwargs ['product_id' ])
51
88
return queryset
52
89
90
+ @CommonListAPIMixin .common_list_decorator (ProductQuestionSerializer )
53
91
def list (self ,request ,* args ,** kwargs ):
54
- queryset = self .filter_queryset (self .get_queryset ())
92
+ return super ().list (request ,* args ,** kwargs )
93
+
55
94
56
- page = self .paginate_queryset (queryset )
95
+ class CreateProductReviewView (generics .CreateAPIView ):
96
+ serializer_class = ProductReviewSerializer
97
+ authentication_classes = [JWTAuthentication ]
98
+ permission_classes = [IsAuthenticated ]
99
+
100
+ def perform_create (self ,serializer ):
101
+ if self .request .data .get ('review_user_id' ):
102
+ serializer .save (domain_user_id = self .request .user .domain_user_id ,review_user_id = Users .objects .get (id = int (self .request .data .get ('review_user_id' ))),product_id = Products .objects .get (id = self .kwargs ['product_id' ]))
103
+ else :
104
+ serializer .save (domain_user_id = self .request .user .domain_user_id ,product_id = Products .objects .get (id = self .kwargs ['product_id' ]),review_user_id = self .request .user )
105
+
106
+ class CreateProductQuestionsView (generics .CreateAPIView ):
107
+ serializer_class = ProductQuestionSerializer
108
+ authentication_classes = [JWTAuthentication ]
109
+ permission_classes = [IsAuthenticated ]
110
+
111
+ def perform_create (self ,serializer ):
112
+ if self .request .data .get ('question_user_id' ) and self .request .data .get ('answer_user_id' ):
113
+ serializer .save (domain_user_id = self .request .user .domain_user_id ,question_user_id = Users .objects .get (id = int (self .request .data .get ('question_user_id' ))),answer_user_id = Users .objects .get (id = int (self .request .data .get ('answer_user_id' ))),product_id = Products .objects .get (id = self .kwargs ['product_id' ]))
114
+ else :
115
+ serializer .save (domain_user_id = self .request .user .domain_user_id ,product_id = Products .objects .get (id = self .kwargs ['product_id' ]),question_user_id = self .request .user ,answer_user_id = self .request .user )
116
+
117
+
118
+
119
+ class UpdateProductReviewView (generics .UpdateAPIView ):
120
+ serializer_class = ProductReviewSerializer
121
+ authentication_classes = [JWTAuthentication ]
122
+ permission_classes = [IsAuthenticated ]
123
+
124
+ def get_queryset (self ):
125
+ return ProductReviews .objects .filter (domain_user_id = self .request .user .domain_user_id .id ,product_id = self .kwargs ['product_id' ],id = self .kwargs ['pk' ])
126
+
127
+ def perform_update (self ,serializer ):
128
+ serializer .save ()
129
+
130
+
131
+ class UpdateProductQuestionsView (generics .UpdateAPIView ):
132
+ serializer_class = ProductQuestionSerializer
133
+ authentication_classes = [JWTAuthentication ]
134
+ permission_classes = [IsAuthenticated ]
135
+
136
+ def get_queryset (self ):
137
+ return ProductQuestions .objects .filter (domain_user_id = self .request .user .domain_user_id .id ,product_id = self .kwargs ['product_id' ],id = self .kwargs ['pk' ])
57
138
58
- if page is not None :
59
- serializer = self .get_serializer (page ,many = True )
60
- data = serializer .data
61
- total_pages = self .paginator .page .paginator .num_pages
62
- current_page = self .paginator .page .number
63
- page_size = self .paginator .page .paginator .per_page
64
- total_items = self .paginator .page .paginator .count
139
+ def perform_update (self ,serializer ):
140
+ if self .request .data .get ('answer' ):
141
+ if self .request .data .get ('answer_user_id' ):
142
+ serializer .save (answer_user_id = Users .objects .get (id = int (self .request .data .get ('answer_user_id' ))))
143
+ else :
144
+ serializer .save (answer_user_id = self .request .user )
65
145
else :
66
- serializer = self .get_serializer (queryset ,many = True )
67
- data = serializer .data
68
- total_pages = 1
69
- current_page = 1
70
- page_size = len (data )
71
- total_items = len (data )
72
-
73
- return renderResponse (data = {'data' :data ,'totalPages' :total_pages ,'currentPage' :current_page ,'pageSize' :page_size ,'totalItems' :total_items },message = 'Products Retrieved Successfully' ,status = 200 )
146
+ serializer .save ()
0 commit comments