plan(web_v2): Update task list
Generated by: Planning Agent Timestamp: 2025-11-20T22:24:35.289538+00:00 Component: web_v2
This commit is contained in:
parent
53bee4db2d
commit
2aed5db579
1 changed files with 239 additions and 3 deletions
|
|
@ -2,8 +2,244 @@
|
|||
"project": "mnemo_cards_web_v2",
|
||||
"component": "web_v2",
|
||||
"version": "1.0",
|
||||
"generated_at": null,
|
||||
"generated_at": "2025-01-20T22:23:46.165295+00:00",
|
||||
"generated_by": "planning_agent",
|
||||
"tasks": []
|
||||
"tasks": [
|
||||
{
|
||||
"id": "WEB-001",
|
||||
"title": "Complete Ads Reward Flow - Integrate Adsgram SDK",
|
||||
"priority": "high",
|
||||
"status": "pending",
|
||||
"estimated_hours": 4.0,
|
||||
"description": "Integrate the real Adsgram JavaScript SDK for web rewarded ads. The AdsRewardService, AdsRewardStateManager, and AdsRewardButton widget are already implemented, but the Adsgram stub needs to be replaced with real SDK integration. This includes loading the Adsgram SDK script, implementing proper ad lifecycle management, and handling ad completion/reward callbacks.",
|
||||
"acceptance_criteria": [
|
||||
"Adsgram SDK script loads correctly in web/index.html",
|
||||
"AdsRewardButton successfully shows rewarded ads using real SDK",
|
||||
"Ad completion triggers reward callback and unlocks pack/product",
|
||||
"Ad errors are handled gracefully with user-friendly messages",
|
||||
"Ad loading states are properly displayed",
|
||||
"Analytics events are emitted for ad impressions, completions, and failures",
|
||||
"8+ unit tests pass covering SDK integration and error cases"
|
||||
],
|
||||
"dependencies": [],
|
||||
"files_to_modify": [
|
||||
"mnemo_cards_web_v2/lib/utils/adsgram_stub.dart",
|
||||
"mnemo_cards_web_v2/web/index.html",
|
||||
"mnemo_cards_web_v2/lib/presentation/widgets/ads_reward_button.dart",
|
||||
"mnemo_cards_web_v2/test/presentation/widgets/ads_reward_button_test.dart"
|
||||
],
|
||||
"component": "web_v2"
|
||||
},
|
||||
{
|
||||
"id": "WEB-002",
|
||||
"title": "Integrate Ads Reward Button into Pack Purchase Flow",
|
||||
"priority": "high",
|
||||
"status": "pending",
|
||||
"estimated_hours": 3.0,
|
||||
"description": "Add the AdsRewardButton to PackDetailsPage and PurchasePage to show 'Unlock by watching ad' option when a pack has an adsKey available. This completes the ads reward flow by making it accessible to users when viewing packs.",
|
||||
"acceptance_criteria": [
|
||||
"AdsRewardButton appears on PackDetailsPage when pack has adsKey",
|
||||
"AdsRewardButton appears on PurchasePage when pack has adsKey",
|
||||
"Button shows correct state (loading, ready, claiming, success, error)",
|
||||
"Successful ad reward refreshes pack access and updates UI",
|
||||
"Error states show helpful messages and allow retry",
|
||||
"Button is properly styled and positioned",
|
||||
"5+ widget tests pass covering button integration"
|
||||
],
|
||||
"dependencies": ["WEB-001"],
|
||||
"files_to_modify": [
|
||||
"mnemo_cards_web_v2/lib/presentation/pages/pack_details/pack_details_page.dart",
|
||||
"mnemo_cards_web_v2/lib/presentation/pages/purchase/purchase_page.dart",
|
||||
"mnemo_cards_web_v2/test/presentation/pages/pack_details/pack_details_page_test.dart"
|
||||
],
|
||||
"component": "web_v2"
|
||||
},
|
||||
{
|
||||
"id": "WEB-003",
|
||||
"title": "Add Buy Pack Button to PackDetailsPage",
|
||||
"priority": "high",
|
||||
"status": "pending",
|
||||
"estimated_hours": 2.0,
|
||||
"description": "Add a 'Buy Pack' button to PackDetailsPage that navigates to PurchasePage when a pack requires purchase. This completes the pack purchase flow integration.",
|
||||
"acceptance_criteria": [
|
||||
"Buy Pack button appears when pack requires purchase",
|
||||
"Button navigates to PurchasePage with correct packId",
|
||||
"Button is properly styled and positioned",
|
||||
"Button shows loading state during navigation",
|
||||
"3+ widget tests pass covering button functionality"
|
||||
],
|
||||
"dependencies": [],
|
||||
"files_to_modify": [
|
||||
"mnemo_cards_web_v2/lib/presentation/pages/pack_details/pack_details_page.dart",
|
||||
"mnemo_cards_web_v2/test/presentation/pages/pack_details/pack_details_page_test.dart"
|
||||
],
|
||||
"component": "web_v2"
|
||||
},
|
||||
{
|
||||
"id": "WEB-004",
|
||||
"title": "Create Subscription Management Page",
|
||||
"priority": "medium",
|
||||
"status": "pending",
|
||||
"estimated_hours": 6.0,
|
||||
"description": "Create a complete SubscriptionPage UI with subscription plans display, purchase flow, current subscription status, and management options (cancel/renew). The SubscriptionService already exists and uses HttpRepositoryV2, so this task focuses on building the UI layer.",
|
||||
"acceptance_criteria": [
|
||||
"SubscriptionPage displays available subscription plans with features and pricing",
|
||||
"Plan comparison UI shows differences between plans",
|
||||
"Purchase flow works for subscriptions",
|
||||
"Current subscription status is displayed clearly",
|
||||
"Subscription cancellation flow works",
|
||||
"Subscription renewal flow works",
|
||||
"Page is responsive (mobile/tablet/desktop)",
|
||||
"Loading states and error handling are implemented",
|
||||
"10+ widget tests pass covering all UI interactions"
|
||||
],
|
||||
"dependencies": ["backend:API-007"],
|
||||
"files_to_modify": [
|
||||
"mnemo_cards_web_v2/lib/presentation/pages/subscription/subscription_page.dart",
|
||||
"mnemo_cards_web_v2/lib/presentation/router/app_router.dart",
|
||||
"mnemo_cards_web_v2/test/presentation/pages/subscription/subscription_page_test.dart"
|
||||
],
|
||||
"component": "web_v2"
|
||||
},
|
||||
{
|
||||
"id": "WEB-005",
|
||||
"title": "Add Subscription Status to Profile Page",
|
||||
"priority": "medium",
|
||||
"status": "pending",
|
||||
"estimated_hours": 2.0,
|
||||
"description": "Display current subscription status on ProfilePage with a link to SubscriptionPage for management. This provides quick access to subscription information.",
|
||||
"acceptance_criteria": [
|
||||
"Subscription status is displayed on ProfilePage",
|
||||
"Status shows plan name, expiry date, and active status",
|
||||
"Link to SubscriptionPage is provided",
|
||||
"Status updates when subscription changes",
|
||||
"3+ widget tests pass covering status display"
|
||||
],
|
||||
"dependencies": ["WEB-004"],
|
||||
"files_to_modify": [
|
||||
"mnemo_cards_web_v2/lib/presentation/pages/profile/profile_page.dart",
|
||||
"mnemo_cards_web_v2/test/presentation/pages/profile/profile_page_test.dart"
|
||||
],
|
||||
"component": "web_v2"
|
||||
},
|
||||
{
|
||||
"id": "WEB-006",
|
||||
"title": "Create Promocode Input Widget",
|
||||
"priority": "medium",
|
||||
"status": "pending",
|
||||
"estimated_hours": 4.0,
|
||||
"description": "Create a reusable PromocodeInput widget that can be integrated into PurchasePage and SubscriptionPage. The widget should handle promocode validation, application, discount display, and success/failure feedback. PromocodeService already exists and uses HttpRepositoryV2.",
|
||||
"acceptance_criteria": [
|
||||
"PromocodeInput widget is created with text field and apply button",
|
||||
"Widget validates promocode before applying",
|
||||
"Widget displays discount amount when promocode is applied",
|
||||
"Success and error states are shown with appropriate messages",
|
||||
"Widget can be cleared and reset",
|
||||
"Widget integrates with PurchasePage",
|
||||
"Widget integrates with SubscriptionPage",
|
||||
"8+ widget tests pass covering all functionality"
|
||||
],
|
||||
"dependencies": [],
|
||||
"files_to_modify": [
|
||||
"mnemo_cards_web_v2/lib/presentation/widgets/promocode_input.dart",
|
||||
"mnemo_cards_web_v2/lib/presentation/pages/purchase/purchase_page.dart",
|
||||
"mnemo_cards_web_v2/lib/presentation/pages/subscription/subscription_page.dart",
|
||||
"mnemo_cards_web_v2/test/presentation/widgets/promocode_input_test.dart"
|
||||
],
|
||||
"component": "web_v2"
|
||||
},
|
||||
{
|
||||
"id": "WEB-007",
|
||||
"title": "Fix Failing Tests",
|
||||
"priority": "medium",
|
||||
"status": "pending",
|
||||
"estimated_hours": 3.0,
|
||||
"description": "Resolve 24 failing tests (mostly empty test files) to ensure all tests pass. This improves code quality and prevents regressions.",
|
||||
"acceptance_criteria": [
|
||||
"All 24 failing tests are fixed or properly skipped",
|
||||
"All tests compile without errors",
|
||||
"All tests pass successfully",
|
||||
"Test coverage is maintained or improved",
|
||||
"No empty test files remain"
|
||||
],
|
||||
"dependencies": [],
|
||||
"files_to_modify": [
|
||||
"mnemo_cards_web_v2/test/presentation/pages/test/test_page_test.dart",
|
||||
"mnemo_cards_web_v2/test/**/*_test.dart"
|
||||
],
|
||||
"component": "web_v2"
|
||||
},
|
||||
{
|
||||
"id": "WEB-008",
|
||||
"title": "Create Settings Page",
|
||||
"priority": "low",
|
||||
"status": "pending",
|
||||
"estimated_hours": 3.0,
|
||||
"description": "Create a dedicated SettingsPage to separate settings from ProfilePage. Include theme toggle, language selection, sound effects toggle, notifications settings, and account settings.",
|
||||
"acceptance_criteria": [
|
||||
"SettingsPage UI is complete with all settings options",
|
||||
"Theme toggle (light/dark) works and persists",
|
||||
"Language selection works and persists",
|
||||
"Sound effects toggle works and persists",
|
||||
"Notifications settings work and persist",
|
||||
"Account settings are accessible",
|
||||
"Settings are persisted using SharedPreferences",
|
||||
"Page is responsive (mobile/tablet/desktop)",
|
||||
"6+ widget tests pass covering all settings functionality"
|
||||
],
|
||||
"dependencies": [],
|
||||
"files_to_modify": [
|
||||
"mnemo_cards_web_v2/lib/presentation/pages/settings/settings_page.dart",
|
||||
"mnemo_cards_web_v2/lib/presentation/router/app_router.dart",
|
||||
"mnemo_cards_web_v2/lib/domain/state/settings_state_manager.dart",
|
||||
"mnemo_cards_web_v2/test/presentation/pages/settings/settings_page_test.dart"
|
||||
],
|
||||
"component": "web_v2"
|
||||
},
|
||||
{
|
||||
"id": "WEB-009",
|
||||
"title": "Increase Test Coverage for Purchase Flow",
|
||||
"priority": "medium",
|
||||
"status": "pending",
|
||||
"estimated_hours": 4.0,
|
||||
"description": "Add comprehensive unit and widget tests for the purchase flow including PurchasesService, PurchaseStateManager, PurchasePage, and payment verification logic.",
|
||||
"acceptance_criteria": [
|
||||
"PurchasesService has 15+ unit tests with >80% coverage",
|
||||
"PurchaseStateManager has 10+ unit tests covering all state transitions",
|
||||
"PurchasePage has 12+ widget tests covering all UI interactions",
|
||||
"Payment verification flow has comprehensive test coverage",
|
||||
"Error handling is tested for all edge cases",
|
||||
"All tests pass with zero flaky tests"
|
||||
],
|
||||
"dependencies": ["WEB-003"],
|
||||
"files_to_modify": [
|
||||
"mnemo_cards_web_v2/test/domain/services/purchases_service_test.dart",
|
||||
"mnemo_cards_web_v2/test/domain/state/purchase_state_manager_test.dart",
|
||||
"mnemo_cards_web_v2/test/presentation/pages/purchase/purchase_page_test.dart"
|
||||
],
|
||||
"component": "web_v2"
|
||||
},
|
||||
{
|
||||
"id": "WEB-010",
|
||||
"title": "Verify API v2 Migration Completeness",
|
||||
"priority": "medium",
|
||||
"status": "pending",
|
||||
"estimated_hours": 2.0,
|
||||
"description": "Audit all services and verify that no v1 API dependencies remain. Ensure all services use HttpRepositoryV2 and all API calls use v2 endpoints. Remove any deprecated v1 code.",
|
||||
"acceptance_criteria": [
|
||||
"All services use HttpRepositoryV2 (no HttpRepository v1 usage)",
|
||||
"All API calls use v2 endpoints",
|
||||
"No deprecated v1 dependencies remain",
|
||||
"All v1 code is removed or marked as deprecated",
|
||||
"Migration audit document is created",
|
||||
"All functionality verified working with v2 API"
|
||||
],
|
||||
"dependencies": [],
|
||||
"files_to_modify": [
|
||||
"mnemo_cards_web_v2/lib/domain/services/**/*.dart",
|
||||
"mnemo_cards_web_v2/lib/domain/config/api_config.dart"
|
||||
],
|
||||
"component": "web_v2"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue