MASSIVE UPDATE:

bounty board feature

buyers to see bounty boards

seller profile page (like have theme chooser)

Have the game and set name be filters.

Add cards to vault manually

update card inventory add to have the autocomplete for the card  -

store analytics, clicks, views, link to store (url/QR code)

bulk item inventory creation --

Make the banner feature flag driven so I can have a beta site setup like the primary site

don't use primary key values in urls - update to use uuid4 values

site analytics. tianji is being sent

item potent on the mtg and lorcana populate scripts

Card item images for specific listings

check that when you buy a card it is in the vault

Buys should be able to search on store inventories

More pie charts for the seller!

post bounty board is slow to load

seller reviews/ratings - show a historgram - need a way for someone to rate

Report a seller feature for buyer to report

Make sure the stlying is consistent based on the theme choosen

smart minimum order quantity and shipping amounts (defined by the store itself)

put virtual packs behind a feature flag like bounty board

proxy service feature flag

Terms of Service

new description for TCGKof

store SSN, ITIN, and EIN

optomize for SEO
This commit is contained in:
2026-01-23 12:28:20 -06:00
parent c43603bfb5
commit 9040021d1b
80 changed files with 6938 additions and 592 deletions

View File

@@ -1,4 +1,4 @@
# Generated by Django 6.0.1 on 2026-01-19 13:38
# Generated by Django 6.0.1 on 2026-01-21 17:40
import django.db.models.deletion
from django.db import migrations, models
@@ -29,6 +29,7 @@ class Migration(migrations.Migration):
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created_at', models.DateTimeField(auto_now_add=True)),
('insurance', models.BooleanField(default=False)),
],
),
migrations.CreateModel(
@@ -56,6 +57,8 @@ class Migration(migrations.Migration):
('total_price', models.DecimalField(decimal_places=2, default=0, max_digits=12)),
('stripe_payment_intent', models.CharField(blank=True, max_length=100)),
('shipping_address', models.TextField(blank=True)),
('insurance_purchased', models.BooleanField(default=False)),
('proxy_service', models.BooleanField(default=False)),
],
),
migrations.CreateModel(
@@ -66,6 +69,28 @@ class Migration(migrations.Migration):
('quantity', models.PositiveIntegerField(default=1)),
],
),
migrations.CreateModel(
name='PackListing',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=200)),
('price', models.DecimalField(decimal_places=2, max_digits=10)),
('image_url', models.URLField(blank=True, max_length=500)),
],
),
migrations.CreateModel(
name='Seller',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('store_name', models.CharField(max_length=100, unique=True)),
('slug', models.SlugField(unique=True)),
('description', models.TextField(blank=True)),
('contact_email', models.EmailField(blank=True, max_length=254)),
('contact_phone', models.CharField(blank=True, max_length=20)),
('business_address', models.TextField(blank=True)),
('created_at', models.DateTimeField(auto_now_add=True)),
],
),
migrations.CreateModel(
name='Set',
fields=[
@@ -75,6 +100,33 @@ class Migration(migrations.Migration):
('release_date', models.DateField(blank=True, null=True)),
],
),
migrations.CreateModel(
name='VaultItem',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('quantity', models.PositiveIntegerField(default=1)),
('added_at', models.DateTimeField(auto_now_add=True)),
],
),
migrations.CreateModel(
name='VirtualPack',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('status', models.CharField(choices=[('sealed', 'Sealed'), ('opened', 'Opened')], default='sealed', max_length=10)),
('created_at', models.DateTimeField(auto_now_add=True)),
],
),
migrations.CreateModel(
name='Bounty',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('target_price', models.DecimalField(decimal_places=2, max_digits=10)),
('quantity_wanted', models.PositiveIntegerField(default=1)),
('is_active', models.BooleanField(default=True)),
('created_at', models.DateTimeField(auto_now_add=True)),
('card', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='bounties', to='store.card')),
],
),
migrations.CreateModel(
name='CardListing',
fields=[

View File

@@ -1,4 +1,4 @@
# Generated by Django 6.0.1 on 2026-01-19 13:38
# Generated by Django 6.0.1 on 2026-01-21 17:40
import django.db.models.deletion
from django.conf import settings
@@ -11,14 +11,15 @@ class Migration(migrations.Migration):
dependencies = [
('store', '0001_initial'),
('users', '0001_initial'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.AddField(
model_name='cart',
name='user',
field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='cart', to=settings.AUTH_USER_MODEL),
name='buyer',
field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='cart', to='users.buyer'),
),
migrations.AddField(
model_name='cartitem',
@@ -28,23 +29,53 @@ class Migration(migrations.Migration):
migrations.AddField(
model_name='cartitem',
name='listing',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='store.cardlisting'),
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='store.cardlisting'),
),
migrations.AddField(
model_name='order',
name='user',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='orders', to=settings.AUTH_USER_MODEL),
name='buyer',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='orders', to='users.buyer'),
),
migrations.AddField(
model_name='orderitem',
name='listing',
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='store.cardlisting'),
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='store.cardlisting'),
),
migrations.AddField(
model_name='orderitem',
name='order',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='items', to='store.order'),
),
migrations.AddField(
model_name='packlisting',
name='game',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='pack_listings', to='store.game'),
),
migrations.AddField(
model_name='orderitem',
name='pack_listing',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='store.packlisting'),
),
migrations.AddField(
model_name='cartitem',
name='pack_listing',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='store.packlisting'),
),
migrations.AddField(
model_name='seller',
name='user',
field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='seller_profile', to=settings.AUTH_USER_MODEL),
),
migrations.AddField(
model_name='packlisting',
name='seller',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='pack_listings', to='store.seller'),
),
migrations.AddField(
model_name='cardlisting',
name='seller',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='card_listings', to='store.seller'),
),
migrations.AddField(
model_name='set',
name='game',
@@ -55,4 +86,33 @@ class Migration(migrations.Migration):
name='set',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='cards', to='store.set'),
),
migrations.AddField(
model_name='vaultitem',
name='buyer',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='vault_items', to='users.buyer'),
),
migrations.AddField(
model_name='vaultitem',
name='card',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='vault_items', to='store.card'),
),
migrations.AddField(
model_name='virtualpack',
name='cards',
field=models.ManyToManyField(related_name='packs', to='store.card'),
),
migrations.AddField(
model_name='virtualpack',
name='listing',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='packs', to='store.packlisting'),
),
migrations.AddField(
model_name='virtualpack',
name='owner',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='packs', to='users.buyer'),
),
migrations.AlterUniqueTogether(
name='vaultitem',
unique_together={('buyer', 'card')},
),
]

