This commit is contained in:
A'zamov Samandar
2025-12-06 21:50:28 +05:00
parent 3aa20fdaa1
commit f5766aa319
140 changed files with 2376 additions and 1582 deletions

View File

@@ -1,5 +1,8 @@
# Generated by Django 5.2.7 on 2025-11-22 11:39
# Generated by Django 5.2.7 on 2025-12-06 15:57
import django.core.validators
import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
@@ -8,27 +11,330 @@ class Migration(migrations.Migration):
initial = True
dependencies = [
('accounts', '0001_initial'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(
name='Banner',
name='AdTopPlanModel',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created_at', models.DateTimeField(auto_now_add=True)),
('updated_at', models.DateTimeField(auto_now=True)),
('name', models.CharField(max_length=255, unique=True, verbose_name='Plan Name')),
('price', models.DecimalField(decimal_places=2, max_digits=10, validators=[django.core.validators.MinValueValidator(0)], verbose_name='Price')),
('duration', models.PositiveIntegerField(verbose_name='Duration (days)')),
('description', models.TextField(blank=True, verbose_name='Description')),
('is_active', models.BooleanField(default=True, verbose_name='Is Active')),
],
options={
'verbose_name': 'Ad Top Plan',
'verbose_name_plural': 'Ad Top Plans',
'db_table': 'ad_top_plan',
'ordering': ['price'],
},
),
migrations.CreateModel(
name='BannerModel',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created_at', models.DateTimeField(auto_now_add=True)),
('updated_at', models.DateTimeField(auto_now=True)),
('title', models.CharField(max_length=255, verbose_name='Title')),
('description', models.TextField(verbose_name='Description')),
('mobile_image', models.ImageField(upload_to='banner/mobile_image/', verbose_name='Mobile Image')),
('desktop_image', models.ImageField(upload_to='banner/desktop_image/', verbose_name='Desktop Image')),
('mobile_image', models.ImageField(upload_to='banners/mobile/', verbose_name='Mobile Image')),
('desktop_image', models.ImageField(upload_to='banners/desktop/', verbose_name='Desktop Image')),
('link', models.URLField(verbose_name='Link')),
('bg_color', models.CharField(max_length=255, verbose_name='BG Color')),
('text_color', models.CharField(max_length=255, verbose_name='Text Color')),
('bg_color', models.CharField(default='#FFFFFF', max_length=7, verbose_name='Background Color')),
('text_color', models.CharField(default='#000000', max_length=7, verbose_name='Text Color')),
('is_active', models.BooleanField(default=True, verbose_name='Is Active')),
('order', models.PositiveIntegerField(default=0, verbose_name='Display Order')),
],
options={
'verbose_name': 'Banner',
'verbose_name_plural': 'Banners',
'db_table': 'banner',
'ordering': ['order', '-created_at'],
},
),
migrations.CreateModel(
name='ColorModel',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created_at', models.DateTimeField(auto_now_add=True)),
('updated_at', models.DateTimeField(auto_now=True)),
('name', models.CharField(max_length=255, unique=True, verbose_name='Name')),
],
options={
'verbose_name': 'Color',
'verbose_name_plural': 'Colors',
'db_table': 'color',
'ordering': ['name'],
},
),
migrations.CreateModel(
name='TagsModel',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created_at', models.DateTimeField(auto_now_add=True)),
('updated_at', models.DateTimeField(auto_now=True)),
('name', models.CharField(max_length=255, unique=True, verbose_name='Tag Name')),
('slug', models.SlugField(max_length=255, unique=True, verbose_name='Slug')),
],
options={
'verbose_name': 'Tag',
'verbose_name_plural': 'Tags',
'db_table': 'tags',
'ordering': ['name'],
},
),
migrations.CreateModel(
name='AdModel',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created_at', models.DateTimeField(auto_now_add=True)),
('updated_at', models.DateTimeField(auto_now=True)),
('name', models.CharField(max_length=255, verbose_name='Name')),
('ad_type', models.CharField(choices=[('Buy', 'Buy'), ('Sell', 'Sell')], max_length=255, verbose_name='Type')),
('ad_category_type', models.CharField(choices=[('Product', 'Product'), ('Service', 'Service'), ('Auto', 'Auto'), ('Home', 'Home')], max_length=255, verbose_name='Category Type')),
('_price', models.DecimalField(blank=True, db_column='price', decimal_places=2, max_digits=10, null=True, verbose_name='Price')),
('discount', models.DecimalField(decimal_places=2, default=-1, max_digits=10, verbose_name='Discount')),
('is_available', models.BooleanField(default=True, verbose_name='Is available')),
('physical_product', models.BooleanField(default=False, verbose_name='Physical product')),
('image', models.ImageField(upload_to='ads/', verbose_name='Image')),
('description', models.TextField(verbose_name='Description')),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='ads', to=settings.AUTH_USER_MODEL, verbose_name='User')),
('plan', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='api.adtopplanmodel', verbose_name='Plan')),
],
options={
'verbose_name': 'Ad',
'verbose_name_plural': 'Ads',
'db_table': 'ad',
'ordering': ['-created_at'],
},
),
migrations.CreateModel(
name='AdSizeModel',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created_at', models.DateTimeField(auto_now_add=True)),
('updated_at', models.DateTimeField(auto_now=True)),
('weight', models.PositiveIntegerField(verbose_name='Weight (g)')),
('width', models.PositiveIntegerField(verbose_name='Width (cm)')),
('height', models.PositiveIntegerField(verbose_name='Height (cm)')),
('length', models.PositiveIntegerField(verbose_name='Length (cm)')),
('ad', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='size_info', to='api.admodel', verbose_name='Ad')),
],
options={
'verbose_name': 'Ad Size',
'verbose_name_plural': 'Ad Sizes',
'db_table': 'ad_size',
},
),
migrations.CreateModel(
name='AdVariantModel',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created_at', models.DateTimeField(auto_now_add=True)),
('updated_at', models.DateTimeField(auto_now=True)),
('value', models.CharField(max_length=255, verbose_name='Value')),
('is_available', models.BooleanField(default=True, verbose_name='Is Available')),
('price', models.DecimalField(decimal_places=2, max_digits=10, validators=[django.core.validators.MinValueValidator(0)], verbose_name='Price')),
('stock_quantity', models.PositiveIntegerField(default=0, verbose_name='Stock Quantity')),
('ad', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='variants', to='api.admodel', verbose_name='Ad')),
('color', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='api.colormodel', verbose_name='Color')),
],
options={
'verbose_name': 'Ad Variant',
'verbose_name_plural': 'Ad Variants',
'db_table': 'ad_variant',
},
),
migrations.CreateModel(
name='CategoryModel',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created_at', models.DateTimeField(auto_now_add=True)),
('updated_at', models.DateTimeField(auto_now=True)),
('name', models.CharField(max_length=255, verbose_name='Category Name')),
('name_uz', models.CharField(max_length=255, null=True, verbose_name='Category Name')),
('name_ru', models.CharField(max_length=255, null=True, verbose_name='Category Name')),
('name_en', models.CharField(max_length=255, null=True, verbose_name='Category Name')),
('show_home', models.BooleanField(default=False, verbose_name='Show on Home')),
('level', models.IntegerField(default=0, editable=False, verbose_name='Level')),
('image', models.ImageField(blank=True, null=True, upload_to='categories/', verbose_name='Image')),
('category_type', models.CharField(choices=[('Product', 'Product'), ('Service', 'Service'), ('Auto', 'Auto'), ('Home', 'Home')], default='Product', max_length=255, verbose_name='Category Type')),
('parent', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='children', to='api.categorymodel', verbose_name='Parent Category')),
],
options={
'verbose_name': 'Category',
'verbose_name_plural': 'Categories',
'db_table': 'category',
'ordering': ['level', 'name'],
},
),
migrations.AddField(
model_name='admodel',
name='category',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='api.categorymodel', verbose_name='Category'),
),
migrations.CreateModel(
name='FeedbackModel',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created_at', models.DateTimeField(auto_now_add=True)),
('updated_at', models.DateTimeField(auto_now=True)),
('star', models.IntegerField(default=5, validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(5)], verbose_name='Rating')),
('comment', models.TextField(max_length=1000, verbose_name='Comment')),
('ad', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='feedbacks', to='api.admodel', verbose_name='Ad')),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='feedbacks', to=settings.AUTH_USER_MODEL, verbose_name='User')),
],
options={
'verbose_name': 'Feedback',
'verbose_name_plural': 'Feedbacks',
'db_table': 'feedback',
'ordering': ['-created_at'],
},
),
migrations.CreateModel(
name='FeedbackImageModel',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created_at', models.DateTimeField(auto_now_add=True)),
('updated_at', models.DateTimeField(auto_now=True)),
('image', models.ImageField(upload_to='feedbacks/', verbose_name='Image')),
('feedback', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='images', to='api.feedbackmodel', verbose_name='Feedback')),
],
options={
'verbose_name': 'Feedback Image',
'verbose_name_plural': 'Feedback Images',
'db_table': 'feedback_images',
},
),
migrations.CreateModel(
name='OrderModel',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created_at', models.DateTimeField(auto_now_add=True)),
('updated_at', models.DateTimeField(auto_now=True)),
('status', models.CharField(choices=[('Pending', 'Pending'), ('Cancel', 'Cancel'), ('Done', 'Done')], db_index=True, max_length=255, verbose_name='Status')),
('total_amount', models.DecimalField(decimal_places=2, default=0, max_digits=10, verbose_name='Total Amount')),
('address', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='accounts.address', verbose_name='Address')),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='orders', to=settings.AUTH_USER_MODEL, verbose_name='User')),
],
options={
'verbose_name': 'Order',
'verbose_name_plural': 'Orders',
'db_table': 'order',
'ordering': ['-created_at'],
},
),
migrations.CreateModel(
name='OrderItemModel',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created_at', models.DateTimeField(auto_now_add=True)),
('updated_at', models.DateTimeField(auto_now=True)),
('price', models.DecimalField(decimal_places=2, max_digits=10, verbose_name='Price')),
('quantity', models.PositiveIntegerField(default=1, verbose_name='Quantity')),
('ad', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='api.admodel', verbose_name='Ad')),
('order', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='items', to='api.ordermodel', verbose_name='Order')),
],
options={
'verbose_name': 'Order Item',
'verbose_name_plural': 'Order Items',
'db_table': 'order_item',
},
),
migrations.AddField(
model_name='admodel',
name='tags',
field=models.ManyToManyField(blank=True, to='api.tagsmodel', verbose_name='Tags'),
),
migrations.CreateModel(
name='AdOptionModel',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created_at', models.DateTimeField(auto_now_add=True)),
('updated_at', models.DateTimeField(auto_now=True)),
('name', models.CharField(max_length=255, verbose_name='Name')),
('value', models.CharField(max_length=255, verbose_name='Value')),
('ad', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='options', to='api.admodel', verbose_name='Ad')),
],
options={
'verbose_name': 'Ad Option',
'verbose_name_plural': 'Ad Options',
'db_table': 'ad_option',
'unique_together': {('ad', 'name')},
},
),
migrations.CreateModel(
name='AdImageModel',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created_at', models.DateTimeField(auto_now_add=True)),
('updated_at', models.DateTimeField(auto_now=True)),
('image', models.ImageField(upload_to='ads/images/', verbose_name='Image')),
('order', models.PositiveIntegerField(default=0, verbose_name='Display Order')),
('is_primary', models.BooleanField(default=False, verbose_name='Is Primary')),
('ad', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='images', to='api.admodel', verbose_name='Ad')),
('ad_variant', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='images', to='api.advariantmodel', verbose_name='Ad Variant')),
],
options={
'verbose_name': 'Ad Image',
'verbose_name_plural': 'Ad Images',
'db_table': 'ad_images',
'ordering': ['order', '-created_at'],
'indexes': [models.Index(fields=['ad', 'is_primary'], name='ad_images_ad_id_ed2cb8_idx')],
},
),
migrations.AddIndex(
model_name='categorymodel',
index=models.Index(fields=['parent', 'show_home'], name='category_parent__ebe06e_idx'),
),
migrations.AddIndex(
model_name='categorymodel',
index=models.Index(fields=['level'], name='category_level_e67701_idx'),
),
migrations.AddIndex(
model_name='advariantmodel',
index=models.Index(fields=['ad', 'is_available'], name='ad_variant_ad_id_3a5d5e_idx'),
),
migrations.AlterUniqueTogether(
name='advariantmodel',
unique_together={('ad', 'value')},
),
migrations.AddIndex(
model_name='feedbackmodel',
index=models.Index(fields=['ad', '-created_at'], name='feedback_ad_id_444d80_idx'),
),
migrations.AddIndex(
model_name='feedbackmodel',
index=models.Index(fields=['user'], name='feedback_user_id_8cf53b_idx'),
),
migrations.AlterUniqueTogether(
name='feedbackmodel',
unique_together={('user', 'ad')},
),
migrations.AddIndex(
model_name='ordermodel',
index=models.Index(fields=['user', '-created_at'], name='order_user_id_13e363_idx'),
),
migrations.AddIndex(
model_name='ordermodel',
index=models.Index(fields=['status'], name='order_status_35c31c_idx'),
),
migrations.AlterUniqueTogether(
name='orderitemmodel',
unique_together={('order', 'ad')},
),
migrations.AddIndex(
model_name='admodel',
index=models.Index(fields=['-created_at'], name='ad_created_359de0_idx'),
),
migrations.AddIndex(
model_name='admodel',
index=models.Index(fields=['category', 'is_available'], name='ad_categor_8ff346_idx'),
),
]