category va elonlanri olish optimalashtrildi

This commit is contained in:
2026-04-02 12:43:43 +05:00
parent c5703bbb88
commit cc6533eae9

View File

@@ -13,6 +13,7 @@ Docker orqali:
import os
import json
from decimal import Decimal, InvalidOperation
from datetime import datetime, timezone
import firebase_admin
from firebase_admin import credentials, firestore
@@ -80,10 +81,25 @@ class Command(BaseCommand):
action="store_true",
help="Mavjud mahsulotlarni ham yangilaydi",
)
parser.add_argument(
"--after",
type=str,
default=None,
metavar="SANA",
help="Faqat shu vaqtdan keyin qo'shilganlar. Misol: '2024-01-15' yoki '2024-01-15 10:30:00'",
)
def handle(self, *args, **options):
dry_run = options["dry_run"]
update = options["update"]
after_dt: datetime | None = None
if options["after"]:
try:
after_dt = self._parse_date(options["after"])
except ValueError as e:
self.stderr.write(self.style.ERROR(str(e)))
return
try:
db = _init_firebase()
@@ -92,7 +108,13 @@ class Command(BaseCommand):
return
self.stdout.write("Firebase vendor_products o'qilmoqda…")
docs = list(db.collection("vendor_products").stream())
query = db.collection("vendor_products")
if after_dt:
query = query.where("createdAt", ">=", after_dt)
self.stdout.write(
f"Filter: createdAt >= {after_dt.strftime('%Y-%m-%d %H:%M:%S')} (UTC)"
)
docs = list(query.stream())
self.stdout.write(f"Jami Firebase'da: {len(docs)} ta mahsulot\n")
created = updated = skipped = errors = 0
@@ -171,6 +193,17 @@ class Command(BaseCommand):
if dry_run:
self.stdout.write(self.style.WARNING("\n[DRY-RUN] Hech narsa saqlanmadi."))
def _parse_date(self, date_str: str) -> datetime:
for fmt in ("%Y-%m-%d %H:%M:%S", "%Y-%m-%d"):
try:
return datetime.strptime(date_str, fmt).replace(tzinfo=timezone.utc)
except ValueError:
continue
raise ValueError(
f"Noto'g'ri sana: '{date_str}'. "
"To'g'ri format: '2024-01-15' yoki '2024-01-15 10:30:00'"
)
def _print_progress(self, current, total, created, updated, skipped, errors):
percent = int(current / total * 100) if total else 0
bar_filled = percent // 5