View File

@@ -1,40 +0,0 @@
# Generated by Django 6.0.1 on 2026-01-19 16:22
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('store', '0002_initial'),
]
operations = [
migrations.AddField(
model_name='cart',
name='insurance',
field=models.BooleanField(default=False),
),
migrations.AddField(
model_name='order',
name='insurance_purchased',
field=models.BooleanField(default=False),
),
migrations.AddField(
model_name='order',
name='proxy_service',
field=models.BooleanField(default=False),
),
migrations.CreateModel(
name='Bounty',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('target_price', models.DecimalField(decimal_places=2, max_digits=10)),
('quantity_wanted', models.PositiveIntegerField(default=1)),
('is_active', models.BooleanField(default=True)),
('created_at', models.DateTimeField(auto_now_add=True)),
('card', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='bounties', to='store.card')),
],
),
]

View File

@@ -0,0 +1,18 @@
# Generated by Django 6.0.1 on 2026-01-21 18:10
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('store', '0002_initial'),
]
operations = [
migrations.AddField(
model_name='packlisting',
name='quantity',
field=models.PositiveIntegerField(default=0),
),
]

View File

@@ -1,57 +0,0 @@
# Generated by Django 6.0.1 on 2026-01-19 18:44
import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('store', '0003_cart_insurance_order_insurance_purchased_and_more'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.AlterField(
model_name='cartitem',
name='listing',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='store.cardlisting'),
),
migrations.AlterField(
model_name='orderitem',
name='listing',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='store.cardlisting'),
),
migrations.CreateModel(
name='PackListing',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=200)),
('price', models.DecimalField(decimal_places=2, max_digits=10)),
('image_url', models.URLField(blank=True, max_length=500)),
('game', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='pack_listings', to='store.game')),
],
),
migrations.AddField(
model_name='cartitem',
name='pack_listing',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='store.packlisting'),
),
migrations.AddField(
model_name='orderitem',
name='pack_listing',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='store.packlisting'),
),
migrations.CreateModel(
name='VirtualPack',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('status', models.CharField(choices=[('sealed', 'Sealed'), ('opened', 'Opened')], default='sealed', max_length=10)),
('created_at', models.DateTimeField(auto_now_add=True)),
('cards', models.ManyToManyField(related_name='packs', to='store.card')),
('listing', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='packs', to='store.packlisting')),
('owner', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='packs', to=settings.AUTH_USER_MODEL)),
],
),
]

View File

@@ -0,0 +1,18 @@
# Generated by Django 6.0.1 on 2026-01-21 19:01
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('store', '0003_packlisting_quantity'),
]
operations = [
migrations.AddField(
model_name='packlisting',
name='listing_type',
field=models.CharField(choices=[('physical', 'Physical (Shipped)'), ('virtual', 'Virtual (Open on Store)')], default='physical', max_length=10),
),
]

View File

