# 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 class Migration(migrations.Migration): initial = True dependencies = [ ('accounts', '0001_initial'), migrations.swappable_dependency(settings.AUTH_USER_MODEL), ] operations = [ migrations.CreateModel( 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='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(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'), ), ]