from django.contrib.auth.mixins import LoginRequiredMixin from django.shortcuts import render from django.urls import reverse from django.views import View from mixins.views import ObjectCreate, ObjectDelete, ObjectList, ObjectUpdate from two_factor.views.mixins import OTPRequiredMixin from core.clients.platforms.agora import AgoraClient from core.forms import AdForm from core.models import Ad from core.views.helpers import synchronize_async_helper class AdNuke(LoginRequiredMixin, OTPRequiredMixin, View): template_name = "mixins/partials/notify.html" def get(self, request): ads = Ad.objects.filter(user=request.user, enabled=True) for ad in ads: for platform in ad.platforms.all(): run = synchronize_async_helper(AgoraClient(platform)) synchronize_async_helper(run.nuke_ads()) context = {"class": "success", "message": "Nuking ads"} return render(request, self.template_name, context) class AdDist(LoginRequiredMixin, OTPRequiredMixin, View): template_name = "mixins/partials/notify.html" def get(self, request): ads = Ad.objects.filter(user=request.user, enabled=True) for ad in ads: for platform in ad.platforms.all(): run = synchronize_async_helper(AgoraClient(platform)) synchronize_async_helper(run.dist_countries(ad)) context = {"class": "success", "message": "Distributing ads"} return render(request, self.template_name, context) class AdRedist(LoginRequiredMixin, OTPRequiredMixin, View): template_name = "mixins/partials/notify.html" def get(self, request): ads = Ad.objects.filter(user=request.user, enabled=True) for ad in ads: for platform in ad.platforms.all(): run = synchronize_async_helper(AgoraClient(platform)) synchronize_async_helper(run.redist_countries(ad)) context = {"class": "success", "message": "Updating ads"} return render(request, self.template_name, context) class AdList(LoginRequiredMixin, OTPRequiredMixin, ObjectList): list_template = "partials/ad-list.html" model = Ad page_title = "List of ads" list_url_name = "ads" list_url_args = ["type"] submit_url_name = "ad_create" def get_context_data(self): context = super().get_context_data() self.extra_buttons = [ { "url": reverse("ad_dist"), "action": "distribute", "method": "get", "label": "Distribute ads", "icon": "fa-solid fa-upload", }, { "url": reverse("ad_redist"), "action": "redistribute", "method": "get", "label": "Update ads", "icon": "fa-solid fa-refresh", }, { "url": reverse("ad_nuke"), "action": "nuke", "method": "get", "label": "Nuke ads", "icon": "fa-solid fa-bomb", "confirm": True, }, ] return context class AdCreate(LoginRequiredMixin, OTPRequiredMixin, ObjectCreate): model = Ad form_class = AdForm submit_url_name = "ad_create" class AdUpdate(LoginRequiredMixin, OTPRequiredMixin, ObjectUpdate): model = Ad form_class = AdForm submit_url_name = "ad_update" class AdDelete(LoginRequiredMixin, OTPRequiredMixin, ObjectDelete): model = Ad