@@ -0,0 +1,23 @@
# Generated by Django 6.0.1 on 2026-01-21 20:09
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('store', '0004_packlisting_listing_type'),
]
operations = [
migrations.AddField(
model_name='cardlisting',
name='image',
field=models.ImageField(blank=True, null=True, upload_to='listing_images/'),
),
migrations.AddField(
model_name='cardlisting',
name='status',
field=models.CharField(choices=[('listed', 'Listed'), ('sold', 'Sold'), ('off_market', 'Off Market')], default='listed', max_length=20),
),
]

View File

@@ -1,29 +0,0 @@
# Generated by Django 6.0.1 on 2026-01-19 19:14
import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('store', '0004_alter_cartitem_listing_alter_orderitem_listing_and_more'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(
name='VaultItem',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('quantity', models.PositiveIntegerField(default=1)),
('added_at', models.DateTimeField(auto_now_add=True)),
('card', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='vault_items', to='store.card')),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='vault_items', to=settings.AUTH_USER_MODEL)),
],
options={
'unique_together': {('user', 'card')},
},
),
]

View File

@@ -0,0 +1,18 @@
# Generated by Django 6.0.1 on 2026-01-21 20:51
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('store', '0005_cardlisting_image_cardlisting_status'),
]
operations = [
migrations.AddField(
model_name='card',
name='external_url',
field=models.URLField(blank=True, help_text='Link to official card page (e.g. Scryfall, Lorcast)', max_length=500),
),
]

View File

@@ -0,0 +1,23 @@
# Generated by Django 6.0.1 on 2026-01-22 13:49
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('store', '0006_card_external_url'),
]
operations = [
migrations.AddField(
model_name='seller',
name='hero_image',
field=models.ImageField(blank=True, null=True, upload_to='seller_hero_images/'),
),
migrations.AddField(
model_name='seller',
name='store_image',
field=models.ImageField(blank=True, null=True, upload_to='seller_images/'),
),
]

View File

@@ -0,0 +1,47 @@
# Generated by Django 6.0.1 on 2026-01-22 15:02
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('store', '0007_seller_hero_image_seller_store_image'),
('users', '0001_initial'),
]
operations = [
migrations.AddField(
model_name='bounty',
name='description',
field=models.TextField(blank=True),
),
migrations.AddField(
model_name='bounty',
name='seller',
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='bounties', to='store.seller'),
),
migrations.AddField(
model_name='bounty',
name='title',
field=models.CharField(blank=True, help_text='Required if no card selected', max_length=200),
),
migrations.AlterField(
model_name='bounty',
name='card',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='bounties', to='store.card'),
),
migrations.CreateModel(
name='BountyOffer',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('price', models.DecimalField(decimal_places=2, max_digits=10)),
('description', models.TextField(blank=True, help_text='Details about what you are offering (e.g. card condition)')),
('status', models.CharField(choices=[('pending', 'Pending'), ('accepted', 'Accepted'), ('rejected', 'Rejected'), ('countered', 'Countered')], default='pending', max_length=20)),
('created_at', models.DateTimeField(auto_now_add=True)),
('bounty', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='offers', to='store.bounty')),
('buyer', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='bounty_offers', to='users.buyer')),
],
),
]

View File

@@ -0,0 +1,23 @@
# Generated by Django 6.0.1 on 2026-01-23 12:19
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('store', '0008_bounty_description_bounty_seller_bounty_title_and_more'),
]
operations = [
migrations.AddField(
model_name='seller',
name='listing_clicks',
field=models.PositiveIntegerField(default=0),
),
migrations.AddField(
model_name='seller',
name='store_views',
field=models.PositiveIntegerField(default=0),
),
]

View File

@@ -0,0 +1,58 @@
# Generated by Django 6.0.1 on 2026-01-23 12:48
import uuid
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("store", "0009_seller_listing_clicks_seller_store_views"),
]
operations = [
migrations.RemoveField(
model_name="cartitem",
name="pack_listing",
),
migrations.AddField(
model_name="bounty",
name="uuid",
field=models.UUIDField(default=uuid.uuid4, editable=False, null=True),
),
migrations.AddField(
model_name="bountyoffer",
name="uuid",
field=models.UUIDField(default=uuid.uuid4, editable=False, null=True),
),
migrations.AddField(
model_name="card",
name="uuid",
field=models.UUIDField(default=uuid.uuid4, editable=False, null=True),
),
migrations.AddField(
model_name="cardlisting",
name="uuid",
field=models.UUIDField(default=uuid.uuid4, editable=False, null=True),
),
migrations.AddField(
model_name="cartitem",
name="uuid",
field=models.UUIDField(default=uuid.uuid4, editable=False, null=True),
),
migrations.AddField(
model_name="order",
name="uuid",
field=models.UUIDField(default=uuid.uuid4, editable=False, null=True),
),
migrations.AddField(
model_name="packlisting",
name="uuid",
field=models.UUIDField(default=uuid.uuid4, editable=False, null=True),
),
migrations.AddField(
model_name="virtualpack",
name="uuid",
field=models.UUIDField(default=uuid.uuid4, editable=False, null=True),
),
]

