diff --git a/apps/promotions/tests.py b/apps/promotions/tests.py index 1855103..272bb4e 100644 --- a/apps/promotions/tests.py +++ b/apps/promotions/tests.py @@ -168,12 +168,15 @@ class ApplicationApiFlowsTests(APITestCase): } } # response = self.client.post(reverse('promotions:user-promote', kwargs={"pk":self.first_ad_view_reward_plan.uuid}), event_create_data, HTTP_AUTHORIZATION=auth, format='json') - response = self.client.post(reverse('promotions:promote', kwargs={"plan":self.first_ad_view_reward_plan.uuid}), event_create_data, HTTP_AUTHORIZATION=auth, format='json') + response = self.client.post(reverse('promotions:promotion-create', kwargs={"plan":self.first_ad_view_reward_plan.uuid}), event_create_data, HTTP_AUTHORIZATION=auth, format='json') print(response.json()) self.first_ad_view_reward_plan.refresh_from_db() self.assertEqual(self.first_ad_view_reward_plan.balance, 10000 - 800) - # response = self.client.post(reverse('promotions:promote', kwargs={"plan": self.first_ad_view_reward_plan.uuid}), event_create_data, HTTP_AUTHORIZATION=auth, format='json') + response = self.client.get(reverse('promotions:promotion-list', kwargs={"plan":self.first_ad_view_reward_plan.uuid}), event_create_data, HTTP_AUTHORIZATION=auth, format='json') + print(response.json()) + + # response = self.client.post(reverse('promotions:promotion-create', kwargs={"plan": self.first_ad_view_reward_plan.uuid}), event_create_data, HTTP_AUTHORIZATION=auth, format='json') # print(response.json()) @@ -209,7 +212,7 @@ class ApplicationApiFlowsTests(APITestCase): 'referral': self.user_2_uuid } } - response = self.client.post(reverse('promotions:promote', kwargs={"plan": self.referral_reward_plan.uuid}), event_create_data, HTTP_AUTHORIZATION=auth, format='json') + response = self.client.post(reverse('promotions:promotion-create', kwargs={"plan": self.referral_reward_plan.uuid}), event_create_data, HTTP_AUTHORIZATION=auth, format='json') print(response.json()) self.referral_reward_plan.refresh_from_db() self.assertEqual(self.referral_reward_plan.balance, 10000 - 1000) @@ -264,15 +267,15 @@ class ApplicationApiFlowsTests(APITestCase): } } self.assertEqual(Event.objects.count(), 0) - response = self.client.post(reverse('promotions:event'), submit_referral_create_data, HTTP_AUTHORIZATION=auth, format='json') + response = self.client.post(reverse('promotions:event-create'), submit_referral_create_data, HTTP_AUTHORIZATION=auth, format='json') print(response.json()) self.settlement_reward_plan.refresh_from_db() self.assertEqual(self.settlement_reward_plan.balance, 100000) self.assertEqual(Event.objects.count(), 1) - response = self.client.post(reverse('promotions:promote', kwargs={'plan': str(self.settlement_reward_plan.uuid)}), submit_settlement_create_data, HTTP_AUTHORIZATION=auth, format='json') + response = self.client.post(reverse('promotions:promotion-create', kwargs={'plan': str(self.settlement_reward_plan.uuid)}), submit_settlement_create_data, HTTP_AUTHORIZATION=auth, format='json') print(response.json()) - response = self.client.post(reverse('promotions:promote', kwargs={'plan': str(self.settlement_reward_plan.uuid)}), submit_settlement_create_data, HTTP_AUTHORIZATION=auth, format='json') + response = self.client.post(reverse('promotions:promotion-create', kwargs={'plan': str(self.settlement_reward_plan.uuid)}), submit_settlement_create_data, HTTP_AUTHORIZATION=auth, format='json') print(response.json()) diff --git a/apps/promotions/urls.py b/apps/promotions/urls.py index 8f07091..3c93cc1 100644 --- a/apps/promotions/urls.py +++ b/apps/promotions/urls.py @@ -5,7 +5,7 @@ from utils.router import ProfileRouter from . import views from django.urls import NoReverseMatch, path, re_path, include -from .views import ApplicationPromoteUserApiView, ApplicationSubmitEventAPIView +from .views import ApplicationPromoteUserApiView, ApplicationEventSubmitAPIView, ApplicationEventRetrieveAPIView, ApplicationPromotionRetrieveApiView app_name = 'promotions' @@ -17,7 +17,10 @@ router.register(r'plans', views.UserViewSet, basename='user') # urlpatterns = urlpatterns = [ + path('api/v1/plans//', ApplicationPromoteUserApiView.as_view(), name='promotion-create'), + path('api/v1/plans//promotins', ApplicationPromotionRetrieveApiView.as_view(), name='promotion-list'), + path('api/v1/events/submit', ApplicationEventSubmitAPIView.as_view(), name='event-create'), + path('api/v1/events/get', ApplicationEventRetrieveAPIView.as_view(), name='event-retrieve'), path('api/v1/', include(router.urls), name='events'), - path('api/v1/promote//', ApplicationPromoteUserApiView.as_view(), name='promote'), - path('api/v1/event/', ApplicationSubmitEventAPIView.as_view(), name='event'), + ] diff --git a/apps/promotions/views.py b/apps/promotions/views.py index 5504efc..1d7c6f6 100644 --- a/apps/promotions/views.py +++ b/apps/promotions/views.py @@ -2,7 +2,7 @@ from drf_spectacular.utils import extend_schema from rest_framework import mixins, status from rest_framework.decorators import action from rest_framework import exceptions -from rest_framework.generics import CreateAPIView, get_object_or_404 +from rest_framework.generics import CreateAPIView, get_object_or_404, RetrieveAPIView, ListAPIView from rest_framework.response import Response from rest_framework.viewsets import GenericViewSet @@ -178,9 +178,60 @@ class ApplicationPromoteUserApiView(CreateAPIView): headers = self.get_success_headers(serializer.data) return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers) +class ApplicationPromotionRetrieveApiView(RetrieveAPIView): + model = Promotion + serializer_class = PromotionSerializer + + def get_plan(self): + plan_uuid = self.kwargs.get('plan') + plan = get_object_or_404(Plan, uuid=plan_uuid) + return plan + + def get_object(self): + user = self.request.user + plan = self.get_plan() + qs = Promotion.objects.all() + return get_object_or_404(qs, user_uuid=user.uuid, plan=plan) -class ApplicationSubmitEventAPIView(CreateAPIView): + # def create(self, request, *args, **kwargs): + # plan = self.get_plan() + # serializer = self.get_serializer(data=request.data) + # serializer.is_valid(raise_exception=True) + # data = serializer.validated_data + # application = get_application(self.request) + # event_saver: EventSaver = EventSaver.objects.filter(event_label=serializer.validated_data['label']).first() + # # try: + # event = event_saver.save_event(user=None, application=application, **serializer.validated_data) + # # except Exception as e: + # # raise exceptions.ValidationError(str(e)) + # + # result_list = plan.process_event(event) + # data["promotions"] = result_list + # + # headers = self.get_success_headers(serializer.data) + # return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers) + + + +class ApplicationEventSubmitAPIView(CreateAPIView): + model = Promotion + serializer_class = PromoteSerializer + + def create(self, request, *args, **kwargs): + serializer = self.get_serializer(data=request.data) + serializer.is_valid(raise_exception=True) + data = serializer.validated_data + application = get_application(self.request) + event_saver: EventSaver = EventSaver.objects.filter(event_label=serializer.validated_data['label']).first() + event = event_saver.save_event(user=None, application=application, **serializer.validated_data) + + analyze_event_task.delay(event.uuid) + + headers = self.get_success_headers(serializer.data) + return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers) + +class ApplicationEventRetrieveAPIView(RetrieveAPIView): model = Promotion serializer_class = PromoteSerializer