Хотите разработать модель продвижения в Django
Бренд-партнер создает план a. Создает план в базе данных с planID, planName, amountOptions и tenureOptions, benefitPercentage (например: 10), benefitType (cashback/extraVoucher) и любыми другими необходимыми атрибутами.
Бренд-партнер создает акцию для существующего плана a. Продвижение может быть ограничено двумя способами i. По количеству пользователей, на которых распространяется акция (например: 500 пользователей) ii. По периоду времени (например: с 22 мая 2022 года по 24 мая 2022 года). b. Предположим, что продвижение может повлиять только на benefitPercentage для данного плана
.
Код, который я написал для модели плана
class Plan(models.Model):
planID = models.BigAutoField(primary_key=True)
planName = models.CharField(max_length=255, null=True, blank=True)
amountOptions = models.CharField(max_length=15, choices=AMOUNT_CHOICES, default="cash")
tenureOptions = models.IntegerField(default=1, choices=TENURE_CHOICES)
benefitPercentage = models.FloatField(default=0)
benefitType = models.CharField(max_length=10, choices=BENIFIT, default="cashback")
def __str__(self):
return self.planName
Ваша базовая модель будет выглядеть примерно так, я не заполнил специфику полей, но это не будет очень сложно сделать. Ваша бизнес-логика будет проверяться всякий раз, когда кто-то пытается применить акцию к плану - я бы предложил добавить метод в модель Plan, который проверяет текущие действительные акции, ваш класс акции может иметь метод is_valid, который проверяет даты и сколько пользователей уже использовали ее и т.д. Вам нужна другая модель, которая отслеживает, сколько акций было применено (возможно, просто отслеживая код/имя/ID где-то). Если есть действующая акция, то вместо тарифного плана берется тариф льготы, опять же, возможно, метод на классе Plan.
class Promotion(models.Model):
promotion_name = models.CharField(...
valid_from = models.DateField(...
valid_to = models.DateField(...
permitted_users = models.IntegerField(...
benefit_rate = models.IntegerField(...
def is_valid(self):
# check dates and usage and return True if ok
return False