431 lines
24 KiB
JSON
431 lines
24 KiB
JSON
{
|
||
"tasks": [
|
||
{
|
||
"id": "EPIC-01-TASK-01",
|
||
"title": "Backend NestJS: HeroBanners, VetTestimonials & SmartAdvisorRules CMS Module",
|
||
"description": "Create NestJS backend module (controllers, services, DTOs) for full CRUD management of HeroBanners, VetTestimonials, and SmartAdvisorRules under /api/v1/admin/* and public endpoints.",
|
||
"architectural_layer": "business_logic",
|
||
"assigned_role": "05_dev_backend",
|
||
"priority": "HIGH",
|
||
"status": "completed",
|
||
"max_files_allowed": 5,
|
||
"estimated_minutes": 30,
|
||
"dependency_task_ids": [],
|
||
"acceptance_criteria": [
|
||
"ایجاد سرویسها و کنترلرهای CMS برای بنرها، نظرات دامپزشکان و قوانین دستیار هوشمند",
|
||
"پشتیبانی کامل از CRUD در مسیرهای /api/v1/admin/* با احراز هویت ادمین"
|
||
],
|
||
"sub_steps": [
|
||
{ "index": 1, "name": "create_cms_dto", "description": "Create DTOs for HeroBanner, VetTestimonial, SmartAdvisorRule", "status": "done" },
|
||
{ "index": 2, "name": "create_cms_service", "description": "Implement CmsService in backend", "status": "done" },
|
||
{ "index": 3, "name": "create_cms_controller", "description": "Implement CmsController under /api/v1/admin/cms and /api/v1/cms", "status": "done" }
|
||
]
|
||
},
|
||
{
|
||
"id": "EPIC-01-TASK-02",
|
||
"title": "Backend NestJS: B2B Wholesale Application & License Upload API",
|
||
"description": "Create endpoints for B2B wholesale license upload (/api/v1/wholesale/apply) and admin verification approval (/api/v1/admin/wholesale/requests) to upgrade user roles to User_Wholesale.",
|
||
"architectural_layer": "business_logic",
|
||
"assigned_role": "05_dev_backend",
|
||
"priority": "HIGH",
|
||
"status": "completed",
|
||
"max_files_allowed": 4,
|
||
"estimated_minutes": 25,
|
||
"dependency_task_ids": ["EPIC-01-TASK-01"],
|
||
"acceptance_criteria": [
|
||
"ثبت درخواست همکاری عمدهفروشی و آپلود پروانه کلینیک/داروخانه",
|
||
"لیستگیری و تایید/رد درخواستها در کنترلر Admin و ارتقای نقش کاربر"
|
||
],
|
||
"sub_steps": [
|
||
{ "index": 1, "name": "create_wholesale_dto", "description": "Create WholesaleApplyDto", "status": "done" },
|
||
{ "index": 2, "name": "create_wholesale_service", "description": "Implement WholesaleService", "status": "done" },
|
||
{ "index": 3, "name": "create_wholesale_controller", "description": "Implement WholesaleController in backend", "status": "done" }
|
||
]
|
||
},
|
||
{
|
||
"id": "EPIC-01-TASK-03",
|
||
"title": "Backend NestJS: Prescription Attachment & Rx Verification Module",
|
||
"description": "Create endpoints for attaching uploaded vet prescriptions to orders with requiresRx=true and admin prescription verification.",
|
||
"architectural_layer": "business_logic",
|
||
"assigned_role": "05_dev_backend",
|
||
"priority": "HIGH",
|
||
"status": "completed",
|
||
"max_files_allowed": 3,
|
||
"estimated_minutes": 20,
|
||
"dependency_task_ids": ["EPIC-01-TASK-02"],
|
||
"acceptance_criteria": [
|
||
"پشتیبانی از آپلود نسخه دارویی سگ و گربه و ثبت در سفارشات نسخه دار",
|
||
"تایید نسخه پزشکی توسط مدیر سیستم"
|
||
],
|
||
"sub_steps": [
|
||
{ "index": 1, "name": "add_rx_field_to_order", "description": "Update Order model/DTO with prescriptionUrl", "status": "done" },
|
||
{ "index": 2, "name": "implement_rx_verification", "description": "Implement prescription verification in OrdersService", "status": "done" }
|
||
]
|
||
},
|
||
{
|
||
"id": "EPIC-02-TASK-01",
|
||
"title": "Customer App Next.js: Dynamic Hero Slider & Vet Testimonials Integration",
|
||
"description": "Replace static arrays in Hero.tsx and VetGallery.tsx with dynamic API calls fetching live HeroBanner and VetTestimonial records from NestJS API.",
|
||
"architectural_layer": "presentation_ui",
|
||
"assigned_role": "06_dev_frontend",
|
||
"priority": "HIGH",
|
||
"status": "completed",
|
||
"max_files_allowed": 4,
|
||
"estimated_minutes": 25,
|
||
"dependency_task_ids": ["EPIC-01-TASK-01"],
|
||
"acceptance_criteria": [
|
||
"دریافت پویا و بدون داده هاردکد بنرهای اصلی و نظرات دامپزشکان",
|
||
"استفاده از next/image و رعایت کامل قواعد Next.js"
|
||
],
|
||
"sub_steps": [
|
||
{ "index": 1, "name": "wire_hero_component", "description": "Wire Hero.tsx to fetch banners from API", "status": "done" },
|
||
{ "index": 2, "name": "wire_vet_gallery", "description": "Wire VetGallery.tsx to fetch vet testimonials from API", "status": "done" }
|
||
]
|
||
},
|
||
{
|
||
"id": "EPIC-02-TASK-02",
|
||
"title": "Customer App Next.js: SmartAdvisor Dynamic Rules & Real Product Recommendations",
|
||
"description": "Wire SmartAdvisor.tsx to fetch live advisor rules and products dynamically from NestJS backend, displaying real medical rationales for recommended Canina products.",
|
||
"architectural_layer": "presentation_ui",
|
||
"assigned_role": "06_dev_frontend",
|
||
"priority": "HIGH",
|
||
"status": "completed",
|
||
"max_files_allowed": 3,
|
||
"estimated_minutes": 25,
|
||
"dependency_task_ids": ["EPIC-02-TASK-01"],
|
||
"acceptance_criteria": [
|
||
"توصیه هوشمند محصولات کانینا بر اساس قوانین دیتابیس و علت تجویز پزشکی",
|
||
"محاسبه دوز دقیق دارویی بر اساس وزن بدن پت"
|
||
],
|
||
"sub_steps": [
|
||
{ "index": 1, "name": "connect_smart_advisor_api", "description": "Fetch SmartAdvisorRules from backend", "status": "done" },
|
||
{ "index": 2, "name": "render_medical_rationale", "description": "Render medical rationale and dosage calculation", "status": "done" }
|
||
]
|
||
},
|
||
{
|
||
"id": "EPIC-02-TASK-03",
|
||
"title": "Customer App Next.js: B2B Wholesale Portal & Bulk Matrix Real Order Flow",
|
||
"description": "Connect B2BPortal.tsx to wholesale registration API, display verified 30% wholesale discount pricing, and submit bulk orders directly to backend.",
|
||
"architectural_layer": "presentation_ui",
|
||
"assigned_role": "06_dev_frontend",
|
||
"priority": "HIGH",
|
||
"status": "completed",
|
||
"max_files_allowed": 4,
|
||
"estimated_minutes": 30,
|
||
"dependency_task_ids": ["EPIC-02-TASK-02"],
|
||
"acceptance_criteria": [
|
||
"ثبت درخواست ثبتنام کلینیک/داروخانه با آپلود پروانه کسب",
|
||
"ثبت مستقیم سفارش حجمی در دیتابیس با قیمتهای عمده همکار"
|
||
],
|
||
"sub_steps": [
|
||
{ "index": 1, "name": "wire_b2b_application_modal", "description": "Build B2B application modal in B2BPortal.tsx", "status": "done" },
|
||
{ "index": 2, "name": "wire_b2b_checkout", "description": "Connect bulk matrix submit to NestJS Orders API", "status": "done" }
|
||
]
|
||
},
|
||
{
|
||
"id": "EPIC-02-TASK-04",
|
||
"title": "Customer App Next.js: Prescription Upload Modal & Rx Order Flow",
|
||
"description": "Wire PrescriptionUploadModal.tsx to upload vet prescription files to NestJS media API and attach them to Rx products during checkout.",
|
||
"architectural_layer": "presentation_ui",
|
||
"assigned_role": "06_dev_frontend",
|
||
"priority": "HIGH",
|
||
"status": "completed",
|
||
"max_files_allowed": 3,
|
||
"estimated_minutes": 20,
|
||
"dependency_task_ids": ["EPIC-02-TASK-03"],
|
||
"acceptance_criteria": [
|
||
"آپلود نسخه دارویی برای محصولات دارای تگ نسخه پزشک (requiresRx)",
|
||
"اتصال نسخه به سبد خرید و سفارش آنلاین"
|
||
],
|
||
"sub_steps": [
|
||
{ "index": 1, "name": "wire_prescription_upload", "description": "Wire PrescriptionUploadModal to media service", "status": "done" },
|
||
{ "index": 2, "name": "attach_rx_to_cart", "description": "Attach uploaded prescription ID to cart store", "status": "done" }
|
||
]
|
||
},
|
||
{
|
||
"id": "EPIC-03-TASK-01",
|
||
"title": "Admin Panel React/Vite: Hero Banners & Vet Testimonials Dynamic CMS Page",
|
||
"description": "Create CMS.tsx page in Admin Panel for full CRUD management of Hero Banners (title, subtitle, image, buttonText, link, order) and Vet Testimonials.",
|
||
"architectural_layer": "presentation_ui",
|
||
"assigned_role": "06_dev_frontend",
|
||
"priority": "HIGH",
|
||
"status": "completed",
|
||
"max_files_allowed": 4,
|
||
"estimated_minutes": 30,
|
||
"dependency_task_ids": ["EPIC-02-TASK-04"],
|
||
"acceptance_criteria": [
|
||
"افزودن، ویرایش، حذف و تغییر ترتیب بنرهای صفحه اصلی",
|
||
"مدیریت نظرات و رتبهبندی دامپزشکان"
|
||
],
|
||
"sub_steps": [
|
||
{ "index": 1, "name": "create_cms_page", "description": "Create CMS.tsx in admin-panel/src/pages", "status": "done" },
|
||
{ "index": 2, "name": "add_cms_sidebar_link", "description": "Add CMS link to Admin Panel sidebar navigation", "status": "done" }
|
||
]
|
||
},
|
||
{
|
||
"id": "EPIC-03-TASK-02",
|
||
"title": "Admin Panel React/Vite: Wholesale Applications & License Approval Page",
|
||
"description": "Create WholesaleApplications.tsx page in Admin Panel to inspect uploaded business licenses, approve/reject clinic applications, and manage B2B roles.",
|
||
"architectural_layer": "presentation_ui",
|
||
"assigned_role": "06_dev_frontend",
|
||
"priority": "HIGH",
|
||
"status": "completed",
|
||
"max_files_allowed": 4,
|
||
"estimated_minutes": 25,
|
||
"dependency_task_ids": ["EPIC-03-TASK-01"],
|
||
"acceptance_criteria": [
|
||
"جدول کامل در خواستهای ثبتنام همکاران با امکان پیشنمایش مدارک",
|
||
"دکمه ارتقای نقش به User_Wholesale و ارسال هشدار وضعیت"
|
||
],
|
||
"sub_steps": [
|
||
{ "index": 1, "name": "create_wholesale_applications_page", "description": "Create WholesaleApplications.tsx page", "status": "done" },
|
||
{ "index": 2, "name": "wire_approval_actions", "description": "Connect approve/reject actions to backend API", "status": "done" }
|
||
]
|
||
},
|
||
{
|
||
"id": "EPIC-04-TASK-01",
|
||
"title": "SEO & Content: Full On-Page & Schema.org JSON-LD Implementation",
|
||
"description": "Implement comprehensive SEO metadata, canonical URLs, OpenGraph tags, and Product/MedicalWebPage JSON-LD schemas across Next.js app, populated with real Canina Germany product data.",
|
||
"architectural_layer": "presentation_ui",
|
||
"assigned_role": "12_seo_content",
|
||
"priority": "HIGH",
|
||
"status": "completed",
|
||
"max_files_allowed": 5,
|
||
"estimated_minutes": 30,
|
||
"dependency_task_ids": ["EPIC-03-TASK-02"],
|
||
"acceptance_criteria": [
|
||
"پیادهسازی کامل متادیتای پویا و JSON-LD برای تمام صفحات محصولات، دستهها و دانشنامه علمی",
|
||
"تولید نقشه سایت XML پویا و فایل robots.txt"
|
||
],
|
||
"sub_steps": [
|
||
{ "index": 1, "name": "implement_product_jsonld", "description": "Add Product JSON-LD script component", "status": "done" },
|
||
{ "index": 2, "name": "implement_sitemap_xml", "description": "Generate dynamic XML sitemap route in Next.js", "status": "done" }
|
||
]
|
||
},
|
||
{
|
||
"id": "EPIC-05-TASK-01",
|
||
"title": "Automated Testing & Build Verification Suite (Backend + Frontends)",
|
||
"description": "Write comprehensive Jest unit/integration tests for NestJS services/guards and React component integration tests for Cart, B2BPortal, and Admin Panel pages. Verify npm run build across all 3 apps.",
|
||
"architectural_layer": "testing",
|
||
"assigned_role": "07_qa_engineer",
|
||
"priority": "HIGH",
|
||
"status": "completed",
|
||
"max_files_allowed": 5,
|
||
"estimated_minutes": 30,
|
||
"dependency_task_ids": ["EPIC-04-TASK-01"],
|
||
"acceptance_criteria": [
|
||
"پوشش بالای ۸۰٪ تستهای واحد برای سرویسهای اصلی بکاند و فرانتاند",
|
||
"اجرای موفقیتآمیز npm run build بدون خطا در هر ۳ بخش پروژه"
|
||
],
|
||
"sub_steps": [
|
||
{ "index": 1, "name": "write_backend_jest_tests", "description": "Write NestJS integration tests", "status": "done" },
|
||
{ "index": 2, "name": "write_frontend_tests", "description": "Write React component tests", "status": "done" },
|
||
{ "index": 3, "name": "verify_all_builds", "description": "Run npm run build in backend, application, and admin-panel", "status": "done" }
|
||
]
|
||
},
|
||
{
|
||
"id": "EPIC-07-TASK-01",
|
||
"title": "Backend NestJS & Test Suite Errors Resolution",
|
||
"description": "Fix backend spec test expectations and Prisma seed dynamic imports for 100% clean type compilation and build pass.",
|
||
"architectural_layer": "business_logic",
|
||
"assigned_role": "05_dev_backend",
|
||
"priority": "HIGH",
|
||
"status": "completed",
|
||
"max_files_allowed": 6,
|
||
"estimated_minutes": 20,
|
||
"dependency_task_ids": ["EPIC-05-TASK-01"],
|
||
"acceptance_criteria": [
|
||
"حل تمام خطاهای کامپایل TypeScript و تستهای واحد سرویسهای سفارشات، پتها و دیتابیس بکاند",
|
||
"اجرای موفق npx tsc --noEmit و npm run build در بکاند"
|
||
],
|
||
"sub_steps": [
|
||
{ "index": 1, "name": "fix_seed_custom", "description": "Fix nameFa and nameEn fields in seed-custom.ts", "status": "done" },
|
||
{ "index": 2, "name": "fix_backend_spec_tests", "description": "Fix unit test mocks in orders, pets, and users spec files", "status": "done" }
|
||
]
|
||
},
|
||
{
|
||
"id": "EPIC-07-TASK-02",
|
||
"title": "Single Source of Truth Auth & Profile Mismatch Resolution",
|
||
"description": "Fix user state sync across userStore, Header, CartDrawer, and ClientLayout so unauthenticated/guest state automatically resets stale wallet, address, and pet profile data.",
|
||
"architectural_layer": "state_management",
|
||
"assigned_role": "06_dev_frontend",
|
||
"priority": "HIGH",
|
||
"status": "completed",
|
||
"max_files_allowed": 4,
|
||
"estimated_minutes": 25,
|
||
"dependency_task_ids": ["EPIC-07-TASK-01"],
|
||
"acceptance_criteria": [
|
||
"بازنشانی کامل تمام دادههای پروفایل و کیف پول قبلی هنگام ورود مهمان یا انقضای توکن",
|
||
"هماهنگی ۱۰۰٪ دکمه ورود هدر، تیک تمدید سبد خرید و شناسنامه پت با وضعیت توکن لاگین"
|
||
],
|
||
"sub_steps": [
|
||
{ "index": 1, "name": "update_user_store_guest_reset", "description": "Reset profile to empty guest state in userStore on logout/unauthenticated", "status": "done" },
|
||
{ "index": 2, "name": "sync_client_layout_auth", "description": "Sync ClientLayout mount check with localStorage token state", "status": "done" }
|
||
]
|
||
},
|
||
{
|
||
"id": "EPIC-08-TASK-01",
|
||
"title": "Axios 401/403 Global Automatic Token Expiry Interceptor",
|
||
"description": "Add response interceptor in api.ts to capture HTTP 401/403 status codes, clear localStorage tokens, and invoke userStore logout to wipe stale profile state globally.",
|
||
"architectural_layer": "network_communication",
|
||
"assigned_role": "06_dev_frontend",
|
||
"priority": "HIGH",
|
||
"status": "completed",
|
||
"max_files_allowed": 3,
|
||
"estimated_minutes": 20,
|
||
"dependency_task_ids": ["EPIC-07-TASK-02"],
|
||
"acceptance_criteria": [
|
||
"افزودن اینترسپتور پاسخ Axios برای تشخیص ۴۰۱ و ۴۰۳",
|
||
"پاکسازی انی و خودکار توکن و ریست پروفایل به حالت مهمان در صورت انقضای جلسه"
|
||
],
|
||
"sub_steps": [
|
||
{ "index": 1, "name": "add_axios_401_interceptor", "description": "Add 401/403 response interceptor to api.ts", "status": "done" }
|
||
]
|
||
},
|
||
{
|
||
"id": "EPIC-08-TASK-02",
|
||
"title": "Charity Round-Up Exact Math Calculation Fix",
|
||
"description": "Fix charity round-up formula in CheckoutPage.tsx and cartStore.ts so total invoice amount is ALWAYS rounded up to the exact next 10,000 Toman multiple.",
|
||
"architectural_layer": "presentation_ui",
|
||
"assigned_role": "06_dev_frontend",
|
||
"priority": "HIGH",
|
||
"status": "completed",
|
||
"max_files_allowed": 3,
|
||
"estimated_minutes": 20,
|
||
"dependency_task_ids": ["EPIC-08-TASK-01"],
|
||
"acceptance_criteria": [
|
||
"رند کردن دقیق و ریاضیات کامل مبلغ سفارش به اولین ۱۰,۰۰۰ تومان بعدی",
|
||
"تطابق ۱۰۰٪ مبلغ اهدایی محاسبهشده با کل فاکتور بدون ناهماهنگی ریاضی"
|
||
],
|
||
"sub_steps": [
|
||
{ "index": 1, "name": "fix_checkout_charity_formula", "description": "Fix round-up calculation in CheckoutPage.tsx and cartStore.ts", "status": "done" }
|
||
]
|
||
},
|
||
{
|
||
"id": "EPIC-08-TASK-03",
|
||
"title": "Backend OrdersService Hardening & Error Inspection",
|
||
"description": "Audit OrdersService for edge case exceptions, invalid items handling, and ensure zero unhandled exceptions during order creation.",
|
||
"architectural_layer": "business_logic",
|
||
"assigned_role": "05_dev_backend",
|
||
"priority": "HIGH",
|
||
"status": "completed",
|
||
"max_files_allowed": 3,
|
||
"estimated_minutes": 20,
|
||
"dependency_task_ids": ["EPIC-08-TASK-02"],
|
||
"acceptance_criteria": [
|
||
"بررسی کامل سرویس سفارشات بکاند و رفع خطاهای بالقوه در ثبت فاکتور و تخفیفها",
|
||
"اجرای موفق بیلد تولیدی بکاند"
|
||
],
|
||
"sub_steps": [
|
||
{ "index": 1, "name": "audit_orders_service", "description": "Audit and fix edge case handling in orders.service.ts", "status": "done" }
|
||
]
|
||
},
|
||
{
|
||
"id": "EPIC-09-TASK-01",
|
||
"title": "Prisma Client Regeneration & isRefill Type Sync",
|
||
"description": "Regenerate Prisma Client in backend node_modules so OrderCreateInput type includes isRefill and refillIntervalDays without IDE type errors.",
|
||
"architectural_layer": "database_orm",
|
||
"assigned_role": "05_dev_backend",
|
||
"priority": "HIGH",
|
||
"status": "completed",
|
||
"max_files_allowed": 3,
|
||
"estimated_minutes": 15,
|
||
"dependency_task_ids": ["EPIC-08-TASK-03"],
|
||
"acceptance_criteria": [
|
||
"تولید مجدد و صحیح Prisma Client بدون تداخل پروسهها",
|
||
"برطرف شدن کامل خطای TypeScript فیلد isRefill در orders.service.ts"
|
||
],
|
||
"sub_steps": [
|
||
{ "index": 1, "name": "regenerate_prisma_client", "description": "Run npx prisma generate after closing locked processes", "status": "done" }
|
||
]
|
||
},
|
||
{
|
||
"id": "EPIC-09-TASK-02",
|
||
"title": "Admin Panel Configurable Charity Round-Up Step",
|
||
"description": "Add configurable charity_round_step setting in Admin Panel Settings page and connect CheckoutPage.tsx to use dynamic round step (10k, 50k, etc.) from SettingsStore.",
|
||
"architectural_layer": "presentation_ui",
|
||
"assigned_role": "06_dev_frontend",
|
||
"priority": "HIGH",
|
||
"status": "completed",
|
||
"max_files_allowed": 4,
|
||
"estimated_minutes": 25,
|
||
"dependency_task_ids": ["EPIC-09-TASK-01"],
|
||
"acceptance_criteria": [
|
||
"امکان تنظیم پلههای رند کردن مبلغ اهدایی در پنل مدیریت (Settings.tsx)",
|
||
"اعمال پله دینامیک رند کردن در CheckoutPage.tsx و محاسبه لحظهای"
|
||
],
|
||
"sub_steps": [
|
||
{ "index": 1, "name": "add_round_step_setting", "description": "Add charity_round_step setting in Admin Settings", "status": "done" },
|
||
{ "index": 2, "name": "wire_dynamic_round_step", "description": "Connect CheckoutPage.tsx to dynamic round step", "status": "done" }
|
||
]
|
||
},
|
||
{
|
||
"id": "EPIC-09-TASK-03",
|
||
"title": "Root Cause Multi-Store Auth Sync & Pet Profile Reset",
|
||
"description": "Root cause fix: reset usePetStore and all persisted local stores when user is unauthenticated so guest users NEVER see stale pet profiles, wallet, or address data.",
|
||
"architectural_layer": "state_management",
|
||
"assigned_role": "06_dev_frontend",
|
||
"priority": "HIGH",
|
||
"status": "completed",
|
||
"max_files_allowed": 5,
|
||
"estimated_minutes": 30,
|
||
"dependency_task_ids": ["EPIC-09-TASK-02"],
|
||
"acceptance_criteria": [
|
||
"ریست شدن همزمان usePetStore و تمام استورها هنگام خروج یا مهمان بودن کاربر",
|
||
"جلوگیری ریشهای از خوانده شدن اسم پت یا اطلاعات کاربر قبلی در حالت خروج"
|
||
],
|
||
"sub_steps": [
|
||
{ "index": 1, "name": "add_pet_store_reset", "description": "Add reset method in usePetStore and call on logout", "status": "done" },
|
||
{ "index": 2, "name": "enforce_auth_guard_on_pet_store", "description": "Enforce isLoggedIn check on getActivePet()", "status": "done" }
|
||
]
|
||
},
|
||
{
|
||
"id": "EPIC-10-TASK-01",
|
||
"title": "Full-Stack Wallet Payment & Balance Deduction Persistence",
|
||
"description": "Add paymentMethod to CreateOrderDto and OrdersService.create in NestJS backend to deduct order amount from user walletBalance in PostgreSQL and create withdrawal WalletTransaction record upon checkout.",
|
||
"architectural_layer": "business_logic",
|
||
"assigned_role": "05_dev_backend",
|
||
"priority": "HIGH",
|
||
"status": "completed",
|
||
"max_files_allowed": 5,
|
||
"estimated_minutes": 25,
|
||
"dependency_task_ids": ["EPIC-09-TASK-03"],
|
||
"acceptance_criteria": [
|
||
"کسر واقعی و دقیق مبلغ سفارش از کیف پول کاربر در دیتابیس PostgreSQL هنگام پرداخت با کیف پول",
|
||
"ثبت تراکنش کسر از کیف پول (withdrawal) در دیتابیس و بروزرسانی لحظهای پروفایل کاربر"
|
||
],
|
||
"sub_steps": [
|
||
{ "index": 1, "name": "add_payment_method_dto", "description": "Add paymentMethod field to CreateOrderDto", "status": "done" },
|
||
{ "index": 2, "name": "implement_wallet_deduction_in_orders_service", "description": "Deduct user walletBalance and create WalletTransaction in OrdersService.create", "status": "done" },
|
||
{ "index": 3, "name": "wire_checkout_page_wallet_sync", "description": "Send paymentMethod in API call and trigger fetchProfile() in CheckoutPage.tsx", "status": "done" }
|
||
]
|
||
},
|
||
{
|
||
"id": "EPIC-11-TASK-01",
|
||
"title": "Pet Supplement Consumption Tracking & Depletion Monitor Fix",
|
||
"description": "Ensure updatePet and setPets in usePetStore update and preserve pet consumptions array locally upon order placement so AI depletion monitor displays remaining supplement levels for active pets.",
|
||
"architectural_layer": "state_management",
|
||
"assigned_role": "06_dev_frontend",
|
||
"priority": "HIGH",
|
||
"status": "completed",
|
||
"max_files_allowed": 4,
|
||
"estimated_minutes": 20,
|
||
"dependency_task_ids": ["EPIC-10-TASK-01"],
|
||
"acceptance_criteria": [
|
||
"ثبت واقعی میزان مکملهای خریدهشده در پایش موجودی پت (usePetStore)",
|
||
"نمایش لحظهای مکملهای خریدهشده، درصد باقیمانده و تخمین اتمام مصرف پت در پروفایل"
|
||
],
|
||
"sub_steps": [
|
||
{ "index": 1, "name": "update_pet_store_consumptions_persistence", "description": "Always update local pets array in updatePet and preserve consumptions in setPets", "status": "done" }
|
||
]
|
||
}
|
||
],
|
||
"metadata": {
|
||
"total": 21,
|
||
"completed": 21,
|
||
"in_progress": 0,
|
||
"pending": 0,
|
||
"generated_at": "2026-07-26T20:45:00Z",
|
||
"decomposition_pass": 9
|
||
}
|
||
} |