diff --git a/core/apps/vendors/management/commands/sync_firebase_products.py b/core/apps/vendors/management/commands/sync_firebase_products.py index ea5659f..93c97ef 100644 --- a/core/apps/vendors/management/commands/sync_firebase_products.py +++ b/core/apps/vendors/management/commands/sync_firebase_products.py @@ -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