end of day

This commit is contained in:
Sayyid Hamid Mahdavi 2025-09-16 20:43:13 +03:30
parent 435a4d6afd
commit 8f206269fa

View file

@ -1,5 +1,3 @@
from cgitb import handler
from django.conf import settings
from django.db import models, transaction
from django.db.models import F
@ -13,23 +11,44 @@ from utils.models import BaseModel
from django.utils.translation import gettext_lazy as _
class EventQuerySet(models.QuerySet):
pass
class Event(BaseModel):
actor = None
target = None
label = None
details = {}
objects = EventQuerySet.as_manager()
def analyze(self):
for plan in Plan.objects.get_related_to_event(self):
plan.process_event(self)
class PlanQuerySet(models.QuerySet):
def calculate(self, user, application=None):
for plan in self.filter(application=application)[:10]:
if not Promotion.objects.used(user):
plan.calculate(user)
def get_related_to_event(self, event):
return self.filter(event_list__icontains=event.label)
class Plan(BaseModel):
# user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.PROTECT)
application = models.ForeignKey(oauth2_settings.APPLICATION_MODEL, on_delete=models.PROTECT,
related_name='+', null=True, blank=True)
event_list = models.JSONField(default=list)
title = models.CharField(max_length=255, verbose_name=_('title'), db_index=True)
description = models.TextField(verbose_name=_('description'), blank=True)
promotion_type = models.CharField(max_length=64, verbose_name=_('promotion type'), db_index=True, choices=PromotionTypeChoices.choices)
policy = models.JSONField(default=dict, verbose_name=_('policy'), null=True, blank=True)
balance = models.IntegerField(verbose_name=_('balance'), default=0)
objects = PlanQuerySet.as_manager()
def __str__(self):
@ -57,6 +76,10 @@ class Plan(BaseModel):
)
return updated
def process_event(self, event=None):
promotion, created = Promotion.objects.get_or_create()
promotion.promote()
class PromotionQuerySet(models.QuerySet):
def used(self, user):