View File

@@ -0,0 +1,74 @@
# Generated by Django 6.0.1 on 2026-01-23 12:48
import uuid
from django.db import migrations, models
def populate_uuids(apps, schema_editor):
models_to_update = [
"Bounty",
"BountyOffer",
"Card",
"CardListing",
"CartItem",
"Order",
"PackListing",
"VirtualPack",
]
for model_name in models_to_update:
try:
Model = apps.get_model("store", model_name)
for obj in Model.objects.all():
obj.uuid = uuid.uuid4()
obj.save()
except LookupError:
pass
class Migration(migrations.Migration):
dependencies = [
("store", "0010_remove_cartitem_pack_listing_bounty_uuid_and_more"),
]
operations = [
migrations.RunPython(populate_uuids, reverse_code=migrations.RunPython.noop),
migrations.AlterField(
model_name="bounty",
name="uuid",
field=models.UUIDField(default=uuid.uuid4, editable=False, unique=True),
),
migrations.AlterField(
model_name="bountyoffer",
name="uuid",
field=models.UUIDField(default=uuid.uuid4, editable=False, unique=True),
),
migrations.AlterField(
model_name="card",
name="uuid",
field=models.UUIDField(default=uuid.uuid4, editable=False, unique=True),
),
migrations.AlterField(
model_name="cardlisting",
name="uuid",
field=models.UUIDField(default=uuid.uuid4, editable=False, unique=True),
),
migrations.AlterField(
model_name="cartitem",
name="uuid",
field=models.UUIDField(default=uuid.uuid4, editable=False, unique=True),
),
migrations.AlterField(
model_name="order",
name="uuid",
field=models.UUIDField(default=uuid.uuid4, editable=False, unique=True),
),
migrations.AlterField(
model_name="packlisting",
name="uuid",
field=models.UUIDField(default=uuid.uuid4, editable=False, unique=True),
),
migrations.AlterField(
model_name="virtualpack",
name="uuid",
field=models.UUIDField(default=uuid.uuid4, editable=False, unique=True),
),
]

View File

@@ -0,0 +1,24 @@
# Generated by Django 6.0.1 on 2026-01-23 15:49
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("store", "0011_alter_bounty_uuid_alter_bountyoffer_uuid_and_more"),
]
operations = [
migrations.AddField(
model_name="cartitem",
name="pack_listing",
field=models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.CASCADE,
to="store.packlisting",
),
),
]

View File

@@ -0,0 +1,38 @@
# Generated by Django 6.0.1 on 2026-01-23 16:16
import django.core.validators
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("store", "0012_cartitem_pack_listing"),
]
operations = [
migrations.AddField(
model_name="order",
name="rating",
field=models.PositiveSmallIntegerField(
blank=True,
null=True,
validators=[
django.core.validators.MinValueValidator(1),
django.core.validators.MaxValueValidator(5),
],
),
),
migrations.AddField(
model_name="order",
name="seller",
field=models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name="orders",
to="store.seller",
),
),
]

View File

@@ -0,0 +1,59 @@
# Generated by Django 6.0.1 on 2026-01-23 16:34
import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("store", "0013_order_rating_order_seller"),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(
name="SellerReport",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
(
"reason",
models.CharField(
choices=[
("explicit", "Explicit/NSFW Content"),
("scam", "Scam"),
("other", "Other"),
],
max_length=20,
),
),
("details", models.TextField(blank=True)),
("created_at", models.DateTimeField(auto_now_add=True)),
(
"reporter",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="seller_reports",
to=settings.AUTH_USER_MODEL,
),
),
(
"seller",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="reports",
to="store.seller",
),
),
],
),
]

View File

@@ -0,0 +1,23 @@
# Generated by Django 6.0.1 on 2026-01-23 17:07
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("store", "0014_sellerreport"),
]
operations = [
migrations.AddField(
model_name="seller",
name="minimum_order_amount",
field=models.DecimalField(decimal_places=2, default=0, max_digits=10),
),
migrations.AddField(
model_name="seller",
name="shipping_cost",
field=models.DecimalField(decimal_places=2, default=0, max_digits=10),
),
]

View File

@@ -0,0 +1,23 @@
# Generated by Django 6.0.1 on 2026-01-23 17:32
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("store", "0015_seller_minimum_order_amount_seller_shipping_cost"),
]
operations = [
migrations.AddField(
model_name="seller",
name="payout_details_encrypted",
field=models.BinaryField(blank=True, null=True),
),
migrations.AddField(
model_name="seller",
name="tax_id_encrypted",
field=models.BinaryField(blank=True, null=True),
),
]