canina/.ai_agency/memory/backlog.json

391 lines
21 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"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" }
]
}
],
"metadata": {
"total": 19,
"completed": 19,
"in_progress": 0,
"pending": 0,
"generated_at": "2026-07-26T20:35:00Z",
"decomposition_pass": 7
}
}