This commit is contained in:
Sayyid Hamid Mahdavi 2025-10-19 12:41:03 +03:30
parent 26c7e765a3
commit ca904081c3
12 changed files with 5 additions and 319 deletions

View file

@ -1,23 +0,0 @@
# Generated by Django 5.2.4 on 2025-08-03 12:02
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('promotions', '0001_initial'),
]
operations = [
migrations.AddField(
model_name='promotion',
name='promotion_amount',
field=models.IntegerField(blank=True, null=True),
),
migrations.AlterField(
model_name='promotion',
name='state',
field=models.IntegerField(choices=[(0, 'Created'), (1, 'Assigned'), (2, 'Promoted'), (10, 'Expired')], default=0),
),
]

View file

@ -1,18 +0,0 @@
# Generated by Django 5.2.4 on 2025-08-03 12:03
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('promotions', '0002_promotion_promotion_amount_alter_promotion_state'),
]
operations = [
migrations.AlterField(
model_name='plan',
name='balance',
field=models.IntegerField(default=0, verbose_name='balance'),
),
]

View file

@ -1,18 +0,0 @@
# Generated by Django 5.2.4 on 2025-08-03 12:19
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('promotions', '0003_alter_plan_balance'),
]
operations = [
migrations.AddField(
model_name='promotion',
name='base_amount',
field=models.IntegerField(blank=True, null=True),
),
]

View file

@ -1,32 +0,0 @@
# Generated by Django 5.2.6 on 2025-09-16 17:32
import uuid
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('promotions', '0004_promotion_base_amount'),
]
operations = [
migrations.CreateModel(
name='Event',
fields=[
('uuid', models.UUIDField(db_index=True, default=uuid.uuid4, editable=False, primary_key=True, serialize=False, unique=True)),
('created_at', models.DateTimeField(auto_now_add=True, db_index=True)),
('updated_at', models.DateTimeField(auto_now=True, db_index=True)),
('label', models.CharField(db_index=True, max_length=255)),
('details', models.JSONField()),
],
options={
'abstract': False,
},
),
migrations.AddField(
model_name='plan',
name='event_list',
field=models.JSONField(default=list),
),
]

View file

@ -1,18 +0,0 @@
# Generated by Django 5.2.6 on 2025-09-18 11:22
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('promotions', '0005_event_plan_event_list'),
]
operations = [
migrations.RenameField(
model_name='event',
old_name='details',
new_name='data',
),
]

View file

@ -1,28 +0,0 @@
# Generated by Django 5.2.6 on 2025-09-20 11:25
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('promotions', '0006_rename_details_event_data'),
]
operations = [
migrations.AddField(
model_name='plan',
name='max_amount',
field=models.FloatField(blank=True, null=True),
),
migrations.AddField(
model_name='plan',
name='min_amount',
field=models.FloatField(blank=True, null=True),
),
migrations.AlterField(
model_name='plan',
name='promotion_type',
field=models.CharField(choices=[('percentage', 'percentage'), ('others', 'others')], db_index=True, max_length=64, verbose_name='promotion type'),
),
]

View file

@ -1,28 +0,0 @@
# Generated by Django 5.2.6 on 2025-09-20 12:52
import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('promotions', '0007_plan_max_amount_plan_min_amount_and_more'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
migrations.swappable_dependency(settings.OAUTH2_PROVIDER_APPLICATION_MODEL),
]
operations = [
migrations.AddField(
model_name='event',
name='application',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='+', to=settings.OAUTH2_PROVIDER_APPLICATION_MODEL),
),
migrations.AddField(
model_name='event',
name='user',
field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL),
preserve_default=False,
),
]

View file

@ -1,40 +0,0 @@
# Generated by Django 5.2.6 on 2025-09-21 14:19
import django.db.models.deletion
import uuid
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('promotions', '0008_event_application_event_user'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.AlterField(
model_name='event',
name='user',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL),
),
migrations.CreateModel(
name='Recipient',
fields=[
('uuid', models.UUIDField(db_index=True, default=uuid.uuid4, editable=False, primary_key=True, serialize=False, unique=True)),
('created_at', models.DateTimeField(auto_now_add=True, db_index=True)),
('updated_at', models.DateTimeField(auto_now=True, db_index=True)),
('label', models.CharField(db_index=True, max_length=255)),
('plan', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='+', to='promotions.plan')),
],
options={
'abstract': False,
},
),
migrations.AddField(
model_name='promotion',
name='recipient',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='promotions', to='promotions.recipient'),
),
]

View file

@ -1,76 +0,0 @@
# Generated by Django 5.1.7 on 2025-10-12 13:39
import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('promotions', '0009_alter_event_user_recipient_promotion_recipient'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.RemoveField(
model_name='plan',
name='max_amount',
),
migrations.RemoveField(
model_name='plan',
name='min_amount',
),
migrations.RemoveField(
model_name='plan',
name='policy',
),
migrations.AddField(
model_name='plan',
name='data',
field=models.JSONField(blank=True, default=dict, null=True, verbose_name='data'),
),
migrations.AddField(
model_name='plan',
name='user',
field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL),
preserve_default=False,
),
migrations.AddField(
model_name='recipient',
name='base_amount',
field=models.FloatField(blank=True, null=True),
),
migrations.AddField(
model_name='recipient',
name='data',
field=models.JSONField(blank=True, default=dict, null=True),
),
migrations.AddField(
model_name='recipient',
name='promotion_type',
field=models.CharField(choices=[('percentage', 'percentage'), ('referral', 'referral'), ('others', 'others')], db_index=True, default=None, max_length=64, verbose_name='promotion type'),
preserve_default=False,
),
migrations.AddField(
model_name='recipient',
name='recipient_uuid_field',
field=models.CharField(db_index=True, default=None, max_length=255),
preserve_default=False,
),
migrations.AddField(
model_name='recipient',
name='wallet_uuid',
field=models.UUIDField(blank=True, null=True),
),
migrations.AlterField(
model_name='plan',
name='promotion_type',
field=models.CharField(choices=[('percentage', 'percentage'), ('referral', 'referral'), ('others', 'others')], db_index=True, max_length=64, verbose_name='promotion type'),
),
migrations.AlterField(
model_name='recipient',
name='plan',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='recipients', to='promotions.plan'),
),
]

View file

@ -1,32 +0,0 @@
# Generated by Django 5.1.7 on 2025-10-14 16:49
import uuid
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('promotions', '0010_remove_plan_max_amount_remove_plan_min_amount_and_more'),
]
operations = [
migrations.CreateModel(
name='EventSaver',
fields=[
('uuid', models.UUIDField(db_index=True, default=uuid.uuid4, editable=False, primary_key=True, serialize=False, unique=True)),
('created_at', models.DateTimeField(auto_now_add=True, db_index=True)),
('updated_at', models.DateTimeField(auto_now=True, db_index=True)),
('title', models.CharField(max_length=255, verbose_name='title')),
('event_label', models.CharField(db_index=True, max_length=255, unique=True, verbose_name='label')),
('save_once', models.BooleanField(default=False, verbose_name='save once')),
],
options={
'abstract': False,
},
),
migrations.RemoveField(
model_name='recipient',
name='wallet_uuid',
),
]

View file

@ -48,7 +48,7 @@ class EventSaver(BaseModel):
raise Exception(_('already saved'))
else:
event = Event.objects.create(user=user, application=application, label=label, defaults={"date": date})
event = Event.objects.create(user=user, application=application, label=label, data= data)
return event
@ -212,7 +212,7 @@ class Promotion(BaseModel):
PROMOTED = 2, _('Promoted')
EXPIRED = 10, _('Expired')
user_id = models.UUIDField() # user_uuid
user_uuid = models.UUIDField() # user_uuid
application = models.ForeignKey(oauth2_settings.APPLICATION_MODEL, on_delete=models.PROTECT,
related_name='+', null=True, blank=True)
plan = models.ForeignKey(Plan, on_delete=models.PROTECT, related_name='promotions', null=True, blank=True)

View file

@ -13,10 +13,10 @@ class PromotionSerializer(serializers.ModelSerializer):
"base_amount",
"promotion_amount",
"plan",
"user",
"user_uuid",
"application",
)
read_only_fields = ('user', 'application', "promotion_amount",)
read_only_fields = ('user_uuid', 'application', "promotion_amount",)
class EventSerializer(serializers.ModelSerializer):
@ -37,8 +37,7 @@ class PlanSerializer(serializers.ModelSerializer):
class Meta:
model = Plan
fields = ("label"
"title",
fields = ("title",
"description",
"base_amount",
"application",